#include <PFTrackTransformer.h>
Public Member Functions | |
bool | addPoints (reco::PFRecTrack &pftrack, const reco::Track &track, const Trajectory &traj) const |
Add points to a PFTrack. return false if a TSOS is invalid. | |
bool | addPointsAndBrems (reco::GsfPFRecTrack &pftrack, const reco::Track &track, const Trajectory &traj, const bool &GetMode) const |
bool | addPointsAndBrems (reco::GsfPFRecTrack &pftrack, const reco::GsfTrack &track, const MultiTrajectoryStateTransform &mtjstate) const |
void | OnlyProp () |
PFTrackTransformer (math::XYZVector) | |
~PFTrackTransformer () | |
Public Attributes | |
bool | onlyprop_ |
Private Attributes | |
math::XYZVector | B_ |
B field. | |
const MultiTrajectoryStateMode * | mtsMode_ |
Definition at line 37 of file PFTrackTransformer.h.
PFTrackTransformer::PFTrackTransformer | ( | math::XYZVector | B | ) |
Definition at line 34 of file PFTrackTransformer.cc.
References onlyprop_.
:B_(B){ LogInfo("PFTrackTransformer")<<"PFTrackTransformer built"; PFGeometry pfGeometry; onlyprop_=false; }
PFTrackTransformer::~PFTrackTransformer | ( | ) |
Definition at line 41 of file PFTrackTransformer.cc.
{ }
bool PFTrackTransformer::addPoints | ( | reco::PFRecTrack & | pftrack, |
const reco::Track & | track, | ||
const Trajectory & | traj | ||
) | const |
Add points to a PFTrack. return false if a TSOS is invalid.
Definition at line 47 of file PFTrackTransformer.cc.
References reco::PFTrack::addPoint(), reco::PFRecTrack::algoType(), alongMomentum, B_, PFGeometry::BeamPipe, reco::TrackBase::charge(), Trajectory::direction(), reco::PFRecTrack::KF_ELCAND, LogDebug, PV3DBase< T, PVType, FrameType >::mag(), Trajectory::measurements(), onlyprop_, reco::Track::outerMomentum(), reco::Track::outerPosition(), PFGeometry::outerRadius(), PFGeometry::outerZ(), reco::TrackBase::p(), L1TEmulatorMonitor_cff::p, reco::TrackBase::pt(), PT, reco::TrackBase::px(), reco::TrackBase::py(), reco::TrackBase::pz(), dt_dqm_sourceclient_common_cff::reco, RawParticle::setCharge(), mathSSE::sqrt(), v, reco::TrackBase::vertex(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by LightPFTrackProducer::produce(), PFDisplacedTrackerVertexProducer::produce(), PFConversionProducer::produce(), PFNuclearProducer::produce(), PFTrackProducer::produce(), and PFV0Producer::produce().
{ LogDebug("PFTrackTransformer")<<"Trajectory propagation started"; using namespace reco; using namespace std; float PT= track.pt(); float pfmass= (pftrack.algoType()==reco::PFRecTrack::KF_ELCAND) ? 0.0005 : 0.139; float pfenergy=sqrt((pfmass*pfmass)+(track.p()*track.p())); // closest approach BaseParticlePropagator theParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(track.px(), track.py(), track.pz(), pfenergy), XYZTLorentzVector(track.vertex().x(), track.vertex().y(), track.vertex().z(), 0.)), 0.,0.,B_.z()); theParticle.setCharge(track.charge()); float pfoutenergy=sqrt((pfmass*pfmass)+track.outerMomentum().Mag2()); BaseParticlePropagator theOutParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(track.outerMomentum().x(), track.outerMomentum().y(), track.outerMomentum().z(), pfoutenergy), XYZTLorentzVector(track.outerPosition().x(), track.outerPosition().y(), track.outerPosition().z(), 0.)), 0.,0.,B_.z()); theOutParticle.setCharge(track.charge()); math::XYZTLorentzVector momClosest = math::XYZTLorentzVector(track.px(), track.py(), track.pz(), track.p()); math::XYZPoint posClosest = track.vertex(); pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ClosestApproach, posClosest,momClosest)); //BEAMPIPE theParticle.setPropagationConditions(PFGeometry::outerRadius(PFGeometry::BeamPipe), PFGeometry::outerZ(PFGeometry::BeamPipe), false); theParticle.propagate(); if(theParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::BeamPipeOrEndVertex, math::XYZPoint(theParticle.vertex()), math::XYZTLorentzVector(theParticle.momentum()))); else { PFTrajectoryPoint dummyMaxSh; pftrack.addPoint(dummyMaxSh); } //trajectory points if (!onlyprop_){ bool direction =(traj.direction() == alongMomentum); vector<TrajectoryMeasurement> measurements =traj.measurements(); int iTrajFirst = (direction) ? 0 : measurements.size() - 1; int increment = (direction) ? +1 : -1; int iTrajLast = (direction) ? int(measurements.size()) : -1; for (int iTraj = iTrajFirst; iTraj != iTrajLast; iTraj += increment) { GlobalPoint v=measurements[iTraj].updatedState().globalPosition(); GlobalVector p=measurements[iTraj].updatedState().globalMomentum(); unsigned int iid=measurements[iTraj].recHit()->det()->geographicalId().rawId(); pftrack.addPoint(PFTrajectoryPoint(iid,-1, math::XYZPoint(v.x(), v.y(), v.z()), math::XYZTLorentzVector(p.x(),p.y(),p.z(),p.mag()))); } } bool isBelowPS=false; theOutParticle.propagateToPreshowerLayer1(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS1, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else { PFTrajectoryPoint dummyPS1; pftrack.addPoint(dummyPS1); } theOutParticle.propagateToPreshowerLayer2(false); if(theOutParticle.getSuccess()!=0){ pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS2, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); isBelowPS=true; } else { PFTrajectoryPoint dummyPS2; pftrack.addPoint(dummyPS2); } theOutParticle.propagateToEcalEntrance(false); if(theOutParticle.getSuccess()!=0){ pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALEntrance, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); double ecalShowerDepth = PFCluster::getDepthCorrection(theOutParticle.momentum().E(), isBelowPS, false); math::XYZPoint meanShower=math::XYZPoint(theOutParticle.vertex())+ math::XYZTLorentzVector(theOutParticle.momentum()).Vect().Unit()*ecalShowerDepth; pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALShowerMax, meanShower, math::XYZTLorentzVector(theOutParticle.momentum())));} else { if (PT>5.) LogWarning("PFTrackTransformer")<<"KF TRACK "<<pftrack<< " PROPAGATION TO THE ECAL HAS FAILED"; PFTrajectoryPoint dummyECAL; pftrack.addPoint(dummyECAL); PFTrajectoryPoint dummyMaxSh; pftrack.addPoint(dummyMaxSh); } //HCAL entrance theOutParticle.propagateToHcalEntrance(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALEntrance, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else{ if (PT>5.) LogWarning("PFTrackTransformer")<<"KF TRACK "<<pftrack<< " PROPAGATION TO THE HCAL ENTRANCE HAS FAILED"; PFTrajectoryPoint dummyHCALentrance; pftrack.addPoint(dummyHCALentrance); } //HCAL exit theOutParticle.propagateToHcalExit(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALExit, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else{ if (PT>5.) LogWarning("PFTrackTransformer")<<"KF TRACK "<<pftrack<< " PROPAGATION TO THE HCAL EXIT HAS FAILED"; PFTrajectoryPoint dummyHCALexit; pftrack.addPoint(dummyHCALexit); } return true; }
bool PFTrackTransformer::addPointsAndBrems | ( | reco::GsfPFRecTrack & | pftrack, |
const reco::Track & | track, | ||
const Trajectory & | traj, | ||
const bool & | GetMode | ||
) | const |
Definition at line 211 of file PFTrackTransformer.cc.
References abs, reco::GsfPFRecTrack::addBrem(), reco::PFTrack::addPoint(), alongMomentum, B_, PFGeometry::BeamPipe, reco::PFTrack::calculatePositionREP(), reco::TrackBase::charge(), PFGsfHelper::computeP(), Trajectory::direction(), PFGsfHelper::fittedDP(), BaseParticlePropagator::getSuccess(), PV3DBase< T, PVType, FrameType >::mag(), Trajectory::measurements(), RawParticle::momentum(), PFGeometry::outerRadius(), PFGeometry::outerZ(), L1TEmulatorMonitor_cff::p, PV3DBase< T, PVType, FrameType >::perp(), BaseParticlePropagator::propagate(), BaseParticlePropagator::propagateToEcalEntrance(), BaseParticlePropagator::propagateToHcalEntrance(), BaseParticlePropagator::propagateToHcalExit(), BaseParticlePropagator::propagateToPreshowerLayer1(), BaseParticlePropagator::propagateToPreshowerLayer2(), reco::TrackBase::pt(), PT, RawParticle::setCharge(), BaseParticlePropagator::setPropagationConditions(), PFGsfHelper::sigmafittedDP(), mathSSE::sqrt(), v, RawParticle::vertex(), reco::TrackBase::vertex(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by PFElecTkProducer::produce().
{ float PT= track.pt(); // Trajectory for each trajectory point bool direction =(traj.direction() == alongMomentum); vector<TrajectoryMeasurement> measurements =traj.measurements(); int iTrajFirst = (direction) ? 0 : measurements.size() - 1; int increment = (direction) ? +1 : -1; int iTrajLast = (direction) ? int(measurements.size()) : -1; unsigned int iTrajPos = 0; for (int iTraj = iTrajFirst; iTraj != iTrajLast; iTraj += increment) { GlobalPoint v=measurements[iTraj].updatedState().globalPosition(); PFGsfHelper* PFGsf = new PFGsfHelper(measurements[iTraj]); //if (PFGsf->isValid()){ bool ComputeMODE = GetMode; GlobalVector p = PFGsf->computeP(ComputeMODE); double DP = PFGsf->fittedDP(); double SigmaDP = PFGsf->sigmafittedDP(); unsigned int iid=measurements[iTraj].recHit()->det()->geographicalId().rawId(); delete PFGsf; // -------------------------- Fill GSF Track ------------------------------------- // float pfmass= (pftrack.algoType()==reco::PFRecTrack::KF_ELCAND) ? 0.0005 : 0.139; float ptot = sqrt((p.x()*p.x())+(p.y()*p.y())+(p.z()*p.z())); float pfenergy= ptot; if (iTraj == iTrajFirst) { math::XYZTLorentzVector momClosest = math::XYZTLorentzVector(p.x(), p.y(), p.z(), ptot); math::XYZPoint posClosest = track.vertex(); pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ClosestApproach, posClosest,momClosest)); BaseParticlePropagator theInnerParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(p.x(), p.y(), p.z(), pfenergy), XYZTLorentzVector(track.vertex().x(), track.vertex().y(), track.vertex().z(), 0.)), //DANIELE Same thing v.x(),v.y(),v.()? 0.,0.,B_.z()); theInnerParticle.setCharge(track.charge()); //BEAMPIPE theInnerParticle.setPropagationConditions(PFGeometry::outerRadius(PFGeometry::BeamPipe), PFGeometry::outerZ(PFGeometry::BeamPipe), false); theInnerParticle.propagate(); if(theInnerParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::BeamPipeOrEndVertex, math::XYZPoint(theInnerParticle.vertex()), math::XYZTLorentzVector(theInnerParticle.momentum()))); else { PFTrajectoryPoint dummyMaxSh; pftrack.addPoint(dummyMaxSh); } // First Point for the trajectory == Vertex ?? pftrack.addPoint(PFTrajectoryPoint(iid,-1, math::XYZPoint(v.x(), v.y(), v.z()), math::XYZTLorentzVector(p.x(),p.y(),p.z(),p.mag()))); } if (iTraj != iTrajFirst && iTraj != (abs(iTrajLast)-1)) { pftrack.addPoint(PFTrajectoryPoint(iid,-1, math::XYZPoint(v.x(), v.y(), v.z()), math::XYZTLorentzVector(p.x(),p.y(),p.z(),p.mag()))); } if (iTraj == (abs(iTrajLast)-1)) { // Last Trajectory Meas pftrack.addPoint(PFTrajectoryPoint(iid,-1, math::XYZPoint(v.x(), v.y(), v.z()), math::XYZTLorentzVector(p.x(),p.y(),p.z(),p.mag()))); BaseParticlePropagator theOutParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(p.x(), p.y(), p.z(), pfenergy), XYZTLorentzVector(v.x(), v.y(), v.z(), 0.)), 0.,0.,B_.z()); theOutParticle.setCharge(track.charge()); bool isBelowPS=false; theOutParticle.propagateToPreshowerLayer1(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS1, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else { PFTrajectoryPoint dummyPS1; pftrack.addPoint(dummyPS1); } theOutParticle.propagateToPreshowerLayer2(false); if(theOutParticle.getSuccess()!=0){ pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS2, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); isBelowPS=true; } else { PFTrajectoryPoint dummyPS2; pftrack.addPoint(dummyPS2); } theOutParticle.propagateToEcalEntrance(false); if(theOutParticle.getSuccess()!=0){ pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALEntrance, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); double ecalShowerDepth = PFCluster::getDepthCorrection(theOutParticle.momentum().E(), isBelowPS, false); math::XYZPoint meanShower=math::XYZPoint(theOutParticle.vertex())+ math::XYZTLorentzVector(theOutParticle.momentum()).Vect().Unit()*ecalShowerDepth; pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALShowerMax, meanShower, math::XYZTLorentzVector(theOutParticle.momentum())));} else { if (PT>5.) LogWarning("PFTrackTransformer")<<"GSF TRACK "<<pftrack<< " PROPAGATION TO THE ECAL HAS FAILED"; PFTrajectoryPoint dummyECAL; pftrack.addPoint(dummyECAL); PFTrajectoryPoint dummyMaxSh; pftrack.addPoint(dummyMaxSh); } //HCAL entrance theOutParticle.propagateToHcalEntrance(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALEntrance, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else{ if (PT>5.) LogWarning("PFTrackTransformer")<<"GSF TRACK "<<pftrack<< " PROPAGATION TO THE HCAL ENTRANCE HAS FAILED"; PFTrajectoryPoint dummyHCALentrance; pftrack.addPoint(dummyHCALentrance); } //HCAL exit theOutParticle.propagateToHcalExit(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALExit, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else{ if (PT>5.) LogWarning("PFTrackTransformer")<<"GSF TRACK "<<pftrack<< " PROPAGATION TO THE HCAL EXIT HAS FAILED"; PFTrajectoryPoint dummyHCALexit; pftrack.addPoint(dummyHCALexit); } } // -------------------------- END GSF Track ------------------------------------- // -------------------------- Fill Brem "Track" --------------------------------- // Fill the brem for each traj point //check that the vertex of the brem is in the tracker volume if ((v.perp()>110) ||(fabs(v.z())>280)) continue; unsigned int iTrajPoint = iTrajPos + 2; if(iid%2 == 1) iTrajPoint = 99; PFBrem brem(DP,SigmaDP,iTrajPoint); GlobalVector p_gamma= p*(fabs(DP)/p.mag()); // Direction from the electron (tangent), DP without any sign!; float e_gamma = fabs(DP); // DP = pout-pin so could be negative BaseParticlePropagator theBremParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(p_gamma.x(), p_gamma.y(), p_gamma.z(), e_gamma), XYZTLorentzVector(v.x(), v.y(), v.z(), 0.)), 0.,0.,B_.z()); int gamma_charge = 0; theBremParticle.setCharge(gamma_charge); // add TrajectoryPoint for Brem, PS, ECAL, ECALShowMax, HCAL // Brem Entrance PS Layer1 PFTrajectoryPoint dummyClosest; // Added just to have the right number order in PFTrack.cc brem.addPoint(dummyClosest); PFTrajectoryPoint dummyBeamPipe; // Added just to have the right number order in PFTrack.cc brem.addPoint(dummyBeamPipe); bool isBelowPS=false; theBremParticle.propagateToPreshowerLayer1(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS1, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else { PFTrajectoryPoint dummyPS1; brem.addPoint(dummyPS1); } // Brem Entrance PS Layer 2 theBremParticle.propagateToPreshowerLayer2(false); if(theBremParticle.getSuccess()!=0){ brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS2, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); isBelowPS=true; } else { PFTrajectoryPoint dummyPS2; brem.addPoint(dummyPS2); } theBremParticle.propagateToEcalEntrance(false); if(theBremParticle.getSuccess()!=0){ brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALEntrance, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); double ecalShowerDepth = PFCluster::getDepthCorrection(theBremParticle.momentum().E(), isBelowPS, false); math::XYZPoint meanShower=math::XYZPoint(theBremParticle.vertex())+ math::XYZTLorentzVector(theBremParticle.momentum()).Vect().Unit()*ecalShowerDepth; brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALShowerMax, meanShower, math::XYZTLorentzVector(theBremParticle.momentum())));} else { if ((DP>5.) && ((DP/SigmaDP)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE ECAL HAS FAILED"; PFTrajectoryPoint dummyECAL; brem.addPoint(dummyECAL); PFTrajectoryPoint dummyMaxSh; brem.addPoint(dummyMaxSh); } //HCAL entrance theBremParticle.propagateToHcalEntrance(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALEntrance, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else{ if ((DP>5.) && ((DP/SigmaDP)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED"; PFTrajectoryPoint dummyHCALentrance; brem.addPoint(dummyHCALentrance); } //HCAL exit theBremParticle.propagateToHcalExit(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALExit, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else{ if ((DP>5.) && ((DP/SigmaDP)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE HCAL EXIT HAS FAILED"; PFTrajectoryPoint dummyHCALexit; brem.addPoint(dummyHCALexit); } brem.calculatePositionREP(); pftrack.addBrem(brem); iTrajPos++; } return true; }
bool PFTrackTransformer::addPointsAndBrems | ( | reco::GsfPFRecTrack & | pftrack, |
const reco::GsfTrack & | track, | ||
const MultiTrajectoryStateTransform & | mtjstate | ||
) | const |
Definition at line 524 of file PFTrackTransformer.cc.
References reco::GsfPFRecTrack::addBrem(), reco::PFTrack::addPoint(), B_, PFGeometry::BeamPipe, reco::PFTrack::calculatePositionREP(), reco::TrackBase::charge(), BaseParticlePropagator::getSuccess(), reco::GsfTrack::gsfExtra(), MultiTrajectoryStateTransform::innerStateOnSurface(), TrajectoryStateOnSurface::isValid(), PV3DBase< T, PVType, FrameType >::mag(), RawParticle::momentum(), MultiTrajectoryStateMode::momentumFromModeCartesian(), mtsMode_, PFGeometry::outerRadius(), MultiTrajectoryStateTransform::outerStateOnSurface(), PFGeometry::outerZ(), reco::GsfTrack::pMode(), position, MultiTrajectoryStateMode::positionFromModeCartesian(), BaseParticlePropagator::propagate(), BaseParticlePropagator::propagateToEcalEntrance(), BaseParticlePropagator::propagateToHcalEntrance(), BaseParticlePropagator::propagateToHcalExit(), BaseParticlePropagator::propagateToPreshowerLayer1(), BaseParticlePropagator::propagateToPreshowerLayer2(), reco::GsfTrack::ptMode(), reco::GsfTrack::ptModeError(), reco::GsfTrack::pxMode(), reco::GsfTrack::pyMode(), reco::GsfTrack::pzMode(), RawParticle::setCharge(), BaseParticlePropagator::setPropagationConditions(), mathSSE::sqrt(), RawParticle::vertex(), reco::TrackBase::vertex(), PV3DBase< T, PVType, FrameType >::x(), x, PV3DBase< T, PVType, FrameType >::y(), detailsBasic3DVector::y, PV3DBase< T, PVType, FrameType >::z(), and z.
{ // float PT= track.pt(); unsigned int iTrajPos = 0; unsigned int iid = 0; // not anymore saved // ***************************** INNER State ************************************* TrajectoryStateOnSurface inTSOS = mtjstate.innerStateOnSurface((track)); TrajectoryStateOnSurface outTSOS = mtjstate.outerStateOnSurface((track)); if(!inTSOS.isValid() || !outTSOS.isValid()) { if(!inTSOS.isValid()) LogWarning("PFTrackTransformer")<<" INNER TSOS NOT VALID "; if(!outTSOS.isValid()) LogWarning("PFTrackTransformer")<<" OUTER TSOS NOT VALID "; return false; } GlobalVector InMom; GlobalPoint InPos; if(inTSOS.isValid()) { mtsMode_->momentumFromModeCartesian(inTSOS,InMom); mtsMode_->positionFromModeCartesian(inTSOS,InPos); } else { InMom = GlobalVector(track.pxMode(),track.pyMode(),track.pzMode()); InPos = GlobalPoint(0.,0.,0.); } // float pfmass= (pftrack.algoType()==reco::PFRecTrack::KF_ELCAND) ? 0.0005 : 0.139; float ptot = sqrt((InMom.x()*InMom.x())+(InMom.y()*InMom.y())+(InMom.z()*InMom.z())); float pfenergy= ptot; math::XYZTLorentzVector momClosest = math::XYZTLorentzVector(InMom.x(), InMom.y(), InMom.z(), ptot); math::XYZPoint posClosest = track.vertex(); pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ClosestApproach, posClosest,momClosest)); BaseParticlePropagator theInnerParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(InMom.x(), InMom.y(), InMom.z(), pfenergy), XYZTLorentzVector(track.vertex().x(), track.vertex().y(), track.vertex().z(), 0.)), //DANIELE Same thing v.x(),v.y(),v.()? 0.,0.,B_.z()); theInnerParticle.setCharge(track.charge()); // Use the chargeMode ?? //BEAMPIPE theInnerParticle.setPropagationConditions(PFGeometry::outerRadius(PFGeometry::BeamPipe), PFGeometry::outerZ(PFGeometry::BeamPipe), false); theInnerParticle.propagate(); if(theInnerParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::BeamPipeOrEndVertex, math::XYZPoint(theInnerParticle.vertex()), math::XYZTLorentzVector(theInnerParticle.momentum()))); else { PFTrajectoryPoint dummyBeam; pftrack.addPoint(dummyBeam); } // first tjpoint pftrack.addPoint(PFTrajectoryPoint(iid,-1, math::XYZPoint(InPos.x(),InPos.y(), InPos.z()), math::XYZTLorentzVector(InMom.x(),InMom.y(),InMom.z(),InMom.mag()))); //######### Photon at INNER State ########## unsigned int iTrajPoint = iTrajPos + 2; double dp_tang = ptot; double sdp_tang = track.ptModeError()*(track.pMode()/track.ptMode()); PFBrem brem(dp_tang,sdp_tang,iTrajPoint); BaseParticlePropagator theBremParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(InMom.x(), InMom.y(), InMom.z(), dp_tang), XYZTLorentzVector(InPos.x(), InPos.y(), InPos.z(), 0.)), 0.,0.,B_.z()); int gamma_charge = 0; theBremParticle.setCharge(gamma_charge); // add TrajectoryPoint for Brem, PS, ECAL, ECALShowMax, HCAL // Brem Entrance PS Layer1 PFTrajectoryPoint dummyClosest; // Added just to have the right number order in PFTrack.cc brem.addPoint(dummyClosest); PFTrajectoryPoint dummyBeamPipe; // Added just to have the right number order in PFTrack.cc brem.addPoint(dummyBeamPipe); bool isBelowPS=false; theBremParticle.propagateToPreshowerLayer1(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS1, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else { PFTrajectoryPoint dummyPS1; brem.addPoint(dummyPS1); } // Brem Entrance PS Layer 2 theBremParticle.propagateToPreshowerLayer2(false); if(theBremParticle.getSuccess()!=0){ brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS2, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); isBelowPS=true; } else { PFTrajectoryPoint dummyPS2; brem.addPoint(dummyPS2); } theBremParticle.propagateToEcalEntrance(false); if(theBremParticle.getSuccess()!=0){ brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALEntrance, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); // for the first brem give a low default DP of 100 MeV. double EDepthCorr = 0.01; double ecalShowerDepth = PFCluster::getDepthCorrection(EDepthCorr, isBelowPS, false); math::XYZPoint meanShower=math::XYZPoint(theBremParticle.vertex())+ math::XYZTLorentzVector(theBremParticle.momentum()).Vect().Unit()*ecalShowerDepth; brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALShowerMax, meanShower, math::XYZTLorentzVector(theBremParticle.momentum())));} else { if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE ECAL HAS FAILED"; PFTrajectoryPoint dummyECAL; brem.addPoint(dummyECAL); PFTrajectoryPoint dummyMaxSh; brem.addPoint(dummyMaxSh); } //HCAL entrance theBremParticle.propagateToHcalEntrance(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALEntrance, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else{ if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED"; PFTrajectoryPoint dummyHCALentrance; brem.addPoint(dummyHCALentrance); } //HCAL exit theBremParticle.propagateToHcalExit(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALExit, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else{ if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE HCAL EXIT HAS FAILED"; PFTrajectoryPoint dummyHCALexit; brem.addPoint(dummyHCALexit); } brem.calculatePositionREP(); pftrack.addBrem(brem); iTrajPos++; // ***************************** INTERMIDIATE State ************************************* //From the new Wolfgang code // To think if the cout should be removed. if(track.gsfExtra()->tangentsSize() == 0) LogError("PFTrackTransformer") <<"BE CAREFUL: Gsf Tangents not stored in the event. You need to re-reco the particle-flow with RecoToDisplay_cfg.py and not RecoToDisplay_NoTracking_cfg.py "; vector<GsfTangent> gsftang = track.gsfExtra()->tangents(); for(unsigned int iTang = 0; iTang < track.gsfExtra()->tangentsSize(); iTang++) { dp_tang = gsftang[iTang].deltaP().value(); sdp_tang = gsftang[iTang].deltaP().error(); //check that the vertex of the brem is in the tracker volume if ((sqrt(gsftang[iTang].position().x()*gsftang[iTang].position().x() + gsftang[iTang].position().y()*gsftang[iTang].position().y())>110) ||(fabs(gsftang[iTang].position().z())>280)) continue; iTrajPoint = iTrajPos + 2; PFBrem brem(dp_tang,sdp_tang,iTrajPoint); GlobalVector p_tang= GlobalVector(gsftang[iTang].momentum().x(), gsftang[iTang].momentum().y(), gsftang[iTang].momentum().z()); // ###### track tj points pftrack.addPoint(PFTrajectoryPoint(iid,-1, math::XYZPoint(gsftang[iTang].position().x(),gsftang[iTang].position().y(),gsftang[iTang].position().z()), math::XYZTLorentzVector(p_tang.x(),p_tang.y(),p_tang.z(),p_tang.mag()))); //rescale GlobalVector p_gamma = p_tang *(fabs(dp_tang)/p_tang.mag()); // GlobalVector double e_gamma = fabs(dp_tang); // DP = pout-pin so could be negative theBremParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(p_gamma.x(), p_gamma.y(), p_gamma.z(), e_gamma), XYZTLorentzVector(gsftang[iTang].position().x(), gsftang[iTang].position().y(), gsftang[iTang].position().z(), 0.)), 0.,0.,B_.z()); theBremParticle.setCharge(gamma_charge); PFTrajectoryPoint dummyClosest; // Added just to have the right number order in PFTrack.cc brem.addPoint(dummyClosest); PFTrajectoryPoint dummyBeamPipe; // Added just to have the right number order in PFTrack.cc brem.addPoint(dummyBeamPipe); isBelowPS=false; theBremParticle.propagateToPreshowerLayer1(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS1, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else { PFTrajectoryPoint dummyPS1; brem.addPoint(dummyPS1); } // Brem Entrance PS Layer 2 theBremParticle.propagateToPreshowerLayer2(false); if(theBremParticle.getSuccess()!=0){ brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS2, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); isBelowPS=true; } else { PFTrajectoryPoint dummyPS2; brem.addPoint(dummyPS2); } theBremParticle.propagateToEcalEntrance(false); if(theBremParticle.getSuccess()!=0){ brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALEntrance, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); double ecalShowerDepth = PFCluster::getDepthCorrection(theBremParticle.momentum().E(), isBelowPS, false); math::XYZPoint meanShower=math::XYZPoint(theBremParticle.vertex())+ math::XYZTLorentzVector(theBremParticle.momentum()).Vect().Unit()*ecalShowerDepth; brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALShowerMax, meanShower, math::XYZTLorentzVector(theBremParticle.momentum())));} else { if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE ECAL HAS FAILED"; PFTrajectoryPoint dummyECAL; brem.addPoint(dummyECAL); PFTrajectoryPoint dummyMaxSh; brem.addPoint(dummyMaxSh); } //HCAL entrance theBremParticle.propagateToHcalEntrance(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALEntrance, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else{ if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED"; PFTrajectoryPoint dummyHCALentrance; brem.addPoint(dummyHCALentrance); } //HCAL exit theBremParticle.propagateToHcalExit(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALExit, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else{ if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE HCAL EXIT HAS FAILED"; PFTrajectoryPoint dummyHCALexit; brem.addPoint(dummyHCALexit); } brem.calculatePositionREP(); pftrack.addBrem(brem); iTrajPos++; } // ***************************** OUTER State ************************************* if(outTSOS.isValid()) { GlobalVector OutMom; GlobalPoint OutPos; // DANIELE ????? if the out is not valid maybe take the last tangent? // From Wolfgang. It should be always valid mtsMode_->momentumFromModeCartesian(outTSOS,OutMom); mtsMode_->positionFromModeCartesian(outTSOS,OutPos); // last tjpoint pftrack.addPoint(PFTrajectoryPoint(iid,-1, math::XYZPoint(OutPos.x(),OutPos.y(), OutPos.z()), math::XYZTLorentzVector(OutMom.x(),OutMom.y(),OutMom.z(),OutMom.mag()))); float ptot_out = sqrt((OutMom.x()*OutMom.x())+(OutMom.y()*OutMom.y())+(OutMom.z()*OutMom.z())); float pTtot_out = sqrt((OutMom.x()*OutMom.x())+(OutMom.y()*OutMom.y())); float pfenergy_out = ptot_out; BaseParticlePropagator theOutParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(OutMom.x(), OutMom.y(), OutMom.z(), pfenergy_out), XYZTLorentzVector(OutPos.x(), OutPos.y(), OutPos.z(), 0.)), 0.,0.,B_.z()); theOutParticle.setCharge(track.charge()); isBelowPS=false; theOutParticle.propagateToPreshowerLayer1(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS1, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else { PFTrajectoryPoint dummyPS1; pftrack.addPoint(dummyPS1); } theOutParticle.propagateToPreshowerLayer2(false); if(theOutParticle.getSuccess()!=0){ pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS2, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); isBelowPS=true; } else { PFTrajectoryPoint dummyPS2; pftrack.addPoint(dummyPS2); } theOutParticle.propagateToEcalEntrance(false); if(theOutParticle.getSuccess()!=0){ pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALEntrance, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); double EDepthCorr = 0.01; double ecalShowerDepth = PFCluster::getDepthCorrection(EDepthCorr, isBelowPS, false); math::XYZPoint meanShower=math::XYZPoint(theOutParticle.vertex())+ math::XYZTLorentzVector(theOutParticle.momentum()).Vect().Unit()*ecalShowerDepth; pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALShowerMax, meanShower, math::XYZTLorentzVector(theOutParticle.momentum())));} else { if (pTtot_out>5.) LogWarning("PFTrackTransformer")<<"GSF TRACK "<<pftrack<< " PROPAGATION TO THE ECAL HAS FAILED"; PFTrajectoryPoint dummyECAL; pftrack.addPoint(dummyECAL); PFTrajectoryPoint dummyMaxSh; pftrack.addPoint(dummyMaxSh); } //HCAL entrance theOutParticle.propagateToHcalEntrance(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALEntrance, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else{ if (pTtot_out>5.) LogWarning("PFTrackTransformer")<<"GSF TRACK "<<pftrack<< " PROPAGATION TO THE HCAL ENTRANCE HAS FAILED"; PFTrajectoryPoint dummyHCALentrance; pftrack.addPoint(dummyHCALentrance); } //HCAL exit theOutParticle.propagateToHcalExit(false); if(theOutParticle.getSuccess()!=0) pftrack.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALExit, math::XYZPoint(theOutParticle.vertex()), math::XYZTLorentzVector(theOutParticle.momentum()))); else{ if (pTtot_out>5.) LogWarning("PFTrackTransformer")<<"GSF TRACK "<<pftrack<< " PROPAGATION TO THE HCAL EXIT HAS FAILED"; PFTrajectoryPoint dummyHCALexit; pftrack.addPoint(dummyHCALexit); } //######## Photon at the OUTER State ########## dp_tang = OutMom.mag(); // for the moment same inner error just for semplicity sdp_tang = track.ptModeError()*(track.pMode()/track.ptMode()); iTrajPoint = iTrajPos + 2; PFBrem brem(dp_tang,sdp_tang,iTrajPoint); theBremParticle = BaseParticlePropagator( RawParticle(XYZTLorentzVector(OutMom.x(), OutMom.y(), OutMom.z(), dp_tang), XYZTLorentzVector(OutPos.x(), OutPos.y(), OutPos.z(), 0.)), 0.,0.,B_.z()); theBremParticle.setCharge(gamma_charge); PFTrajectoryPoint dummyClosest; // Added just to have the right number order in PFTrack.cc brem.addPoint(dummyClosest); PFTrajectoryPoint dummyBeamPipe; // Added just to have the right number order in PFTrack.cc brem.addPoint(dummyBeamPipe); isBelowPS=false; theBremParticle.propagateToPreshowerLayer1(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS1, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else { PFTrajectoryPoint dummyPS1; brem.addPoint(dummyPS1); } // Brem Entrance PS Layer 2 theBremParticle.propagateToPreshowerLayer2(false); if(theBremParticle.getSuccess()!=0){ brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::PS2, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); isBelowPS=true; } else { PFTrajectoryPoint dummyPS2; brem.addPoint(dummyPS2); } theBremParticle.propagateToEcalEntrance(false); if(theBremParticle.getSuccess()!=0){ brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALEntrance, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); double ecalShowerDepth = PFCluster::getDepthCorrection(theBremParticle.momentum().E(), isBelowPS, false); math::XYZPoint meanShower=math::XYZPoint(theBremParticle.vertex())+ math::XYZTLorentzVector(theBremParticle.momentum()).Vect().Unit()*ecalShowerDepth; brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::ECALShowerMax, meanShower, math::XYZTLorentzVector(theBremParticle.momentum())));} else { if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE ECAL HAS FAILED"; PFTrajectoryPoint dummyECAL; brem.addPoint(dummyECAL); PFTrajectoryPoint dummyMaxSh; brem.addPoint(dummyMaxSh); } //HCAL entrance theBremParticle.propagateToHcalEntrance(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALEntrance, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else{ if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED"; PFTrajectoryPoint dummyHCALentrance; brem.addPoint(dummyHCALentrance); } //HCAL exit theBremParticle.propagateToHcalExit(false); if(theBremParticle.getSuccess()!=0) brem.addPoint(PFTrajectoryPoint(-1,PFTrajectoryPoint::HCALExit, math::XYZPoint(theBremParticle.vertex()), math::XYZTLorentzVector(theBremParticle.momentum()))); else{ if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3)) LogWarning("PFTrackTransformer")<<"BREM "<<brem<<" PROPAGATION TO THE HCAL EXIT HAS FAILED"; PFTrajectoryPoint dummyHCALexit; brem.addPoint(dummyHCALexit); } brem.calculatePositionREP(); pftrack.addBrem(brem); iTrajPos++; } return true; }
void PFTrackTransformer::OnlyProp | ( | ) | [inline] |
Definition at line 60 of file PFTrackTransformer.h.
References onlyprop_.
Referenced by PFConversionProducer::beginRun(), GoodSeedProducer::beginRun(), LightPFTrackProducer::beginRun(), PFV0Producer::beginRun(), PFNuclearProducer::beginRun(), PFTrackProducer::beginRun(), and PFDisplacedTrackerVertexProducer::beginRun().
{ onlyprop_=true; }
math::XYZVector PFTrackTransformer::B_ [private] |
B field.
Definition at line 67 of file PFTrackTransformer.h.
Referenced by addPoints(), and addPointsAndBrems().
const MultiTrajectoryStateMode* PFTrackTransformer::mtsMode_ [private] |
Definition at line 68 of file PFTrackTransformer.h.
Referenced by addPointsAndBrems().
Definition at line 63 of file PFTrackTransformer.h.
Referenced by addPoints(), OnlyProp(), and PFTrackTransformer().