35 LogInfo(
"PFTrackTransformer")<<
"PFTrackTransformer built";
51 LogDebug(
"PFTrackTransformer")<<
"Trajectory propagation started";
57 float pfenergy=
sqrt((pfmass*pfmass)+(track.
p()*track.
p()));
89 track.
pz(), track.
p());
93 posClosest,momClosest));
99 theParticle.propagate();
100 if(theParticle.getSuccess()!=0)
115 vector<TrajectoryMeasurement> measurements =traj.
measurements();
116 int iTrajFirst = (direction) ? 0 : measurements.size() - 1;
117 int increment = (direction) ? +1 : -1;
118 int iTrajLast = (direction) ?
int(measurements.size()) : -1;
121 for (
int iTraj = iTrajFirst; iTraj != iTrajLast; iTraj += increment) {
122 GlobalPoint v=measurements[iTraj].updatedState().globalPosition();
123 GlobalVector p=measurements[iTraj].updatedState().globalMomentum();
124 unsigned int iid=measurements[iTraj].recHit()->det()->geographicalId().rawId();
131 bool isBelowPS=
false;
132 theOutParticle.propagateToPreshowerLayer1(
false);
133 if(theOutParticle.getSuccess()!=0)
143 theOutParticle.propagateToPreshowerLayer2(
false);
144 if(theOutParticle.getSuccess()!=0){
154 theOutParticle.propagateToEcalEntrance(
false);
156 if(theOutParticle.getSuccess()!=0){
160 double ecalShowerDepth
161 = PFCluster::getDepthCorrection(theOutParticle.momentum().E(),
173 LogWarning(
"PFTrackTransformer")<<
"KF TRACK "<<pftrack<<
" PROPAGATION TO THE ECAL HAS FAILED";
183 theOutParticle.propagateToHcalEntrance(
false);
184 if(theOutParticle.getSuccess()!=0)
190 LogWarning(
"PFTrackTransformer")<<
"KF TRACK "<<pftrack<<
" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED";
192 pftrack.
addPoint(dummyHCALentrance);
196 theOutParticle.propagateToHcalExit(
false);
197 if(theOutParticle.getSuccess()!=0)
203 LogWarning(
"PFTrackTransformer")<<
"KF TRACK "<<pftrack<<
" PROPAGATION TO THE HCAL EXIT HAS FAILED";
214 const bool& GetMode)
const {
216 float PT= track.
pt();
220 vector<TrajectoryMeasurement> measurements =traj.
measurements();
221 int iTrajFirst = (direction) ? 0 : measurements.size() - 1;
222 int increment = (direction) ? +1 : -1;
223 int iTrajLast = (direction) ?
int(measurements.size()) : -1;
226 unsigned int iTrajPos = 0;
227 for (
int iTraj = iTrajFirst; iTraj != iTrajLast; iTraj += increment) {
229 GlobalPoint v=measurements[iTraj].updatedState().globalPosition();
232 bool ComputeMODE = GetMode;
236 unsigned int iid=measurements[iTraj].recHit()->det()->geographicalId().rawId();
243 float ptot =
sqrt((p.
x()*p.
x())+(p.
y()*p.
y())+(p.
z()*p.
z()));
244 float pfenergy=
sqrt((pfmass*pfmass)+(ptot *ptot));
246 if (iTraj == iTrajFirst) {
253 posClosest,momClosest));
288 if (iTraj != iTrajFirst && iTraj != (
abs(iTrajLast)-1)) {
295 if (iTraj == (
abs(iTrajLast)-1)) {
317 bool isBelowPS=
false;
346 double ecalShowerDepth
347 = PFCluster::getDepthCorrection(theOutParticle.
momentum().E(),
359 LogWarning(
"PFTrackTransformer")<<
"GSF TRACK "<<pftrack<<
" PROPAGATION TO THE ECAL HAS FAILED";
376 LogWarning(
"PFTrackTransformer")<<
"GSF TRACK "<<pftrack<<
" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED";
378 pftrack.
addPoint(dummyHCALentrance);
389 LogWarning(
"PFTrackTransformer")<<
"GSF TRACK "<<pftrack<<
" PROPAGATION TO THE HCAL EXIT HAS FAILED";
402 if ((v.
perp()>110) ||(fabs(v.
z())>280))
continue;
403 unsigned int iTrajPoint = iTrajPos + 2;
404 if(iid%2 == 1) iTrajPoint = 99;
406 PFBrem brem(DP,SigmaDP,iTrajPoint);
410 float e_gamma = fabs(DP);
422 int gamma_charge = 0;
438 bool isBelowPS=
false;
468 double ecalShowerDepth
469 = PFCluster::getDepthCorrection(theBremParticle.
momentum().E(),
480 if ((DP>5.) && ((DP/SigmaDP)>3))
481 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE ECAL HAS FAILED";
497 if ((DP>5.) && ((DP/SigmaDP)>3))
498 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED";
510 if ((DP>5.) && ((DP/SigmaDP)>3))
511 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE HCAL EXIT HAS FAILED";
528 float PT= track.
pt();
529 unsigned int iTrajPos = 0;
530 unsigned int iid = 0;
539 LogWarning(
"PFTrackTransformer")<<
" INNER TSOS NOT VALID ";
541 LogWarning(
"PFTrackTransformer")<<
" OUTER TSOS NOT VALID ";
557 float ptot =
sqrt((InMom.
x()*InMom.
x())+(InMom.
y()*InMom.
y())+(InMom.
z()*InMom.
z()));
558 float pfenergy=
sqrt((pfmass*pfmass)+(ptot *ptot));
565 posClosest,momClosest));
601 unsigned int iTrajPoint = iTrajPos + 2;
602 double dp_tang = ptot;
604 PFBrem brem(dp_tang,sdp_tang,iTrajPoint);
616 int gamma_charge = 0;
629 bool isBelowPS=
false;
661 double EDepthCorr = 0.01;
662 double ecalShowerDepth
663 = PFCluster::getDepthCorrection(EDepthCorr,
674 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
675 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE ECAL HAS FAILED";
691 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
692 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED";
704 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
705 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE HCAL EXIT HAS FAILED";
721 if(track.
gsfExtra()->tangentsSize() == 0)
723 <<
"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 ";
726 vector<GsfTangent> gsftang = track.
gsfExtra()->tangents();
727 for(
unsigned int iTang = 0; iTang < track.
gsfExtra()->tangentsSize(); iTang++) {
729 dp_tang = gsftang[iTang].deltaP().value();
730 sdp_tang = gsftang[iTang].deltaP().error();
735 ||(fabs(gsftang[iTang].
position().
z())>280))
continue;
737 iTrajPoint = iTrajPos + 2;
738 PFBrem brem(dp_tang,sdp_tang,iTrajPoint);
743 gsftang[iTang].momentum().
y(),
744 gsftang[iTang].momentum().
z());
759 double e_gamma = fabs(dp_tang);
766 gsftang[iTang].position().y(),
767 gsftang[iTang].position().z(),
814 double ecalShowerDepth
815 = PFCluster::getDepthCorrection(theBremParticle.
momentum().E(),
826 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
827 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE ECAL HAS FAILED";
843 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
844 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED";
856 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
857 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE HCAL EXIT HAS FAILED";
890 float ptot_out =
sqrt((OutMom.
x()*OutMom.
x())+(OutMom.
y()*OutMom.
y())+(OutMom.
z()*OutMom.
z()));
891 float pfenergy_out =
sqrt((pfmass*pfmass)+(ptot_out *ptot_out));
932 double EDepthCorr = 0.01;
933 double ecalShowerDepth
934 = PFCluster::getDepthCorrection(EDepthCorr,
946 LogWarning(
"PFTrackTransformer")<<
"GSF TRACK "<<pftrack<<
" PROPAGATION TO THE ECAL HAS FAILED";
963 LogWarning(
"PFTrackTransformer")<<
"GSF TRACK "<<pftrack<<
" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED";
965 pftrack.
addPoint(dummyHCALentrance);
976 LogWarning(
"PFTrackTransformer")<<
"GSF TRACK "<<pftrack<<
" PROPAGATION TO THE HCAL EXIT HAS FAILED";
986 dp_tang = OutMom.
mag();
989 iTrajPoint = iTrajPos + 2;
990 PFBrem brem(dp_tang,sdp_tang,iTrajPoint);
1002 theBremParticle.
setCharge(gamma_charge);
1044 double ecalShowerDepth
1045 = PFCluster::getDepthCorrection(theBremParticle.
momentum().E(),
1056 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
1057 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE ECAL HAS FAILED";
1073 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
1074 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE HCAL ENTRANCE HAS FAILED";
1086 if ((dp_tang>5.) && ((dp_tang/sdp_tang)>3))
1087 LogWarning(
"PFTrackTransformer")<<
"BREM "<<brem<<
" PROPAGATION TO THE HCAL EXIT HAS FAILED";
double p() const
momentum vector magnitude
void setCharge(float q)
set the MEASURED charge
reconstructed track used as an input to particle flow
double pyMode() const
y coordinate of momentum vector from mode
bool positionFromModeCartesian(const TrajectoryStateOnSurface tsos, GlobalPoint &position) const
bool propagateToPreshowerLayer1(bool first=true)
double pMode() const
momentum vector magnitude from mode
Global3DPoint GlobalPoint
int getSuccess() const
Has propagation been performed and was barrel or endcap reached ?
General CMS geometry parameters used during Particle Flow reconstruction or drawing. All methods and members are static.
void setPropagationConditions(double r, double z, bool firstLoop=true)
Set the propagation characteristics (rCyl, zCyl and first loop only)
double px() const
x coordinate of momentum vector
bool momentumFromModeCartesian(const TrajectoryStateOnSurface tsos, GlobalVector &momentum) const
const math::XYZPoint & outerPosition() const
position of the outermost hit
double sigmafittedDP() const
static int position[TOTALCHAMBERS][3]
double ptModeError() const
error on Pt (set to 1000 TeV if charge==0 for safety) from mode
PropagationDirection const & direction() const
void addBrem(const reco::PFBrem &brem)
add a Bremsstrahlung photon
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
static const float outerZ(PFGeometry::Layers_t layer)
return outer position along z axis of a given layer
DataContainer const & measurements() const
const XYZTLorentzVector & momentum() const
the momentum fourvector
double pt() const
track transverse momentum
bool propagateToHcalExit(bool first=true)
double pzMode() const
z coordinate of momentum vector from mode
void addPoint(const reco::PFTrajectoryPoint &trajPt)
bool propagateToEcalEntrance(bool first=true)
double pz() const
z coordinate of momentum vector
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
const XYZTLorentzVector & vertex() const
the vertex fourvector
const GsfTrackExtraRef & gsfExtra() const
reference to "extra" object
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
XYZVectorD XYZVector
spatial vector with cartesian internal representation
XYZPointD XYZPoint
point in space with cartesian internal representation
static const float outerRadius(PFGeometry::Layers_t layer)
return outer radius of a given layer
void calculatePositionREP()
double pxMode() const
x coordinate of momentum vector from mode
bool propagateToHcalEntrance(bool first=true)
unsigned int algoType() const
int charge() const
track electric charge
A PFTrack holds several trajectory points, which basically contain the position and momentum of a tra...
GlobalVector computeP(bool ComputeMode) const
double ptMode() const
track transverse momentum from mode
bool propagateToPreshowerLayer2(bool first=true)
double py() const
y coordinate of momentum vector
Global3DVector GlobalVector
math::XYZTLorentzVector XYZTLorentzVector