CMS 3D CMS Logo

GlobalHitsProducer.cc
Go to the documentation of this file.
1 
11 
13  : fName(""),
14  verbosity(0),
15  frequency(0),
16  vtxunit(0),
17  label(""),
18  getAllProvenances(false),
19  printProvenanceInfo(false),
20  nRawGenPart(0),
21  G4VtxSrc_Token_(consumes<edm::SimVertexContainer>((iPSet.getParameter<edm::InputTag>("G4VtxSrc")))),
22  G4TrkSrc_Token_(consumes<edm::SimTrackContainer>(iPSet.getParameter<edm::InputTag>("G4TrkSrc"))),
23  tGeomToken_(esConsumes()),
24  cscGeomToken_(esConsumes()),
25  dtGeomToken_(esConsumes()),
26  rpcGeomToken_(esConsumes()),
27  caloGeomToken_(esConsumes()),
28  count(0) {
29  std::string MsgLoggerCat = "GlobalHitsProducer_GlobalHitsProducer";
30 
31  // get information from parameter set
32  fName = iPSet.getUntrackedParameter<std::string>("Name");
33  verbosity = iPSet.getUntrackedParameter<int>("Verbosity");
34  frequency = iPSet.getUntrackedParameter<int>("Frequency");
35  vtxunit = iPSet.getUntrackedParameter<int>("VtxUnit");
36  label = iPSet.getParameter<std::string>("Label");
37  edm::ParameterSet m_Prov = iPSet.getParameter<edm::ParameterSet>("ProvenanceLookup");
38  getAllProvenances = m_Prov.getUntrackedParameter<bool>("GetAllProvenances");
39  printProvenanceInfo = m_Prov.getUntrackedParameter<bool>("PrintProvenanceInfo");
40 
41  // get Labels to use to extract information
42  PxlBrlLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlLowSrc");
43  PxlBrlHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlHighSrc");
44  PxlFwdLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdLowSrc");
45  PxlFwdHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdHighSrc");
46 
47  SiTIBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBLowSrc");
48  SiTIBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBHighSrc");
49  SiTOBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBLowSrc");
50  SiTOBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBHighSrc");
51  SiTIDLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDLowSrc");
52  SiTIDHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDHighSrc");
53  SiTECLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTECLowSrc");
54  SiTECHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTECHighSrc");
55 
56  MuonCscSrc_ = iPSet.getParameter<edm::InputTag>("MuonCscSrc");
57  MuonDtSrc_ = iPSet.getParameter<edm::InputTag>("MuonDtSrc");
58  MuonRpcSrc_ = iPSet.getParameter<edm::InputTag>("MuonRpcSrc");
59 
60  ECalEBSrc_ = iPSet.getParameter<edm::InputTag>("ECalEBSrc");
61  ECalEESrc_ = iPSet.getParameter<edm::InputTag>("ECalEESrc");
62  ECalESSrc_ = iPSet.getParameter<edm::InputTag>("ECalESSrc");
63 
64  HCalSrc_ = iPSet.getParameter<edm::InputTag>("HCalSrc");
65 
66  // fix for consumes
67  PxlBrlLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlBrlLowSrc"));
68  PxlBrlHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlBrlHighSrc"));
69  PxlFwdLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlFwdLowSrc"));
70  PxlFwdHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlFwdHighSrc"));
71 
72  SiTIBLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIBLowSrc"));
73  SiTIBHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIBHighSrc"));
74  SiTOBLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTOBLowSrc"));
75  SiTOBHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTOBHighSrc"));
76  SiTIDLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIDLowSrc"));
77  SiTIDHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIDHighSrc"));
78  SiTECLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTECLowSrc"));
79  SiTECHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTECHighSrc"));
80 
81  MuonCscSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonCscSrc"));
82  MuonDtSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonDtSrc"));
83  MuonRpcSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonRpcSrc"));
84 
85  ECalEBSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalEBSrc"));
86  ECalEESrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalEESrc"));
87  ECalESSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalESSrc"));
88  HCalSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("HCalSrc"));
89 
90  // use value of first digit to determine default output level (inclusive)
91  // 0 is none, 1 is basic, 2 is fill output, 3 is gather output
92  verbosity %= 10;
93 
94  // create persistent object
95  produces<PGlobalSimHit>(label);
96 
97  // print out Parameter Set information being used
98  if (verbosity >= 0) {
99  edm::LogInfo(MsgLoggerCat)
100  << "\n===============================\n"
101  << "Initialized as EDProducer with parameter values:\n"
102  << " Name = " << fName << "\n"
103  << " Verbosity = " << verbosity << "\n"
104  << " Frequency = " << frequency << "\n"
105  << " VtxUnit = " << vtxunit << "\n"
106  << " Label = " << label << "\n"
107  << " GetProv = " << getAllProvenances << "\n"
108  << " PrintProv = " << printProvenanceInfo << "\n"
109  << " PxlBrlLowSrc = " << PxlBrlLowSrc_.label() << ":" << PxlBrlLowSrc_.instance() << "\n"
110  << " PxlBrlHighSrc = " << PxlBrlHighSrc_.label() << ":" << PxlBrlHighSrc_.instance() << "\n"
111  << " PxlFwdLowSrc = " << PxlFwdLowSrc_.label() << ":" << PxlBrlLowSrc_.instance() << "\n"
112  << " PxlFwdHighSrc = " << PxlFwdHighSrc_.label() << ":" << PxlBrlHighSrc_.instance() << "\n"
113  << " SiTIBLowSrc = " << SiTIBLowSrc_.label() << ":" << SiTIBLowSrc_.instance() << "\n"
114  << " SiTIBHighSrc = " << SiTIBHighSrc_.label() << ":" << SiTIBHighSrc_.instance() << "\n"
115  << " SiTOBLowSrc = " << SiTOBLowSrc_.label() << ":" << SiTOBLowSrc_.instance() << "\n"
116  << " SiTOBHighSrc = " << SiTOBHighSrc_.label() << ":" << SiTOBHighSrc_.instance() << "\n"
117  << " SiTIDLowSrc = " << SiTIDLowSrc_.label() << ":" << SiTIDLowSrc_.instance() << "\n"
118  << " SiTIDHighSrc = " << SiTIDHighSrc_.label() << ":" << SiTIDHighSrc_.instance() << "\n"
119  << " SiTECLowSrc = " << SiTECLowSrc_.label() << ":" << SiTECLowSrc_.instance() << "\n"
120  << " SiTECHighSrc = " << SiTECHighSrc_.label() << ":" << SiTECHighSrc_.instance() << "\n"
121  << " MuonCscSrc = " << MuonCscSrc_.label() << ":" << MuonCscSrc_.instance() << "\n"
122  << " MuonDtSrc = " << MuonDtSrc_.label() << ":" << MuonDtSrc_.instance() << "\n"
123  << " MuonRpcSrc = " << MuonRpcSrc_.label() << ":" << MuonRpcSrc_.instance() << "\n"
124  << " ECalEBSrc = " << ECalEBSrc_.label() << ":" << ECalEBSrc_.instance() << "\n"
125  << " ECalEESrc = " << ECalEESrc_.label() << ":" << ECalEESrc_.instance() << "\n"
126  << " ECalESSrc = " << ECalESSrc_.label() << ":" << ECalESSrc_.instance() << "\n"
127  << " HCalSrc = " << HCalSrc_.label() << ":" << HCalSrc_.instance() << "\n"
128  << "===============================\n";
129  }
130 
131  // migrated here from beginJob
132  clear();
133 }
134 
136 
137 void GlobalHitsProducer::beginJob(void) { return; }
138 
140  std::string MsgLoggerCat = "GlobalHitsProducer_endJob";
141  if (verbosity >= 0)
142  edm::LogInfo(MsgLoggerCat) << "Terminating having processed " << count << " events.";
143  return;
144 }
145 
147  std::string MsgLoggerCat = "GlobalHitsProducer_produce";
148 
149  // keep track of number of events processed
150  ++count;
151 
152  // get event id information
153  edm::RunNumber_t nrun = iEvent.id().run();
154  edm::EventNumber_t nevt = iEvent.id().event();
155 
156  if (verbosity > 0) {
157  edm::LogInfo(MsgLoggerCat) << "Processing run " << nrun << ", event " << nevt << " (" << count << " events total)";
158  } else if (verbosity == 0) {
159  if (nevt % frequency == 0 || nevt == 1) {
160  edm::LogInfo(MsgLoggerCat) << "Processing run " << nrun << ", event " << nevt << " (" << count
161  << " events total)";
162  }
163  }
164 
165  // clear event holders
166  clear();
167 
168  // look at information available in the event
169  if (getAllProvenances) {
170  std::vector<const edm::StableProvenance *> AllProv;
171  iEvent.getAllStableProvenance(AllProv);
172 
173  if (verbosity >= 0)
174  edm::LogInfo(MsgLoggerCat) << "Number of Provenances = " << AllProv.size();
175 
176  if (printProvenanceInfo && (verbosity >= 0)) {
177  TString eventout("\nProvenance info:\n");
178 
179  for (unsigned int i = 0; i < AllProv.size(); ++i) {
180  eventout += "\n ******************************";
181  eventout += "\n Module : ";
182  eventout += AllProv[i]->moduleLabel();
183  eventout += "\n ProductID : ";
184  eventout += AllProv[i]->productID().id();
185  eventout += "\n ClassName : ";
186  eventout += AllProv[i]->className();
187  eventout += "\n InstanceName : ";
188  eventout += AllProv[i]->productInstanceName();
189  eventout += "\n BranchName : ";
190  eventout += AllProv[i]->branchName();
191  }
192  eventout += "\n ******************************\n";
193  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
194  printProvenanceInfo = false;
195  }
196  getAllProvenances = false;
197  }
198 
199  // call fill functions
200  // gather G4MC information from event
201  fillG4MC(iEvent);
202  // gather Tracker information from event
203  fillTrk(iEvent, iSetup);
204  // gather muon information from event
205  fillMuon(iEvent, iSetup);
206  // gather Ecal information from event
207  fillECal(iEvent, iSetup);
208  // gather Hcal information from event
209  fillHCal(iEvent, iSetup);
210 
211  if (verbosity > 0)
212  edm::LogInfo(MsgLoggerCat) << "Done gathering data from event.";
213 
214  // produce object to put into event
215  std::unique_ptr<PGlobalSimHit> pOut(new PGlobalSimHit);
216 
217  if (verbosity > 2)
218  edm::LogInfo(MsgLoggerCat) << "Saving event contents:";
219 
220  // call store functions
221  // store G4MC information in product
222  storeG4MC(*pOut);
223  // store Tracker information in produce
224  storeTrk(*pOut);
225  // store Muon information in produce
226  storeMuon(*pOut);
227  // store ECal information in produce
228  storeECal(*pOut);
229  // store HCal information in produce
230  storeHCal(*pOut);
231 
232  // store information in event
233  iEvent.put(std::move(pOut), label);
234 
235  return;
236 }
237 
238 //==================fill and store functions================================
240  std::string MsgLoggerCat = "GlobalHitsProducer_fillG4MC";
241 
242  TString eventout;
243  if (verbosity > 0)
244  eventout = "\nGathering info:";
245 
247  // get MC information
250  std::vector<edm::Handle<edm::HepMCProduct>> AllHepMCEvt;
251  iEvent.getManyByType(AllHepMCEvt);
252 
253  // loop through products and extract VtxSmearing if available. Any of them
254  // should have the information needed
255  for (unsigned int i = 0; i < AllHepMCEvt.size(); ++i) {
256  HepMCEvt = AllHepMCEvt[i];
257  if ((HepMCEvt.provenance()->branchDescription()).moduleLabel() == "generatorSmeared")
258  break;
259  }
260 
261  if (!HepMCEvt.isValid()) {
262  edm::LogWarning(MsgLoggerCat) << "Unable to find HepMCProduct in event!";
263  return;
264  } else {
265  eventout += "\n Using HepMCProduct: ";
266  eventout += (HepMCEvt.provenance()->branchDescription()).moduleLabel();
267  }
268  const HepMC::GenEvent *MCEvt = HepMCEvt->GetEvent();
269  nRawGenPart = MCEvt->particles_size();
270 
271  if (verbosity > 1) {
272  eventout += "\n Number of Raw Particles collected:......... ";
273  eventout += nRawGenPart;
274  }
275 
277  // get G4Vertex information
279  // convert unit stored in SimVertex to mm
280  float unit = 0.;
281  if (vtxunit == 0)
282  unit = 1.; // already in mm
283  if (vtxunit == 1)
284  unit = 10.; // stored in cm, convert to mm
285 
287  iEvent.getByToken(G4VtxSrc_Token_, G4VtxContainer);
288  if (!G4VtxContainer.isValid()) {
289  edm::LogWarning(MsgLoggerCat) << "Unable to find SimVertex in event!";
290  return;
291  }
292  int i = 0;
293  edm::SimVertexContainer::const_iterator itVtx;
294  for (itVtx = G4VtxContainer->begin(); itVtx != G4VtxContainer->end(); ++itVtx) {
295  ++i;
296 
297  const math::XYZTLorentzVector G4Vtx1(
298  itVtx->position().x(), itVtx->position().y(), itVtx->position().z(), itVtx->position().e());
299  double G4Vtx[4];
300  G4Vtx1.GetCoordinates(G4Vtx);
301 
302  G4VtxX.push_back((G4Vtx[0] * unit) / micrometer);
303  G4VtxY.push_back((G4Vtx[1] * unit) / micrometer);
304  G4VtxZ.push_back((G4Vtx[2] * unit) / millimeter);
305  }
306 
307  if (verbosity > 1) {
308  eventout += "\n Number of G4Vertices collected:............ ";
309  eventout += i;
310  }
311 
313  // get G4Track information
316  iEvent.getByToken(G4TrkSrc_Token_, G4TrkContainer);
317 
318  if (!G4TrkContainer.isValid()) {
319  edm::LogWarning(MsgLoggerCat) << "Unable to find SimTrack in event!";
320  return;
321  }
322  i = 0;
323  edm::SimTrackContainer::const_iterator itTrk;
324  for (itTrk = G4TrkContainer->begin(); itTrk != G4TrkContainer->end(); ++itTrk) {
325  ++i;
326 
327  const math::XYZTLorentzVector G4Trk1(
328  itTrk->momentum().x(), itTrk->momentum().y(), itTrk->momentum().z(), itTrk->momentum().e());
329  double G4Trk[4];
330  G4Trk1.GetCoordinates(G4Trk);
331 
332  G4TrkPt.push_back(sqrt(G4Trk[0] * G4Trk[0] + G4Trk[1] * G4Trk[1])); // GeV
333  G4TrkE.push_back(G4Trk[3]); // GeV
334  }
335 
336  if (verbosity > 1) {
337  eventout += "\n Number of G4Tracks collected:.............. ";
338  eventout += i;
339  }
340 
341  if (verbosity > 0)
342  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
343 
344  return;
345 }
346 
348  std::string MsgLoggerCat = "GlobalHitsProducer_storeG4MC";
349 
350  if (verbosity > 2) {
351  TString eventout("\n nRawGenPart = ");
352  eventout += nRawGenPart;
353  eventout += "\n nG4Vtx = ";
354  eventout += G4VtxX.size();
355  for (unsigned int i = 0; i < G4VtxX.size(); ++i) {
356  eventout += "\n (x,y,z) = (";
357  eventout += G4VtxX[i];
358  eventout += ", ";
359  eventout += G4VtxY[i];
360  eventout += ", ";
361  eventout += G4VtxZ[i];
362  eventout += ")";
363  }
364  eventout += "\n nG4Trk = ";
365  eventout += G4TrkPt.size();
366  for (unsigned int i = 0; i < G4TrkPt.size(); ++i) {
367  eventout += "\n (pt,e) = (";
368  eventout += G4TrkPt[i];
369  eventout += ", ";
370  eventout += G4TrkE[i];
371  eventout += ")";
372  }
373  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
374  } // end verbose output
375 
376  product.putRawGenPart(nRawGenPart);
377  product.putG4Vtx(G4VtxX, G4VtxY, G4VtxZ);
378  product.putG4Trk(G4TrkPt, G4TrkE);
379 
380  return;
381 }
382 
384  std::string MsgLoggerCat = "GlobalHitsProducer_fillTrk";
385 
386  TString eventout;
387  if (verbosity > 0)
388  eventout = "\nGathering info:";
389 
390  // access the tracker geometry
391  const auto &theTrackerGeometry = iSetup.getHandle(tGeomToken_);
392  if (!theTrackerGeometry.isValid()) {
393  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerDigiGeometryRecord in event!";
394  return;
395  }
396  const TrackerGeometry &theTracker(*theTrackerGeometry);
397 
398  // iterator to access containers
399  edm::PSimHitContainer::const_iterator itHit;
400 
402  // get Pixel Barrel information
404  edm::PSimHitContainer thePxlBrlHits;
405  // extract low container
406  edm::Handle<edm::PSimHitContainer> PxlBrlLowContainer;
407  iEvent.getByToken(PxlBrlLowSrc_Token_, PxlBrlLowContainer);
408  if (!PxlBrlLowContainer.isValid()) {
409  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsPixelBarrelLowTof in event!";
410  return;
411  }
412  // extract high container
413  edm::Handle<edm::PSimHitContainer> PxlBrlHighContainer;
414  iEvent.getByToken(PxlBrlHighSrc_Token_, PxlBrlHighContainer);
415  if (!PxlBrlHighContainer.isValid()) {
416  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsPixelBarrelHighTof in event!";
417  return;
418  }
419  // place both containers into new container
420  thePxlBrlHits.insert(thePxlBrlHits.end(), PxlBrlLowContainer->begin(), PxlBrlLowContainer->end());
421  thePxlBrlHits.insert(thePxlBrlHits.end(), PxlBrlHighContainer->begin(), PxlBrlHighContainer->end());
422 
423  // cycle through new container
424  int i = 0, j = 0;
425  for (itHit = thePxlBrlHits.begin(); itHit != thePxlBrlHits.end(); ++itHit) {
426  ++i;
427 
428  // create a DetId from the detUnitId
429  DetId theDetUnitId(itHit->detUnitId());
430  int detector = theDetUnitId.det();
431  int subdetector = theDetUnitId.subdetId();
432 
433  // check that expected detector is returned
434  if ((detector == dTrk) && (subdetector == sdPxlBrl)) {
435  // get the GeomDetUnit from the geometry using theDetUnitID
436  const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
437 
438  if (!theDet) {
439  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from PxlBrlHits for Hit " << i;
440  continue;
441  }
442 
443  ++j;
444 
445  // get the Surface of the hit (knows how to go from local <-> global)
446  const BoundPlane &bSurface = theDet->surface();
447 
448  // gather necessary information
449  PxlBrlToF.push_back(itHit->tof());
450  PxlBrlR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
451  PxlBrlPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
452  PxlBrlEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
453 
454  } else {
455  edm::LogWarning(MsgLoggerCat) << "PxlBrl PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
456  << sdPxlBrl << "); value returned is: (" << detector << "," << subdetector << ")";
457  continue;
458  } // end detector type check
459  } // end loop through PxlBrl Hits
460 
461  if (verbosity > 1) {
462  eventout += "\n Number of Pixel Barrel Hits collected:..... ";
463  eventout += j;
464  }
465 
467  // get Pixel Forward information
469  edm::PSimHitContainer thePxlFwdHits;
470  // extract low container
471  edm::Handle<edm::PSimHitContainer> PxlFwdLowContainer;
472  iEvent.getByToken(PxlFwdLowSrc_Token_, PxlFwdLowContainer);
473  if (!PxlFwdLowContainer.isValid()) {
474  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsPixelEndcapLowTof in event!";
475  return;
476  }
477  // extract high container
478  edm::Handle<edm::PSimHitContainer> PxlFwdHighContainer;
479  iEvent.getByToken(PxlFwdHighSrc_Token_, PxlFwdHighContainer);
480  if (!PxlFwdHighContainer.isValid()) {
481  edm::LogWarning("GlobalHitsProducer_fillTrk") << "Unable to find TrackerHitsPixelEndcapHighTof in event!";
482  return;
483  }
484  // place both containers into new container
485  thePxlFwdHits.insert(thePxlFwdHits.end(), PxlFwdLowContainer->begin(), PxlFwdLowContainer->end());
486  thePxlFwdHits.insert(thePxlFwdHits.end(), PxlFwdHighContainer->begin(), PxlFwdHighContainer->end());
487 
488  // cycle through new container
489  i = 0;
490  j = 0;
491  for (itHit = thePxlFwdHits.begin(); itHit != thePxlFwdHits.end(); ++itHit) {
492  ++i;
493 
494  // create a DetId from the detUnitId
495  DetId theDetUnitId(itHit->detUnitId());
496  int detector = theDetUnitId.det();
497  int subdetector = theDetUnitId.subdetId();
498 
499  // check that expected detector is returned
500  if ((detector == dTrk) && (subdetector == sdPxlFwd)) {
501  // get the GeomDetUnit from the geometry using theDetUnitID
502  const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
503 
504  if (!theDet) {
505  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from PxlFwdHits for Hit " << i;
506  ;
507  continue;
508  }
509 
510  ++j;
511 
512  // get the Surface of the hit (knows how to go from local <-> global)
513  const BoundPlane &bSurface = theDet->surface();
514 
515  // gather necessary information
516  PxlFwdToF.push_back(itHit->tof());
517  PxlFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
518  PxlFwdPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
519  PxlFwdEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
520  } else {
521  edm::LogWarning(MsgLoggerCat) << "PxlFwd PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
522  << sdPxlFwd << "); value returned is: (" << detector << "," << subdetector << ")";
523  continue;
524  } // end detector type check
525  } // end loop through PxlFwd Hits
526 
527  if (verbosity > 1) {
528  eventout += "\n Number of Pixel Forward Hits collected:.... ";
529  eventout += j;
530  }
531 
533  // get Silicon Barrel information
535  edm::PSimHitContainer theSiBrlHits;
536  // extract TIB low container
537  edm::Handle<edm::PSimHitContainer> SiTIBLowContainer;
538  iEvent.getByToken(SiTIBLowSrc_Token_, SiTIBLowContainer);
539  if (!SiTIBLowContainer.isValid()) {
540  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTIBLowTof in event!";
541  return;
542  }
543  // extract TIB high container
544  edm::Handle<edm::PSimHitContainer> SiTIBHighContainer;
545  iEvent.getByToken(SiTIBHighSrc_Token_, SiTIBHighContainer);
546  if (!SiTIBHighContainer.isValid()) {
547  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTIBHighTof in event!";
548  return;
549  }
550  // extract TOB low container
551  edm::Handle<edm::PSimHitContainer> SiTOBLowContainer;
552  iEvent.getByToken(SiTOBLowSrc_Token_, SiTOBLowContainer);
553  if (!SiTOBLowContainer.isValid()) {
554  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTOBLowTof in event!";
555  return;
556  }
557  // extract TOB high container
558  edm::Handle<edm::PSimHitContainer> SiTOBHighContainer;
559  iEvent.getByToken(SiTOBHighSrc_Token_, SiTOBHighContainer);
560  if (!SiTOBHighContainer.isValid()) {
561  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTOBHighTof in event!";
562  return;
563  }
564  // place all containers into new container
565  theSiBrlHits.insert(theSiBrlHits.end(), SiTIBLowContainer->begin(), SiTIBLowContainer->end());
566  theSiBrlHits.insert(theSiBrlHits.end(), SiTIBHighContainer->begin(), SiTIBHighContainer->end());
567  theSiBrlHits.insert(theSiBrlHits.end(), SiTOBLowContainer->begin(), SiTOBLowContainer->end());
568  theSiBrlHits.insert(theSiBrlHits.end(), SiTOBHighContainer->begin(), SiTOBHighContainer->end());
569 
570  // cycle through new container
571  i = 0;
572  j = 0;
573  for (itHit = theSiBrlHits.begin(); itHit != theSiBrlHits.end(); ++itHit) {
574  ++i;
575 
576  // create a DetId from the detUnitId
577  DetId theDetUnitId(itHit->detUnitId());
578  int detector = theDetUnitId.det();
579  int subdetector = theDetUnitId.subdetId();
580 
581  // check that expected detector is returned
582  if ((detector == dTrk) && ((subdetector == sdSiTIB) || (subdetector == sdSiTOB))) {
583  // get the GeomDetUnit from the geometry using theDetUnitID
584  const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
585 
586  if (!theDet) {
587  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from SiBrlHits for Hit " << i;
588  continue;
589  }
590 
591  ++j;
592 
593  // get the Surface of the hit (knows how to go from local <-> global)
594  const BoundPlane &bSurface = theDet->surface();
595 
596  // gather necessary information
597  SiBrlToF.push_back(itHit->tof());
598  SiBrlR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
599  SiBrlPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
600  SiBrlEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
601  } else {
602  edm::LogWarning(MsgLoggerCat) << "SiBrl PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
603  << sdSiTIB << " || " << sdSiTOB << "); value returned is: (" << detector << ","
604  << subdetector << ")";
605  continue;
606  } // end detector type check
607  } // end loop through SiBrl Hits
608 
609  if (verbosity > 1) {
610  eventout += "\n Number of Silicon Barrel Hits collected:... ";
611  eventout += j;
612  }
613 
615  // get Silicon Forward information
617  edm::PSimHitContainer theSiFwdHits;
618  // extract TID low container
619  edm::Handle<edm::PSimHitContainer> SiTIDLowContainer;
620  iEvent.getByToken(SiTIDLowSrc_Token_, SiTIDLowContainer);
621  if (!SiTIDLowContainer.isValid()) {
622  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTIDLowTof in event!";
623  return;
624  }
625  // extract TID high container
626  edm::Handle<edm::PSimHitContainer> SiTIDHighContainer;
627  iEvent.getByToken(SiTIDHighSrc_Token_, SiTIDHighContainer);
628  if (!SiTIDHighContainer.isValid()) {
629  edm::LogWarning("GlobalHitsProducer_fillTrk") << "Unable to find TrackerHitsTIDHighTof in event!";
630  return;
631  }
632  // extract TEC low container
633  edm::Handle<edm::PSimHitContainer> SiTECLowContainer;
634  iEvent.getByToken(SiTECLowSrc_Token_, SiTECLowContainer);
635  if (!SiTECLowContainer.isValid()) {
636  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTECLowTof in event!";
637  return;
638  }
639  // extract TEC high container
640  edm::Handle<edm::PSimHitContainer> SiTECHighContainer;
641  iEvent.getByToken(SiTECHighSrc_Token_, SiTECHighContainer);
642  if (!SiTECHighContainer.isValid()) {
643  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTECHighTof in event!";
644  return;
645  }
646  // place all containers into new container
647  theSiFwdHits.insert(theSiFwdHits.end(), SiTIDLowContainer->begin(), SiTIDLowContainer->end());
648  theSiFwdHits.insert(theSiFwdHits.end(), SiTIDHighContainer->begin(), SiTIDHighContainer->end());
649  theSiFwdHits.insert(theSiFwdHits.end(), SiTECLowContainer->begin(), SiTECLowContainer->end());
650  theSiFwdHits.insert(theSiFwdHits.end(), SiTECHighContainer->begin(), SiTECHighContainer->end());
651 
652  // cycle through container
653  i = 0;
654  j = 0;
655  for (itHit = theSiFwdHits.begin(); itHit != theSiFwdHits.end(); ++itHit) {
656  ++i;
657 
658  // create a DetId from the detUnitId
659  DetId theDetUnitId(itHit->detUnitId());
660  int detector = theDetUnitId.det();
661  int subdetector = theDetUnitId.subdetId();
662 
663  // check that expected detector is returned
664  if ((detector == dTrk) && ((subdetector == sdSiTID) || (subdetector == sdSiTEC))) {
665  // get the GeomDetUnit from the geometry using theDetUnitID
666  const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
667 
668  if (!theDet) {
669  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from SiFwdHits Hit " << i;
670  return;
671  }
672 
673  ++j;
674 
675  // get the Surface of the hit (knows how to go from local <-> global)
676  const BoundPlane &bSurface = theDet->surface();
677 
678  // gather necessary information
679  SiFwdToF.push_back(itHit->tof());
680  SiFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
681  SiFwdPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
682  SiFwdEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
683  } else {
684  edm::LogWarning(MsgLoggerCat) << "SiFwd PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
685  << sdSiTOB << " || " << sdSiTEC << "); value returned is: (" << detector << ","
686  << subdetector << ")";
687  continue;
688  } // end check detector type
689  } // end loop through SiFwd Hits
690 
691  if (verbosity > 1) {
692  eventout += "\n Number of Silicon Forward Hits collected:.. ";
693  eventout += j;
694  }
695 
696  if (verbosity > 0)
697  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
698 
699  return;
700 }
701 
703  std::string MsgLoggerCat = "GlobalHitsProducer_storeTrk";
704 
705  if (verbosity > 2) {
706  TString eventout("\n nPxlBrlHits = ");
707  eventout += PxlBrlToF.size();
708  for (unsigned int i = 0; i < PxlBrlToF.size(); ++i) {
709  eventout += "\n (tof,r,phi,eta) = (";
710  eventout += PxlBrlToF[i];
711  eventout += ", ";
712  eventout += PxlBrlR[i];
713  eventout += ", ";
714  eventout += PxlBrlPhi[i];
715  eventout += ", ";
716  eventout += PxlBrlEta[i];
717  eventout += ")";
718  } // end PxlBrl output
719  eventout += "\n nPxlFwdHits = ";
720  eventout += PxlFwdToF.size();
721  for (unsigned int i = 0; i < PxlFwdToF.size(); ++i) {
722  eventout += "\n (tof,z,phi,eta) = (";
723  eventout += PxlFwdToF[i];
724  eventout += ", ";
725  eventout += PxlFwdZ[i];
726  eventout += ", ";
727  eventout += PxlFwdPhi[i];
728  eventout += ", ";
729  eventout += PxlFwdEta[i];
730  eventout += ")";
731  } // end PxlFwd output
732  eventout += "\n nSiBrlHits = ";
733  eventout += SiBrlToF.size();
734  for (unsigned int i = 0; i < SiBrlToF.size(); ++i) {
735  eventout += "\n (tof,r,phi,eta) = (";
736  eventout += SiBrlToF[i];
737  eventout += ", ";
738  eventout += SiBrlR[i];
739  eventout += ", ";
740  eventout += SiBrlPhi[i];
741  eventout += ", ";
742  eventout += SiBrlEta[i];
743  eventout += ")";
744  } // end SiBrl output
745  eventout += "\n nSiFwdHits = ";
746  eventout += SiFwdToF.size();
747  for (unsigned int i = 0; i < SiFwdToF.size(); ++i) {
748  eventout += "\n (tof,z,phi,eta) = (";
749  eventout += SiFwdToF[i];
750  eventout += ", ";
751  eventout += SiFwdZ[i];
752  eventout += ", ";
753  eventout += SiFwdPhi[i];
754  eventout += ", ";
755  eventout += SiFwdEta[i];
756  eventout += ")";
757  } // end SiFwd output
758  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
759  } // end verbose output
760 
765 
766  return;
767 }
768 
770  std::string MsgLoggerCat = "GlobalHitsProducer_fillMuon";
771 
772  TString eventout;
773  if (verbosity > 0)
774  eventout = "\nGathering info:";
775 
776  // iterator to access containers
777  edm::PSimHitContainer::const_iterator itHit;
778 
779  // int i = 0, j = 0;
781  // access the CSC Muon
783  // access the CSC Muon geometry
784  const auto &theCSCGeometry = iSetup.getHandle(cscGeomToken_);
785  if (!theCSCGeometry.isValid()) {
786  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the CSCGeometry in event!";
787  return;
788  }
789  const CSCGeometry &theCSCMuon(*theCSCGeometry);
790 
791  // get Muon CSC information
792  edm::Handle<edm::PSimHitContainer> MuonCSCContainer;
793  iEvent.getByToken(MuonCscSrc_Token_, MuonCSCContainer);
794  if (!MuonCSCContainer.isValid()) {
795  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonCSCHits in event!";
796  return;
797  }
798 
799  // cycle through container
800  int i = 0, j = 0;
801  for (itHit = MuonCSCContainer->begin(); itHit != MuonCSCContainer->end(); ++itHit) {
802  ++i;
803 
804  // create a DetId from the detUnitId
805  DetId theDetUnitId(itHit->detUnitId());
806  int detector = theDetUnitId.det();
807  int subdetector = theDetUnitId.subdetId();
808 
809  // check that expected detector is returned
810  if ((detector == dMuon) && (subdetector == sdMuonCSC)) {
811  // get the GeomDetUnit from the geometry using theDetUnitID
812  const GeomDetUnit *theDet = theCSCMuon.idToDetUnit(theDetUnitId);
813 
814  if (!theDet) {
815  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theCSCMuon for hit " << i;
816  continue;
817  }
818 
819  ++j;
820 
821  // get the Surface of the hit (knows how to go from local <-> global)
822  const BoundPlane &bSurface = theDet->surface();
823 
824  // gather necessary information
825  MuonCscToF.push_back(itHit->tof());
826  MuonCscZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
827  MuonCscPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
828  MuonCscEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
829  } else {
830  edm::LogWarning(MsgLoggerCat) << "MuonCsc PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon << ","
831  << sdMuonCSC << "); value returned is: (" << detector << "," << subdetector << ")";
832  continue;
833  } // end detector type check
834  } // end loop through CSC Hits
835 
836  if (verbosity > 1) {
837  eventout += "\n Number of CSC muon Hits collected:......... ";
838  eventout += j;
839  }
840 
841  // i = 0, j = 0;
843  // access the DT Muon
845  // access the DT Muon geometry
846  const auto &theDTGeometry = iSetup.getHandle(dtGeomToken_);
847  if (!theDTGeometry.isValid()) {
848  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the DTGeometry in event!";
849  return;
850  }
851  const DTGeometry &theDTMuon(*theDTGeometry);
852 
853  // get Muon DT information
854  edm::Handle<edm::PSimHitContainer> MuonDtContainer;
855  iEvent.getByToken(MuonDtSrc_Token_, MuonDtContainer);
856  if (!MuonDtContainer.isValid()) {
857  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonDTHits in event!";
858  return;
859  }
860 
861  // cycle through container
862  i = 0, j = 0;
863  for (itHit = MuonDtContainer->begin(); itHit != MuonDtContainer->end(); ++itHit) {
864  ++i;
865 
866  // create a DetId from the detUnitId
867  DetId theDetUnitId(itHit->detUnitId());
868  int detector = theDetUnitId.det();
869  int subdetector = theDetUnitId.subdetId();
870 
871  // check that expected detector is returned
872  if ((detector == dMuon) && (subdetector == sdMuonDT)) {
873  // CSC uses wires and layers rather than the full detID
874  // get the wireId
875  DTWireId wireId(itHit->detUnitId());
876 
877  // get the DTLayer from the geometry using the wireID
878  const DTLayer *theDet = theDTMuon.layer(wireId.layerId());
879 
880  if (!theDet) {
881  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theDtMuon for hit " << i;
882  continue;
883  }
884 
885  ++j;
886 
887  // get the Surface of the hit (knows how to go from local <-> global)
888  const BoundPlane &bSurface = theDet->surface();
889 
890  // gather necessary information
891  MuonDtToF.push_back(itHit->tof());
892  MuonDtR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
893  MuonDtPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
894  MuonDtEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
895  } else {
896  edm::LogWarning(MsgLoggerCat) << "MuonDt PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon << ","
897  << sdMuonDT << "); value returned is: (" << detector << "," << subdetector << ")";
898  continue;
899  } // end detector type check
900  } // end loop through DT Hits
901 
902  if (verbosity > 1) {
903  eventout += "\n Number of DT muon Hits collected:.......... ";
904  eventout += j;
905  }
906 
907  // i = 0, j = 0;
908  // int RPCBrl = 0, RPCFwd = 0;
910  // access the RPC Muon
912  // access the RPC Muon geometry
913  const auto &theRPCGeometry = iSetup.getHandle(rpcGeomToken_);
914  if (!theRPCGeometry.isValid()) {
915  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the RPCGeometry in event!";
916  return;
917  }
918  const RPCGeometry &theRPCMuon(*theRPCGeometry);
919 
920  // get Muon RPC information
921  edm::Handle<edm::PSimHitContainer> MuonRPCContainer;
922  iEvent.getByToken(MuonRpcSrc_Token_, MuonRPCContainer);
923  if (!MuonRPCContainer.isValid()) {
924  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonRPCHits in event!";
925  return;
926  }
927 
928  // cycle through container
929  i = 0, j = 0;
930  int RPCBrl = 0, RPCFwd = 0;
931  for (itHit = MuonRPCContainer->begin(); itHit != MuonRPCContainer->end(); ++itHit) {
932  ++i;
933 
934  // create a DetID from the detUnitId
935  DetId theDetUnitId(itHit->detUnitId());
936  int detector = theDetUnitId.det();
937  int subdetector = theDetUnitId.subdetId();
938 
939  // check that expected detector is returned
940  if ((detector == dMuon) && (subdetector == sdMuonRPC)) {
941  // get an RPCDetID from the detUnitID
942  RPCDetId RPCId(itHit->detUnitId());
943 
944  // find the region of the RPC hit
945  int region = RPCId.region();
946 
947  // get the GeomDetUnit from the geometry using the RPCDetId
948  const GeomDetUnit *theDet = theRPCMuon.idToDetUnit(theDetUnitId);
949 
950  if (!theDet) {
951  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theRPCMuon for hit " << i;
952  continue;
953  }
954 
955  ++j;
956 
957  // get the Surface of the hit (knows how to go from local <-> global)
958  const BoundPlane &bSurface = theDet->surface();
959 
960  // gather necessary information
961  if ((region == sdMuonRPCRgnFwdp) || (region == sdMuonRPCRgnFwdn)) {
962  ++RPCFwd;
963 
964  MuonRpcFwdToF.push_back(itHit->tof());
965  MuonRpcFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
966  MuonRpcFwdPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
967  MuonRpcFwdEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
968  } else if (region == sdMuonRPCRgnBrl) {
969  ++RPCBrl;
970 
971  MuonRpcBrlToF.push_back(itHit->tof());
972  MuonRpcBrlR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
973  MuonRpcBrlPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
974  MuonRpcBrlEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
975  } else {
976  edm::LogWarning(MsgLoggerCat) << "Invalid region for RPC Muon hit" << i;
977  continue;
978  } // end check of region
979  } else {
980  edm::LogWarning(MsgLoggerCat) << "MuonRpc PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon << ","
981  << sdMuonRPC << "); value returned is: (" << detector << "," << subdetector << ")";
982  continue;
983  } // end detector type check
984  } // end loop through RPC Hits
985 
986  if (verbosity > 1) {
987  eventout += "\n Number of RPC muon Hits collected:......... ";
988  eventout += j;
989  eventout += "\n RPC Barrel muon Hits:............ ";
990  eventout += RPCBrl;
991  eventout += "\n RPC Forward muon Hits:........... ";
992  eventout += RPCFwd;
993  }
994 
995  if (verbosity > 0)
996  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
997 
998  return;
999 }
1000 
1002  std::string MsgLoggerCat = "GlobalHitsProducer_storeMuon";
1003 
1004  if (verbosity > 2) {
1005  TString eventout("\n nMuonCSCHits = ");
1006  eventout += MuonCscToF.size();
1007  for (unsigned int i = 0; i < MuonCscToF.size(); ++i) {
1008  eventout += "\n (tof,z,phi,eta) = (";
1009  eventout += MuonCscToF[i];
1010  eventout += ", ";
1011  eventout += MuonCscZ[i];
1012  eventout += ", ";
1013  eventout += MuonCscPhi[i];
1014  eventout += ", ";
1015  eventout += MuonCscEta[i];
1016  eventout += ")";
1017  } // end MuonCsc output
1018  eventout += "\n nMuonDtHits = ";
1019  eventout += MuonDtToF.size();
1020  for (unsigned int i = 0; i < MuonDtToF.size(); ++i) {
1021  eventout += "\n (tof,r,phi,eta) = (";
1022  eventout += MuonDtToF[i];
1023  eventout += ", ";
1024  eventout += MuonDtR[i];
1025  eventout += ", ";
1026  eventout += MuonDtPhi[i];
1027  eventout += ", ";
1028  eventout += MuonDtEta[i];
1029  eventout += ")";
1030  } // end MuonDt output
1031  eventout += "\n nMuonRpcBrlHits = ";
1032  eventout += MuonRpcBrlToF.size();
1033  for (unsigned int i = 0; i < MuonRpcBrlToF.size(); ++i) {
1034  eventout += "\n (tof,r,phi,eta) = (";
1035  eventout += MuonRpcBrlToF[i];
1036  eventout += ", ";
1037  eventout += MuonRpcBrlR[i];
1038  eventout += ", ";
1039  eventout += MuonRpcBrlPhi[i];
1040  eventout += ", ";
1041  eventout += MuonRpcBrlEta[i];
1042  eventout += ")";
1043  } // end MuonRpcBrl output
1044  eventout += "\n nMuonRpcFwdHits = ";
1045  eventout += MuonRpcFwdToF.size();
1046  for (unsigned int i = 0; i < MuonRpcFwdToF.size(); ++i) {
1047  eventout += "\n (tof,z,phi,eta) = (";
1048  eventout += MuonRpcFwdToF[i];
1049  eventout += ", ";
1050  eventout += MuonRpcFwdZ[i];
1051  eventout += ", ";
1052  eventout += MuonRpcFwdPhi[i];
1053  eventout += ", ";
1054  eventout += MuonRpcFwdEta[i];
1055  eventout += ")";
1056  } // end MuonRpcFwd output
1057  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1058  } // end verbose output
1059 
1064 
1065  return;
1066 }
1067 
1069  std::string MsgLoggerCat = "GlobalHitsProducer_fillECal";
1070 
1071  TString eventout;
1072  if (verbosity > 0)
1073  eventout = "\nGathering info:";
1074 
1075  // access the calorimeter geometry
1076  const auto &theCaloGeometry = iSetup.getHandle(caloGeomToken_);
1077  if (!theCaloGeometry.isValid()) {
1078  edm::LogWarning(MsgLoggerCat) << "Unable to find CaloGeometryRecord in event!";
1079  return;
1080  }
1081  const CaloGeometry &theCalo(*theCaloGeometry);
1082 
1083  // iterator to access containers
1084  edm::PCaloHitContainer::const_iterator itHit;
1085 
1087  // get ECal information
1089  edm::PCaloHitContainer theECalHits;
1090  // extract EB container
1092  iEvent.getByToken(ECalEBSrc_Token_, EBContainer);
1093  if (!EBContainer.isValid()) {
1094  edm::LogWarning(MsgLoggerCat) << "Unable to find EcalHitsEB in event!";
1095  return;
1096  }
1097  // extract EE container
1099  iEvent.getByToken(ECalEESrc_Token_, EEContainer);
1100  if (!EEContainer.isValid()) {
1101  edm::LogWarning(MsgLoggerCat) << "Unable to find EcalHitsEE in event!";
1102  return;
1103  }
1104  // place both containers into new container
1105  theECalHits.insert(theECalHits.end(), EBContainer->begin(), EBContainer->end());
1106  theECalHits.insert(theECalHits.end(), EEContainer->begin(), EEContainer->end());
1107 
1108  // cycle through new container
1109  int i = 0, j = 0;
1110  for (itHit = theECalHits.begin(); itHit != theECalHits.end(); ++itHit) {
1111  ++i;
1112 
1113  // create a DetId from the detUnitId
1114  DetId theDetUnitId(itHit->id());
1115  int detector = theDetUnitId.det();
1116  int subdetector = theDetUnitId.subdetId();
1117 
1118  // check that expected detector is returned
1119  if ((detector == dEcal) && ((subdetector == sdEcalBrl) || (subdetector == sdEcalFwd))) {
1120  // get the Cell geometry
1121  auto theDet = (theCalo.getSubdetectorGeometry(theDetUnitId))->getGeometry(theDetUnitId);
1122 
1123  if (!theDet) {
1124  edm::LogWarning(MsgLoggerCat) << "Unable to get CaloCellGeometry from ECalHits for Hit " << i;
1125  continue;
1126  }
1127 
1128  ++j;
1129 
1130  // get the global position of the cell
1131  const GlobalPoint &globalposition = theDet->getPosition();
1132 
1133  // gather necessary information
1134  ECalE.push_back(itHit->energy());
1135  ECalToF.push_back(itHit->time());
1136  ECalPhi.push_back(globalposition.phi());
1137  ECalEta.push_back(globalposition.eta());
1138 
1139  } else {
1140  edm::LogWarning(MsgLoggerCat) << "ECal PCaloHit " << i << " is expected to be (det,subdet) = (" << dEcal << ","
1141  << sdEcalBrl << " || " << sdEcalFwd << "); value returned is: (" << detector << ","
1142  << subdetector << ")";
1143  continue;
1144  } // end detector type check
1145  } // end loop through ECal Hits
1146 
1147  if (verbosity > 1) {
1148  eventout += "\n Number of ECal Hits collected:............. ";
1149  eventout += j;
1150  }
1151 
1153  // Get Preshower information
1155  // extract PreShower container
1156  edm::Handle<edm::PCaloHitContainer> PreShContainer;
1157  iEvent.getByToken(ECalESSrc_Token_, PreShContainer);
1158  if (!PreShContainer.isValid()) {
1159  edm::LogWarning(MsgLoggerCat) << "Unable to find EcalHitsES in event!";
1160  return;
1161  }
1162 
1163  // cycle through container
1164  i = 0, j = 0;
1165  for (itHit = PreShContainer->begin(); itHit != PreShContainer->end(); ++itHit) {
1166  ++i;
1167 
1168  // create a DetId from the detUnitId
1169  DetId theDetUnitId(itHit->id());
1170  int detector = theDetUnitId.det();
1171  int subdetector = theDetUnitId.subdetId();
1172 
1173  // check that expected detector is returned
1174  if ((detector == dEcal) && (subdetector == sdEcalPS)) {
1175  // get the Cell geometry
1176  auto theDet = (theCalo.getSubdetectorGeometry(theDetUnitId))->getGeometry(theDetUnitId);
1177 
1178  if (!theDet) {
1179  edm::LogWarning(MsgLoggerCat) << "Unable to get CaloCellGeometry from PreShContainer for Hit " << i;
1180  continue;
1181  }
1182 
1183  ++j;
1184 
1185  // get the global position of the cell
1186  const GlobalPoint &globalposition = theDet->getPosition();
1187 
1188  // gather necessary information
1189  PreShE.push_back(itHit->energy());
1190  PreShToF.push_back(itHit->time());
1191  PreShPhi.push_back(globalposition.phi());
1192  PreShEta.push_back(globalposition.eta());
1193 
1194  } else {
1195  edm::LogWarning(MsgLoggerCat) << "PreSh PCaloHit " << i << " is expected to be (det,subdet) = (" << dEcal << ","
1196  << sdEcalPS << "); value returned is: (" << detector << "," << subdetector << ")";
1197  continue;
1198  } // end detector type check
1199  } // end loop through PreShower Hits
1200 
1201  if (verbosity > 1) {
1202  eventout += "\n Number of PreSh Hits collected:............ ";
1203  eventout += j;
1204  }
1205 
1206  if (verbosity > 0)
1207  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1208 
1209  return;
1210 }
1211 
1213  std::string MsgLoggerCat = "GlobalHitsProducer_storeECal";
1214 
1215  if (verbosity > 2) {
1216  TString eventout("\n nECalHits = ");
1217  eventout += ECalE.size();
1218  for (unsigned int i = 0; i < ECalE.size(); ++i) {
1219  eventout += "\n (e,tof,phi,eta) = (";
1220  eventout += ECalE[i];
1221  eventout += ", ";
1222  eventout += ECalToF[i];
1223  eventout += ", ";
1224  eventout += ECalPhi[i];
1225  eventout += ", ";
1226  eventout += ECalEta[i];
1227  eventout += ")";
1228  } // end ECal output
1229  eventout += "\n nPreShHits = ";
1230  eventout += PreShE.size();
1231  for (unsigned int i = 0; i < PreShE.size(); ++i) {
1232  eventout += "\n (e,tof,phi,eta) = (";
1233  eventout += PreShE[i];
1234  eventout += ", ";
1235  eventout += PreShToF[i];
1236  eventout += ", ";
1237  eventout += PreShPhi[i];
1238  eventout += ", ";
1239  eventout += PreShEta[i];
1240  eventout += ")";
1241  } // end PreShower output
1242  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1243  } // end verbose output
1244 
1245  product.putECalHits(ECalE, ECalToF, ECalPhi, ECalEta);
1247 
1248  return;
1249 }
1250 
1252  std::string MsgLoggerCat = "GlobalHitsProducer_fillHCal";
1253 
1254  TString eventout;
1255  if (verbosity > 0)
1256  eventout = "\nGathering info:";
1257 
1258  // access the calorimeter geometry
1259  const auto &theCaloGeometry = iSetup.getHandle(caloGeomToken_);
1260  if (!theCaloGeometry.isValid()) {
1261  edm::LogWarning(MsgLoggerCat) << "Unable to find CaloGeometryRecord in event!";
1262  return;
1263  }
1264  const CaloGeometry &theCalo(*theCaloGeometry);
1265 
1266  // iterator to access containers
1267  edm::PCaloHitContainer::const_iterator itHit;
1268 
1270  // get HCal information
1272  // extract HCal container
1274  iEvent.getByToken(HCalSrc_Token_, HCalContainer);
1275  if (!HCalContainer.isValid()) {
1276  edm::LogWarning(MsgLoggerCat) << "Unable to find HCalHits in event!";
1277  return;
1278  }
1279 
1280  // cycle through container
1281  int i = 0, j = 0;
1282  for (itHit = HCalContainer->begin(); itHit != HCalContainer->end(); ++itHit) {
1283  ++i;
1284 
1285  // create a DetId from the detUnitId
1286  DetId theDetUnitId(itHit->id());
1287  int detector = theDetUnitId.det();
1288  int subdetector = theDetUnitId.subdetId();
1289 
1290  // check that expected detector is returned
1291  if ((detector == dHcal) && ((subdetector == sdHcalBrl) || (subdetector == sdHcalEC) || (subdetector == sdHcalOut) ||
1292  (subdetector == sdHcalFwd))) {
1293  // get the Cell geometry
1294  const HcalGeometry *theDet = dynamic_cast<const HcalGeometry *>(theCalo.getSubdetectorGeometry(theDetUnitId));
1295 
1296  if (!theDet) {
1297  edm::LogWarning(MsgLoggerCat) << "Unable to get CaloCellGeometry from HCalContainer for Hit " << i;
1298  continue;
1299  }
1300 
1301  ++j;
1302 
1303  // get the global position of the cell
1304  const GlobalPoint &globalposition = theDet->getPosition(theDetUnitId);
1305 
1306  // gather necessary information
1307  HCalE.push_back(itHit->energy());
1308  HCalToF.push_back(itHit->time());
1309  HCalPhi.push_back(globalposition.phi());
1310  HCalEta.push_back(globalposition.eta());
1311 
1312  } else {
1313  edm::LogWarning(MsgLoggerCat) << "HCal PCaloHit " << i << " is expected to be (det,subdet) = (" << dHcal << ","
1314  << sdHcalBrl << " || " << sdHcalEC << " || " << sdHcalOut << " || " << sdHcalFwd
1315  << "); value returned is: (" << detector << "," << subdetector << ")";
1316  continue;
1317  } // end detector type check
1318  } // end loop through HCal Hits
1319 
1320  if (verbosity > 1) {
1321  eventout += "\n Number of HCal Hits collected:............. ";
1322  eventout += j;
1323  }
1324 
1325  if (verbosity > 0)
1326  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1327 
1328  return;
1329 }
1330 
1332  std::string MsgLoggerCat = "GlobalHitsProducer_storeHCal";
1333 
1334  if (verbosity > 2) {
1335  TString eventout("\n nHCalHits = ");
1336  eventout += HCalE.size();
1337  for (unsigned int i = 0; i < HCalE.size(); ++i) {
1338  eventout += "\n (e,tof,phi,eta) = (";
1339  eventout += HCalE[i];
1340  eventout += ", ";
1341  eventout += HCalToF[i];
1342  eventout += ", ";
1343  eventout += HCalPhi[i];
1344  eventout += ", ";
1345  eventout += HCalEta[i];
1346  eventout += ")";
1347  } // end HCal output
1348  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1349  } // end verbose output
1350 
1351  product.putHCalHits(HCalE, HCalToF, HCalPhi, HCalEta);
1352 
1353  return;
1354 }
1355 
1357  std::string MsgLoggerCat = "GlobalHitsProducer_clear";
1358 
1359  if (verbosity > 0)
1360  edm::LogInfo(MsgLoggerCat) << "Clearing event holders";
1361 
1362  // reset G4MC info
1363  nRawGenPart = 0;
1364  G4VtxX.clear();
1365  G4VtxY.clear();
1366  G4VtxZ.clear();
1367  G4TrkPt.clear();
1368  G4TrkE.clear();
1369 
1370  // reset electromagnetic info
1371  // reset ECal info
1372  ECalE.clear();
1373  ECalToF.clear();
1374  ECalPhi.clear();
1375  ECalEta.clear();
1376  // reset Preshower info
1377  PreShE.clear();
1378  PreShToF.clear();
1379  PreShPhi.clear();
1380  PreShEta.clear();
1381 
1382  // reset hadronic info
1383  // reset HCal info
1384  HCalE.clear();
1385  HCalToF.clear();
1386  HCalPhi.clear();
1387  HCalEta.clear();
1388 
1389  // reset tracker info
1390  // reset Pixel info
1391  PxlBrlToF.clear();
1392  PxlBrlR.clear();
1393  PxlBrlPhi.clear();
1394  PxlBrlEta.clear();
1395  PxlFwdToF.clear();
1396  PxlFwdZ.clear();
1397  PxlFwdPhi.clear();
1398  PxlFwdEta.clear();
1399  // reset strip info
1400  SiBrlToF.clear();
1401  SiBrlR.clear();
1402  SiBrlPhi.clear();
1403  SiBrlEta.clear();
1404  SiFwdToF.clear();
1405  SiFwdZ.clear();
1406  SiFwdPhi.clear();
1407  SiFwdEta.clear();
1408 
1409  // reset muon info
1410  // reset muon DT info
1411  MuonDtToF.clear();
1412  MuonDtR.clear();
1413  MuonDtPhi.clear();
1414  MuonDtEta.clear();
1415  // reset muon CSC info
1416  MuonCscToF.clear();
1417  MuonCscZ.clear();
1418  MuonCscPhi.clear();
1419  MuonCscEta.clear();
1420  // rest muon RPC info
1421  MuonRpcBrlToF.clear();
1422  MuonRpcBrlR.clear();
1423  MuonRpcBrlPhi.clear();
1424  MuonRpcBrlEta.clear();
1425  MuonRpcFwdToF.clear();
1426  MuonRpcFwdZ.clear();
1427  MuonRpcFwdPhi.clear();
1428  MuonRpcFwdEta.clear();
1429 
1430  return;
1431 }
edm::InputTag ECalESSrc_
void storeECal(PGlobalSimHit &)
edm::EDGetTokenT< edm::PSimHitContainer > SiTIBHighSrc_Token_
static const int dEcal
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
static const int dTrk
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::EDGetTokenT< edm::PSimHitContainer > SiTECHighSrc_Token_
std::vector< PCaloHit > PCaloHitContainer
static const int sdMuonRPCRgnFwdn
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
void produce(edm::Event &, const edm::EventSetup &) override
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeomToken_
static const int sdHcalOut
edm::InputTag ECalEESrc_
void putHCalHits(const std::vector< float > &e, const std::vector< float > &tof, const std::vector< float > &phi, const std::vector< float > &eta)
edm::ESGetToken< CSCGeometry, MuonGeometryRecord > cscGeomToken_
static const int sdMuonDT
edm::EDGetTokenT< edm::PSimHitContainer > MuonRpcSrc_Token_
edm::InputTag MuonCscSrc_
void putMuonRpcFwdHits(const std::vector< float > &tof, const std::vector< float > &z, const std::vector< float > &phi, const std::vector< float > &eta)
std::string const & instance() const
Definition: InputTag.h:37
TString subdetector
edm::InputTag MuonDtSrc_
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
void putMuonRpcBrlHits(const std::vector< float > &tof, const std::vector< float > &r, const std::vector< float > &phi, const std::vector< float > &eta)
static const int sdSiTID
T eta() const
Definition: PV3DBase.h:73
edm::InputTag SiTOBHighSrc_
edm::InputTag PxlBrlHighSrc_
edm::InputTag PxlBrlLowSrc_
unsigned long long EventNumber_t
static const int sdEcalPS
void putMuonCscHits(const std::vector< float > &tof, const std::vector< float > &z, const std::vector< float > &phi, const std::vector< float > &eta)
void putECalHits(const std::vector< float > &e, const std::vector< float > &tof, const std::vector< float > &phi, const std::vector< float > &eta)
void storeMuon(PGlobalSimHit &)
const GeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Definition: RPCGeometry.cc:30
edm::InputTag PxlFwdLowSrc_
static const int sdMuonRPC
std::string const & label() const
Definition: InputTag.h:36
void storeG4MC(PGlobalSimHit &)
Provenance const * provenance() const
Definition: HandleBase.h:74
edm::EDGetTokenT< edm::PSimHitContainer > PxlBrlHighSrc_Token_
edm::InputTag SiTIDLowSrc_
void storeTrk(PGlobalSimHit &)
void beginJob(void) override
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::PSimHitContainer > PxlFwdHighSrc_Token_
edm::InputTag SiTECHighSrc_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
edm::EDGetTokenT< edm::PSimHitContainer > SiTIBLowSrc_Token_
char const * label
edm::InputTag ECalEBSrc_
void fillMuon(edm::Event &, const edm::EventSetup &)
void putG4Trk(const std::vector< float > &pt, const std::vector< float > &e)
edm::EDGetTokenT< edm::PCaloHitContainer > HCalSrc_Token_
edm::EDGetTokenT< edm::PSimHitContainer > MuonCscSrc_Token_
int iEvent
Definition: GenABIO.cc:224
GlobalHitsProducer(const edm::ParameterSet &)
static const int sdSiTIB
static const int sdPxlBrl
void endJob() override
T sqrt(T t)
Definition: SSEVec.h:19
void putSiBrlHits(const std::vector< float > &tof, const std::vector< float > &r, const std::vector< float > &phi, const std::vector< float > &eta)
static const int sdMuonCSC
void putPxlFwdHits(const std::vector< float > &tof, const std::vector< float > &z, const std::vector< float > &phi, const std::vector< float > &eta)
static const int sdEcalFwd
void fillTrk(edm::Event &, const edm::EventSetup &)
edm::InputTag SiTIBLowSrc_
edm::EDGetTokenT< edm::PSimHitContainer > SiTIDLowSrc_Token_
edm::InputTag SiTECLowSrc_
BranchDescription const & branchDescription() const
Definition: Provenance.h:45
static const int sdSiTOB
static const int sdEcalBrl
static const int sdMuonRPCRgnFwdp
static const int sdMuonRPCRgnBrl
edm::InputTag SiTIDHighSrc_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tGeomToken_
edm::EDGetTokenT< edm::PSimHitContainer > SiTOBLowSrc_Token_
void putSiFwdHits(const std::vector< float > &tof, const std::vector< float > &z, const std::vector< float > &phi, const std::vector< float > &eta)
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
T perp() const
Magnitude of transverse component.
Basic3DVector unit() const
edm::EDGetTokenT< edm::SimTrackContainer > G4TrkSrc_Token_
edm::InputTag PxlFwdHighSrc_
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:37
edm::EDGetTokenT< edm::PCaloHitContainer > ECalESSrc_Token_
const int verbosity
Log< level::Info, false > LogInfo
Definition: DetId.h:17
static const int dHcal
edm::EDGetTokenT< edm::PSimHitContainer > SiTOBHighSrc_Token_
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
void putPreShHits(const std::vector< float > &e, const std::vector< float > &tof, const std::vector< float > &phi, const std::vector< float > &eta)
void fillECal(edm::Event &, const edm::EventSetup &)
void fillHCal(edm::Event &, const edm::EventSetup &)
edm::ESGetToken< RPCGeometry, MuonGeometryRecord > rpcGeomToken_
std::vector< SimVertex > SimVertexContainer
edm::EDGetTokenT< edm::PSimHitContainer > SiTIDHighSrc_Token_
static const int sdHcalFwd
static const int sdHcalBrl
bool isValid() const
Definition: HandleBase.h:70
void storeHCal(PGlobalSimHit &)
edm::InputTag SiTOBLowSrc_
edm::EDGetTokenT< edm::PSimHitContainer > PxlFwdLowSrc_Token_
edm::EDGetTokenT< edm::PSimHitContainer > MuonDtSrc_Token_
edm::EDGetTokenT< edm::PSimHitContainer > PxlBrlLowSrc_Token_
edm::EDGetTokenT< edm::SimVertexContainer > G4VtxSrc_Token_
static const int sdSiTEC
static const int dMuon
edm::EDGetTokenT< edm::PCaloHitContainer > ECalEBSrc_Token_
edm::EDGetTokenT< edm::PCaloHitContainer > ECalEESrc_Token_
HLT enums.
GlobalPoint getPosition(const DetId &id) const
void putPxlBrlHits(const std::vector< float > &tof, const std::vector< float > &r, const std::vector< float > &phi, const std::vector< float > &eta)
void putRawGenPart(int n)
void putG4Vtx(const std::vector< float > &x, const std::vector< float > &y, const std::vector< float > &z)
void fillG4MC(edm::Event &)
void putMuonDtHits(const std::vector< float > &tof, const std::vector< float > &r, const std::vector< float > &phi, const std::vector< float > &eta)
std::vector< PSimHit > PSimHitContainer
edm::EDGetTokenT< edm::PSimHitContainer > SiTECLowSrc_Token_
unsigned int RunNumber_t
static const int sdPxlFwd
Log< level::Warning, false > LogWarning
edm::InputTag SiTIBHighSrc_
std::vector< SimTrack > SimTrackContainer
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
edm::InputTag MuonRpcSrc_
static const int sdHcalEC
def move(src, dest)
Definition: eostools.py:511
edm::ESGetToken< DTGeometry, MuonGeometryRecord > dtGeomToken_
const GeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Definition: CSCGeometry.cc:89
const DTLayer * layer(const DTLayerId &id) const
Return a layer given its id.
Definition: DTGeometry.cc:96