Skip to content

Commit

Permalink
Added functionality to compute signed IP wrt tau direction and also s…
Browse files Browse the repository at this point in the history
…tore 3D IP's
  • Loading branch information
andrewj314 committed May 19, 2015
1 parent e984ec5 commit 9cdd6b2
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 10 deletions.
11 changes: 9 additions & 2 deletions DataFormats/TauReco/interface/PFTauTransverseImpactParameter.h
Expand Up @@ -35,8 +35,8 @@ namespace reco

PFTauTransverseImpactParameter(){}
/// constructor from values
PFTauTransverseImpactParameter(const Point&, double, double, const VertexRef&);
PFTauTransverseImpactParameter(const Point&, double, double, const VertexRef&, const Point&, double, const VertexRef&);
PFTauTransverseImpactParameter(const Point&, double, double, const Point&, double, double, const VertexRef&);
PFTauTransverseImpactParameter(const Point&, double, double, const Point&, double, double, const VertexRef&, const Point&, double, const VertexRef&);

virtual ~PFTauTransverseImpactParameter(){}
PFTauTransverseImpactParameter* clone() const;
Expand All @@ -45,6 +45,10 @@ namespace reco
double dxy() const { return dxy_; }
double dxy_error() const { return dxy_error_; }
double dxy_Sig() const { return ( dxy_error_ != 0 ) ? (dxy_/dxy_error_) : 0.; }
const Point& ip3d_PCA() const { return pca3d_; }
double ip3d() const { return ip3d_; }
double ip3d_error() const { return ip3d_error_; }
double ip3d_Sig() const { return ( ip3d_error_ != 0 ) ? (ip3d_/ip3d_error_) : 0.; }
const VertexRef& primaryVertex() const { return PV_; }
Point primaryVertexPos() const;
CovMatrix primaryVertexCov() const;
Expand All @@ -60,6 +64,9 @@ namespace reco
Point pca_;
double dxy_;
double dxy_error_;
Point pca3d_;
double ip3d_;
double ip3d_error_;
VertexRef PV_;
bool hasSV_;
Vector FlightLength_;
Expand Down
12 changes: 10 additions & 2 deletions DataFormats/TauReco/src/PFTauTransverseImpactParameter.cc
Expand Up @@ -4,20 +4,28 @@
#include "TVectorT.h"
using namespace reco;

PFTauTransverseImpactParameter::PFTauTransverseImpactParameter(const Point& pca, double thedxy, double thedxy_error, const VertexRef& PV)
PFTauTransverseImpactParameter::PFTauTransverseImpactParameter(const Point& pca, double thedxy, double thedxy_error,
const Point& pca3d, double theip3d, double theip3d_error, const VertexRef& PV)
: pca_(pca),
dxy_(thedxy),
dxy_error_(thedxy_error),
pca3d_(pca3d),
ip3d_(theip3d),
ip3d_error_(theip3d_error),
PV_(PV),
hasSV_(false),
FlightLengthSig_(0.)
{}

PFTauTransverseImpactParameter::PFTauTransverseImpactParameter(const Point& pca, double thedxy, double thedxy_error, const VertexRef& PV,
PFTauTransverseImpactParameter::PFTauTransverseImpactParameter(const Point& pca, double thedxy, double thedxy_error,
const Point& pca3d, double theip3d, double theip3d_error, const VertexRef& PV,
const Point& theFlightLength, double theFlightLengthSig, const VertexRef& SV)
: pca_(pca),
dxy_(thedxy),
dxy_error_(thedxy_error),
pca3d_(pca3d),
ip3d_(theip3d),
ip3d_error_(theip3d_error),
PV_(PV),
hasSV_(true),
FlightLength_(theFlightLength),
Expand Down
28 changes: 22 additions & 6 deletions RecoTauTag/RecoTau/plugins/PFTauTransverseImpactParameters.cc
Expand Up @@ -24,6 +24,10 @@
#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
#include "RecoVertex/AdaptiveVertexFit/interface/AdaptiveVertexFitter.h"
#include "RecoBTag/SecondaryVertex/interface/SecondaryVertex.h"
#include "TrackingTools/IPTools/interface/IPTools.h"
#include "RecoVertex/VertexPrimitives/interface/ConvertToFromReco.h"
#include "TrackingTools/GeomPropagators/interface/AnalyticalTrajectoryExtrapolatorToLine.h"
#include "TrackingTools/GeomPropagators/interface/AnalyticalImpactPointExtrapolator.h"

#include "DataFormats/TauReco/interface/PFTau.h"
#include "DataFormats/TauReco/interface/PFTauFwd.h"
Expand Down Expand Up @@ -106,19 +110,31 @@ void PFTauTransverseImpactParameters::produce(edm::Event& iEvent,const edm::Even
const std::vector<reco::VertexRef> SV=PFTauSVA->value(RefPFTau.key());
double dxy(-999), dxy_err(-999);
reco::Vertex::Point poca(0,0,0);
double ip3d(-999), ip3d_err(-999);
reco::Vertex::Point ip3d_poca(0,0,0);
if(RefPFTau->leadPFChargedHadrCand().isNonnull()){
if(RefPFTau->leadPFChargedHadrCand()->trackRef().isNonnull()){
if(useFullCalculation_){
reco::TransientTrack transTrk=transTrackBuilder->build(RefPFTau->leadPFChargedHadrCand()->trackRef());
GlobalPoint pv(PV->position().x(),PV->position().y(),PV->position().z());
dxy=-transTrk.trajectoryStateClosestToPoint(pv).perigeeParameters().vector()(aTip);
dxy_err=transTrk.trajectoryStateClosestToPoint(pv).perigeeError().covarianceMatrix()(aTip,aTip);
GlobalPoint pos=transTrk.trajectoryStateClosestToPoint(pv).position();
GlobalVector direction(RefPFTau->p4().px(), RefPFTau->p4().py(), RefPFTau->p4().pz()); //To compute sign of IP
std::pair<bool,Measurement1D> signed_IP2D = IPTools::signedTransverseImpactParameter(transTrk, direction, (*PV));
dxy=signed_IP2D.second.value();
dxy_err=signed_IP2D.second.error();
std::pair<bool,Measurement1D> signed_IP3D = IPTools::signedImpactParameter3D(transTrk, direction, (*PV));
ip3d=signed_IP3D.second.value();
ip3d_err=signed_IP3D.second.error();
TransverseImpactPointExtrapolator extrapolator(transTrk.field());
GlobalPoint pos = extrapolator.extrapolate(transTrk.impactPointState(), RecoVertex::convertPos(PV->position())).globalPosition();
poca=reco::Vertex::Point(pos.x(),pos.y(),pos.z());
AnalyticalImpactPointExtrapolator extrapolator3D(transTrk.field());
GlobalPoint pos3d = extrapolator3D.extrapolate(transTrk.impactPointState(),RecoVertex::convertPos(PV->position())).globalPosition();
ip3d_poca=reco::Vertex::Point(pos3d.x(),pos3d.y(),pos3d.z());
}
else{
dxy_err=RefPFTau->leadPFChargedHadrCand()->trackRef()->d0Error();
dxy=RefPFTau->leadPFChargedHadrCand()->trackRef()->dxy(PV->position());
ip3d_err=RefPFTau->leadPFChargedHadrCand()->trackRef()->dzError(); //store dz, ip3d not available
ip3d=RefPFTau->leadPFChargedHadrCand()->trackRef()->dz(PV->position()); //store dz, ip3d not available
}
}
}
Expand All @@ -132,13 +148,13 @@ void PFTauTransverseImpactParameters::produce(edm::Event& iEvent,const edm::Even
}
GlobalVector direction(RefPFTau->px(),RefPFTau->py(),RefPFTau->pz());
double vSig = SecondaryVertex::computeDist3d(*PV,*SV.at(0),direction,true).significance();
reco::PFTauTransverseImpactParameter TIPV(poca,dxy,dxy_err,PV,v,vSig,SV.at(0));
reco::PFTauTransverseImpactParameter TIPV(poca,dxy,dxy_err,ip3d_poca,ip3d,ip3d_err,PV,v,vSig,SV.at(0));
reco::PFTauTransverseImpactParameterRef TIPVRef=reco::PFTauTransverseImpactParameterRef(TIPRefProd_out,TIPCollection_out->size());
TIPCollection_out->push_back(TIPV);
AVPFTauTIP->setValue(iPFTau,TIPVRef);
}
else{
reco::PFTauTransverseImpactParameter TIPV(poca,dxy,dxy_err,PV);
reco::PFTauTransverseImpactParameter TIPV(poca,dxy,dxy_err,ip3d_poca,ip3d,ip3d_err,PV);
reco::PFTauTransverseImpactParameterRef TIPVRef=reco::PFTauTransverseImpactParameterRef(TIPRefProd_out,TIPCollection_out->size());
TIPCollection_out->push_back(TIPV);
AVPFTauTIP->setValue(iPFTau,TIPVRef);
Expand Down

0 comments on commit 9cdd6b2

Please sign in to comment.