CMS 3D CMS Logo

Typedefs | Functions
egammaTools Namespace Reference

Typedefs

typedef math::XYZTLorentzVector LorentzVector
 

Functions

ConversionInfo arbitrateConversionPartnersbyR (const std::vector< ConversionInfo > &v_convCandidates)
 
double ecalEta (const math::XYZVector &momentum, const math::XYZPoint &vertex)
 
double ecalPhi (const MagneticField &magField, const math::XYZVector &momentum, const math::XYZPoint &vertex, const int charge)
 
ConversionInfo findBestConversionMatch (const std::vector< ConversionInfo > &v_convCandidates)
 
ConversionInfo getConversionInfo (const reco::GsfElectron &gsfElectron, const edm::Handle< reco::TrackCollection > &ctftracks_h, const edm::Handle< reco::GsfTrackCollection > &gsftracks_h, const double bFieldAtOrigin, const double minFracSharedHits=0.45)
 
ConversionInfo getConversionInfo (const reco::GsfElectron &gsfElectron, const edm::Handle< reco::TrackCollection > &track_h, const double bFieldAtOrigin, const double minFracSharedHits=0.45)
 
ConversionInfo getConversionInfo (const reco::GsfElectronCore &, const edm::Handle< reco::TrackCollection > &ctftracks_h, const edm::Handle< reco::GsfTrackCollection > &gsftracks_h, const double bFieldAtOrigin, const double minFracSharedHits=0.45)
 
ConversionInfo getConversionInfo (const reco::Track *el_track, const reco::Track *candPartnerTk, const double bFieldAtOrigin)
 
std::pair< double, double > getConversionInfo (LorentzVector trk1_p4, int trk1_q, float trk1_d0, LorentzVector trk2_p4, int trk2_q, float trk2_d0, float bFieldAtOrigin)
 
std::vector< ConversionInfogetConversionInfos (const reco::GsfElectronCore &, const edm::Handle< reco::TrackCollection > &ctftracks_h, const edm::Handle< reco::GsfTrackCollection > &gsftracks_h, const double bFieldAtOrigin, const double minFracSharedHits=0.45)
 
const reco::TrackgetElectronTrack (const reco::GsfElectron &, const float minFracSharedHits=0.45)
 
const reco::TrackgetElectronTrack (const reco::GsfElectronCore &, const float minFracSharedHits=0.45)
 
bool isFromConversion (const ConversionInfo &, double maxAbsDist=0.02, double maxAbsDcot=0.02)
 
void localEcalClusterCoordsEB (const reco::CaloCluster &bclus, const CaloGeometry &geom, float &etacry, float &phicry, int &ieta, int &iphi, float &thetatilt, float &phitilt)
 
void localEcalClusterCoordsEE (const reco::CaloCluster &bclus, const CaloGeometry &geom, float &xcry, float &ycry, int &ix, int &iy, float &thetatilt, float &phitilt)
 

Typedef Documentation

◆ LorentzVector

Definition at line 10 of file ConversionFinder.cc.

Function Documentation

◆ arbitrateConversionPartnersbyR()

ConversionInfo egammaTools::arbitrateConversionPartnersbyR ( const std::vector< ConversionInfo > &  v_convCandidates)

Definition at line 275 of file ConversionFinder.cc.

275  {
276  if (v_convCandidates.size() == 1)
277  return v_convCandidates.at(0);
278 
279  double R = sqrt(pow(v_convCandidates.at(0).dist, 2) + pow(v_convCandidates.at(0).dcot, 2));
280 
281  int iArbitrated = 0;
282  int i = 0;
283 
284  for (auto const& temp : v_convCandidates) {
285  double temp_R = sqrt(pow(temp.dist, 2) + pow(temp.dcot, 2));
286  if (temp_R < R) {
287  R = temp_R;
288  iArbitrated = i;
289  }
290  ++i;
291  }
292 
293  return v_convCandidates.at(iArbitrated);
294  }

References mps_fire::i, funct::pow(), dttmaxenums::R, mathSSE::sqrt(), and groupFilesInBlocks::temp.

Referenced by findBestConversionMatch().

◆ ecalEta()

double egammaTools::ecalEta ( const math::XYZVector momentum,
const math::XYZPoint vertex 
)

Definition at line 71 of file ECALPositionCalculator.cc.

71  {
72  // Get kinematic variables
73 
74  float etaParticle = momentum.eta();
75  float vZ = vertex.z();
76  float vRho = vertex.Rho();
77 
78  if (etaParticle != 0.0) {
79  float theta = 0.0;
80  float zEcal = (R_ECAL - vRho) * sinh(etaParticle) + vZ;
81 
82  if (zEcal != 0.0)
83  theta = atan(R_ECAL / zEcal);
84  if (theta < 0.0)
85  theta = theta + Geom::pi();
86 
87  float ETA = -log(tan(0.5 * theta));
88 
89  if (fabs(ETA) > etaBarrelEndcap) {
90  float Zend = Z_Endcap;
91  if (etaParticle < 0.0)
92  Zend = -Zend;
93  float Zlen = Zend - vZ;
94  float RR = Zlen / sinh(etaParticle);
95  theta = atan((RR + vRho) / Zend);
96  if (theta < 0.0)
97  theta = theta + Geom::pi();
98  ETA = -log(tan(0.5 * theta));
99  }
100  return ETA;
101 
102  } else {
103  edm::LogWarning("") << "[EcalPositionFromTrack::etaTransformation] Warning: "
104  << "Eta equals to zero, not correcting";
105  return etaParticle;
106  }
107  }

References ETA, etaBarrelEndcap, dqm-mbProfile::log, Geom::pi(), R_ECAL, funct::tan(), theta(), bphysicsOniaDQM_cfi::vertex, and Z_Endcap.

Referenced by ContainmentCorrectionAnalyzer::analyze(), and PreshowerAndECALLinker::testLink().

◆ ecalPhi()

double egammaTools::ecalPhi ( const MagneticField magField,
const math::XYZVector momentum,
const math::XYZPoint vertex,
const int  charge 
)

Definition at line 16 of file ECALPositionCalculator.cc.

19  {
20  // Get kinematic variables
21 
22  float ptParticle = momentum.Rho();
23  float etaParticle = momentum.eta();
24  float phiParticle = momentum.phi();
25  float vRho = vertex.Rho();
26 
27  // Magnetic field
28 
29  const float RBARM = 1.357; // was 1.31 , updated on 16122003
30  const float ZENDM = 3.186; // was 3.15 , updated on 16122003
31 
32  float rbend = RBARM - (vRho / 100.0); //Assumed vRho in cm
33  float bend = 0.3 * magField.inTesla(GlobalPoint(0., 0., 0.)).z() * rbend / 2.0;
34  float phi = 0.0;
35 
36  if (fabs(etaParticle) <= etaBarrelEndcap) {
37  if (fabs(bend / ptParticle) <= 1.) {
38  phi = phiParticle - asin(bend / ptParticle) * charge;
39  if (phi > Geom::pi())
40  phi = phi - Geom::twoPi();
41  if (phi < -Geom::pi())
42  phi = phi + Geom::twoPi();
43  } else {
44  edm::LogWarning("") << "[EcalPositionFromTrack::phiTransformation] Warning: "
45  << "Too low Pt, giving up";
46  return phiParticle;
47  }
48 
49  } // end if in the barrel
50 
51  if (fabs(etaParticle) > etaBarrelEndcap) {
52  float rHit = 0.0;
53  rHit = ZENDM / sinh(fabs(etaParticle));
54  if (fabs(((rHit - (vRho / 100.0)) / rbend) * bend / ptParticle) <= 1.0) {
55  phi = phiParticle - asin(((rHit - (vRho / 100.0)) / rbend) * bend / ptParticle) * charge;
56  if (phi > Geom::pi())
57  phi = phi - Geom::twoPi();
58  if (phi < -Geom::pi())
59  phi = phi + Geom::twoPi();
60  } else {
61  edm::LogWarning("") << "[EcalPositionFromTrack::phiTransformation] Warning: "
62  << "Too low Pt, giving up";
63  return phiParticle;
64  }
65 
66  } // end if in the endcap
67 
68  return phi;
69  }

References trklet::bend(), ALCARECOTkAlJpsiMuMu_cff::charge, etaBarrelEndcap, MagneticField::inTesla(), Geom::pi(), Geom::twoPi(), bphysicsOniaDQM_cfi::vertex, and PV3DBase< T, PVType, FrameType >::z().

Referenced by MuonMETAlgo::correctMETforMuon(), and PreshowerAndECALLinker::testLink().

◆ findBestConversionMatch()

ConversionInfo egammaTools::findBestConversionMatch ( const std::vector< ConversionInfo > &  v_convCandidates)

Definition at line 297 of file ConversionFinder.cc.

297  {
298  using namespace std;
299 
300  if (v_convCandidates.empty())
301  return ConversionInfo{-9999.,
302  -9999.,
303  -9999.,
304  math::XYZPoint(-9999., -9999., -9999),
305  reco::TrackRef(),
307  -9999,
308  -9999};
309 
310  if (v_convCandidates.size() == 1)
311  return v_convCandidates.at(0);
312 
313  vector<ConversionInfo> v_0;
314  vector<ConversionInfo> v_1;
315  vector<ConversionInfo> v_2;
316  vector<ConversionInfo> v_3;
317  //loop over the candidates
318  for (unsigned int i = 1; i < v_convCandidates.size(); i++) {
319  ConversionInfo temp = v_convCandidates.at(i);
320 
321  if (temp.flag == 0) {
322  bool isConv = false;
323  if (fabs(temp.dist) < 0.02 && fabs(temp.dcot) < 0.02 && temp.deltaMissingHits < 3 &&
324  temp.radiusOfConversion > -2)
325  isConv = true;
326  if (sqrt(pow(temp.dist, 2) + pow(temp.dcot, 2)) < 0.05 && temp.deltaMissingHits < 2 &&
327  temp.radiusOfConversion > -2)
328  isConv = true;
329 
330  if (isConv)
331  v_0.push_back(temp);
332  }
333 
334  if (temp.flag == 1) {
335  if (sqrt(pow(temp.dist, 2) + pow(temp.dcot, 2)) < 0.05 && temp.deltaMissingHits < 2 &&
336  temp.radiusOfConversion > -2)
337  v_1.push_back(temp);
338  }
339  if (temp.flag == 2) {
340  if (sqrt(pow(temp.dist, 2) + pow(temp.dcot * temp.dcot, 2)) < 0.05 && temp.deltaMissingHits < 2 &&
341  temp.radiusOfConversion > -2)
342  v_2.push_back(temp);
343  }
344  if (temp.flag == 3) {
345  if (sqrt(temp.dist * temp.dist + temp.dcot * temp.dcot) < 0.05 && temp.deltaMissingHits < 2 &&
346  temp.radiusOfConversion > -2)
347  v_3.push_back(temp);
348  }
349 
350  } //candidate conversion loop
351 
352  //now do some arbitration
353 
354  //give preference to conversion partners found in the CTF collection
355  //using the electron's CTF track
356  if (!v_0.empty())
357  return arbitrateConversionPartnersbyR(v_0);
358 
359  if (!v_1.empty())
360  return arbitrateConversionPartnersbyR(v_1);
361 
362  if (!v_2.empty())
363  return arbitrateConversionPartnersbyR(v_2);
364 
365  if (!v_3.empty())
366  return arbitrateConversionPartnersbyR(v_3);
367 
368  //if we get here, we didn't find a candidate conversion partner that
369  //satisfied even the loose selections
370  //return the the closest partner by R
371  return arbitrateConversionPartnersbyR(v_convCandidates);
372  }

References arbitrateConversionPartnersbyR(), mps_fire::i, funct::pow(), mathSSE::sqrt(), and groupFilesInBlocks::temp.

Referenced by getConversionInfo().

◆ getConversionInfo() [1/5]

ConversionInfo egammaTools::getConversionInfo ( const reco::GsfElectron gsfElectron,
const edm::Handle< reco::TrackCollection > &  ctftracks_h,
const edm::Handle< reco::GsfTrackCollection > &  gsftracks_h,
const double  bFieldAtOrigin,
const double  minFracSharedHits = 0.45 
)

Definition at line 25 of file ConversionFinder.cc.

29  {
30  std::vector<ConversionInfo> temp =
31  getConversionInfos(*gsfElectron.core(), ctftracks_h, gsftracks_h, bFieldAtOrigin, minFracSharedHits);
33  }

References reco::GsfElectron::core(), findBestConversionMatch(), getConversionInfos(), and groupFilesInBlocks::temp.

◆ getConversionInfo() [2/5]

ConversionInfo egammaTools::getConversionInfo ( const reco::GsfElectron gsfElectron,
const edm::Handle< reco::TrackCollection > &  track_h,
const double  bFieldAtOrigin,
const double  minFracSharedHits = 0.45 
)

Definition at line 404 of file ConversionFinder.cc.

407  {
408  using namespace reco;
409  using namespace std;
410  using namespace edm;
411 
412  const TrackCollection* ctftracks = track_h.product();
413  const reco::TrackRef el_ctftrack = gsfElectron.closestCtfTrackRef();
414  int ctfidx = -999.;
415  int flag = -9999.;
416  if (el_ctftrack.isNonnull() && gsfElectron.shFracInnerHits() > minFracSharedHits) {
417  ctfidx = static_cast<int>(el_ctftrack.key());
418  flag = 0;
419  } else
420  flag = 1;
421 
422  /*
423  determine whether we're going to use the CTF track or the GSF track
424  using the electron's CTF track to find the dist, dcot has been shown
425  to reduce the inefficiency
426  */
427  const reco::Track* el_track = getElectronTrack(gsfElectron, minFracSharedHits);
428  LorentzVector el_tk_p4(el_track->px(), el_track->py(), el_track->pz(), el_track->p());
429 
430  int tk_i = 0;
431  double mindcot = 9999.;
432  //make a null Track Ref
433  TrackRef candCtfTrackRef = TrackRef();
434 
435  for (TrackCollection::const_iterator tk = ctftracks->begin(); tk != ctftracks->end(); tk++, tk_i++) {
436  //if the general Track is the same one as made by the electron, skip it
437  if (tk_i == ctfidx)
438  continue;
439 
440  LorentzVector tk_p4 = LorentzVector(tk->px(), tk->py(), tk->pz(), tk->p());
441 
442  //look only in a cone of 0.5
443  double dR = deltaR(el_tk_p4, tk_p4);
444  if (dR > 0.5)
445  continue;
446 
447  //require opp. sign -> Should we use the majority logic??
448  if (tk->charge() + el_track->charge() != 0)
449  continue;
450 
451  double dcot = fabs(1. / tan(tk_p4.theta()) - 1. / tan(el_tk_p4.theta()));
452  if (dcot < mindcot) {
453  mindcot = dcot;
454  candCtfTrackRef = reco::TrackRef(track_h, tk_i);
455  }
456  } //track loop
457 
458  if (!candCtfTrackRef.isNonnull())
459  return ConversionInfo{-9999.,
460  -9999.,
461  -9999.,
462  math::XYZPoint(-9999., -9999., -9999),
463  reco::TrackRef(),
465  -9999,
466  -9999};
467 
468  //now calculate the conversion related information
469  double elCurvature = -0.3 * bFieldAtOrigin * (el_track->charge() / el_tk_p4.pt()) / 100.;
470  double rEl = fabs(1. / elCurvature);
471  double xEl = -1 * (1. / elCurvature - el_track->d0()) * sin(el_tk_p4.phi());
472  double yEl = (1. / elCurvature - el_track->d0()) * cos(el_tk_p4.phi());
473 
474  LorentzVector cand_p4 =
475  LorentzVector(candCtfTrackRef->px(), candCtfTrackRef->py(), candCtfTrackRef->pz(), candCtfTrackRef->p());
476  double candCurvature = -0.3 * bFieldAtOrigin * (candCtfTrackRef->charge() / cand_p4.pt()) / 100.;
477  double rCand = fabs(1. / candCurvature);
478  double xCand = -1 * (1. / candCurvature - candCtfTrackRef->d0()) * sin(cand_p4.phi());
479  double yCand = (1. / candCurvature - candCtfTrackRef->d0()) * cos(cand_p4.phi());
480 
481  double d = sqrt(pow(xEl - xCand, 2) + pow(yEl - yCand, 2));
482  double dist = d - (rEl + rCand);
483  double dcot = 1. / tan(el_tk_p4.theta()) - 1. / tan(cand_p4.theta());
484 
485  //get the point of conversion
486  double xa1 = xEl + (xCand - xEl) * rEl / d;
487  double xa2 = xCand + (xEl - xCand) * rCand / d;
488  double ya1 = yEl + (yCand - yEl) * rEl / d;
489  double ya2 = yCand + (yEl - yCand) * rCand / d;
490 
491  double x = .5 * (xa1 + xa2);
492  double y = .5 * (ya1 + ya2);
493  double rconv = sqrt(pow(x, 2) + pow(y, 2));
494  double z =
495  el_track->dz() + rEl * el_track->pz() * TMath::ACos(1 - pow(rconv, 2) / (2. * pow(rEl, 2))) / el_track->pt();
496 
497  math::XYZPoint convPoint(x, y, z);
498 
499  //now assign a sign to the radius of conversion
500  float tempsign = el_track->px() * x + el_track->py() * y;
501  tempsign = tempsign / fabs(tempsign);
502  rconv = tempsign * rconv;
503 
504  int deltaMissingHits = -9999;
505 
506  deltaMissingHits = candCtfTrackRef->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) -
508 
509  return ConversionInfo{dist, dcot, rconv, convPoint, candCtfTrackRef, GsfTrackRef(), deltaMissingHits, flag};
510  }

References reco::TrackBase::charge(), reco::GsfElectron::closestCtfTrackRef(), funct::cos(), ztail::d, reco::TrackBase::d0(), PbPb_ZMuSkimMuonDPG_cff::deltaR, HGC3DClusterGenMatchSelector_cfi::dR, reco::TrackBase::dz(), RemoveAddSevLevel::flag, getElectronTrack(), reco::TrackBase::hitPattern(), edm::Ref< C, T, F >::isNonnull(), edm::Ref< C, T, F >::key(), reco::HitPattern::MISSING_INNER_HITS, reco::HitPattern::numberOfLostHits(), reco::TrackBase::p(), funct::pow(), edm::Handle< T >::product(), reco::TrackBase::pt(), reco::TrackBase::px(), reco::TrackBase::py(), reco::TrackBase::pz(), reco::GsfElectron::shFracInnerHits(), funct::sin(), mathSSE::sqrt(), and funct::tan().

◆ getConversionInfo() [3/5]

ConversionInfo egammaTools::getConversionInfo ( const reco::GsfElectronCore gsfElectron,
const edm::Handle< reco::TrackCollection > &  ctftracks_h,
const edm::Handle< reco::GsfTrackCollection > &  gsftracks_h,
const double  bFieldAtOrigin,
const double  minFracSharedHits = 0.45 
)

Definition at line 35 of file ConversionFinder.cc.

39  {
40  std::vector<ConversionInfo> temp =
41  getConversionInfos(gsfElectron, ctftracks_h, gsftracks_h, bFieldAtOrigin, minFracSharedHits);
43  }

References findBestConversionMatch(), getConversionInfos(), and groupFilesInBlocks::temp.

Referenced by GsfElectronAlgo::createElectron(), ZeeCandidateFilter::filter(), getConversionInfos(), and ElectronConversionRejectionVars::produce().

◆ getConversionInfo() [4/5]

ConversionInfo egammaTools::getConversionInfo ( const reco::Track el_track,
const reco::Track candPartnerTk,
const double  bFieldAtOrigin 
)

Definition at line 216 of file ConversionFinder.cc.

218  {
219  using namespace reco;
220 
221  //now calculate the conversion related information
222  LorentzVector el_tk_p4(el_track->px(), el_track->py(), el_track->pz(), el_track->p());
223  double elCurvature = -0.3 * bFieldAtOrigin * (el_track->charge() / el_tk_p4.pt()) / 100.;
224  double rEl = fabs(1. / elCurvature);
225  double xEl = -1 * (1. / elCurvature - el_track->d0()) * sin(el_tk_p4.phi());
226  double yEl = (1. / elCurvature - el_track->d0()) * cos(el_tk_p4.phi());
227 
228  LorentzVector cand_p4 =
229  LorentzVector(candPartnerTk->px(), candPartnerTk->py(), candPartnerTk->pz(), candPartnerTk->p());
230  double candCurvature = -0.3 * bFieldAtOrigin * (candPartnerTk->charge() / cand_p4.pt()) / 100.;
231  double rCand = fabs(1. / candCurvature);
232  double xCand = -1 * (1. / candCurvature - candPartnerTk->d0()) * sin(cand_p4.phi());
233  double yCand = (1. / candCurvature - candPartnerTk->d0()) * cos(cand_p4.phi());
234 
235  double d = sqrt(pow(xEl - xCand, 2) + pow(yEl - yCand, 2));
236  double dist = d - (rEl + rCand);
237  double dcot = 1. / tan(el_tk_p4.theta()) - 1. / tan(cand_p4.theta());
238 
239  //get the point of conversion
240  double xa1 = xEl + (xCand - xEl) * rEl / d;
241  double xa2 = xCand + (xEl - xCand) * rCand / d;
242  double ya1 = yEl + (yCand - yEl) * rEl / d;
243  double ya2 = yCand + (yEl - yCand) * rCand / d;
244 
245  double x = .5 * (xa1 + xa2);
246  double y = .5 * (ya1 + ya2);
247  double rconv = sqrt(pow(x, 2) + pow(y, 2));
248  double z =
249  el_track->dz() + rEl * el_track->pz() * TMath::ACos(1 - pow(rconv, 2) / (2. * pow(rEl, 2))) / el_track->pt();
250 
251  math::XYZPoint convPoint(x, y, z);
252 
253  //now assign a sign to the radius of conversion
254  float tempsign = el_track->px() * x + el_track->py() * y;
255  tempsign = tempsign / fabs(tempsign);
256  rconv = tempsign * rconv;
257 
258  //return an instance of ConversionInfo, but with a NULL track refs
259  return ConversionInfo{dist, dcot, rconv, convPoint, TrackRef(), GsfTrackRef(), -9999, -9999};
260  }

References reco::TrackBase::charge(), funct::cos(), ztail::d, reco::TrackBase::d0(), reco::TrackBase::dz(), reco::TrackBase::p(), funct::pow(), reco::TrackBase::pt(), reco::TrackBase::px(), reco::TrackBase::py(), reco::TrackBase::pz(), funct::sin(), mathSSE::sqrt(), and funct::tan().

◆ getConversionInfo() [5/5]

std::pair<double, double> egammaTools::getConversionInfo ( LorentzVector  trk1_p4,
int  trk1_q,
float  trk1_d0,
LorentzVector  trk2_p4,
int  trk2_q,
float  trk2_d0,
float  bFieldAtOrigin 
)

Definition at line 378 of file ConversionFinder.cc.

384  {
385  double tk1Curvature = -0.3 * bFieldAtOrigin * (trk1_q / trk1_p4.pt()) / 100.;
386  double rTk1 = fabs(1. / tk1Curvature);
387  double xTk1 = -1. * (1. / tk1Curvature - trk1_d0) * sin(trk1_p4.phi());
388  double yTk1 = (1. / tk1Curvature - trk1_d0) * cos(trk1_p4.phi());
389 
390  double tk2Curvature = -0.3 * bFieldAtOrigin * (trk2_q / trk2_p4.pt()) / 100.;
391  double rTk2 = fabs(1. / tk2Curvature);
392  double xTk2 = -1. * (1. / tk2Curvature - trk2_d0) * sin(trk2_p4.phi());
393  double yTk2 = (1. / tk2Curvature - trk2_d0) * cos(trk2_p4.phi());
394 
395  double dist = sqrt(pow(xTk1 - xTk2, 2) + pow(yTk1 - yTk2, 2));
396  dist = dist - (rTk1 + rTk2);
397 
398  double dcot = 1. / tan(trk1_p4.theta()) - 1. / tan(trk2_p4.theta());
399 
400  return std::make_pair(dist, dcot);
401  }

References funct::cos(), funct::pow(), funct::sin(), mathSSE::sqrt(), and funct::tan().

◆ getConversionInfos()

std::vector< ConversionInfo > egammaTools::getConversionInfos ( const reco::GsfElectronCore gsfElectron,
const edm::Handle< reco::TrackCollection > &  ctftracks_h,
const edm::Handle< reco::GsfTrackCollection > &  gsftracks_h,
const double  bFieldAtOrigin,
const double  minFracSharedHits = 0.45 
)

Definition at line 46 of file ConversionFinder.cc.

50  {
51  using namespace reco;
52  using namespace std;
53  using namespace edm;
54 
55  //get the track collections
56  const TrackCollection* ctftracks = ctftracks_h.product();
57  const GsfTrackCollection* gsftracks = gsftracks_h.product();
58 
59  //get the references to the gsf and ctf tracks that are made
60  //by the electron
61  const reco::TrackRef el_ctftrack = gsfElectron.ctfTrack();
62  const reco::GsfTrackRef& el_gsftrack = gsfElectron.gsfTrack();
63 
64  //protect against the wrong collection being passed to the function
65  if (el_ctftrack.isNonnull() && el_ctftrack.id() != ctftracks_h.id())
66  throw cms::Exception("ConversionFinderError")
67  << "ProductID of ctf track collection does not match ProductID of electron's CTF track! \n";
68  if (el_gsftrack.isNonnull() && el_gsftrack.id() != gsftracks_h.id())
69  throw cms::Exception("ConversionFinderError")
70  << "ProductID of gsf track collection does not match ProductID of electron's GSF track! \n";
71 
72  //make p4s for the electron's tracks for use later
73  LorentzVector el_ctftrack_p4;
74  if (el_ctftrack.isNonnull() && gsfElectron.ctfGsfOverlap() > minFracSharedHits)
75  el_ctftrack_p4 = LorentzVector(el_ctftrack->px(), el_ctftrack->py(), el_ctftrack->pz(), el_ctftrack->p());
76  LorentzVector el_gsftrack_p4(el_gsftrack->px(), el_gsftrack->py(), el_gsftrack->pz(), el_gsftrack->p());
77 
78  //the electron's CTF track must share at least 45% of the inner hits
79  //with the electron's GSF track
80  int ctfidx = -999.;
81  int gsfidx = -999.;
82  if (el_ctftrack.isNonnull() && gsfElectron.ctfGsfOverlap() > minFracSharedHits)
83  ctfidx = static_cast<int>(el_ctftrack.key());
84 
85  gsfidx = static_cast<int>(el_gsftrack.key());
86 
87  //these vectors are for those candidate partner tracks that pass our cuts
88  vector<ConversionInfo> v_candidatePartners;
89  //track indices required to make references
90  int ctftk_i = 0;
91  int gsftk_i = 0;
92 
93  //loop over the CTF tracks and try to find the partner track
94  for (TrackCollection::const_iterator ctftk = ctftracks->begin(); ctftk != ctftracks->end(); ctftk++, ctftk_i++) {
95  if (ctftk_i == ctfidx)
96  continue;
97 
98  //candidate track's p4
99  LorentzVector ctftk_p4 = LorentzVector(ctftk->px(), ctftk->py(), ctftk->pz(), ctftk->p());
100 
101  //apply quality cuts to remove bad tracks
102  if (ctftk->ptError() / ctftk->pt() > 0.05)
103  continue;
104  if (ctftk->numberOfValidHits() < 5)
105  continue;
106 
107  if (el_ctftrack.isNonnull() && gsfElectron.ctfGsfOverlap() > minFracSharedHits &&
108  fabs(ctftk_p4.Pt() - el_ctftrack->pt()) / el_ctftrack->pt() < 0.2)
109  continue;
110 
111  //use the electron's CTF track, if not null, to search for the partner track
112  //look only in a cone of 0.5 to save time, and require that the track is opp. sign
113  if (el_ctftrack.isNonnull() && gsfElectron.ctfGsfOverlap() > minFracSharedHits &&
114  deltaR(el_ctftrack_p4, ctftk_p4) < 0.5 && (el_ctftrack->charge() + ctftk->charge() == 0)) {
115  ConversionInfo convInfo = getConversionInfo((const reco::Track*)(el_ctftrack.get()), &(*ctftk), bFieldAtOrigin);
116 
117  //need to add the track reference information for completeness
118  //because the overloaded fnc above does not make a trackRef
119  int deltaMissingHits = ctftk->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) -
120  el_ctftrack->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
121 
122  v_candidatePartners.push_back({convInfo.dist,
123  convInfo.dcot,
124  convInfo.radiusOfConversion,
125  convInfo.pointOfConversion,
126  TrackRef(ctftracks_h, ctftk_i),
127  GsfTrackRef(),
128  deltaMissingHits,
129  0});
130 
131  } //using the electron's CTF track
132 
133  //now we check using the electron's gsf track
134  if (deltaR(el_gsftrack_p4, ctftk_p4) < 0.5 && (el_gsftrack->charge() + ctftk->charge() == 0) &&
135  el_gsftrack->ptError() / el_gsftrack->pt() < 0.25) {
136  int deltaMissingHits = ctftk->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) -
137  el_gsftrack->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
138 
139  ConversionInfo convInfo = getConversionInfo((const reco::Track*)(el_gsftrack.get()), &(*ctftk), bFieldAtOrigin);
140 
141  v_candidatePartners.push_back({convInfo.dist,
142  convInfo.dcot,
143  convInfo.radiusOfConversion,
144  convInfo.pointOfConversion,
145  TrackRef(ctftracks_h, ctftk_i),
146  GsfTrackRef(),
147  deltaMissingHits,
148  1});
149  } //using the electron's GSF track
150 
151  } //loop over the CTF track collection
152 
153  //------------------------------------------------------ Loop over GSF collection ----------------------------------//
154  for (GsfTrackCollection::const_iterator gsftk = gsftracks->begin(); gsftk != gsftracks->end(); gsftk++, gsftk_i++) {
155  //reject the electron's own gsfTrack
156  if (gsfidx == gsftk_i)
157  continue;
158 
159  LorentzVector gsftk_p4 = LorentzVector(gsftk->px(), gsftk->py(), gsftk->pz(), gsftk->p());
160 
161  //apply quality cuts to remove bad tracks
162  if (gsftk->ptError() / gsftk->pt() > 0.5)
163  continue;
164  if (gsftk->numberOfValidHits() < 5)
165  continue;
166 
167  if (fabs(gsftk->pt() - el_gsftrack->pt()) / el_gsftrack->pt() < 0.25)
168  continue;
169 
170  //try using the electron's CTF track first if it exists
171  //look only in a cone of 0.5 around the electron's track
172  //require opposite sign
173  if (el_ctftrack.isNonnull() && gsfElectron.ctfGsfOverlap() > minFracSharedHits &&
174  deltaR(el_ctftrack_p4, gsftk_p4) < 0.5 && (el_ctftrack->charge() + gsftk->charge() == 0)) {
175  int deltaMissingHits = gsftk->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) -
176  el_ctftrack->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
177 
178  ConversionInfo convInfo =
179  getConversionInfo((const reco::Track*)(el_ctftrack.get()), (const reco::Track*)(&(*gsftk)), bFieldAtOrigin);
180  //fill the Ref info
181  v_candidatePartners.push_back({convInfo.dist,
182  convInfo.dcot,
183  convInfo.radiusOfConversion,
184  convInfo.pointOfConversion,
185  TrackRef(),
186  GsfTrackRef(gsftracks_h, gsftk_i),
187  deltaMissingHits,
188  2});
189  }
190 
191  //use the electron's gsf track
192  if (deltaR(el_gsftrack_p4, gsftk_p4) < 0.5 && (el_gsftrack->charge() + gsftk->charge() == 0) &&
193  (el_gsftrack->ptError() / el_gsftrack_p4.pt() < 0.5)) {
194  ConversionInfo convInfo =
195  getConversionInfo((const reco::Track*)(el_gsftrack.get()), (const reco::Track*)(&(*gsftk)), bFieldAtOrigin);
196  //fill the Ref info
197 
198  int deltaMissingHits = gsftk->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) -
199  el_gsftrack->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
200 
201  v_candidatePartners.push_back({convInfo.dist,
202  convInfo.dcot,
203  convInfo.radiusOfConversion,
204  convInfo.pointOfConversion,
205  TrackRef(),
206  GsfTrackRef(gsftracks_h, gsftk_i),
207  deltaMissingHits,
208  3});
209  }
210  } //loop over the gsf track collection
211 
212  return v_candidatePartners;
213  }

References reco::GsfElectronCore::ctfGsfOverlap(), reco::GsfElectronCore::ctfTrack(), ConversionInfo::dcot, PbPb_ZMuSkimMuonDPG_cff::deltaR, ConversionInfo::dist, edm::Ref< C, T, F >::get(), getConversionInfo(), reco::GsfElectronCore::gsfTrack(), edm::HandleBase::id(), edm::Ref< C, T, F >::id(), edm::Ref< C, T, F >::isNonnull(), edm::Ref< C, T, F >::key(), reco::HitPattern::MISSING_INNER_HITS, ConversionInfo::pointOfConversion, edm::Handle< T >::product(), and ConversionInfo::radiusOfConversion.

Referenced by getConversionInfo().

◆ getElectronTrack() [1/2]

const reco::Track * egammaTools::getElectronTrack ( const reco::GsfElectron electron,
const float  minFracSharedHits = 0.45 
)

Definition at line 263 of file ConversionFinder.cc.

263  {
264  if (electron.closestCtfTrackRef().isNonnull() && electron.shFracInnerHits() > minFracSharedHits)
265  return (const reco::Track*)electron.closestCtfTrackRef().get();
266 
267  return (const reco::Track*)(electron.gsfTrack().get());
268  }

References metsig::electron.

Referenced by getConversionInfo().

◆ getElectronTrack() [2/2]

const reco::Track* egammaTools::getElectronTrack ( const reco::GsfElectronCore ,
const float  minFracSharedHits = 0.45 
)

◆ isFromConversion()

bool egammaTools::isFromConversion ( const ConversionInfo convInfo,
double  maxAbsDist = 0.02,
double  maxAbsDcot = 0.02 
)

Definition at line 20 of file ConversionFinder.cc.

20  {
21  return (std::abs(convInfo.dist) < maxAbsDist) && (std::abs(convInfo.dcot) < maxAbsDcot);
22  }

References funct::abs(), ConversionInfo::dcot, and ConversionInfo::dist.

◆ localEcalClusterCoordsEB()

void egammaTools::localEcalClusterCoordsEB ( const reco::CaloCluster bclus,
const CaloGeometry geom,
float &  etacry,
float &  phicry,
int &  ieta,
int &  iphi,
float &  thetatilt,
float &  phitilt 
)

Definition at line 14 of file EcalClusterLocal.cc.

21  {
22  assert(bclus.hitsAndFractions().at(0).first.subdetId() == EcalBarrel);
23 
25  caloGeometry.getSubdetectorGeometry(DetId::Ecal, EcalBarrel); //EcalBarrel = 1
26 
27  const math::XYZPoint &position_ = bclus.position();
28  double Theta = -position_.theta() + 0.5 * TMath::Pi();
29  double Eta = position_.eta();
30  double Phi = TVector2::Phi_mpi_pi(position_.phi());
31 
32  //Calculate expected depth of the maximum shower from energy (like in PositionCalc::Calculate_Location()):
33  // The parameters X0 and T0 are hardcoded here because these values were used to calculate the corrections:
34  const float X0 = 0.89;
35  const float T0 = 7.4;
36  double depth = X0 * (T0 + log(bclus.energy()));
37 
38  //find max energy crystal
39  std::vector<std::pair<DetId, float> > crystals_vector = bclus.hitsAndFractions();
40  float drmin = 999.;
41  EBDetId crystalseed;
42  //printf("starting loop over crystals, etot = %5f:\n",bclus.energy());
43  for (unsigned int icry = 0; icry != crystals_vector.size(); ++icry) {
44  EBDetId crystal(crystals_vector[icry].first);
45 
46  auto cell = geom->getGeometry(crystal);
47  const TruncatedPyramid *cpyr = dynamic_cast<const TruncatedPyramid *>(cell.get());
48  GlobalPoint center_pos = cpyr->getPosition(depth);
49  double EtaCentr = center_pos.eta();
50  double PhiCentr = TVector2::Phi_mpi_pi(center_pos.phi());
51 
52  float dr = reco::deltaR(Eta, Phi, EtaCentr, PhiCentr);
53  if (dr < drmin) {
54  drmin = dr;
55  crystalseed = crystal;
56  }
57  }
58 
59  ieta = crystalseed.ieta();
60  iphi = crystalseed.iphi();
61 
62  // Get center cell position from shower depth
63  auto cell = geom->getGeometry(crystalseed);
64  const TruncatedPyramid *cpyr = dynamic_cast<const TruncatedPyramid *>(cell.get());
65 
66  thetatilt = cpyr->getThetaAxis();
67  phitilt = cpyr->getPhiAxis();
68 
69  GlobalPoint center_pos = cpyr->getPosition(depth);
70 
71  double PhiCentr = TVector2::Phi_mpi_pi(center_pos.phi());
72  double PhiWidth = (TMath::Pi() / 180.);
73  phicry = (TVector2::Phi_mpi_pi(Phi - PhiCentr)) / PhiWidth;
74  //Some flips to take into account ECAL barrel symmetries:
75  if (ieta < 0)
76  phicry *= -1.;
77 
78  double ThetaCentr = -center_pos.theta() + 0.5 * TMath::Pi();
79  double ThetaWidth = (TMath::Pi() / 180.) * TMath::Cos(ThetaCentr);
80  etacry = (Theta - ThetaCentr) / ThetaWidth;
81  //flip to take into account ECAL barrel symmetries:
82  if (ieta < 0)
83  etacry *= -1.;
84 
85  return;
86  }

References cms::cuda::assert(), reco::deltaR(), LEDCalibrationChannels::depth, flavorHistoryFilter_cfi::dr, DetId::Ecal, EcalBarrel, reco::CaloCluster::energy(), PV3DBase< T, PVType, FrameType >::eta(), dqmdumpme::first, relativeConstraints::geom, TruncatedPyramid::getPhiAxis(), TruncatedPyramid::getPosition(), CaloGeometry::getSubdetectorGeometry(), TruncatedPyramid::getThetaAxis(), reco::CaloCluster::hitsAndFractions(), EBDetId::ieta(), LEDCalibrationChannels::ieta, EBDetId::iphi(), LEDCalibrationChannels::iphi, dqm-mbProfile::log, PV3DBase< T, PVType, FrameType >::phi(), VtxSmearedParameters_cfi::Phi, Pi, reco::CaloCluster::position(), PV3DBase< T, PVType, FrameType >::theta(), and MonitorAlCaEcalPi0_cfi::X0.

Referenced by EGEnergyCorrector::CorrectedEnergyWithError(), EGEnergyCorrector::CorrectedEnergyWithErrorV3(), EcalRegressionData::fill(), EGRegressionModifierV3::getSeedCrysCoord(), SuperClusterHelper::localCoordinates(), EGRegressionModifierV2::modifyObject(), and EGRegressionModifierV1::modifyObject().

◆ localEcalClusterCoordsEE()

void egammaTools::localEcalClusterCoordsEE ( const reco::CaloCluster bclus,
const CaloGeometry geom,
float &  xcry,
float &  ycry,
int &  ix,
int &  iy,
float &  thetatilt,
float &  phitilt 
)

Definition at line 88 of file EcalClusterLocal.cc.

95  {
96  assert(bclus.hitsAndFractions().at(0).first.subdetId() == EcalEndcap);
97 
99  caloGeometry.getSubdetectorGeometry(DetId::Ecal, EcalEndcap); //EcalBarrel = 1
100 
101  const math::XYZPoint &position_ = bclus.position();
102  //double Theta = -position_.theta()+0.5*TMath::Pi();
103  double Eta = position_.eta();
104  double Phi = TVector2::Phi_mpi_pi(position_.phi());
105  double X = position_.x();
106  double Y = position_.y();
107 
108  //Calculate expected depth of the maximum shower from energy (like in PositionCalc::Calculate_Location()):
109  // The parameters X0 and T0 are hardcoded here because these values were used to calculate the corrections:
110  const float X0 = 0.89;
111  float T0 = 1.2;
112  //different T0 value if outside of preshower coverage
113  if (TMath::Abs(bclus.eta()) < 1.653)
114  T0 = 3.1;
115 
116  double depth = X0 * (T0 + log(bclus.energy()));
117 
118  //find max energy crystal
119  std::vector<std::pair<DetId, float> > crystals_vector = bclus.hitsAndFractions();
120  float drmin = 999.;
121  EEDetId crystalseed;
122  //printf("starting loop over crystals, etot = %5f:\n",bclus.energy());
123  for (unsigned int icry = 0; icry != crystals_vector.size(); ++icry) {
124  EEDetId crystal(crystals_vector[icry].first);
125 
126  auto cell = geom->getGeometry(crystal);
127  const TruncatedPyramid *cpyr = dynamic_cast<const TruncatedPyramid *>(cell.get());
128  GlobalPoint center_pos = cpyr->getPosition(depth);
129  double EtaCentr = center_pos.eta();
130  double PhiCentr = TVector2::Phi_mpi_pi(center_pos.phi());
131 
132  float dr = reco::deltaR(Eta, Phi, EtaCentr, PhiCentr);
133  if (dr < drmin) {
134  drmin = dr;
135  crystalseed = crystal;
136  }
137  }
138 
139  ix = crystalseed.ix();
140  iy = crystalseed.iy();
141 
142  // Get center cell position from shower depth
143  auto cell = geom->getGeometry(crystalseed);
144  const TruncatedPyramid *cpyr = dynamic_cast<const TruncatedPyramid *>(cell.get());
145 
146  thetatilt = cpyr->getThetaAxis();
147  phitilt = cpyr->getPhiAxis();
148 
149  GlobalPoint center_pos = cpyr->getPosition(depth);
150 
151  double XCentr = center_pos.x();
152  double XWidth = 2.59;
153  xcry = (X - XCentr) / XWidth;
154 
155  double YCentr = center_pos.y();
156  double YWidth = 2.59;
157  ycry = (Y - YCentr) / YWidth;
158 
159  return;
160  }

References Abs(), cms::cuda::assert(), reco::deltaR(), LEDCalibrationChannels::depth, flavorHistoryFilter_cfi::dr, DetId::Ecal, EcalEndcap, reco::CaloCluster::energy(), PV3DBase< T, PVType, FrameType >::eta(), reco::CaloCluster::eta(), dqmdumpme::first, relativeConstraints::geom, TruncatedPyramid::getPhiAxis(), TruncatedPyramid::getPosition(), CaloGeometry::getSubdetectorGeometry(), TruncatedPyramid::getThetaAxis(), reco::CaloCluster::hitsAndFractions(), EEDetId::ix(), EEDetId::iy(), dqm-mbProfile::log, VtxSmearedParameters_cfi::Phi, reco::CaloCluster::position(), X, PV3DBase< T, PVType, FrameType >::x(), MonitorAlCaEcalPi0_cfi::X0, DOFs::Y, and PV3DBase< T, PVType, FrameType >::y().

Referenced by EcalRegressionData::fill(), EGRegressionModifierV3::getSeedCrysCoord(), SuperClusterHelper::localCoordinates(), EGRegressionModifierV2::modifyObject(), and EGRegressionModifierV1::modifyObject().

ConversionInfo
Definition: ConversionInfo.h:8
reco::GsfTrackRef
edm::Ref< GsfTrackCollection > GsfTrackRef
persistent reference to a GsfTrack
Definition: GsfTrackFwd.h:13
DDAxes::y
MagneticField::inTesla
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
EBDetId::ieta
int ieta() const
get the crystal ieta
Definition: EBDetId.h:49
mps_fire.i
i
Definition: mps_fire.py:355
edm::Handle::product
T const * product() const
Definition: Handle.h:70
egammaTools::arbitrateConversionPartnersbyR
ConversionInfo arbitrateConversionPartnersbyR(const std::vector< ConversionInfo > &v_convCandidates)
Definition: ConversionFinder.cc:275
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
reco::TrackBase::p
double p() const
momentum vector magnitude
Definition: TrackBase.h:605
X
#define X(str)
Definition: MuonsGrabber.cc:38
ConversionInfo::radiusOfConversion
const double radiusOfConversion
Definition: ConversionInfo.h:11
EBDetId
Definition: EBDetId.h:17
edm
HLT enums.
Definition: AlignableModifier.h:19
PV3DBase::theta
Geom::Theta< T > theta() const
Definition: PV3DBase.h:72
egammaTools::getConversionInfos
std::vector< ConversionInfo > getConversionInfos(const reco::GsfElectronCore &, const edm::Handle< reco::TrackCollection > &ctftracks_h, const edm::Handle< reco::GsfTrackCollection > &gsftracks_h, const double bFieldAtOrigin, const double minFracSharedHits=0.45)
Definition: ConversionFinder.cc:46
egammaTools::getConversionInfo
std::pair< double, double > getConversionInfo(LorentzVector trk1_p4, int trk1_q, float trk1_d0, LorentzVector trk2_p4, int trk2_q, float trk2_d0, float bFieldAtOrigin)
Definition: ConversionFinder.cc:378
edm::Ref::get
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:232
cms::cuda::assert
assert(be >=bs)
reco::TrackBase::px
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:611
TruncatedPyramid
A base class to handle the particular shape of Ecal Xtals. Taken from ORCA Calorimetry Code.
Definition: TruncatedPyramid.h:19
DDAxes::x
reco::GsfElectronCore::ctfTrack
TrackRef ctfTrack() const
Definition: GsfElectronCore.h:52
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
reco::HitPattern::numberOfLostHits
int numberOfLostHits(HitCategory category) const
Definition: HitPattern.h:860
EEDetId::ix
int ix() const
Definition: EEDetId.h:77
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
dqmdumpme.first
first
Definition: dqmdumpme.py:55
egammaTools::LorentzVector
math::XYZTLorentzVector LorentzVector
Definition: ConversionFinder.cc:10
EcalBarrel
Definition: EcalSubdetector.h:10
edm::Ref< TrackCollection >
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
reco::GsfElectronCore::ctfGsfOverlap
float ctfGsfOverlap() const
Definition: GsfElectronCore.h:55
reco::GsfElectron::core
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
LEDCalibrationChannels.iphi
iphi
Definition: LEDCalibrationChannels.py:64
reco::TrackBase::pt
double pt() const
track transverse momentum
Definition: TrackBase.h:608
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Abs
T Abs(T a)
Definition: MathUtil.h:49
reco::TrackBase::py
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:614
egammaTools::findBestConversionMatch
ConversionInfo findBestConversionMatch(const std::vector< ConversionInfo > &v_convCandidates)
Definition: ConversionFinder.cc:297
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
DDAxes::z
metsig::electron
Definition: SignAlgoResolutions.h:48
reco::Track
Definition: Track.h:27
Geom::pi
constexpr double pi()
Definition: Pi.h:31
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
Geom::twoPi
constexpr double twoPi()
Definition: Pi.h:32
theta
Geom::Theta< T > theta() const
Definition: Basic3DVectorLD.h:150
reco::TrackBase::charge
int charge() const
track electric charge
Definition: TrackBase.h:581
reco::TrackBase::dz
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:602
VtxSmearedParameters_cfi.Phi
Phi
Definition: VtxSmearedParameters_cfi.py:112
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Point3DBase< float, GlobalTag >
LEDCalibrationChannels.depth
depth
Definition: LEDCalibrationChannels.py:65
EEDetId
Definition: EEDetId.h:14
reco::TrackRef
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
EcalEndcap
Definition: EcalSubdetector.h:10
edm::LogWarning
Definition: MessageLogger.h:141
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
LEDCalibrationChannels.ieta
ieta
Definition: LEDCalibrationChannels.py:63
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
ConversionInfo::pointOfConversion
const math::XYZPoint pointOfConversion
Definition: ConversionInfo.h:12
reco::CaloCluster::eta
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:181
PVValHelper::phi
Definition: PVValidationHelpers.h:68
reco::CaloCluster::hitsAndFractions
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:210
egammaTools::getElectronTrack
const reco::Track * getElectronTrack(const reco::GsfElectronCore &, const float minFracSharedHits=0.45)
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
PV3DBase::eta
T eta() const
Definition: PV3DBase.h:73
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
funct::tan
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
ConversionInfo::dist
const double dist
Definition: ConversionInfo.h:9
reco::TrackBase::d0
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
Definition: TrackBase.h:596
TruncatedPyramid::getThetaAxis
CCGFloat getThetaAxis() const
Definition: TruncatedPyramid.cc:49
reco::GsfElectron::closestCtfTrackRef
virtual TrackRef closestCtfTrackRef() const
Definition: GsfElectron.h:188
MonitorAlCaEcalPi0_cfi.X0
X0
Definition: MonitorAlCaEcalPi0_cfi.py:77
DetId::Ecal
Definition: DetId.h:27
EEDetId::iy
int iy() const
Definition: EEDetId.h:83
reco::CaloCluster::position
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:154
reco::TrackBase::hitPattern
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:489
edm::Ref::id
ProductID id() const
Accessor for product ID.
Definition: Ref.h:244
reco::GsfTrackCollection
std::vector< GsfTrack > GsfTrackCollection
collection of GsfTracks
Definition: GsfTrackFwd.h:9
std
Definition: JetResolutionObject.h:76
DOFs::Y
Definition: AlignPCLThresholdsWriter.cc:37
TruncatedPyramid::getPosition
GlobalPoint getPosition(CCGFloat depth) const override
Definition: TruncatedPyramid.cc:45
trklet::bend
double bend(double r, double rinv, double stripPitch)
Definition: Util.h:160
LorentzVector
math::XYZTLorentzVector LorentzVector
Definition: HLTMuonMatchAndPlot.h:49
flavorHistoryFilter_cfi.dr
dr
Definition: flavorHistoryFilter_cfi.py:37
reco::GsfElectronCore::gsfTrack
const GsfTrackRef & gsfTrack() const
Definition: GsfElectronCore.h:48
ETA
#define ETA
Definition: GenericBenchmark.cc:28
reco::HitPattern::MISSING_INNER_HITS
Definition: HitPattern.h:155
reco::deltaR
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:30
CaloSubdetectorGeometry
Definition: CaloSubdetectorGeometry.h:22
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
TruncatedPyramid::getPhiAxis
CCGFloat getPhiAxis() const
Definition: TruncatedPyramid.cc:51
Pi
const double Pi
Definition: CosmicMuonParameters.h:18
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
funct::pow
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
EBDetId::iphi
int iphi() const
get the crystal iphi
Definition: EBDetId.h:51
ztail.d
d
Definition: ztail.py:151
reco::TrackBase::pz
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:617
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
HGC3DClusterGenMatchSelector_cfi.dR
dR
Definition: HGC3DClusterGenMatchSelector_cfi.py:7
dttmaxenums::R
Definition: DTTMax.h:29
edm::HandleBase::id
ProductID id() const
Definition: HandleBase.cc:13
reco::CaloCluster::energy
double energy() const
cluster energy
Definition: CaloCluster.h:149
reco::TrackCollection
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
Z_Endcap
static constexpr float Z_Endcap
Definition: ECALPositionCalculator.cc:11
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
R_ECAL
static constexpr float R_ECAL
Definition: ECALPositionCalculator.cc:10
reco::GsfElectron::shFracInnerHits
float shFracInnerHits() const
Definition: GsfElectron.h:187
RemoveAddSevLevel.flag
flag
Definition: RemoveAddSevLevel.py:116
ConversionInfo::dcot
const double dcot
Definition: ConversionInfo.h:10
etaBarrelEndcap
static constexpr float etaBarrelEndcap
Definition: ECALPositionCalculator.cc:12