CMS 3D CMS Logo

HitParentTest.cc
Go to the documentation of this file.
1 #include <algorithm>
2 #include <fstream>
3 #include <iomanip>
4 #include <iostream>
5 #include <map>
6 #include <memory>
7 #include <string>
8 #include <vector>
9 
10 #include <TH1F.h>
11 
30 
31 class HitParentTest : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> {
32 public:
34  ~HitParentTest() override {}
35  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
36 
37 protected:
38  void beginJob() override;
39  void beginRun(edm::Run const&, edm::EventSetup const&) override {}
40  void analyze(const edm::Event& e, const edm::EventSetup& c) override;
41  void endRun(edm::Run const&, edm::EventSetup const&) override {}
42  void endJob() override;
43 
44 private:
46  void analyzeHits(const std::vector<PCaloHit>&, int type);
47  void analyzeAPDHits(const std::vector<PCaloHit>&, int depth);
48 
49  bool simTrackPresent(int id);
50  math::XYZTLorentzVectorD getOldestParentVertex(edm::SimTrackContainer::const_iterator track);
51  edm::SimTrackContainer::const_iterator parentSimTrack(edm::SimTrackContainer::const_iterator thisTrkItr);
52  bool validSimTrack(unsigned int simTkId, edm::SimTrackContainer::const_iterator thisTrkItr);
53 
54 private:
62 
64  unsigned int total_num_apd_hits_seen[2];
65  unsigned int num_apd_hits_no_parent[2];
66 
69  unsigned int num_apd_hits_no_simtrack[2];
70 
73 
76 
79  std::map<int, unsigned> particle_type_count;
80 
82  bool histos;
83  unsigned int totalHits[7], noParent[7];
84  unsigned int noSimTrack[7], noGenParticle[7];
85  TH1F *hitType[7], *hitRho[7], *hitZ[7];
86 };
87 
89  usesResource(TFileService::kSharedResource);
90 
91  sourceLabel = ps.getUntrackedParameter<std::string>("SourceLabel", "VtxSmeared");
92  g4Label = ps.getUntrackedParameter<std::string>("ModuleLabel", "g4SimHits");
93  hitLabEB = ps.getUntrackedParameter<std::string>("EBCollection", "EcalHitsEB");
94  hitLabEE = ps.getUntrackedParameter<std::string>("EECollection", "EcalHitsEE");
95  hitLabES = ps.getUntrackedParameter<std::string>("ESCollection", "EcalHitsES");
96  hitLabHC = ps.getUntrackedParameter<std::string>("HCCollection", "HcalHits");
97  edm::LogVerbatim("HitParentTest") << "Module Label: " << g4Label << " Hits: " << hitLabEB << ", " << hitLabEE
98  << ", " << hitLabES << ", " << hitLabHC;
99 
100  tok_eb_ = consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label, hitLabEB));
101  tok_ee_ = consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label, hitLabEE));
102  tok_es_ = consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label, hitLabES));
103  tok_hc_ = consumes<edm::PCaloHitContainer>(edm::InputTag(g4Label, hitLabHC));
104  tok_tk_ = consumes<edm::SimTrackContainer>(edm::InputTag(g4Label));
105  tok_vtx_ = consumes<edm::SimVertexContainer>(edm::InputTag(g4Label));
106 
107  for (unsigned int i = 0; i < 2; ++i) {
112  }
113  std::string dets[7] = {"EB", "EE", "ES", "HB", "HE", "HO", "HF"};
114  for (unsigned int i = 0; i < 7; ++i) {
115  detector[i] = dets[i];
116  totalHits[i] = 0;
117  noParent[i] = 0;
118  noSimTrack[i] = 0;
119  noGenParticle[i] = 0;
120  }
121 }
122 
125  desc.addUntracked<std::string>("SourceLabel", "generatorSmeared");
126  desc.addUntracked<std::string>("ModuleLabel", "g4SimHits");
127  desc.addUntracked<std::string>("EBCollection", "EcalHitsEB");
128  desc.addUntracked<std::string>("EECollection", "EcalHitsEE");
129  desc.addUntracked<std::string>("ESCollection", "EcalHitsES");
130  desc.addUntracked<std::string>("HCCollection", "HcalHits");
131  descriptions.add("HitParentTest", desc);
132 }
133 
136  if (!tfile.isAvailable()) {
137  edm::LogVerbatim("HitParentTest") << "TFileService unavailable: no histograms";
138  histos = false;
139  } else {
140  char name[20], title[100];
141  histos = true;
142  for (unsigned int i = 0; i < 7; ++i) {
143  sprintf(name, "HitType%d", i);
144  sprintf(title, "Hit types for %s", detector[i].c_str());
145  hitType[i] = tfile->make<TH1F>(name, title, 10, 0., 10.);
146  hitType[i]->GetXaxis()->SetTitle(title);
147  hitType[i]->GetYaxis()->SetTitle("Hits");
148  sprintf(name, "RhoVertex%d", i);
149  sprintf(title, "#rho of the vertex for %s Hits", detector[i].c_str());
150  hitRho[i] = tfile->make<TH1F>(name, title, 10000, 0., 100.);
151  hitRho[i]->GetXaxis()->SetTitle(title);
152  hitRho[i]->GetYaxis()->SetTitle("Hits");
153  sprintf(name, "ZVertex%d", i);
154  sprintf(title, "z of the vertex for %s Hits", detector[i].c_str());
155  hitZ[i] = tfile->make<TH1F>(name, title, 2000, -100., 100.);
156  hitZ[i]->GetXaxis()->SetTitle(title);
157  hitZ[i]->GetYaxis()->SetTitle("Hits");
158  }
159  }
160 }
161 
163  edm::LogVerbatim("HitParentTest") << "HitParentTes::Run = " << e.id().run() << " Event = " << e.id().event();
164 
165  // get PCaloHits for ecal barrel
167  e.getByToken(tok_eb_, caloHitEB);
168 
169  // get PCaloHits for ecal endcap
171  e.getByToken(tok_ee_, caloHitEE);
172 
173  // get PCaloHits for preshower
175  e.getByToken(tok_es_, caloHitES);
176 
177  // get PCaloHits for hcal
179  e.getByToken(tok_hc_, caloHitHC);
180 
181  // get sim tracks
182  e.getByToken(tok_tk_, SimTk);
183 
184  // get sim vertices
185  e.getByToken(tok_vtx_, SimVtx);
186 
187  edm::LogVerbatim("HitParentTest") << "HitParentTest: hits valid[EB]: " << caloHitEB.isValid()
188  << " valid[EE]: " << caloHitEE.isValid() << " valid[ES]: " << caloHitES.isValid()
189  << " valid[HC]: " << caloHitHC.isValid();
190 
191  if (caloHitEB.isValid()) {
192  for (int depth = 1; depth <= 2; ++depth)
193  analyzeAPDHits(*caloHitEB, depth);
194  analyzeHits(*caloHitEB, 0);
195  }
196  if (caloHitEE.isValid())
197  analyzeHits(*caloHitEE, 1);
198  if (caloHitES.isValid())
199  analyzeHits(*caloHitES, 2);
200  if (caloHitHC.isValid())
201  analyzeHits(*caloHitHC, 3);
202 }
203 
206 protected:
207  const std::map<int, unsigned>& particle_type_count;
208 
209 public:
210  HitParentTestComparison(const std::map<int, unsigned>& _particle_type_count)
211  : particle_type_count(_particle_type_count) {}
212 
213  bool operator()(int pid1, int pid2) const { return particle_type_count.at(pid1) > particle_type_count.at(pid2); }
214 };
215 
217  edm::LogVerbatim("HitParentTest") << "HitParentTest::Total number of APD hits seen: "
219  for (unsigned int depth = 0; depth < 2; ++depth) {
220  edm::LogVerbatim("HitParentTest") << "APD Hits in depth = " << depth + 1
221  << " Total = " << total_num_apd_hits_seen[depth];
222  edm::LogVerbatim("HitParentTest") << "summary of errors:\n"
223  << " number of APD hits with zero geant track id: "
224  << num_apd_hits_no_parent[depth] << "\n"
225  << "number of APD hits for which the parent simtrack was not found "
226  << "in the simtrack collection: " << num_apd_hits_no_simtrack[depth] << "\n"
227  << "number of APD hits for which no generator particle was "
228  << "found: " << num_apd_hits_no_gen_particle[depth] << "\n";
229  }
230 
231  for (unsigned int det = 0; det < 7; ++det) {
232  edm::LogVerbatim("HitParentTest") << "Total number of hits seen in " << detector[det] << ": " << totalHits[det];
233  edm::LogVerbatim("HitParentTest") << "summary of errors:\n"
234  << "number of hits with zero geant track id: " << noParent[det] << "\n"
235  << "number of hits for which the parent simtrack was not found in "
236  << "the simtrack collection: " << noSimTrack[det] << "\n"
237  << "number of hits for which no generator particle was found: "
238  << noGenParticle[det] << "\n";
239  }
240 
241  // sort in decreasing order of occurence
242  std::vector<int> sorted_pids;
243  for (std::map<int, unsigned>::const_iterator it = particle_type_count.begin(); it != particle_type_count.end(); ++it)
244  sorted_pids.push_back(it->first);
245 
246  // now sort the pids
247 
248  std::sort(sorted_pids.begin(), sorted_pids.end(), HitParentTestComparison(particle_type_count));
249 
250  edm::LogVerbatim("HitParentTest") << "HitParentTest::Frequency particle types through the APD "
251  << "(pid/frequency):";
252  for (unsigned i = 0; i < sorted_pids.size(); ++i) {
253  int pid = sorted_pids[i];
254  edm::LogVerbatim("HitParentTest") << " pid " << std::setw(6) << pid << ": count " << std::setw(6)
255  << particle_type_count[pid];
256  }
257 }
258 
259 void HitParentTest::analyzeHits(const std::vector<PCaloHit>& hits, int type) {
260  for (std::vector<PCaloHit>::const_iterator hit_it = hits.begin(); hit_it != hits.end(); ++hit_it) {
261  int id(type), flag(0);
262  if (type == 3) {
263  HcalDetId id_ = HcalDetId(hit_it->id());
264  int subdet = id_.subdet();
265  if (subdet == static_cast<int>(HcalEndcap))
266  id = type + 1;
267  else if (subdet == static_cast<int>(HcalOuter))
268  id = type + 2;
269  else if (subdet == static_cast<int>(HcalForward))
270  id = type + 3;
271  }
272  ++totalHits[id];
273 
274  // get the geant track id
275  int hit_geant_track_id = hit_it->geantTrackId();
276 
277  if (hit_geant_track_id <= 0) {
278  ++noParent[id];
279  flag = 1;
280  } else {
281  bool found = false;
282  flag = 2;
283  // check whether this id is actually there in the list of simtracks
284  for (edm::SimTrackContainer::const_iterator simTrkItr = SimTk->begin(); simTrkItr != SimTk->end() && !found;
285  ++simTrkItr) {
286  if (hit_geant_track_id == (int)(simTrkItr->trackId())) {
287  found = true;
288  flag = 3;
289  bool match = validSimTrack(hit_geant_track_id, simTrkItr);
290 
291  edm::LogVerbatim("HitParentTest")
292  << "[" << detector[type] << "] Match = " << match << " hit_geant_track_id=" << hit_geant_track_id
293  << " particle id=" << simTrkItr->type();
294 
295  if (!match) {
296  edm::LogVerbatim("HitParentTest") << "NO MATCH FOUND !";
297  ++noGenParticle[id];
298  }
299 
300  // beam pipe...
301  int pid = simTrkItr->type();
302  math::XYZTLorentzVectorD oldest_parent_vertex = getOldestParentVertex(simTrkItr);
303 
304  edm::SimTrackContainer::const_iterator oldest_parent_track = parentSimTrack(simTrkItr);
305 
306  edm::LogVerbatim("HitParentTest")
307  << "[" << detector[type] << "] Hit pid = " << pid << " hit track id = " << hit_geant_track_id
308  << " Oldest Parent's Vertex: " << oldest_parent_vertex << " rho = " << oldest_parent_vertex.Rho()
309  << " Oldest Parent's pid: " << oldest_parent_track->type()
310  << " Oldest Parent's track id: " << oldest_parent_track->trackId()
311  << "\nHit vertex index: " << simTrkItr->vertIndex() << " (tot #vertices: " << SimVtx->size() << ")"
312  << "\nHit vertex parent track: " << (*SimVtx)[simTrkItr->vertIndex()].parentIndex()
313  << " present=" << simTrackPresent((*SimVtx)[simTrkItr->vertIndex()].parentIndex());
314  if (histos) {
315  hitRho[id]->Fill(oldest_parent_vertex.Rho());
316  hitZ[id]->Fill(oldest_parent_vertex.Z());
317  }
318  } // a match was found
319  } // geant track id found in simtracks
320 
321  if (!found)
322  ++noSimTrack[id];
323  } // hits with a valid SimTrack Id
324  if (histos)
325  hitType[id]->Fill((double)(flag));
326  } // loop over all calohits (of the given depth)
327 }
328 
329 void HitParentTest::analyzeAPDHits(const std::vector<PCaloHit>& hits, int depth) {
330  for (std::vector<PCaloHit>::const_iterator hit_it = hits.begin(); hit_it != hits.end(); ++hit_it) {
331  if (hit_it->depth() == depth) {
333 
334  // get the geant track id
335  int hit_geant_track_id = hit_it->geantTrackId();
336 
337  if (hit_geant_track_id <= 0) {
339  } else {
340  bool found = false;
341  // check whether this id is actually there in the list of simtracks
342  for (edm::SimTrackContainer::const_iterator simTrkItr = SimTk->begin(); simTrkItr != SimTk->end() && !found;
343  ++simTrkItr) {
344  if (hit_geant_track_id == (int)(simTrkItr->trackId())) {
345  found = true;
346  bool match = validSimTrack(hit_geant_track_id, simTrkItr);
347 
348  edm::LogVerbatim("HitParentTest")
349  << "APDHIT Match = " << match << " hit_geant_track_id = " << hit_geant_track_id
350  << " particle id=" << simTrkItr->type();
351 
352  if (!match) {
353  edm::LogVerbatim("HitParentTest") << "NO MATCH FOUND !";
355  }
356 
357  int apd_pid = simTrkItr->type();
358  std::map<int, unsigned>::iterator count_it = particle_type_count.find(apd_pid);
359  if (count_it == particle_type_count.end())
360  // first occurence of this particle pid
361  particle_type_count[apd_pid] = 1;
362  else
363  ++count_it->second;
364 
365  //--------------------
366  // check where the oldest parent has its vertex. Should be close to the
367  // beam pipe...
368  math::XYZTLorentzVectorD oldest_parent_vertex = getOldestParentVertex(simTrkItr);
369 
370  edm::SimTrackContainer::const_iterator oldest_parent_track = parentSimTrack(simTrkItr);
371 
372  edm::LogVerbatim("HitParentTest")
373  << "APD hit pid = " << apd_pid << " APD hit track id = " << hit_geant_track_id
374  << " depth = " << hit_it->depth() << " OLDEST PARENT'S VERTEX: " << oldest_parent_vertex
375  << " rho = " << oldest_parent_vertex.Rho() << " OLDEST PARENT'S PID: " << oldest_parent_track->type()
376  << " OLDEST PARENT'S track id: " << oldest_parent_track->trackId() << "\n"
377  << "APD hit vertex index: " << simTrkItr->vertIndex() << " (tot #vertices: " << SimVtx->size() << ")"
378  << "\n"
379  << "APD hit vertex parent track: " << (*SimVtx)[simTrkItr->vertIndex()].parentIndex()
380  << " present=" << simTrackPresent((*SimVtx)[simTrkItr->vertIndex()].parentIndex());
381 
382  } // a match was found
383  } // geant track id found in simtracks
384 
385  if (!found)
387  } // hits with a valid SimTrack Id
388  } // right depth index
389  } // loop over all calohits (of the given depth)
390 }
391 
393  for (edm::SimTrackContainer::const_iterator simTrkItr = SimTk->begin(); simTrkItr != SimTk->end(); ++simTrkItr) {
394  if ((int)(simTrkItr->trackId()) == id)
395  return true;
396  }
397  return false;
398 }
399 
400 math::XYZTLorentzVectorD HitParentTest::getOldestParentVertex(edm::SimTrackContainer::const_iterator track) {
401  static const math::XYZTLorentzVectorD invalid_vertex(
402  10000, 10000, 10000, 10000); // default value if no valid vertex found
403 
404  edm::SimTrackContainer::const_iterator oldest_parent_track = parentSimTrack(track);
405 
406  int vertex_index = oldest_parent_track->vertIndex();
407 
408  // sanity checks
409  if (vertex_index < 0 || vertex_index >= (int)(SimVtx->size()))
410  return invalid_vertex;
411 
412  return (*SimVtx)[vertex_index].position();
413 }
414 
415 edm::SimTrackContainer::const_iterator HitParentTest::parentSimTrack(edm::SimTrackContainer::const_iterator thisTrkItr) {
416  edm::SimTrackContainer::const_iterator itr = SimTk->end();
417 
418  int vertIndex = thisTrkItr->vertIndex();
419  int type = thisTrkItr->type();
420  int charge = (int)thisTrkItr->charge();
421  edm::LogVerbatim("HitParentTest") << "SimTrackParent:: " << thisTrkItr->trackId() << " Vertex " << vertIndex
422  << " Type " << type << " Charge " << charge;
423 
424  if (vertIndex == -1)
425  return thisTrkItr;
426  else if (vertIndex >= (int)SimVtx->size())
427  return itr;
428 
429  edm::SimVertexContainer::const_iterator simVtxItr = SimVtx->begin();
430  for (int iv = 0; iv < vertIndex; iv++)
431  simVtxItr++;
432  int parent = simVtxItr->parentIndex();
433 
434  if (parent < 0 && simVtxItr != SimVtx->begin()) {
435  const math::XYZTLorentzVectorD pos1 = simVtxItr->position();
436  for (simVtxItr = SimVtx->begin(); simVtxItr != SimVtx->end(); ++simVtxItr) {
437  if (simVtxItr->parentIndex() > 0) {
438  const math::XYZTLorentzVectorD pos2 = pos1 - simVtxItr->position();
439  double dist = pos2.P();
440  if (dist < 0.001) {
441  parent = simVtxItr->parentIndex();
442  break;
443  }
444  }
445  }
446  }
447  for (edm::SimTrackContainer::const_iterator simTrkItr = SimTk->begin(); simTrkItr != SimTk->end(); simTrkItr++) {
448  if ((int)simTrkItr->trackId() == parent && simTrkItr != thisTrkItr)
449  return parentSimTrack(simTrkItr);
450  }
451 
452  return thisTrkItr;
453 }
454 
455 bool HitParentTest::validSimTrack(unsigned int simTkId, edm::SimTrackContainer::const_iterator thisTrkItr) {
456  edm::LogVerbatim("HitParentTest") << "Inside validSimTrack: trackId " << thisTrkItr->trackId() << " vtxIndex "
457  << thisTrkItr->vertIndex() << " to be matched to " << simTkId;
458 
459  //This track originates from simTkId
460  if (thisTrkItr->trackId() == simTkId)
461  return true;
462 
463  //Otherwise trace back the history using SimTracks and SimVertices
464  int vertIndex = thisTrkItr->vertIndex();
465  if (vertIndex == -1 || vertIndex >= (int)SimVtx->size())
466  return false;
467  edm::SimVertexContainer::const_iterator simVtxItr = SimVtx->begin();
468  for (int iv = 0; iv < vertIndex; iv++)
469  simVtxItr++;
470  int parent = simVtxItr->parentIndex();
471  edm::LogVerbatim("HitParentTest") << "validSimTrack:: parent index " << parent << " ";
472  if (parent < 0 && simVtxItr != SimVtx->begin()) {
473  const math::XYZTLorentzVectorD pos1 = simVtxItr->position();
474  for (simVtxItr = SimVtx->begin(); simVtxItr != SimVtx->end(); ++simVtxItr) {
475  if (simVtxItr->parentIndex() > 0) {
476  const math::XYZTLorentzVectorD pos2 = pos1 - simVtxItr->position();
477  double dist = pos2.P();
478  if (dist < 0.001) {
479  parent = simVtxItr->parentIndex();
480  break;
481  }
482  }
483  }
484  }
485  edm::LogVerbatim("HitParentTest") << "HitParentTes::final index " << parent;
486  for (edm::SimTrackContainer::const_iterator simTrkItr = SimTk->begin(); simTrkItr != SimTk->end(); simTrkItr++) {
487  if ((int)simTrkItr->trackId() == parent && simTrkItr != thisTrkItr)
488  return validSimTrack(simTkId, simTrkItr);
489  }
490 
491  return false;
492 }
493 
494 //define this as a plug-in
HitParentTest::detector
std::string detector[7]
Definition: HitParentTest.cc:81
HitParentTest::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: HitParentTest.cc:123
HitParentTest::analyzeHits
void analyzeHits(const std::vector< PCaloHit > &, int type)
Definition: HitParentTest.cc:259
HitParentTest::hitZ
TH1F * hitZ[7]
Definition: HitParentTest.cc:85
HitParentTest::simTrackPresent
bool simTrackPresent(int id)
Definition: HitParentTest.cc:392
HitParentTestComparison::operator()
bool operator()(int pid1, int pid2) const
Definition: HitParentTest.cc:213
runGCPTkAlMap.title
string title
Definition: runGCPTkAlMap.py:94
EDAnalyzer.h
mps_fire.i
i
Definition: mps_fire.py:428
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11724
HitParentTest::SimVtx
edm::Handle< edm::SimVertexContainer > SimVtx
Definition: HitParentTest.cc:75
MessageLogger.h
HitParentTest::beginJob
void beginJob() override
Definition: HitParentTest.cc:134
HitParentTest::tok_tk_
edm::EDGetTokenT< edm::SimTrackContainer > tok_tk_
Definition: HitParentTest.cc:60
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
HitParentTest::num_apd_hits_no_parent
unsigned int num_apd_hits_no_parent[2]
Definition: HitParentTest.cc:65
edm::Run
Definition: Run.h:45
edm::EDGetTokenT< edm::PCaloHitContainer >
HitParentTest::endJob
void endJob() override
Definition: HitParentTest.cc:216
HitParentTest::beginRun
void beginRun(edm::Run const &, edm::EventSetup const &) override
Definition: HitParentTest.cc:39
gpuVertexFinder::iv
int32_t *__restrict__ iv
Definition: gpuClusterTracksDBSCAN.h:42
math::XYZTLorentzVectorD
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
HitParentTest::parentSimTrack
edm::SimTrackContainer::const_iterator parentSimTrack(edm::SimTrackContainer::const_iterator thisTrkItr)
Definition: HitParentTest.cc:415
HitParentTest::noGenParticle
unsigned int noGenParticle[7]
Definition: HitParentTest.cc:84
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
HitParentTest::tok_hc_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_hc_
Definition: HitParentTest.cc:59
CaloHitID.h
HitParentTest::total_num_apd_hits_seen
unsigned int total_num_apd_hits_seen[2]
Definition: HitParentTest.cc:64
edm::one::EDAnalyzer
Definition: EDAnalyzer.h:30
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::Handle< edm::SimTrackContainer >
HitParentTestComparison::particle_type_count
const std::map< int, unsigned > & particle_type_count
Definition: HitParentTest.cc:207
HitParentTest
Definition: HitParentTest.cc:31
HitParentTest::tok_vtx_
edm::EDGetTokenT< edm::SimVertexContainer > tok_vtx_
Definition: HitParentTest.cc:61
HitParentTest::HitParentTest
HitParentTest(const edm::ParameterSet &ps)
Definition: HitParentTest.cc:88
HitParentTest::hitLabEB
std::string hitLabEB
Definition: HitParentTest.cc:55
HitParentTest::getOldestParentVertex
math::XYZTLorentzVectorD getOldestParentVertex(edm::SimTrackContainer::const_iterator track)
Definition: HitParentTest.cc:400
HitParentTest::hitRho
TH1F * hitRho[7]
Definition: HitParentTest.cc:85
MakerMacros.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
HitParentTest::hitType
TH1F * hitType[7]
Definition: HitParentTest.cc:85
HitParentTest::tok_ee_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_ee_
Definition: HitParentTest.cc:57
Service.h
HitParentTest::hitLabEE
std::string hitLabEE
Definition: HitParentTest.cc:55
tfile
Definition: tfile.py:1
HitParentTest::~HitParentTest
~HitParentTest() override
Definition: HitParentTest.cc:34
HcalOuter
Definition: HcalAssistant.h:35
HitParentTest::num_apd_hits_no_gen_particle
unsigned int num_apd_hits_no_gen_particle[2]
Definition: HitParentTest.cc:72
LEDCalibrationChannels.depth
depth
Definition: LEDCalibrationChannels.py:65
HitParentTestComparison::HitParentTestComparison
HitParentTestComparison(const std::map< int, unsigned > &_particle_type_count)
Definition: HitParentTest.cc:210
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
TFileService.h
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
HitParentTest::histos
bool histos
Definition: HitParentTest.cc:82
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
type
type
Definition: SiPixelVCal_PayloadInspector.cc:39
HitParentTest::particle_type_count
std::map< int, unsigned > particle_type_count
Definition: HitParentTest.cc:79
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
HcalDetId.h
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:40
HitParentTest::SimTk
edm::Handle< edm::SimTrackContainer > SimTk
Definition: HitParentTest.cc:74
match
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
PCaloHit.h
HcalDetId::subdet
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
HcalDetId
Definition: HcalDetId.h:12
edm::Service< TFileService >
createfilelist.int
int
Definition: createfilelist.py:10
HitParentTest::g4Label
std::string g4Label
Definition: HitParentTest.cc:55
HitParentTest::analyzeAPDHits
void analyzeAPDHits(const std::vector< PCaloHit > &, int depth)
Definition: HitParentTest.cc:329
HitParentTest::tok_es_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_es_
Definition: HitParentTest.cc:58
HitParentTest::analyze
void analyze(const edm::Event &e, const edm::EventSetup &c) override
Definition: HitParentTest.cc:162
edm::EventSetup
Definition: EventSetup.h:58
HitParentTestComparison
Definition: HitParentTest.cc:205
HitParentTest::hitLabES
std::string hitLabES
Definition: HitParentTest.cc:55
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
HitParentTest::num_apd_hits_no_simtrack
unsigned int num_apd_hits_no_simtrack[2]
Definition: HitParentTest.cc:69
InputTag.h
compare.tfile
tfile
Definition: compare.py:324
HitParentTest::noSimTrack
unsigned int noSimTrack[7]
Definition: HitParentTest.cc:84
HcalForward
Definition: HcalAssistant.h:36
HitParentTest::totalHits
unsigned int totalHits[7]
Definition: HitParentTest.cc:83
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
HcalEndcap
Definition: HcalAssistant.h:34
Frameworkfwd.h
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
TFileService::kSharedResource
static const std::string kSharedResource
Definition: TFileService.h:76
HitParentTest::hitLabHC
std::string hitLabHC
Definition: HitParentTest.cc:55
HitParentTest::validSimTrack
bool validSimTrack(unsigned int simTkId, edm::SimTrackContainer::const_iterator thisTrkItr)
Definition: HitParentTest.cc:455
HitParentTest::endRun
void endRun(edm::Run const &, edm::EventSetup const &) override
Definition: HitParentTest.cc:41
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EventSetup.h
Exception.h
PCaloHitContainer.h
HitParentTest::tok_eb_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_eb_
Definition: HitParentTest.cc:56
ParameterSet.h
HepMCProduct.h
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:56
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
HitParentTest::sourceLabel
std::string sourceLabel
Definition: HitParentTest.cc:55
edm::Event
Definition: Event.h:73
HitParentTest::noParent
unsigned int noParent[7]
Definition: HitParentTest.cc:83
class-composition.parent
parent
Definition: class-composition.py:98
SimTrackContainer.h
edm::InputTag
Definition: InputTag.h:15
SimVertexContainer.h
RemoveAddSevLevel.flag
flag
Definition: RemoveAddSevLevel.py:117
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37