Skip to content

Commit

Permalink
Merge pull request cms-sw#9160 from cms-tau-pog/TauIPUpdates_v3
Browse files Browse the repository at this point in the history
Added functionality to compute signed IP wrt tau direction
  • Loading branch information
cmsbuild committed Jul 15, 2015
2 parents ab390fd + d776416 commit f79b651
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 12 deletions.
11 changes: 9 additions & 2 deletions DataFormats/TauReco/interface/PFTauTransverseImpactParameter.h
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
5 changes: 4 additions & 1 deletion DataFormats/TauReco/src/classes_def_3.xml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,10 @@
<class name="std::pair<reco::PFTauRef, reco::PFTauDecayMode>"/>
<class name="std::vector<std::pair<reco::PFTauRef, reco::PFTauDecayMode> >" />

<class name="reco::PFTauTransverseImpactParameter"/>
<class name="reco::PFTauTransverseImpactParameter" ClassVersion="2">
<version ClassVersion="2" checksum="2154806108"/>
</class>

<class name="std::vector<reco::PFTauTransverseImpactParameter>"/>
<class name="edm::Wrapper<std::vector<reco::PFTauTransverseImpactParameter> >"/>
<class name="edm::Ref<std::vector<reco::PFTauTransverseImpactParameter>,reco::PFTauTransverseImpactParameter,edm::refhelper::FindUsingAdvance<std::vector<reco::PFTauTransverseImpactParameter>,reco::PFTauTransverseImpactParameter> >"/>
Expand Down
30 changes: 23 additions & 7 deletions RecoTauTag/RecoTau/plugins/PFTauTransverseImpactParameters.cc
Original file line number Diff line number Diff line change
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 All @@ -50,7 +54,7 @@ using namespace reco;
using namespace edm;
using namespace std;

class PFTauTransverseImpactParameters : public EDProducer {
class PFTauTransverseImpactParameters : public edm::stream::EDProducer<> {
public:
enum Alg{useInputPV=0, useFont};
enum CMSSWPerigee{aCurv=0,aTheta,aPhi,aTip,aLip};
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 f79b651

Please sign in to comment.