CMS 3D CMS Logo

TrackClassifier.cc
Go to the documentation of this file.
1 
2 #include <cmath>
3 #include <cstdlib>
4 #include <iostream>
5 
6 #include "HepPDT/ParticleID.hh"
7 
9 
10 #define update(a, b) \
11  do { \
12  (a) = (a) | (b); \
13  } while (0)
14 
16  : TrackCategories(),
17  hepMCLabel_(config.getUntrackedParameter<edm::InputTag>("hepMC")),
18  beamSpotLabel_(config.getUntrackedParameter<edm::InputTag>("beamSpot")),
19  tracer_(config, std::move(collector)),
20  quality_(config, collector) {
21  collector.consumes<edm::HepMCProduct>(hepMCLabel_);
22  collector.consumes<reco::BeamSpot>(beamSpotLabel_);
23 
24  // Set the history depth after hadronization
25  tracer_.depth(-2);
26 
27  // Set the maximum d0pull for the bad category
28  badPull_ = config.getUntrackedParameter<double>("badPull");
29 
30  // Set the minimum decay length for detecting long decays
31  longLivedDecayLength_ = config.getUntrackedParameter<double>("longLivedDecayLength");
32 
33  // Set the distance for clustering vertices
34  float vertexClusteringDistance = config.getUntrackedParameter<double>("vertexClusteringDistance");
36 
37  // Set the number of innermost layers to check for bad hits
38  numberOfInnerLayers_ = config.getUntrackedParameter<unsigned int>("numberOfInnerLayers");
39 
40  // Set the minimum number of simhits in the tracker
41  minTrackerSimHits_ = config.getUntrackedParameter<unsigned int>("minTrackerSimHits");
42 }
43 
45  // Get the new event information for the tracer
47 
48  // Get the new event information for the track quality analyser
50 
51  // Get hepmc of the event
52  event.getByLabel(hepMCLabel_, mcInformation_);
53 
54  // Magnetic field
56 
57  // Get the partivle data table
58  setup.getData(particleDataTable_);
59 
60  // get the beam spot
61  event.getByLabel(beamSpotLabel_, beamSpot_);
62 
63  // Transient track builder
64  setup.get<TransientTrackRecord>().get("TransientTrackBuilder", transientTrackBuilder_);
65 
66  // Create the list of primary vertices associated to the event
68 
69  // Retrieve tracker topology from geometry
71  setup.get<TrackerTopologyRcd>().get(tTopoHand);
72  tTopo_ = tTopoHand.product();
73 }
74 
76  // Initializing the category vector
77  reset();
78 
79  // Associate and evaluate the track history (check for fakes)
80  if (tracer_.evaluate(track)) {
81  // Classify all the tracks by their association and reconstruction
82  // information
84 
85  // Get all the information related to the simulation details
87 
88  // Analyse the track reconstruction quality
90 
91  // Get hadron flavor of the initial hadron
92  hadronFlavor();
93 
94  // Get all the information related to decay process
96 
97  // Get information about conversion and other interactions
99 
100  // Get geometrical information about the vertices
102 
103  // Check for unkown classification
104  unknownTrack();
105  } else
106  flags_[Fake] = true;
107 
108  return *this;
109 }
110 
112  // Initializing the category vector
113  reset();
114 
115  // Trace the history for the given TP
117 
118  // Collect the associated reco track
119  const reco::TrackBaseRef &recotrack = tracer_.recoTrack();
120 
121  // If there is a reco truck then evaluate the simulated history
122  if (recotrack.isNonnull()) {
123  flags_[Reconstructed] = true;
124  // Classify all the tracks by their association and reconstruction
125  // information
126  reconstructionInformation(recotrack);
127  // Analyse the track reconstruction quality
128  qualityInformation(recotrack);
129  } else
130  flags_[Reconstructed] = false;
131 
132  // Get all the information related to the simulation details
134 
135  // Get hadron flavor of the initial hadron
136  hadronFlavor();
137 
138  // Get all the information related to decay process
140 
141  // Get information about conversion and other interactions
143 
144  // Get geometrical information about the vertices
146 
147  // Check for unkown classification
148  unknownTrack();
149 
150  return *this;
151 }
152 
155 
156  // Compute tracking particle parameters at point of closest approach to the
157  // beamline
158 
159  const SimTrack *assocTrack = &(*tpr->g4Track_begin());
160 
161  FreeTrajectoryState ftsAtProduction(
162  GlobalPoint(tpr->vertex().x(), tpr->vertex().y(), tpr->vertex().z()),
163  GlobalVector(assocTrack->momentum().x(), assocTrack->momentum().y(), assocTrack->momentum().z()),
164  TrackCharge(track->charge()),
166 
167  try {
168  TSCPBuilderNoMaterial tscpBuilder;
169  TrajectoryStateClosestToPoint tsAtClosestApproach =
170  tscpBuilder(ftsAtProduction, GlobalPoint(beamSpot_->x0(), beamSpot_->y0(), beamSpot_->z0()));
171 
172  GlobalVector v =
173  tsAtClosestApproach.theState().position() - GlobalPoint(beamSpot_->x0(), beamSpot_->y0(), beamSpot_->z0());
174  GlobalVector p = tsAtClosestApproach.theState().momentum();
175 
176  // Simulated dxy
177  double dxySim = -v.x() * sin(p.phi()) + v.y() * cos(p.phi());
178 
179  // Simulated dz
180  double dzSim = v.z() - (v.x() * p.x() + v.y() * p.y()) * p.z() / p.perp2();
181 
182  // Calculate the dxy pull
183  double dxyPull =
185  track->dxyError();
186 
187  // Calculate the dx pull
188  double dzPull =
190  track->dzError();
191 
192  // Return true if d0Pull > badD0Pull sigmas
193  flags_[Bad] = (dxyPull > badPull_ || dzPull > badPull_);
194 
195  } catch (cms::Exception const &) {
196  flags_[Bad] = true;
197  }
198 }
199 
201  // Get the event id for the initial TP.
202  EncodedEventId eventId = tracer_.simParticle()->eventId();
203  // Check for signal events
204  flags_[SignalEvent] = !eventId.bunchCrossing() && !eventId.event();
205  // Check for muons
206  flags_[Muon] = (abs(tracer_.simParticle()->pdgId()) == 13);
207  // Check for the number of psimhit in tracker
208  flags_[TrackerSimHits] = tracer_.simParticle()->numberOfTrackerLayers() >= (int)minTrackerSimHits_;
209 }
210 
212  // run the hit-by-hit reconstruction quality analysis
214 
216 
217  // check the innermost layers for bad hits
218  for (unsigned int i = 0; i < maxLayers; i++) {
219  const TrackQuality::Layer &layer = quality_.layer(i);
220 
221  // check all hits in that layer
222  for (unsigned int j = 0; j < layer.hits.size(); j++) {
223  const TrackQuality::Layer::Hit &hit = layer.hits[j];
224 
225  // In those cases the bad hit was used by track reconstruction
227  flags_[BadInnerHits] = true;
228  else if (hit.state == TrackQuality::Layer::Shared)
229  flags_[SharedInnerHits] = true;
230  }
231  }
232 }
233 
235  // Get the initial hadron from the recoGenParticleTrail
236  const reco::GenParticle *particle = tracer_.recoGenParticle();
237 
238  // Check for the initial hadron
239  if (particle) {
240  HepPDT::ParticleID pid(particle->pdgId());
241  flags_[Bottom] = pid.hasBottom();
242  flags_[Charm] = pid.hasCharm();
243  flags_[Light] = !pid.hasCharm() && !pid.hasBottom();
244  }
245 }
246 
248  // pdgid of the "in" particle to the production vertex
249  int pdgid = 0;
250 
251  // Get the generated particles from track history (reco::GenParticle in the
252  // recoGenParticleTrail)
253  TrackHistory::RecoGenParticleTrail const &recoGenParticleTrail = tracer_.recoGenParticleTrail();
254 
255  // Loop over the generated particles (reco::GenParticle in the
256  // recoGenParticleTrail)
257  for (TrackHistory::RecoGenParticleTrail::const_iterator iparticle = recoGenParticleTrail.begin();
258  iparticle != recoGenParticleTrail.end();
259  ++iparticle) {
260  pdgid = std::abs((*iparticle)->pdgId());
261  // Get particle type
263 
264  // Check if the particle type is valid one
265  if (particleID.isValid()) {
266  // Get particle data
267  ParticleData const *particleData = particleDataTable_->particle(particleID);
268  // Check if the particle exist in the table
269  if (particleData) {
270  // Check if their life time is bigger than longLivedDecayLength_
271  if (particleData->lifetime() > longLivedDecayLength_)
272  update(flags_[LongLivedDecay], true);
273  // Check for B and C weak decays
274  update(flags_[BWeakDecay], particleID.hasBottom());
275  update(flags_[CWeakDecay], particleID.hasCharm());
276  // Check for B and C pure leptonic decay
277  std::set<int> daughterIds;
278  size_t ndau = (*iparticle)->numberOfDaughters();
279  for (size_t i = 0; i < ndau; ++i) {
280  daughterIds.insert((*iparticle)->daughter(i)->pdgId());
281  }
282  update(flags_[FromBWeakDecayMuon], particleID.hasBottom() && (daughterIds.find(13) != daughterIds.end()));
283  update(flags_[FromCWeakDecayMuon], particleID.hasCharm() && (daughterIds.find(13) != daughterIds.end()));
284  }
285  // Check Tau, Ks and Lambda decay
288  update(flags_[TauDecay], pdgid == 15);
289  update(flags_[KsDecay], pdgid == 310);
290  update(flags_[LambdaDecay], pdgid == 3122);
291  update(flags_[JpsiDecay], pdgid == 443);
292  update(flags_[XiDecay], pdgid == 3312);
293  update(flags_[SigmaPlusDecay], pdgid == 3222);
294  update(flags_[SigmaMinusDecay], pdgid == 3112);
295  }
296  }
297  // Decays in flight
301 }
302 
304  TrackHistory::SimParticleTrail const &simParticleTrail = tracer_.simParticleTrail();
305 
306  // Loop over the simulated particles
307  for (TrackHistory::SimParticleTrail::const_iterator iparticle = simParticleTrail.begin();
308  iparticle != simParticleTrail.end();
309  ++iparticle) {
310  // pdgid of the real source parent vertex
311  int pdgid = 0;
312 
313  // Get a reference to the TP's parent vertex
314  TrackingVertexRef const &parentVertex = (*iparticle)->parentVertex();
315 
316  // Look for the original source track
317  if (parentVertex.isNonnull()) {
318  // select the original source in case of combined vertices
319  bool flag = false;
321 
322  for (its = parentVertex->sourceTracks_begin(); its != parentVertex->sourceTracks_end(); ++its) {
323  for (itd = parentVertex->daughterTracks_begin(); itd != parentVertex->daughterTracks_end(); ++itd)
324  if (itd != its) {
325  flag = true;
326  break;
327  }
328  if (flag)
329  break;
330  }
331 
332  // Collect the pdgid of the original source track
333  if (its != parentVertex->sourceTracks_end())
334  pdgid = std::abs((*its)->pdgId());
335  else
336  pdgid = 0;
337  }
338 
339  unsigned int processG4 = 0;
340 
341  // Check existence of SimVerteces assigned
342  if (parentVertex->nG4Vertices() > 0) {
343  processG4 = (*(parentVertex->g4Vertices_begin())).processType();
344  }
345 
346  unsigned int process = g4toCMSProcMap_.processId(processG4);
347 
348  // Flagging all the different processes
350 
368 
369  // Get particle type
371 
372  // Check if the particle type is valid one
373  if (particleID.isValid()) {
374  // Get particle data
375  ParticleData const *particleData = particleDataTable_->particle(particleID);
376  // Special treatment for decays
377  if (process == CMS::Decay) {
378  // Check if the particle exist in the table
379  if (particleData) {
380  // Check if their life time is bigger than 1e-14
381  if (particleDataTable_->particle(particleID)->lifetime() > longLivedDecayLength_)
382  update(flags_[LongLivedDecay], true);
383 
384  // Check for B and C weak decays
385  update(flags_[BWeakDecay], particleID.hasBottom());
386  update(flags_[CWeakDecay], particleID.hasCharm());
387 
388  // Check for B or C pure leptonic decays
389  int daughtId = abs((*iparticle)->pdgId());
390  update(flags_[FromBWeakDecayMuon], particleID.hasBottom() && daughtId == 13);
391  update(flags_[FromCWeakDecayMuon], particleID.hasCharm() && daughtId == 13);
392  }
393  // Check decays
396  update(flags_[TauDecay], pdgid == 15);
397  update(flags_[KsDecay], pdgid == 310);
398  update(flags_[LambdaDecay], pdgid == 3122);
399  update(flags_[JpsiDecay], pdgid == 443);
400  update(flags_[XiDecay], pdgid == 3312);
401  update(flags_[OmegaDecay], pdgid == 3334);
402  update(flags_[SigmaPlusDecay], pdgid == 3222);
403  update(flags_[SigmaMinusDecay], pdgid == 3112);
404  }
405  }
406  }
407  // Decays in flight
411 }
412 
414  // Get the main primary vertex from the list
415  GeneratedPrimaryVertex const &genpv = genpvs_.back();
416 
417  // Get the generated history of the tracks
418  const TrackHistory::GenParticleTrail &genParticleTrail = tracer_.genParticleTrail();
419 
420  // Vertex counter
421  int counter = 0;
422 
423  // Unit transformation from mm to cm
424  double const mm = 0.1;
425 
426  double oldX = genpv.x;
427  double oldY = genpv.y;
428  double oldZ = genpv.z;
429 
430  // Loop over the generated particles
431  for (TrackHistory::GenParticleTrail::const_reverse_iterator iparticle = genParticleTrail.rbegin();
432  iparticle != genParticleTrail.rend();
433  ++iparticle) {
434  // Look for those with production vertex
435  HepMC::GenVertex *parent = (*iparticle)->production_vertex();
436  if (parent) {
437  HepMC::ThreeVector p = parent->point3d();
438 
439  double distance2 = pow(p.x() * mm - genpv.x, 2) + pow(p.y() * mm - genpv.y, 2) + pow(p.z() * mm - genpv.z, 2);
440  double difference2 = pow(p.x() * mm - oldX, 2) + pow(p.y() * mm - oldY, 2) + pow(p.z() * mm - oldZ, 2);
441 
442  // std::cout << "Distance2 : " << distance2 << " (" << p.x() * mm << ","
443  // << p.y() * mm << "," << p.z() * mm << ")" << std::endl; std::cout <<
444  // "Difference2 : " << difference2 << std::endl;
445 
446  if (difference2 > vertexClusteringSqDistance_) {
447  if (distance2 > vertexClusteringSqDistance_)
448  counter++;
449  oldX = p.x() * mm;
450  oldY = p.y() * mm;
451  oldZ = p.z() * mm;
452  }
453  }
454  }
455 
456  const TrackHistory::SimParticleTrail &simParticleTrail = tracer_.simParticleTrail();
457 
458  // Loop over the generated particles
459  for (TrackHistory::SimParticleTrail::const_reverse_iterator iparticle = simParticleTrail.rbegin();
460  iparticle != simParticleTrail.rend();
461  ++iparticle) {
462  // Look for those with production vertex
463  TrackingParticle::Point p = (*iparticle)->vertex();
464 
465  double distance2 = pow(p.x() - genpv.x, 2) + pow(p.y() - genpv.y, 2) + pow(p.z() - genpv.z, 2);
466  double difference2 = pow(p.x() - oldX, 2) + pow(p.y() - oldY, 2) + pow(p.z() - oldZ, 2);
467 
468  // std::cout << "Distance2 : " << distance2 << " (" << p.x() << "," << p.y()
469  // << "," << p.z() << ")" << std::endl; std::cout << "Difference2 : " <<
470  // difference2 << std::endl;
471 
472  if (difference2 > vertexClusteringSqDistance_) {
473  if (distance2 > vertexClusteringSqDistance_)
474  counter++;
475  oldX = p.x();
476  oldY = p.y();
477  oldZ = p.z();
478  }
479  }
480 
481  if (!counter)
482  flags_[PrimaryVertex] = true;
483  else if (counter == 1)
484  flags_[SecondaryVertex] = true;
485  else
486  flags_[TertiaryVertex] = true;
487 }
488 
489 bool TrackClassifier::isFinalstateParticle(const HepMC::GenParticle *p) { return !p->end_vertex() && p->status() == 1; }
490 
492  const ParticleData *part = particleDataTable_->particle(p->pdg_id());
493  if (part)
494  return part->charge() != 0;
495  else {
496  // the new/improved particle table doesn't know anti-particles
497  return particleDataTable_->particle(-p->pdg_id()) != nullptr;
498  }
499 }
500 
502  genpvs_.clear();
503 
504  const HepMC::GenEvent *event = mcInformation_->GetEvent();
505 
506  if (event) {
507  int idx = 0;
508 
509  // Loop over the different GenVertex
510  for (HepMC::GenEvent::vertex_const_iterator ivertex = event->vertices_begin(); ivertex != event->vertices_end();
511  ++ivertex) {
512  bool hasParentVertex = false;
513 
514  // Loop over the parents looking to see if they are coming from a
515  // production vertex
516  for (HepMC::GenVertex::particle_iterator iparent = (*ivertex)->particles_begin(HepMC::parents);
517  iparent != (*ivertex)->particles_end(HepMC::parents);
518  ++iparent)
519  if ((*iparent)->production_vertex()) {
520  hasParentVertex = true;
521  break;
522  }
523 
524  // Reject those vertices with parent vertices
525  if (hasParentVertex)
526  continue;
527 
528  // Get the position of the vertex
529  HepMC::FourVector pos = (*ivertex)->position();
530 
531  double const mm = 0.1;
532 
533  GeneratedPrimaryVertex pv(pos.x() * mm, pos.y() * mm, pos.z() * mm);
534 
535  std::vector<GeneratedPrimaryVertex>::iterator ientry = genpvs_.begin();
536 
537  // Search for a VERY close vertex in the list
538  for (; ientry != genpvs_.end(); ++ientry) {
539  double distance2 = pow(pv.x - ientry->x, 2) + pow(pv.y - ientry->y, 2) + pow(pv.z - ientry->z, 2);
540  if (distance2 < vertexClusteringSqDistance_)
541  break;
542  }
543 
544  // Check if there is not a VERY close vertex and added to the list
545  if (ientry == genpvs_.end())
546  ientry = genpvs_.insert(ientry, pv);
547 
548  // Add the vertex barcodes to the new or existent vertices
549  ientry->genVertex.push_back((*ivertex)->barcode());
550 
551  // Collect final state descendants
552  for (HepMC::GenVertex::particle_iterator idecendants = (*ivertex)->particles_begin(HepMC::descendants);
553  idecendants != (*ivertex)->particles_end(HepMC::descendants);
554  ++idecendants) {
555  if (isFinalstateParticle(*idecendants))
556  if (find(ientry->finalstateParticles.begin(), ientry->finalstateParticles.end(), (*idecendants)->barcode()) ==
557  ientry->finalstateParticles.end()) {
558  ientry->finalstateParticles.push_back((*idecendants)->barcode());
559  HepMC::FourVector m = (*idecendants)->momentum();
560 
561  ientry->ptot.setPx(ientry->ptot.px() + m.px());
562  ientry->ptot.setPy(ientry->ptot.py() + m.py());
563  ientry->ptot.setPz(ientry->ptot.pz() + m.pz());
564  ientry->ptot.setE(ientry->ptot.e() + m.e());
565  ientry->ptsq += m.perp() * m.perp();
566 
567  if (m.perp() > 0.8 && std::abs(m.pseudoRapidity()) < 2.5 && isCharged(*idecendants))
568  ientry->nGenTrk++;
569  }
570  }
571  idx++;
572  }
573  }
574 
575  std::sort(genpvs_.begin(), genpvs_.end());
576 }
Vector3DBase
Definition: Vector3DBase.h:8
TrackClassifier::magneticField_
edm::ESHandle< MagneticField > magneticField_
Definition: TrackClassifier.h:71
CMS::EIoni
Definition: CMSProcessTypes.h:14
TrackQuality::numberOfLayers
unsigned int numberOfLayers() const
Return the number of layers with simulated and/or reconstructed hits.
Definition: TrackQuality.h:74
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
TrackQuality::Layer::hits
std::vector< Hit > hits
Definition: TrackQuality.h:56
histoParameters_cff.maxLayers
maxLayers
Definition: histoParameters_cff.py:65
TrackCategories::MuPairProdProcess
Definition: TrackCategories.h:48
FreeTrajectoryState::momentum
GlobalVector momentum() const
Definition: FreeTrajectoryState.h:68
counter
Definition: counter.py:1
TrackCategories::KnownProcess
Definition: TrackCategories.h:36
TrackClassifier::TrackClassifier
TrackClassifier(edm::ParameterSet const &, edm::ConsumesCollector &&)
Constructor by ParameterSet.
Definition: TrackClassifier.cc:15
CoreSimTrack::momentum
const math::XYZTLorentzVectorD & momentum() const
Definition: CoreSimTrack.h:19
TrackQuality::Layer::Shared
Definition: TrackQuality.h:47
CMS::MuBrem
Definition: CMSProcessTypes.h:22
HistoryBase::SimParticleTrail
std::vector< TrackingParticleRef > SimParticleTrail
SimParticle trail type.
Definition: HistoryBase.h:30
TrackClassifier::quality_
TrackQuality quality_
Definition: TrackClassifier.h:67
TrackClassifier::GeneratedPrimaryVertex::y
double y
Definition: TrackClassifier.h:111
mps_fire.i
i
Definition: mps_fire.py:428
TrackCategories::FromBWeakDecayMuon
Definition: TrackCategories.h:54
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11713
TrackCharge
int TrackCharge
Definition: TrackCharge.h:4
TrackCategories::MuNuclProcess
Definition: TrackCategories.h:53
TrackClassifier::beamSpot_
edm::Handle< reco::BeamSpot > beamSpot_
Definition: TrackClassifier.h:79
TrackCategories::FromCWeakDecayMuon
Definition: TrackCategories.h:55
TrackCategories::LambdaDecay
Definition: TrackCategories.h:29
HistoryBase::recoGenParticle
const reco::GenParticle * recoGenParticle() const
Definition: HistoryBase.h:82
TrackCategories::JpsiDecay
Definition: TrackCategories.h:30
TrackCategories::OmegaDecay
Definition: TrackCategories.h:32
reco::GenParticle
Definition: GenParticle.h:21
min
T min(T a, T b)
Definition: MathUtil.h:58
reco::BeamSpot::z0
double z0() const
z coordinate
Definition: BeamSpot.h:65
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackClassifier::tTopo_
const TrackerTopology * tTopo_
Definition: TrackClassifier.h:81
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
TrackCategories
Definition: TrackCategories.h:8
TrackHistory::newEvent
void newEvent(const edm::Event &, const edm::EventSetup &)
Pre-process event information (for accessing reconstruction information)
Definition: TrackHistory.cc:33
pos
Definition: PixelAliasList.h:18
TrackCategories::SigmaMinusDecay
Definition: TrackCategories.h:34
TrackCategories::flags_
Flags flags_
Flag containers.
Definition: TrackCategories.h:89
TrackCategories::TrackerSimHits
Definition: TrackCategories.h:22
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
TrackCategories::ComptonProcess
Definition: TrackCategories.h:42
TrackCategories::PhotonProcess
Definition: TrackCategories.h:47
TrackCategories::HIoniProcess
Definition: TrackCategories.h:45
HistoryBase::GenParticleTrail
std::vector< const HepMC::GenParticle * > GenParticleTrail
HepMC::GenParticle trail type.
Definition: HistoryBase.h:15
TrackClassifier::GeneratedPrimaryVertex::z
double z
Definition: TrackClassifier.h:111
CMS::SynchrotronRadiation
Definition: CMSProcessTypes.h:21
TrackCategories::PrimaryProcess
Definition: TrackCategories.h:39
HistoryBase::recoGenParticleTrail
const RecoGenParticleTrail & recoGenParticleTrail() const
Return all reco::GenParticle in the history.
Definition: HistoryBase.h:64
TrackCategories::SynchrotronRadiationProcess
Definition: TrackCategories.h:51
HistoryBase::RecoGenParticleTrail
std::vector< const reco::GenParticle * > RecoGenParticleTrail
reco::GenParticle trail type.
Definition: HistoryBase.h:18
TrackClassifier::minTrackerSimHits_
unsigned int minTrackerSimHits_
Definition: TrackClassifier.h:63
TrackQuality::Layer::Hit
Definition: TrackQuality.h:49
TrackHistory::recoTrack
const reco::TrackBaseRef & recoTrack() const
Return a reference to the reconstructed track.
Definition: TrackHistory.h:55
FreeTrajectoryState::position
GlobalPoint position() const
Definition: FreeTrajectoryState.h:67
GlobalVector
Global3DVector GlobalVector
Definition: GlobalVector.h:10
findQualityFiles.v
v
Definition: findQualityFiles.py:179
TauDecay
Definition: TauDecay.h:21
TrackCategories::ConversionsProcess
Definition: TrackCategories.h:49
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
TrackCategories::TertiaryVertex
Definition: TrackCategories.h:61
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
TrackCategories::Charm
Definition: TrackCategories.h:19
Muon
Definition: Muon.py:1
TrackCategories::Light
Definition: TrackCategories.h:20
HepMC::GenEvent
Definition: hepmc_rootio.cc:9
TrackClassifier::beamSpotLabel_
const edm::InputTag beamSpotLabel_
Definition: TrackClassifier.h:57
ParticleData
HepPDT::ParticleData ParticleData
Definition: ParticleDataTable.h:9
TrackQuality::layer
const Layer & layer(unsigned int index) const
Return information about the given layer by index.
Definition: TrackQuality.h:77
edm::Ref< TrackingParticleCollection >
TrackCategories::PrimaryVertex
Definition: TrackCategories.h:59
TrackCategories::MuIoniProcess
Definition: TrackCategories.h:46
CMS::Decay
Definition: CMSProcessTypes.h:11
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
EncodedEventId
Definition: EncodedEventId.h:11
IdealMagneticFieldRecord
Definition: IdealMagneticFieldRecord.h:11
config
Definition: config.py:1
TrackCategories::Fake
Definition: TrackCategories.h:12
TrackClassifier::hepMCLabel_
const edm::InputTag hepMCLabel_
Definition: TrackClassifier.h:56
TrackCategories::Reconstructed
Definition: TrackCategories.h:13
TrackClassifier::GeneratedPrimaryVertex
Auxiliary class holding simulated primary vertices.
Definition: TrackClassifier.h:106
part
part
Definition: HCALResponse.h:20
CMS::EBrem
Definition: CMSProcessTypes.h:20
EgammaObjectsElectrons_cfi.particleID
particleID
Definition: EgammaObjectsElectrons_cfi.py:4
TrackCategories::unknownTrack
void unknownTrack()
Definition: TrackCategories.cc:57
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
TrackClassifier::isCharged
bool isCharged(const HepMC::GenParticle *)
Definition: TrackClassifier.cc:491
TrackClassifier::mcInformation_
edm::Handle< edm::HepMCProduct > mcInformation_
Definition: TrackClassifier.h:73
TrackCategories::Bottom
Definition: TrackCategories.h:18
TrackCategories::SharedInnerHits
Definition: TrackCategories.h:16
TrackClassifier::processesAtSimulation
void processesAtSimulation()
Get information about conversion and other interactions.
Definition: TrackClassifier.cc:303
CMS::Hadronic
Definition: CMSProcessTypes.h:10
TrackCategories::Bad
Definition: TrackCategories.h:14
visualization-live-secondInstance_cfg.m
m
Definition: visualization-live-secondInstance_cfg.py:72
TrackClassifier::tracer_
TrackHistory tracer_
Definition: TrackClassifier.h:65
TrackCategories::SecondaryVertex
Definition: TrackCategories.h:60
TrackClassifier::evaluate
const TrackClassifier & evaluate(reco::TrackBaseRef const &)
Classify the RecoTrack in categories.
Definition: TrackClassifier.cc:75
reco::BeamSpot
Definition: BeamSpot.h:21
TransientTrackRecord
Definition: TransientTrackRecord.h:11
TrackCategories::EIoniProcess
Definition: TrackCategories.h:44
edm::ESHandle< TrackerTopology >
HistoryBase::genParticleTrail
const GenParticleTrail & genParticleTrail() const
Return all generated particle (HepMC::GenParticle) in the history.
Definition: HistoryBase.h:61
TrackClassifier::numberOfInnerLayers_
unsigned int numberOfInnerLayers_
Definition: TrackClassifier.h:62
TrackClassifier::hadronFlavor
void hadronFlavor()
Get hadron flavor of the initial hadron.
Definition: TrackClassifier.cc:234
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
TrackCategories::FromChargeKaonMuon
Definition: TrackCategories.h:58
TrackClassifier::badPull_
double badPull_
Definition: TrackClassifier.h:59
MuonClassifier_cff.vertexClusteringDistance
vertexClusteringDistance
Definition: MuonClassifier_cff.py:17
TrackCategories::BWeakDecay
Definition: TrackCategories.h:23
TrackCategories::ChargePionDecay
Definition: TrackCategories.h:25
TrackQuality::Layer::Noise
Definition: TrackQuality.h:47
CMS::Unknown
Definition: CMSProcessTypes.h:8
CMS::Undefined
Definition: CMSProcessTypes.h:7
TrackClassifier::genpvs_
std::vector< GeneratedPrimaryVertex > genpvs_
Definition: TrackClassifier.h:122
CMS::Annihilation
Definition: CMSProcessTypes.h:13
TrackClassifier::processesAtGenerator
void processesAtGenerator()
Get all the information related to decay process.
Definition: TrackClassifier.cc:247
TrackClassifier.h
CMS::HIoni
Definition: CMSProcessTypes.h:15
CMS::Photon
Definition: CMSProcessTypes.h:17
edm::ParameterSet
Definition: ParameterSet.h:47
TrackCategories::EBremProcess
Definition: TrackCategories.h:50
LaserDQM_cfg.process
process
Definition: LaserDQM_cfg.py:3
reco::LeafCandidate::pdgId
int pdgId() const final
PDG identifier.
Definition: LeafCandidate.h:176
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
TrackClassifier::newEvent
void newEvent(edm::Event const &, edm::EventSetup const &)
Pre-process event information (for accessing reconstraction information)
Definition: TrackClassifier.cc:44
EncodedEventId::event
int event() const
get the contents of the subdetector field (should be protected?)
Definition: EncodedEventId.h:30
TrackCategories::SigmaPlusDecay
Definition: TrackCategories.h:33
createfilelist.int
int
Definition: createfilelist.py:10
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
TrackClassifier::particleDataTable_
edm::ESHandle< ParticleDataTable > particleDataTable_
Definition: TrackClassifier.h:75
TrackCategories::KsDecay
Definition: TrackCategories.h:28
TrackCategories::reset
void reset()
Reset the categories flags.
Definition: TrackCategories.h:83
TrackCategories::UnknownProcess
Definition: TrackCategories.h:38
TrackClassifier::vertexInformation
void vertexInformation()
Get geometrical information about the vertices.
Definition: TrackClassifier.cc:413
edm::EventSetup
Definition: EventSetup.h:57
TrackClassifier::qualityInformation
void qualityInformation(reco::TrackBaseRef const &)
Classify all the tracks by their reconstruction quality.
Definition: TrackClassifier.cc:211
edm::HepMCProduct::GetEvent
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:34
TrajectoryStateClosestToPoint
Definition: TrajectoryStateClosestToPoint.h:18
TrackQuality::newEvent
void newEvent(const edm::Event &, const edm::EventSetup &)
Pre-process event information (for accessing reconstruction information)
Definition: TrackQuality.cc:138
TrackQuality::evaluate
void evaluate(SimParticleTrail const &, reco::TrackBaseRef const &, const TrackerTopology *tTopo)
Compute information about the track reconstruction quality.
Definition: TrackQuality.cc:142
get
#define get
TrackClassifier::vertexClusteringSqDistance_
double vertexClusteringSqDistance_
Definition: TrackClassifier.h:61
CMS::MuPairProd
Definition: CMSProcessTypes.h:18
TrackCategories::DecayOnFlightMuon
Definition: TrackCategories.h:56
reco::TrackBase::Point
math::XYZPoint Point
point in the space
Definition: TrackBase.h:80
TrackCategories::DecayProcess
Definition: TrackCategories.h:41
CMS::MuNucl
Definition: CMSProcessTypes.h:23
reco::BeamSpot::x0
double x0() const
x coordinate
Definition: BeamSpot.h:61
HistoryBase::simParticle
const TrackingParticleRef & simParticle() const
Return the initial tracking particle from the history.
Definition: HistoryBase.h:67
TrackCategories::BadInnerHits
Definition: TrackCategories.h:15
GenParticle.GenParticle
GenParticle
Definition: GenParticle.py:18
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
TSCPBuilderNoMaterial
Definition: TSCPBuilderNoMaterial.h:17
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
HistoryBase::simParticleTrail
const SimParticleTrail & simParticleTrail() const
Return all the simulated particle in the history.
Definition: HistoryBase.h:55
SimTrack
Definition: SimTrack.h:6
CMS::Compton
Definition: CMSProcessTypes.h:12
edm::RefToBase::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: RefToBase.h:301
TrackClassifier::reconstructionInformation
void reconstructionInformation(reco::TrackBaseRef const &)
Definition: TrackClassifier.cc:153
edm::RefVectorIterator
Definition: EDProductfwd.h:33
TrackClassifier::transientTrackBuilder_
edm::ESHandle< TransientTrackBuilder > transientTrackBuilder_
Definition: TrackClassifier.h:77
TrackClassifier::longLivedDecayLength_
double longLivedDecayLength_
Definition: TrackClassifier.h:60
TrackClassifier::simulationInformation
void simulationInformation()
Get all the information related to the simulation details.
Definition: TrackClassifier.cc:200
TrackCategories::XiDecay
Definition: TrackCategories.h:31
CMS::Primary
Definition: CMSProcessTypes.h:9
TrackCategories::ChargeKaonDecay
Definition: TrackCategories.h:26
G4toCMSLegacyProcTypeMap::processId
const unsigned int processId(unsigned int g4ProcessId) const
Definition: Utils.cc:59
edm::RefToBase< reco::Track >
TrackCategories::LongLivedDecay
Definition: TrackCategories.h:35
TrackCategories::FromChargePionMuon
Definition: TrackCategories.h:57
TrackHistory::evaluate
bool evaluate(TrackingParticleRef tpr)
Evaluate track history using a TrackingParticleRef.
Definition: TrackHistory.h:37
funct::pow
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
TrackCategories::CWeakDecay
Definition: TrackCategories.h:24
cms::Exception
Definition: Exception.h:70
TrackClassifier::g4toCMSProcMap_
const G4toCMSLegacyProcTypeMap g4toCMSProcMap_
Definition: TrackClassifier.h:69
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::HepMCProduct
Definition: HepMCProduct.h:18
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
CMS::MuIoni
Definition: CMSProcessTypes.h:16
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
TrajectoryStateClosestToPoint::theState
const FreeTrajectoryState & theState() const
Definition: TrajectoryStateClosestToPoint.h:96
parents
TPRegexp parents
Definition: eve_filter.cc:21
event
Definition: event.py:1
reco::BeamSpot::y0
double y0() const
y coordinate
Definition: BeamSpot.h:63
TrackClassifier
Get track history and classify it in function of their .
Definition: TrackClassifier.h:29
edm::Event
Definition: Event.h:73
EgammaValidation_cff.pdgid
pdgid
Definition: EgammaValidation_cff.py:30
TrackQuality::Layer
Definition: TrackQuality.h:32
TrackClassifier::genPrimaryVertices
void genPrimaryVertices()
Definition: TrackClassifier.cc:501
TrackingParticle::Point
math::XYZPointD Point
point in the space
Definition: TrackingParticle.h:36
class-composition.parent
parent
Definition: class-composition.py:88
TrackCategories::Muon
Definition: TrackCategories.h:21
LHEGenericFilter_cfi.ParticleID
ParticleID
Definition: LHEGenericFilter_cfi.py:6
TrackQuality::Layer::Misassoc
Definition: TrackQuality.h:47
TrackClassifier::GeneratedPrimaryVertex::x
double x
Definition: TrackClassifier.h:111
TrackClassifier::isFinalstateParticle
bool isFinalstateParticle(const HepMC::GenParticle *)
Definition: TrackClassifier.cc:489
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
TrackCategories::AnnihilationProcess
Definition: TrackCategories.h:43
HistoryBase::depth
void depth(int d)
Set the depth of the history.
Definition: HistoryBase.h:49
EncodedEventId::bunchCrossing
int bunchCrossing() const
get the detector field from this detid
Definition: EncodedEventId.h:25
hit
Definition: SiStripHitEffFromCalibTree.cc:88
TrackCategories::MuBremProcess
Definition: TrackCategories.h:52
CMS::Conversions
Definition: CMSProcessTypes.h:19
update
#define update(a, b)
Definition: TrackClassifier.cc:10
RemoveAddSevLevel.flag
flag
Definition: RemoveAddSevLevel.py:116
TrackCategories::UndefinedProcess
Definition: TrackCategories.h:37
TrackCategories::HadronicProcess
Definition: TrackCategories.h:40
TrackCategories::SignalEvent
Definition: TrackCategories.h:17