CMS 3D CMS Logo

GlobalHitsAnalyzer.cc
Go to the documentation of this file.
1 
8 
11 
17 
19  : fName(""),
20  verbosity(0),
21  frequency(0),
22  vtxunit(0),
23  label(""),
24  getAllProvenances(false),
25  printProvenanceInfo(false),
27  G4VtxSrc_Token_(consumes<edm::SimVertexContainer>((iPSet.getParameter<edm::InputTag>("G4VtxSrc")))),
28  G4TrkSrc_Token_(consumes<edm::SimTrackContainer>(iPSet.getParameter<edm::InputTag>("G4TrkSrc"))),
29  count(0) {
30  consumesMany<edm::HepMCProduct>();
31  std::string MsgLoggerCat = "GlobalHitsAnalyzer_GlobalHitsAnalyzer";
32 
33  // get information from parameter set
34  fName = iPSet.getUntrackedParameter<std::string>("Name");
35  verbosity = iPSet.getUntrackedParameter<int>("Verbosity");
36  frequency = iPSet.getUntrackedParameter<int>("Frequency");
37  vtxunit = iPSet.getUntrackedParameter<int>("VtxUnit");
38  edm::ParameterSet m_Prov = iPSet.getParameter<edm::ParameterSet>("ProvenanceLookup");
39  getAllProvenances = m_Prov.getUntrackedParameter<bool>("GetAllProvenances");
40  printProvenanceInfo = m_Prov.getUntrackedParameter<bool>("PrintProvenanceInfo");
41  testNumber = iPSet.getUntrackedParameter<bool>("testNumber");
42 
43  // get Labels to use to extract information
44  PxlBrlLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlLowSrc");
45  PxlBrlHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlHighSrc");
46  PxlFwdLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdLowSrc");
47  PxlFwdHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdHighSrc");
48 
49  SiTIBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBLowSrc");
50  SiTIBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBHighSrc");
51  SiTOBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBLowSrc");
52  SiTOBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBHighSrc");
53  SiTIDLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDLowSrc");
54  SiTIDHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDHighSrc");
55  SiTECLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTECLowSrc");
56  SiTECHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTECHighSrc");
57 
58  MuonCscSrc_ = iPSet.getParameter<edm::InputTag>("MuonCscSrc");
59  MuonDtSrc_ = iPSet.getParameter<edm::InputTag>("MuonDtSrc");
60  MuonRpcSrc_ = iPSet.getParameter<edm::InputTag>("MuonRpcSrc");
61 
62  ECalEBSrc_ = iPSet.getParameter<edm::InputTag>("ECalEBSrc");
63  ECalEESrc_ = iPSet.getParameter<edm::InputTag>("ECalEESrc");
64  ECalESSrc_ = iPSet.getParameter<edm::InputTag>("ECalESSrc");
65 
66  HCalSrc_ = iPSet.getParameter<edm::InputTag>("HCalSrc");
67 
68  // fix for consumes
69  PxlBrlLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlBrlLowSrc"));
70  PxlBrlHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlBrlHighSrc"));
71  PxlFwdLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlFwdLowSrc"));
72  PxlFwdHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlFwdHighSrc"));
73 
74  SiTIBLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIBLowSrc"));
75  SiTIBHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIBHighSrc"));
76  SiTOBLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTOBLowSrc"));
77  SiTOBHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTOBHighSrc"));
78  SiTIDLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIDLowSrc"));
79  SiTIDHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIDHighSrc"));
80  SiTECLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTECLowSrc"));
81  SiTECHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTECHighSrc"));
82 
83  MuonCscSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonCscSrc"));
84  MuonDtSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonDtSrc"));
85  MuonRpcSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonRpcSrc"));
86 
87  ECalEBSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalEBSrc"));
88  ECalEESrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalEESrc"));
89  ECalESSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalESSrc"));
90  HCalSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("HCalSrc"));
91 
92  // determine whether to process subdetector or not
93  validHepMCevt = iPSet.getUntrackedParameter<bool>("validHepMCevt");
94  validG4VtxContainer = iPSet.getUntrackedParameter<bool>("validG4VtxContainer");
95  validG4trkContainer = iPSet.getUntrackedParameter<bool>("validG4trkContainer");
96  validPxlBrlLow = iPSet.getUntrackedParameter<bool>("validPxlBrlLow", true);
97  validPxlBrlHigh = iPSet.getUntrackedParameter<bool>("validPxlBrlHigh", true);
98  validPxlFwdLow = iPSet.getUntrackedParameter<bool>("validPxlFwdLow", true);
99  validPxlFwdHigh = iPSet.getUntrackedParameter<bool>("validPxlFwdHigh", true);
100  validSiTIBLow = iPSet.getUntrackedParameter<bool>("validSiTIBLow", true);
101  validSiTIBHigh = iPSet.getUntrackedParameter<bool>("validSiTIBHigh", true);
102  validSiTOBLow = iPSet.getUntrackedParameter<bool>("validSiTOBLow", true);
103  validSiTOBHigh = iPSet.getUntrackedParameter<bool>("validSiTOBHigh", true);
104  validSiTIDLow = iPSet.getUntrackedParameter<bool>("validSiTIDLow", true);
105  validSiTIDHigh = iPSet.getUntrackedParameter<bool>("validSiTIDHigh", true);
106  validSiTECLow = iPSet.getUntrackedParameter<bool>("validSiTECLow", true);
107  validSiTECHigh = iPSet.getUntrackedParameter<bool>("validSiTECHigh", true);
108  validMuonCSC = iPSet.getUntrackedParameter<bool>("validMuonCSC", true);
109  validMuonDt = iPSet.getUntrackedParameter<bool>("validMuonDt", true);
110  validMuonRPC = iPSet.getUntrackedParameter<bool>("validMuonRPC", true);
111  validEB = iPSet.getUntrackedParameter<bool>("validEB", true);
112  validEE = iPSet.getUntrackedParameter<bool>("validEE", true);
113  validPresh = iPSet.getUntrackedParameter<bool>("validPresh", true);
114  validHcal = iPSet.getUntrackedParameter<bool>("validHcal", true);
115 
116  // use value of first digit to determine default output level (inclusive)
117  // 0 is none, 1 is basic, 2 is fill output, 3 is gather output
118  verbosity %= 10;
119 
120  // print out Parameter Set information being used
121  if (verbosity >= 0) {
122  edm::LogInfo(MsgLoggerCat)
123  << "\n===============================\n"
124  << "Initialized as EDAnalyzer with parameter values:\n"
125  << " Name = " << fName << "\n"
126  << " Verbosity = " << verbosity << "\n"
127  << " Frequency = " << frequency << "\n"
128  << " VtxUnit = " << vtxunit << "\n"
129  << " GetProv = " << getAllProvenances << "\n"
130  << " PrintProv = " << printProvenanceInfo << "\n"
131  << " PxlBrlLowSrc = " << PxlBrlLowSrc_.label() << ":" << PxlBrlLowSrc_.instance() << "\n"
132  << " PxlBrlHighSrc = " << PxlBrlHighSrc_.label() << ":" << PxlBrlHighSrc_.instance() << "\n"
133  << " PxlFwdLowSrc = " << PxlFwdLowSrc_.label() << ":" << PxlBrlLowSrc_.instance() << "\n"
134  << " PxlFwdHighSrc = " << PxlFwdHighSrc_.label() << ":" << PxlBrlHighSrc_.instance() << "\n"
135  << " SiTIBLowSrc = " << SiTIBLowSrc_.label() << ":" << SiTIBLowSrc_.instance() << "\n"
136  << " SiTIBHighSrc = " << SiTIBHighSrc_.label() << ":" << SiTIBHighSrc_.instance() << "\n"
137  << " SiTOBLowSrc = " << SiTOBLowSrc_.label() << ":" << SiTOBLowSrc_.instance() << "\n"
138  << " SiTOBHighSrc = " << SiTOBHighSrc_.label() << ":" << SiTOBHighSrc_.instance() << "\n"
139  << " SiTIDLowSrc = " << SiTIDLowSrc_.label() << ":" << SiTIDLowSrc_.instance() << "\n"
140  << " SiTIDHighSrc = " << SiTIDHighSrc_.label() << ":" << SiTIDHighSrc_.instance() << "\n"
141  << " SiTECLowSrc = " << SiTECLowSrc_.label() << ":" << SiTECLowSrc_.instance() << "\n"
142  << " SiTECHighSrc = " << SiTECHighSrc_.label() << ":" << SiTECHighSrc_.instance() << "\n"
143  << " MuonCscSrc = " << MuonCscSrc_.label() << ":" << MuonCscSrc_.instance() << "\n"
144  << " MuonDtSrc = " << MuonDtSrc_.label() << ":" << MuonDtSrc_.instance() << "\n"
145  << " MuonRpcSrc = " << MuonRpcSrc_.label() << ":" << MuonRpcSrc_.instance() << "\n"
146  << " ECalEBSrc = " << ECalEBSrc_.label() << ":" << ECalEBSrc_.instance() << "\n"
147  << " ECalEESrc = " << ECalEESrc_.label() << ":" << ECalEESrc_.instance() << "\n"
148  << " ECalESSrc = " << ECalESSrc_.label() << ":" << ECalESSrc_.instance() << "\n"
149  << " HCalSrc = " << HCalSrc_.label() << ":" << HCalSrc_.instance() << "\n"
150  << "\n"
151  << " validHepMCevt = "
152  << ":" << validHepMCevt << "\n"
153  << " validG4VtxContainer = "
154  << ":" << validG4VtxContainer << "\n"
155  << " validG4trkContainer = "
156  << ":" << validG4trkContainer << "\n"
157  << " validPxlBrlLow = "
158  << ":" << validPxlBrlLow << "\n"
159  << " validPxlBrlHigh = "
160  << ":" << validPxlBrlHigh << "\n"
161  << " validPxlFwdLow = "
162  << ":" << validPxlFwdLow << "\n"
163  << " validPxlFwdHigh = "
164  << ":" << validPxlFwdHigh << "\n"
165  << " validSiTIBLow = "
166  << ":" << validSiTIBLow << "\n"
167  << " validSiTIBHigh = "
168  << ":" << validSiTIBHigh << "\n"
169  << " validSiTOBLow = "
170  << ":" << validSiTOBLow << "\n"
171  << " validSiTOBHigh = "
172  << ":" << validSiTOBHigh << "\n"
173  << " validSiTIDLow = "
174  << ":" << validSiTIDLow << "\n"
175  << " validSiTIDHigh = "
176  << ":" << validSiTIDHigh << "\n"
177  << " validSiTECLow = "
178  << ":" << validSiTECLow << "\n"
179  << " validSiTECHigh = "
180  << ":" << validSiTECHigh << "\n"
181  << " validMuonCSC = "
182  << ":" << validMuonCSC << "\n"
183  << " validMuonDt = "
184  << ":" << validMuonDt << "\n"
185  << " validMuonRPC = "
186  << ":" << validMuonRPC << "\n"
187  << " validEB = "
188  << ":" << validEB << "\n"
189  << " validEE = "
190  << ":" << validEE << "\n"
191  << " validPresh = "
192  << ":" << validPresh << "\n"
193  << " validHcal = "
194  << ":" << validHcal << "\n"
195  << "===============================\n";
196  }
197 
198  // initialize monitor elements
199  for (Int_t i = 0; i < 2; ++i) {
200  meMCRGP[i] = nullptr;
201  meMCG4Vtx[i] = nullptr;
202  meGeantVtxX[i] = nullptr;
203  meGeantVtxY[i] = nullptr;
204  meGeantVtxZ[i] = nullptr;
205  meMCG4Trk[i] = nullptr;
206  meCaloEcal[i] = nullptr;
207  meCaloEcalE[i] = nullptr;
208  meCaloEcalToF[i] = nullptr;
209  meCaloPreSh[i] = nullptr;
210  meCaloPreShE[i] = nullptr;
211  meCaloPreShToF[i] = nullptr;
212  meCaloHcal[i] = nullptr;
213  meCaloHcalE[i] = nullptr;
214  meCaloHcalToF[i] = nullptr;
215  meTrackerPx[i] = nullptr;
216  meTrackerSi[i] = nullptr;
217  meMuon[i] = nullptr;
218  meMuonDtToF[i] = nullptr;
219  meMuonCscToF[i] = nullptr;
220  meMuonRpcFToF[i] = nullptr;
221  meMuonRpcBToF[i] = nullptr;
222  meGeantVtxRad[i] = nullptr;
223  }
224  meGeantTrkPt = nullptr;
225  meGeantTrkE = nullptr;
226  meGeantVtxEta = nullptr;
227  meGeantVtxPhi = nullptr;
228  meGeantVtxMulti = nullptr;
229  meCaloEcalPhi = nullptr;
230  meCaloEcalEta = nullptr;
231  meCaloPreShPhi = nullptr;
232  meCaloPreShEta = nullptr;
233  meCaloHcalPhi = nullptr;
234  meCaloHcalEta = nullptr;
235  meTrackerPxPhi = nullptr;
236  meTrackerPxEta = nullptr;
237  meTrackerPxBToF = nullptr;
238  meTrackerPxBR = nullptr;
239  meTrackerPxFToF = nullptr;
240  meTrackerPxFZ = nullptr;
241  meTrackerSiPhi = nullptr;
242  meTrackerSiEta = nullptr;
243  meTrackerSiBToF = nullptr;
244  meTrackerSiBR = nullptr;
245  meTrackerSiFToF = nullptr;
246  meTrackerSiFZ = nullptr;
247  meMuonPhi = nullptr;
248  meMuonEta = nullptr;
249  meMuonDtR = nullptr;
250  meMuonCscZ = nullptr;
251  meMuonRpcBR = nullptr;
252  meMuonRpcFZ = nullptr;
253 }
254 
256 
258  // book histograms
259  Char_t hname[200];
260  Char_t htitle[200];
261 
262  // MCGeant
263  iBooker.setCurrentFolder("GlobalHitsV/MCGeant");
264  sprintf(hname, "hMCRGP1");
265  sprintf(htitle, "RawGenParticles");
266  meMCRGP[0] = iBooker.book1D(hname, htitle, 100, 0., 5000.);
267  sprintf(hname, "hMCRGP2");
268  meMCRGP[1] = iBooker.book1D(hname, htitle, 100, 0., 500.);
269  for (Int_t i = 0; i < 2; ++i) {
270  meMCRGP[i]->setAxisTitle("Number of Raw Generated Particles", 1);
271  meMCRGP[i]->setAxisTitle("Count", 2);
272  }
273 
274  sprintf(hname, "hMCG4Vtx1");
275  sprintf(htitle, "G4 Vertices");
276  meMCG4Vtx[0] = iBooker.book1D(hname, htitle, 150, 0., 15000.);
277  sprintf(hname, "hMCG4Vtx2");
278  meMCG4Vtx[1] = iBooker.book1D(hname, htitle, 100, -0.5, 99.5);
279  for (Int_t i = 0; i < 2; ++i) {
280  meMCG4Vtx[i]->setAxisTitle("Number of Vertices", 1);
281  meMCG4Vtx[i]->setAxisTitle("Count", 2);
282  }
283 
284  sprintf(hname, "hMCG4Trk1");
285  sprintf(htitle, "G4 Tracks");
286  meMCG4Trk[0] = iBooker.book1D(hname, htitle, 150, 0., 15000.);
287  sprintf(hname, "hMCG4Trk2");
288  meMCG4Trk[1] = iBooker.book1D(hname, htitle, 150, -0.5, 99.5);
289  for (Int_t i = 0; i < 2; ++i) {
290  meMCG4Trk[i]->setAxisTitle("Number of Tracks", 1);
291  meMCG4Trk[i]->setAxisTitle("Count", 2);
292  }
293 
294  sprintf(hname, "hGeantVtxX1");
295  sprintf(htitle, "Geant vertex x/micrometer");
296  meGeantVtxX[0] = iBooker.book1D(hname, htitle, 100, -8000000., 8000000.);
297  sprintf(hname, "hGeantVtxX2");
298  meGeantVtxX[1] = iBooker.book1D(hname, htitle, 100, -50., 50.);
299  for (Int_t i = 0; i < 2; ++i) {
300  meGeantVtxX[i]->setAxisTitle("x of Vertex (um)", 1);
301  meGeantVtxX[i]->setAxisTitle("Count", 2);
302  }
303 
304  sprintf(hname, "hGeantVtxY1");
305  sprintf(htitle, "Geant vertex y/micrometer");
306  meGeantVtxY[0] = iBooker.book1D(hname, htitle, 100, -8000000, 8000000.);
307  sprintf(hname, "hGeantVtxY2");
308  meGeantVtxY[1] = iBooker.book1D(hname, htitle, 100, -50., 50.);
309  for (Int_t i = 0; i < 2; ++i) {
310  meGeantVtxY[i]->setAxisTitle("y of Vertex (um)", 1);
311  meGeantVtxY[i]->setAxisTitle("Count", 2);
312  }
313 
314  sprintf(hname, "hGeantVtxZ1");
315  sprintf(htitle, "Geant vertex z/millimeter");
316  meGeantVtxZ[0] = iBooker.book1D(hname, htitle, 100, -11000., 11000.);
317  sprintf(hname, "hGeantVtxZ2");
318  meGeantVtxZ[1] = iBooker.book1D(hname, htitle, 200, -500., 500.);
319  // meGeantVtxZ[1] = iBooker.book1D(hname,htitle,100,-250.,250.);
320  for (Int_t i = 0; i < 2; ++i) {
321  meGeantVtxZ[i]->setAxisTitle("z of Vertex (mm)", 1);
322  meGeantVtxZ[i]->setAxisTitle("Count", 2);
323  }
324 
325  sprintf(hname, "hGeantTrkPt");
326  sprintf(htitle, "Log10 Geant track pt/GeV");
327  meGeantTrkPt = iBooker.book1D(hname, htitle, 80, -4., 4.);
328  meGeantTrkPt->setAxisTitle("Log10 pT of Track (GeV)", 1);
329  meGeantTrkPt->setAxisTitle("Count", 2);
330 
331  sprintf(hname, "hGeantTrkE");
332  sprintf(htitle, "Log10 Geant track E/GeV");
333  meGeantTrkE = iBooker.book1D(hname, htitle, 80, -4., 4.);
334  meGeantTrkE->setAxisTitle("Log10 E of Track (GeV)", 1);
335  meGeantTrkE->setAxisTitle("Count", 2);
336 
337  sprintf(hname, "hGeantVtxEta");
338  sprintf(htitle, "Geant vertices eta");
339  meGeantVtxEta = iBooker.book1D(hname, htitle, 220, -5.5, 5.5);
340  meGeantVtxEta->setAxisTitle("eta of SimVertex", 1);
341  meGeantVtxEta->setAxisTitle("Count", 2);
342 
343  sprintf(hname, "hGeantVtxPhi");
344  sprintf(htitle, "Geant vertices phi/rad");
345  meGeantVtxPhi = iBooker.book1D(hname, htitle, 100, -3.2, 3.2);
346  meGeantVtxPhi->setAxisTitle("phi of SimVertex (rad)", 1);
347  meGeantVtxPhi->setAxisTitle("Count", 2);
348 
349  sprintf(hname, "hGeantVtxRad1");
350  sprintf(htitle, "Geant vertices radius/cm");
351  meGeantVtxRad[0] = iBooker.book1D(hname, htitle, 130, 0., 130.);
352  sprintf(hname, "hGeantVtxRad2");
353  meGeantVtxRad[1] = iBooker.book1D(hname, htitle, 100, 0., 1000.);
354  for (Int_t i = 0; i < 2; ++i) {
355  meGeantVtxRad[i]->setAxisTitle("radius of SimVertex (cm)", 1);
356  meGeantVtxRad[i]->setAxisTitle("Count", 2);
357  }
358 
359  sprintf(hname, "hGeantVtxMulti");
360  sprintf(htitle, "Geant vertices outgoing multiplicity");
361  meGeantVtxMulti = iBooker.book1D(hname, htitle, 20, 0., 20);
362  meGeantVtxMulti->setAxisTitle("multiplicity of particles attached to a SimVertex", 1);
363  meGeantVtxMulti->setAxisTitle("Count", 2);
364 
365  // ECal
366  iBooker.setCurrentFolder("GlobalHitsV/ECals");
367  sprintf(hname, "hCaloEcal1");
368  sprintf(htitle, "Ecal hits");
369  meCaloEcal[0] = iBooker.book1D(hname, htitle, 100, 0., 10000.);
370  sprintf(hname, "hCaloEcal2");
371  meCaloEcal[1] = iBooker.book1D(hname, htitle, 100, -0.5, 99.5);
372 
373  sprintf(hname, "hCaloEcalE1");
374  sprintf(htitle, "Ecal hits, energy/GeV");
375  meCaloEcalE[0] = iBooker.book1D(hname, htitle, 100, 0., 10.);
376  sprintf(hname, "hCaloEcalE2");
377  meCaloEcalE[1] = iBooker.book1D(hname, htitle, 100, 0., 0.1);
378  sprintf(hname, "hCaloEcalToF1");
379  sprintf(htitle, "Ecal hits, ToF/ns");
380  meCaloEcalToF[0] = iBooker.book1D(hname, htitle, 100, 0., 1000.);
381  sprintf(hname, "hCaloEcalToF2");
382  meCaloEcalToF[1] = iBooker.book1D(hname, htitle, 100, 0., 100.);
383 
384  for (Int_t i = 0; i < 2; ++i) {
385  meCaloEcal[i]->setAxisTitle("Number of Hits", 1);
386  meCaloEcal[i]->setAxisTitle("Count", 2);
387  meCaloEcalE[i]->setAxisTitle("Energy of Hits (GeV)", 1);
388  meCaloEcalE[i]->setAxisTitle("Count", 2);
389  meCaloEcalToF[i]->setAxisTitle("Time of Flight of Hits (ns)", 1);
390  meCaloEcalToF[i]->setAxisTitle("Count", 2);
391  }
392 
393  sprintf(hname, "hCaloEcalPhi");
394  sprintf(htitle, "Ecal hits, phi/rad");
395  meCaloEcalPhi = iBooker.book1D(hname, htitle, 100, -3.2, 3.2);
396  meCaloEcalPhi->setAxisTitle("Phi of Hits (rad)", 1);
397  meCaloEcalPhi->setAxisTitle("Count", 2);
398 
399  sprintf(hname, "hCaloEcalEta");
400  sprintf(htitle, "Ecal hits, eta");
401  meCaloEcalEta = iBooker.book1D(hname, htitle, 100, -5.5, 5.5);
402  meCaloEcalEta->setAxisTitle("Eta of Hits", 1);
403  meCaloEcalEta->setAxisTitle("Count", 2);
404 
405  sprintf(hname, "hCaloPreSh1");
406  sprintf(htitle, "PreSh hits");
407  meCaloPreSh[0] = iBooker.book1D(hname, htitle, 100, 0., 10000.);
408  sprintf(hname, "hCaloPreSh2");
409  meCaloPreSh[1] = iBooker.book1D(hname, htitle, 100, -0.5, 99.5);
410 
411  sprintf(hname, "hCaloPreShE1");
412  sprintf(htitle, "PreSh hits, energy/GeV");
413  meCaloPreShE[0] = iBooker.book1D(hname, htitle, 100, 0., 10.);
414  sprintf(hname, "hCaloPreShE2");
415  meCaloPreShE[1] = iBooker.book1D(hname, htitle, 100, 0., 0.1);
416 
417  sprintf(hname, "hCaloPreShToF1");
418  sprintf(htitle, "PreSh hits, ToF/ns");
419  meCaloPreShToF[0] = iBooker.book1D(hname, htitle, 100, 0., 1000.);
420  sprintf(hname, "hCaloPreShToF2");
421  meCaloPreShToF[1] = iBooker.book1D(hname, htitle, 100, 0., 100.);
422 
423  for (Int_t i = 0; i < 2; ++i) {
424  meCaloPreSh[i]->setAxisTitle("Number of Hits", 1);
425  meCaloPreSh[i]->setAxisTitle("Count", 2);
426  meCaloPreShE[i]->setAxisTitle("Energy of Hits (GeV)", 1);
427  meCaloPreShE[i]->setAxisTitle("Count", 2);
428  meCaloPreShToF[i]->setAxisTitle("Time of Flight of Hits (ns)", 1);
429  meCaloPreShToF[i]->setAxisTitle("Count", 2);
430  }
431 
432  sprintf(hname, "hCaloPreShPhi");
433  sprintf(htitle, "PreSh hits, phi/rad");
434  meCaloPreShPhi = iBooker.book1D(hname, htitle, 100, -3.2, 3.2);
435  meCaloPreShPhi->setAxisTitle("Phi of Hits (rad)", 1);
436  meCaloPreShPhi->setAxisTitle("Count", 2);
437 
438  sprintf(hname, "hCaloPreShEta");
439  sprintf(htitle, "PreSh hits, eta");
440  meCaloPreShEta = iBooker.book1D(hname, htitle, 100, -5.5, 5.5);
441  meCaloPreShEta->setAxisTitle("Eta of Hits", 1);
442  meCaloPreShEta->setAxisTitle("Count", 2);
443 
444  // Hcal
445  iBooker.setCurrentFolder("GlobalHitsV/HCals");
446  sprintf(hname, "hCaloHcal1");
447  sprintf(htitle, "Hcal hits");
448  meCaloHcal[0] = iBooker.book1D(hname, htitle, 100, 0., 10000.);
449  sprintf(hname, "hCaloHcal2");
450  meCaloHcal[1] = iBooker.book1D(hname, htitle, 100, -0.5, 99.5);
451 
452  sprintf(hname, "hCaloHcalE1");
453  sprintf(htitle, "Hcal hits, energy/GeV");
454  meCaloHcalE[0] = iBooker.book1D(hname, htitle, 100, 0., 10.);
455  sprintf(hname, "hCaloHcalE2");
456  meCaloHcalE[1] = iBooker.book1D(hname, htitle, 100, 0., 0.1);
457 
458  sprintf(hname, "hCaloHcalToF1");
459  sprintf(htitle, "Hcal hits, ToF/ns");
460  meCaloHcalToF[0] = iBooker.book1D(hname, htitle, 100, 0., 1000.);
461  sprintf(hname, "hCaloHcalToF2");
462  meCaloHcalToF[1] = iBooker.book1D(hname, htitle, 100, 0., 100.);
463 
464  for (Int_t i = 0; i < 2; ++i) {
465  meCaloHcal[i]->setAxisTitle("Number of Hits", 1);
466  meCaloHcal[i]->setAxisTitle("Count", 2);
467  meCaloHcalE[i]->setAxisTitle("Energy of Hits (GeV)", 1);
468  meCaloHcalE[i]->setAxisTitle("Count", 2);
469  meCaloHcalToF[i]->setAxisTitle("Time of Flight of Hits (ns)", 1);
470  meCaloHcalToF[i]->setAxisTitle("Count", 2);
471  }
472 
473  sprintf(hname, "hCaloHcalPhi");
474  sprintf(htitle, "Hcal hits, phi/rad");
475  meCaloHcalPhi = iBooker.book1D(hname, htitle, 100, -3.2, 3.2);
476  meCaloHcalPhi->setAxisTitle("Phi of Hits (rad)", 1);
477  meCaloHcalPhi->setAxisTitle("Count", 2);
478 
479  sprintf(hname, "hCaloHcalEta");
480  sprintf(htitle, "Hcal hits, eta");
481  meCaloHcalEta = iBooker.book1D(hname, htitle, 100, -5.5, 5.5);
482  meCaloHcalEta->setAxisTitle("Eta of Hits", 1);
483  meCaloHcalEta->setAxisTitle("Count", 2);
484 
485  // SiPixels
486  iBooker.setCurrentFolder("GlobalHitsV/SiPixels");
487  sprintf(hname, "hTrackerPx1");
488  sprintf(htitle, "Pixel hits");
489  meTrackerPx[0] = iBooker.book1D(hname, htitle, 100, 0., 10000.);
490  sprintf(hname, "hTrackerPx2");
491  meTrackerPx[1] = iBooker.book1D(hname, htitle, 100, -0.5, 99.5);
492  for (Int_t i = 0; i < 2; ++i) {
493  meTrackerPx[i]->setAxisTitle("Number of Pixel Hits", 1);
494  meTrackerPx[i]->setAxisTitle("Count", 2);
495  }
496 
497  sprintf(hname, "hTrackerPxPhi");
498  sprintf(htitle, "Pixel hits phi/rad");
499  meTrackerPxPhi = iBooker.book1D(hname, htitle, 100, -3.2, 3.2);
500  meTrackerPxPhi->setAxisTitle("Phi of Hits (rad)", 1);
501  meTrackerPxPhi->setAxisTitle("Count", 2);
502 
503  sprintf(hname, "hTrackerPxEta");
504  sprintf(htitle, "Pixel hits eta");
505  meTrackerPxEta = iBooker.book1D(hname, htitle, 100, -3.5, 3.5);
506  meTrackerPxEta->setAxisTitle("Eta of Hits", 1);
507  meTrackerPxEta->setAxisTitle("Count", 2);
508 
509  sprintf(hname, "hTrackerPxBToF");
510  sprintf(htitle, "Pixel barrel hits, ToF/ns");
511  meTrackerPxBToF = iBooker.book1D(hname, htitle, 100, 0., 40.);
512  meTrackerPxBToF->setAxisTitle("Time of Flight of Hits (ns)", 1);
513  meTrackerPxBToF->setAxisTitle("Count", 2);
514 
515  sprintf(hname, "hTrackerPxBR");
516  sprintf(htitle, "Pixel barrel hits, R/cm");
517  meTrackerPxBR = iBooker.book1D(hname, htitle, 100, 0., 50.);
518  meTrackerPxBR->setAxisTitle("R of Hits (cm)", 1);
519  meTrackerPxBR->setAxisTitle("Count", 2);
520 
521  sprintf(hname, "hTrackerPxFToF");
522  sprintf(htitle, "Pixel forward hits, ToF/ns");
523  meTrackerPxFToF = iBooker.book1D(hname, htitle, 100, 0., 50.);
524  meTrackerPxFToF->setAxisTitle("Time of Flight of Hits (ns)", 1);
525  meTrackerPxFToF->setAxisTitle("Count", 2);
526 
527  sprintf(hname, "hTrackerPxFZ");
528  sprintf(htitle, "Pixel forward hits, Z/cm");
529  meTrackerPxFZ = iBooker.book1D(hname, htitle, 200, -100., 100.);
530  meTrackerPxFZ->setAxisTitle("Z of Hits (cm)", 1);
531  meTrackerPxFZ->setAxisTitle("Count", 2);
532 
533  // SiStrips
534  iBooker.setCurrentFolder("GlobalHitsV/SiStrips");
535  sprintf(hname, "hTrackerSi1");
536  sprintf(htitle, "Silicon hits");
537  meTrackerSi[0] = iBooker.book1D(hname, htitle, 100, 0., 10000.);
538  sprintf(hname, "hTrackerSi2");
539  meTrackerSi[1] = iBooker.book1D(hname, htitle, 100, -0.5, 99.5);
540  for (Int_t i = 0; i < 2; ++i) {
541  meTrackerSi[i]->setAxisTitle("Number of Silicon Hits", 1);
542  meTrackerSi[i]->setAxisTitle("Count", 2);
543  }
544 
545  sprintf(hname, "hTrackerSiPhi");
546  sprintf(htitle, "Silicon hits phi/rad");
547  meTrackerSiPhi = iBooker.book1D(hname, htitle, 100, -3.2, 3.2);
548  meTrackerSiPhi->setAxisTitle("Phi of Hits (rad)", 1);
549  meTrackerSiPhi->setAxisTitle("Count", 2);
550 
551  sprintf(hname, "hTrackerSiEta");
552  sprintf(htitle, "Silicon hits eta");
553  meTrackerSiEta = iBooker.book1D(hname, htitle, 100, -3.5, 3.5);
554  meTrackerSiEta->setAxisTitle("Eta of Hits", 1);
555  meTrackerSiEta->setAxisTitle("Count", 2);
556 
557  sprintf(hname, "hTrackerSiBToF");
558  sprintf(htitle, "Silicon barrel hits, ToF/ns");
559  meTrackerSiBToF = iBooker.book1D(hname, htitle, 100, 0., 50.);
560  meTrackerSiBToF->setAxisTitle("Time of Flight of Hits (ns)", 1);
561  meTrackerSiBToF->setAxisTitle("Count", 2);
562 
563  sprintf(hname, "hTrackerSiBR");
564  sprintf(htitle, "Silicon barrel hits, R/cm");
565  meTrackerSiBR = iBooker.book1D(hname, htitle, 100, 0., 200.);
566  meTrackerSiBR->setAxisTitle("R of Hits (cm)", 1);
567  meTrackerSiBR->setAxisTitle("Count", 2);
568 
569  sprintf(hname, "hTrackerSiFToF");
570  sprintf(htitle, "Silicon forward hits, ToF/ns");
571  meTrackerSiFToF = iBooker.book1D(hname, htitle, 100, 0., 75.);
572  meTrackerSiFToF->setAxisTitle("Time of Flight of Hits (ns)", 1);
573  meTrackerSiFToF->setAxisTitle("Count", 2);
574 
575  sprintf(hname, "hTrackerSiFZ");
576  sprintf(htitle, "Silicon forward hits, Z/cm");
577  meTrackerSiFZ = iBooker.book1D(hname, htitle, 200, -300., 300.);
578  meTrackerSiFZ->setAxisTitle("Z of Hits (cm)", 1);
579  meTrackerSiFZ->setAxisTitle("Count", 2);
580 
581  // Muon
582  iBooker.setCurrentFolder("GlobalHitsV/Muons");
583  sprintf(hname, "hMuon1");
584  sprintf(htitle, "Muon hits");
585  meMuon[0] = iBooker.book1D(hname, htitle, 100, 0., 10000.);
586  sprintf(hname, "hMuon2");
587  meMuon[1] = iBooker.book1D(hname, htitle, 100, -0.5, 99.5);
588  for (Int_t i = 0; i < 2; ++i) {
589  meMuon[i]->setAxisTitle("Number of Muon Hits", 1);
590  meMuon[i]->setAxisTitle("Count", 2);
591  }
592 
593  sprintf(hname, "hMuonPhi");
594  sprintf(htitle, "Muon hits phi/rad");
595  meMuonPhi = iBooker.book1D(hname, htitle, 100, -3.2, 3.2);
596  meMuonPhi->setAxisTitle("Phi of Hits (rad)", 1);
597  meMuonPhi->setAxisTitle("Count", 2);
598 
599  sprintf(hname, "hMuonEta");
600  sprintf(htitle, "Muon hits eta");
601  meMuonEta = iBooker.book1D(hname, htitle, 100, -3.5, 3.5);
602  meMuonEta->setAxisTitle("Eta of Hits", 1);
603  meMuonEta->setAxisTitle("Count", 2);
604 
605  sprintf(hname, "hMuonCscToF1");
606  sprintf(htitle, "Muon CSC hits, ToF/ns");
607  meMuonCscToF[0] = iBooker.book1D(hname, htitle, 100, 0., 250.);
608  sprintf(hname, "hMuonCscToF2");
609  meMuonCscToF[1] = iBooker.book1D(hname, htitle, 100, 0., 50.);
610  for (Int_t i = 0; i < 2; ++i) {
611  meMuonCscToF[i]->setAxisTitle("Time of Flight of Hits (ns)", 1);
612  meMuonCscToF[i]->setAxisTitle("Count", 2);
613  }
614 
615  sprintf(hname, "hMuonCscZ");
616  sprintf(htitle, "Muon CSC hits, Z/cm");
617  meMuonCscZ = iBooker.book1D(hname, htitle, 200, -1500., 1500.);
618  meMuonCscZ->setAxisTitle("Z of Hits (cm)", 1);
619  meMuonCscZ->setAxisTitle("Count", 2);
620 
621  sprintf(hname, "hMuonDtToF1");
622  sprintf(htitle, "Muon DT hits, ToF/ns");
623  meMuonDtToF[0] = iBooker.book1D(hname, htitle, 100, 0., 250.);
624  sprintf(hname, "hMuonDtToF2");
625  meMuonDtToF[1] = iBooker.book1D(hname, htitle, 100, 0., 50.);
626  for (Int_t i = 0; i < 2; ++i) {
627  meMuonDtToF[i]->setAxisTitle("Time of Flight of Hits (ns)", 1);
628  meMuonDtToF[i]->setAxisTitle("Count", 2);
629  }
630 
631  sprintf(hname, "hMuonDtR");
632  sprintf(htitle, "Muon DT hits, R/cm");
633  meMuonDtR = iBooker.book1D(hname, htitle, 100, 0., 1500.);
634  meMuonDtR->setAxisTitle("R of Hits (cm)", 1);
635  meMuonDtR->setAxisTitle("Count", 2);
636 
637  sprintf(hname, "hMuonRpcFToF1");
638  sprintf(htitle, "Muon RPC forward hits, ToF/ns");
639  meMuonRpcFToF[0] = iBooker.book1D(hname, htitle, 100, 0., 250.);
640  sprintf(hname, "hMuonRpcFToF2");
641  meMuonRpcFToF[1] = iBooker.book1D(hname, htitle, 100, 0., 50.);
642  for (Int_t i = 0; i < 2; ++i) {
643  meMuonRpcFToF[i]->setAxisTitle("Time of Flight of Hits (ns)", 1);
644  meMuonRpcFToF[i]->setAxisTitle("Count", 2);
645  }
646  sprintf(hname, "hMuonRpcFZ");
647  sprintf(htitle, "Muon RPC forward hits, Z/cm");
648  meMuonRpcFZ = iBooker.book1D(hname, htitle, 201, -1500., 1500.);
649  meMuonRpcFZ->setAxisTitle("Z of Hits (cm)", 1);
650  meMuonRpcFZ->setAxisTitle("Count", 2);
651 
652  sprintf(hname, "hMuonRpcBToF1");
653  sprintf(htitle, "Muon RPC barrel hits, ToF/ns");
654  meMuonRpcBToF[0] = iBooker.book1D(hname, htitle, 100, 0., 250.);
655  sprintf(hname, "hMuonRpcBToF2");
656  meMuonRpcBToF[1] = iBooker.book1D(hname, htitle, 100, 0., 50.);
657  for (Int_t i = 0; i < 2; ++i) {
658  meMuonRpcBToF[i]->setAxisTitle("Time of Flight of Hits (ns)", 1);
659  meMuonRpcBToF[i]->setAxisTitle("Count", 2);
660  }
661 
662  sprintf(hname, "hMuonRpcBR");
663  sprintf(htitle, "Muon RPC barrel hits, R/cm");
664  meMuonRpcBR = iBooker.book1D(hname, htitle, 100, 0., 1500.);
665  meMuonRpcBR->setAxisTitle("R of Hits (cm)", 1);
666  meMuonRpcBR->setAxisTitle("Count", 2);
667 }
668 
670  std::string MsgLoggerCat = "GlobalHitsAnalyzer_analyze";
671 
672  // keep track of number of events processed
673  ++count;
674 
675  // get event id information
676  edm::RunNumber_t nrun = iEvent.id().run();
677  edm::EventNumber_t nevt = iEvent.id().event();
678 
679  if (verbosity > 0) {
680  edm::LogInfo(MsgLoggerCat) << "Processing run " << nrun << ", event " << nevt << " (" << count << " events total)";
681  } else if (verbosity == 0) {
682  if (nevt % frequency == 0 || nevt == 1) {
683  edm::LogInfo(MsgLoggerCat) << "Processing run " << nrun << ", event " << nevt << " (" << count
684  << " events total)";
685  }
686  }
687 
688  // look at information available in the event
689  if (getAllProvenances) {
690  std::vector<const edm::StableProvenance *> AllProv;
691  iEvent.getAllStableProvenance(AllProv);
692 
693  if (verbosity >= 0)
694  edm::LogInfo(MsgLoggerCat) << "Number of Provenances = " << AllProv.size();
695 
696  if (printProvenanceInfo && (verbosity >= 0)) {
697  TString eventout("\nProvenance info:\n");
698 
699  for (unsigned int i = 0; i < AllProv.size(); ++i) {
700  eventout += "\n ******************************";
701  eventout += "\n Module : ";
702  eventout += AllProv[i]->moduleLabel();
703  eventout += "\n ProductID : ";
704  eventout += AllProv[i]->productID().id();
705  eventout += "\n ClassName : ";
706  eventout += AllProv[i]->className();
707  eventout += "\n InstanceName : ";
708  eventout += AllProv[i]->productInstanceName();
709  eventout += "\n BranchName : ";
710  eventout += AllProv[i]->branchName();
711  }
712  eventout += "\n ******************************\n";
713  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
714  printProvenanceInfo = false;
715  }
716  getAllProvenances = false;
717  }
718 
719  // call fill functions
720  // gather G4MC information from event
721  fillG4MC(iEvent);
722  // gather Tracker information from event
723  fillTrk(iEvent, iSetup);
724  // gather muon information from event
725  fillMuon(iEvent, iSetup);
726  // gather Ecal information from event
727  fillECal(iEvent, iSetup);
728  // gather Hcal information from event
729  fillHCal(iEvent, iSetup);
730 
731  if (verbosity > 0)
732  edm::LogInfo(MsgLoggerCat) << "Done gathering data from event.";
733 
734  return;
735 }
736 
737 //==================fill and store functions================================
739  std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillG4MC";
740 
741  TString eventout;
742  if (verbosity > 0)
743  eventout = "\nGathering info:";
744 
746  // get MC information
749  std::vector<edm::Handle<edm::HepMCProduct>> AllHepMCEvt;
750  iEvent.getManyByType(AllHepMCEvt);
751 
752  // loop through products and extract VtxSmearing if available. Any of them
753  // should have the information needed
754  for (unsigned int i = 0; i < AllHepMCEvt.size(); ++i) {
755  HepMCEvt = AllHepMCEvt[i];
756  if ((HepMCEvt.provenance()->branchDescription()).moduleLabel() == "generatorSmeared")
757  break;
758  }
759 
760  if (!HepMCEvt.isValid()) {
761  LogDebug(MsgLoggerCat) << "Unable to find HepMCProduct in event!";
762  validHepMCevt = false;
763  } else {
764  eventout += "\n Using HepMCProduct: ";
765  eventout += (HepMCEvt.provenance()->branchDescription()).moduleLabel();
766  }
767  if (validHepMCevt) {
768  const HepMC::GenEvent *MCEvt = HepMCEvt->GetEvent();
769  nRawGenPart = MCEvt->particles_size();
770 
771  if (verbosity > 1) {
772  eventout += "\n Number of Raw Particles collected:......... ";
773  eventout += nRawGenPart;
774  }
775 
776  if (meMCRGP[0])
777  meMCRGP[0]->Fill((float)nRawGenPart);
778  if (meMCRGP[1])
779  meMCRGP[1]->Fill((float)nRawGenPart);
780  }
781 
783  // get G4Vertex information
785  // convert unit stored in SimVertex to mm
786  float unit = 0.;
787  if (vtxunit == 0)
788  unit = 1.; // already in mm
789  if (vtxunit == 1)
790  unit = 10.; // stored in cm, convert to mm
791 
793  iEvent.getByToken(G4VtxSrc_Token_, G4VtxContainer);
794 
795  // needed here by vertex multiplicity
797  iEvent.getByToken(G4TrkSrc_Token_, G4TrkContainer);
798 
799  if (!G4VtxContainer.isValid()) {
800  LogDebug(MsgLoggerCat) << "Unable to find SimVertex in event!";
801  validG4VtxContainer = false;
802  }
803  if (validG4VtxContainer) {
804  int i = 0;
805  edm::SimVertexContainer::const_iterator itVtx;
806  for (itVtx = G4VtxContainer->begin(); itVtx != G4VtxContainer->end(); ++itVtx) {
807  ++i;
808 
809  const math::XYZTLorentzVector G4Vtx1(
810  itVtx->position().x(), itVtx->position().y(), itVtx->position().z(), itVtx->position().e());
811 
812  double G4Vtx[4];
813  G4Vtx1.GetCoordinates(G4Vtx);
814 
815  if (meGeantVtxX[0])
816  meGeantVtxX[0]->Fill((G4Vtx[0] * unit) / micrometer);
817  if (meGeantVtxX[1])
818  meGeantVtxX[1]->Fill((G4Vtx[0] * unit) / micrometer);
819 
820  if (meGeantVtxY[0])
821  meGeantVtxY[0]->Fill((G4Vtx[1] * unit) / micrometer);
822  if (meGeantVtxY[1])
823  meGeantVtxY[1]->Fill((G4Vtx[1] * unit) / micrometer);
824 
825  if (meGeantVtxZ[0])
826  meGeantVtxZ[0]->Fill((G4Vtx[2] * unit) / millimeter);
827  if (meGeantVtxZ[1])
828  meGeantVtxZ[1]->Fill((G4Vtx[2] * unit) / millimeter);
829 
830  if (meGeantVtxEta)
831  meGeantVtxEta->Fill(G4Vtx1.eta());
832  if (meGeantVtxPhi)
833  meGeantVtxPhi->Fill(G4Vtx1.phi());
834  if (meGeantVtxRad[0])
835  meGeantVtxRad[0]->Fill(G4Vtx1.rho());
836  if (meGeantVtxRad[1])
837  meGeantVtxRad[1]->Fill(G4Vtx1.rho());
838 
839  if (meGeantVtxMulti) {
840  int multi = 0;
841  if (G4TrkContainer.isValid()) {
842  edm::SimTrackContainer::const_iterator itTrk;
843  for (itTrk = G4TrkContainer->begin(); itTrk != G4TrkContainer->end(); ++itTrk) {
844  if ((*itTrk).vertIndex() == i) {
845  multi++;
846  }
847  }
848  }
849  meGeantVtxMulti->Fill(((double)multi + 0.5));
850  }
851  }
852 
853  if (verbosity > 1) {
854  eventout += "\n Number of G4Vertices collected:............ ";
855  eventout += i;
856  }
857 
858  if (meMCG4Vtx[0])
859  meMCG4Vtx[0]->Fill((float)i);
860  if (meMCG4Vtx[1])
861  meMCG4Vtx[1]->Fill((float)i);
862  }
863 
865  // get G4Track information
867  if (!G4TrkContainer.isValid()) {
868  LogDebug(MsgLoggerCat) << "Unable to find SimTrack in event!";
869  validG4trkContainer = false;
870  }
871  if (validG4trkContainer) {
872  int i = 0;
873  edm::SimTrackContainer::const_iterator itTrk;
874  for (itTrk = G4TrkContainer->begin(); itTrk != G4TrkContainer->end(); ++itTrk) {
875  ++i;
876 
877  const math::XYZTLorentzVector G4Trk1(
878  itTrk->momentum().x(), itTrk->momentum().y(), itTrk->momentum().z(), itTrk->momentum().e());
879  double G4Trk[4];
880  G4Trk1.GetCoordinates(G4Trk);
881 
882  if (meGeantTrkPt)
883  meGeantTrkPt->Fill(std::log10(std::max(sqrt(G4Trk[0] * G4Trk[0] + G4Trk[1] * G4Trk[1]), -9.)));
884  if (meGeantTrkE)
885  meGeantTrkE->Fill(std::log10(std::max(G4Trk[3], -9.)));
886  }
887 
888  if (verbosity > 1) {
889  eventout += "\n Number of G4Tracks collected:.............. ";
890  eventout += i;
891  }
892 
893  if (meMCG4Trk[0])
894  meMCG4Trk[0]->Fill((float)i);
895  if (meMCG4Trk[1])
896  meMCG4Trk[1]->Fill((float)i);
897  }
898 
899  if (verbosity > 0)
900  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
901 
902  return;
903 }
904 
906  nPxlHits = 0;
907  std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillTrk";
908 
909  TString eventout;
910  if (verbosity > 0)
911  eventout = "\nGathering info:";
912 
913  // access the tracker geometry
914  edm::ESHandle<TrackerGeometry> theTrackerGeometry;
915  iSetup.get<TrackerDigiGeometryRecord>().get(theTrackerGeometry);
916  if (!theTrackerGeometry.isValid()) {
917  edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerDigiGeometryRecord in event!";
918  return;
919  }
920  const TrackerGeometry &theTracker(*theTrackerGeometry);
921 
922  // iterator to access containers
923  edm::PSimHitContainer::const_iterator itHit;
924 
926  // get Pixel Barrel information
928  edm::PSimHitContainer thePxlBrlHits;
929  // extract low container
930  edm::Handle<edm::PSimHitContainer> PxlBrlLowContainer;
931  iEvent.getByToken(PxlBrlLowSrc_Token_, PxlBrlLowContainer);
932  if (!PxlBrlLowContainer.isValid()) {
933  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsPixelBarrelLowTof in event!";
934  validPxlBrlLow = false;
935  }
936  // extract high container
937  edm::Handle<edm::PSimHitContainer> PxlBrlHighContainer;
938  iEvent.getByToken(PxlBrlHighSrc_Token_, PxlBrlHighContainer);
939  if (!PxlBrlHighContainer.isValid()) {
940  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsPixelBarrelHighTof in event!";
941  validPxlBrlHigh = false;
942  }
943  // place both containers into new container
944  if (validPxlBrlLow)
945  thePxlBrlHits.insert(thePxlBrlHits.end(), PxlBrlLowContainer->begin(), PxlBrlLowContainer->end());
946  if (validPxlBrlHigh)
947  thePxlBrlHits.insert(thePxlBrlHits.end(), PxlBrlHighContainer->begin(), PxlBrlHighContainer->end());
948 
949  // cycle through new container
950  int i = 0, j = 0;
951  for (itHit = thePxlBrlHits.begin(); itHit != thePxlBrlHits.end(); ++itHit) {
952  ++i;
953 
954  // create a DetId from the detUnitId
955  DetId theDetUnitId(itHit->detUnitId());
956  int detector = theDetUnitId.det();
957  int subdetector = theDetUnitId.subdetId();
958 
959  // check that expected detector is returned
960  if ((detector == dTrk) && (subdetector == sdPxlBrl)) {
961  // get the GeomDetUnit from the geometry using theDetUnitID
962  const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
963 
964  if (!theDet) {
965  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from PxlBrlHits for Hit " << i;
966  continue;
967  }
968 
969  ++j;
970 
971  // get the Surface of the hit (knows how to go from local <-> global)
972  const BoundPlane &bSurface = theDet->surface();
973 
974  if (meTrackerPxBToF)
975  meTrackerPxBToF->Fill(itHit->tof());
976  if (meTrackerPxBR)
977  meTrackerPxBR->Fill(bSurface.toGlobal(itHit->localPosition()).perp());
978  if (meTrackerPxPhi)
979  meTrackerPxPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
980  if (meTrackerPxEta)
981  meTrackerPxEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
982 
983  } else {
984  edm::LogWarning(MsgLoggerCat) << "PxlBrl PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
985  << sdPxlBrl << "); value returned is: (" << detector << "," << subdetector << ")";
986  continue;
987  } // end detector type check
988  } // end loop through PxlBrl Hits
989 
990  if (verbosity > 1) {
991  eventout += "\n Number of Pixel Barrel Hits collected:..... ";
992  eventout += j;
993  }
994 
995  nPxlHits += j;
996 
998  // get Pixel Forward information
1000  edm::PSimHitContainer thePxlFwdHits;
1001  // extract low container
1002  edm::Handle<edm::PSimHitContainer> PxlFwdLowContainer;
1003  iEvent.getByToken(PxlFwdLowSrc_Token_, PxlFwdLowContainer);
1004  if (!PxlFwdLowContainer.isValid()) {
1005  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsPixelEndcapLowTof in event!";
1006  validPxlFwdLow = false;
1007  }
1008  // extract high container
1009  edm::Handle<edm::PSimHitContainer> PxlFwdHighContainer;
1010  iEvent.getByToken(PxlFwdHighSrc_Token_, PxlFwdHighContainer);
1011  if (!PxlFwdHighContainer.isValid()) {
1012  LogDebug("GlobalHitsAnalyzer_fillTrk") << "Unable to find TrackerHitsPixelEndcapHighTof in event!";
1013  validPxlFwdHigh = false;
1014  }
1015  // place both containers into new container
1016  if (validPxlFwdLow)
1017  thePxlFwdHits.insert(thePxlFwdHits.end(), PxlFwdLowContainer->begin(), PxlFwdLowContainer->end());
1018  if (validPxlFwdHigh)
1019  thePxlFwdHits.insert(thePxlFwdHits.end(), PxlFwdHighContainer->begin(), PxlFwdHighContainer->end());
1020 
1021  // cycle through new container
1022  i = 0;
1023  j = 0;
1024  for (itHit = thePxlFwdHits.begin(); itHit != thePxlFwdHits.end(); ++itHit) {
1025  ++i;
1026 
1027  // create a DetId from the detUnitId
1028  DetId theDetUnitId(itHit->detUnitId());
1029  int detector = theDetUnitId.det();
1030  int subdetector = theDetUnitId.subdetId();
1031 
1032  // check that expected detector is returned
1033  if ((detector == dTrk) && (subdetector == sdPxlFwd)) {
1034  // get the GeomDetUnit from the geometry using theDetUnitID
1035  const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
1036 
1037  if (!theDet) {
1038  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from PxlFwdHits for Hit " << i;
1039  ;
1040  continue;
1041  }
1042 
1043  ++j;
1044 
1045  // get the Surface of the hit (knows how to go from local <-> global)
1046  const BoundPlane &bSurface = theDet->surface();
1047 
1048  if (meTrackerPxFToF)
1049  meTrackerPxFToF->Fill(itHit->tof());
1050  if (meTrackerPxFZ)
1051  meTrackerPxFZ->Fill(bSurface.toGlobal(itHit->localPosition()).z());
1052  if (meTrackerPxPhi)
1053  meTrackerPxPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
1054  if (meTrackerPxEta)
1055  meTrackerPxEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
1056 
1057  } else {
1058  edm::LogWarning(MsgLoggerCat) << "PxlFwd PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
1059  << sdPxlFwd << "); value returned is: (" << detector << "," << subdetector << ")";
1060  continue;
1061  } // end detector type check
1062  } // end loop through PxlFwd Hits
1063 
1064  if (verbosity > 1) {
1065  eventout += "\n Number of Pixel Forward Hits collected:.... ";
1066  eventout += j;
1067  }
1068 
1069  nPxlHits += j;
1070 
1071  if (meTrackerPx[0])
1072  meTrackerPx[0]->Fill((float)nPxlHits);
1073  if (meTrackerPx[1])
1074  meTrackerPx[1]->Fill((float)nPxlHits);
1075 
1077  // get Silicon Barrel information
1079  nSiHits = 0;
1080  edm::PSimHitContainer theSiBrlHits;
1081  // extract TIB low container
1082  edm::Handle<edm::PSimHitContainer> SiTIBLowContainer;
1083  iEvent.getByToken(SiTIBLowSrc_Token_, SiTIBLowContainer);
1084  if (!SiTIBLowContainer.isValid()) {
1085  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsTIBLowTof in event!";
1086  validSiTIBLow = false;
1087  }
1088  // extract TIB high container
1089  edm::Handle<edm::PSimHitContainer> SiTIBHighContainer;
1090  iEvent.getByToken(SiTIBHighSrc_Token_, SiTIBHighContainer);
1091  if (!SiTIBHighContainer.isValid()) {
1092  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsTIBHighTof in event!";
1093  validSiTIBHigh = false;
1094  }
1095  // extract TOB low container
1096  edm::Handle<edm::PSimHitContainer> SiTOBLowContainer;
1097  iEvent.getByToken(SiTOBLowSrc_Token_, SiTOBLowContainer);
1098  if (!SiTOBLowContainer.isValid()) {
1099  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsTOBLowTof in event!";
1100  validSiTOBLow = false;
1101  }
1102  // extract TOB high container
1103  edm::Handle<edm::PSimHitContainer> SiTOBHighContainer;
1104  iEvent.getByToken(SiTOBHighSrc_Token_, SiTOBHighContainer);
1105  if (!SiTOBHighContainer.isValid()) {
1106  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsTOBHighTof in event!";
1107  validSiTOBHigh = false;
1108  }
1109  // place all containers into new container
1110  if (validSiTIBLow)
1111  theSiBrlHits.insert(theSiBrlHits.end(), SiTIBLowContainer->begin(), SiTIBLowContainer->end());
1112  if (validSiTIBHigh)
1113  theSiBrlHits.insert(theSiBrlHits.end(), SiTIBHighContainer->begin(), SiTIBHighContainer->end());
1114  if (validSiTOBLow)
1115  theSiBrlHits.insert(theSiBrlHits.end(), SiTOBLowContainer->begin(), SiTOBLowContainer->end());
1116  if (validSiTOBHigh)
1117  theSiBrlHits.insert(theSiBrlHits.end(), SiTOBHighContainer->begin(), SiTOBHighContainer->end());
1118 
1119  // cycle through new container
1120  i = 0;
1121  j = 0;
1122  for (itHit = theSiBrlHits.begin(); itHit != theSiBrlHits.end(); ++itHit) {
1123  ++i;
1124 
1125  // create a DetId from the detUnitId
1126  DetId theDetUnitId(itHit->detUnitId());
1127  int detector = theDetUnitId.det();
1128  int subdetector = theDetUnitId.subdetId();
1129 
1130  // check that expected detector is returned
1131  if ((detector == dTrk) && ((subdetector == sdSiTIB) || (subdetector == sdSiTOB))) {
1132  // get the GeomDetUnit from the geometry using theDetUnitID
1133  const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
1134 
1135  if (!theDet) {
1136  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from SiBrlHits for Hit " << i;
1137  continue;
1138  }
1139 
1140  ++j;
1141 
1142  // get the Surface of the hit (knows how to go from local <-> global)
1143  const BoundPlane &bSurface = theDet->surface();
1144 
1145  if (meTrackerSiBToF)
1146  meTrackerSiBToF->Fill(itHit->tof());
1147  if (meTrackerSiBR)
1148  meTrackerSiBR->Fill(bSurface.toGlobal(itHit->localPosition()).perp());
1149  if (meTrackerSiPhi)
1150  meTrackerSiPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
1151  if (meTrackerSiEta)
1152  meTrackerSiEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
1153 
1154  } else {
1155  edm::LogWarning(MsgLoggerCat) << "SiBrl PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
1156  << sdSiTIB << " || " << sdSiTOB << "); value returned is: (" << detector << ","
1157  << subdetector << ")";
1158  continue;
1159  } // end detector type check
1160  } // end loop through SiBrl Hits
1161 
1162  if (verbosity > 1) {
1163  eventout += "\n Number of Silicon Barrel Hits collected:... ";
1164  eventout += j;
1165  }
1166 
1167  nSiHits += j;
1168 
1170  // get Silicon Forward information
1172  edm::PSimHitContainer theSiFwdHits;
1173  // extract TID low container
1174  edm::Handle<edm::PSimHitContainer> SiTIDLowContainer;
1175  iEvent.getByToken(SiTIDLowSrc_Token_, SiTIDLowContainer);
1176  if (!SiTIDLowContainer.isValid()) {
1177  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsTIDLowTof in event!";
1178  validSiTIDLow = false;
1179  }
1180  // extract TID high container
1181  edm::Handle<edm::PSimHitContainer> SiTIDHighContainer;
1182  iEvent.getByToken(SiTIDHighSrc_Token_, SiTIDHighContainer);
1183  if (!SiTIDHighContainer.isValid()) {
1184  LogDebug("GlobalHitsAnalyzer_fillTrk") << "Unable to find TrackerHitsTIDHighTof in event!";
1185  validSiTIDHigh = false;
1186  }
1187  // extract TEC low container
1188  edm::Handle<edm::PSimHitContainer> SiTECLowContainer;
1189  iEvent.getByToken(SiTECLowSrc_Token_, SiTECLowContainer);
1190  if (!SiTECLowContainer.isValid()) {
1191  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsTECLowTof in event!";
1192  validSiTECLow = false;
1193  }
1194  // extract TEC high container
1195  edm::Handle<edm::PSimHitContainer> SiTECHighContainer;
1196  iEvent.getByToken(SiTECHighSrc_Token_, SiTECHighContainer);
1197  if (!SiTECHighContainer.isValid()) {
1198  LogDebug(MsgLoggerCat) << "Unable to find TrackerHitsTECHighTof in event!";
1199  validSiTECHigh = false;
1200  }
1201  // place all containers into new container
1202  if (validSiTIDLow)
1203  theSiFwdHits.insert(theSiFwdHits.end(), SiTIDLowContainer->begin(), SiTIDLowContainer->end());
1204  if (validSiTIDHigh)
1205  theSiFwdHits.insert(theSiFwdHits.end(), SiTIDHighContainer->begin(), SiTIDHighContainer->end());
1206  if (validSiTECLow)
1207  theSiFwdHits.insert(theSiFwdHits.end(), SiTECLowContainer->begin(), SiTECLowContainer->end());
1208  if (validSiTECHigh)
1209  theSiFwdHits.insert(theSiFwdHits.end(), SiTECHighContainer->begin(), SiTECHighContainer->end());
1210 
1211  // cycle through container
1212  i = 0;
1213  j = 0;
1214  for (itHit = theSiFwdHits.begin(); itHit != theSiFwdHits.end(); ++itHit) {
1215  ++i;
1216 
1217  // create a DetId from the detUnitId
1218  DetId theDetUnitId(itHit->detUnitId());
1219  int detector = theDetUnitId.det();
1220  int subdetector = theDetUnitId.subdetId();
1221 
1222  // check that expected detector is returned
1223  if ((detector == dTrk) && ((subdetector == sdSiTID) || (subdetector == sdSiTEC))) {
1224  // get the GeomDetUnit from the geometry using theDetUnitID
1225  const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
1226 
1227  if (!theDet) {
1228  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from SiFwdHits Hit " << i;
1229  return;
1230  }
1231 
1232  ++j;
1233 
1234  // get the Surface of the hit (knows how to go from local <-> global)
1235  const BoundPlane &bSurface = theDet->surface();
1236 
1237  if (meTrackerSiFToF)
1238  meTrackerSiFToF->Fill(itHit->tof());
1239  if (meTrackerSiFZ)
1240  meTrackerSiFZ->Fill(bSurface.toGlobal(itHit->localPosition()).z());
1241  if (meTrackerSiPhi)
1242  meTrackerSiPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
1243  if (meTrackerSiEta)
1244  meTrackerSiEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
1245 
1246  } else {
1247  edm::LogWarning(MsgLoggerCat) << "SiFwd PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
1248  << sdSiTOB << " || " << sdSiTEC << "); value returned is: (" << detector << ","
1249  << subdetector << ")";
1250  continue;
1251  } // end check detector type
1252  } // end loop through SiFwd Hits
1253 
1254  if (verbosity > 1) {
1255  eventout += "\n Number of Silicon Forward Hits collected:.. ";
1256  eventout += j;
1257  }
1258 
1259  nSiHits += j;
1260 
1261  if (meTrackerSi[0])
1262  meTrackerSi[0]->Fill((float)nSiHits);
1263  if (meTrackerSi[1])
1264  meTrackerSi[1]->Fill((float)nSiHits);
1265 
1266  if (verbosity > 0)
1267  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1268 
1269  return;
1270 }
1271 
1273  nMuonHits = 0;
1274  std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillMuon";
1275 
1276  TString eventout;
1277  if (verbosity > 0)
1278  eventout = "\nGathering info:";
1279 
1280  // iterator to access containers
1281  edm::PSimHitContainer::const_iterator itHit;
1282 
1284  // access the CSC Muon
1286  // access the CSC Muon geometry
1287  edm::ESHandle<CSCGeometry> theCSCGeometry;
1288  iSetup.get<MuonGeometryRecord>().get(theCSCGeometry);
1289  if (!theCSCGeometry.isValid()) {
1290  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the CSCGeometry in event!";
1291  return;
1292  }
1293  const CSCGeometry &theCSCMuon(*theCSCGeometry);
1294 
1295  // get Muon CSC information
1296  edm::Handle<edm::PSimHitContainer> MuonCSCContainer;
1297  iEvent.getByToken(MuonCscSrc_Token_, MuonCSCContainer);
1298  if (!MuonCSCContainer.isValid()) {
1299  LogDebug(MsgLoggerCat) << "Unable to find MuonCSCHits in event!";
1300  validMuonCSC = false;
1301  }
1302 
1303  if (validMuonCSC) {
1304  // cycle through container
1305  int i = 0, j = 0;
1306  for (itHit = MuonCSCContainer->begin(); itHit != MuonCSCContainer->end(); ++itHit) {
1307  ++i;
1308 
1309  // create a DetId from the detUnitId
1310  DetId theDetUnitId(itHit->detUnitId());
1311  int detector = theDetUnitId.det();
1312  int subdetector = theDetUnitId.subdetId();
1313 
1314  // check that expected detector is returned
1315  if ((detector == dMuon) && (subdetector == sdMuonCSC)) {
1316  // get the GeomDetUnit from the geometry using theDetUnitID
1317  const GeomDetUnit *theDet = theCSCMuon.idToDetUnit(theDetUnitId);
1318 
1319  if (!theDet) {
1320  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theCSCMuon for hit " << i;
1321  continue;
1322  }
1323 
1324  ++j;
1325 
1326  // get the Surface of the hit (knows how to go from local <-> global)
1327  const BoundPlane &bSurface = theDet->surface();
1328 
1329  if (meMuonCscToF[0])
1330  meMuonCscToF[0]->Fill(itHit->tof());
1331  if (meMuonCscToF[1])
1332  meMuonCscToF[1]->Fill(itHit->tof());
1333  if (meMuonCscZ)
1334  meMuonCscZ->Fill(bSurface.toGlobal(itHit->localPosition()).z());
1335  if (meMuonPhi)
1336  meMuonPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
1337  if (meMuonEta)
1338  meMuonEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
1339 
1340  } else {
1341  edm::LogWarning(MsgLoggerCat) << "MuonCsc PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon
1342  << "," << sdMuonCSC << "); value returned is: (" << detector << "," << subdetector
1343  << ")";
1344  continue;
1345  } // end detector type check
1346  } // end loop through CSC Hits
1347 
1348  if (verbosity > 1) {
1349  eventout += "\n Number of CSC muon Hits collected:......... ";
1350  eventout += j;
1351  }
1352 
1353  nMuonHits += j;
1354  }
1355 
1357  // access the DT Muon
1359  // access the DT Muon geometry
1360  edm::ESHandle<DTGeometry> theDTGeometry;
1361  iSetup.get<MuonGeometryRecord>().get(theDTGeometry);
1362  if (!theDTGeometry.isValid()) {
1363  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the DTGeometry in event!";
1364  return;
1365  }
1366  const DTGeometry &theDTMuon(*theDTGeometry);
1367 
1368  // get Muon DT information
1369  edm::Handle<edm::PSimHitContainer> MuonDtContainer;
1370  iEvent.getByToken(MuonDtSrc_Token_, MuonDtContainer);
1371  if (!MuonDtContainer.isValid()) {
1372  LogDebug(MsgLoggerCat) << "Unable to find MuonDTHits in event!";
1373  validMuonDt = false;
1374  }
1375 
1376  if (validMuonDt) {
1377  // cycle through container
1378  int i = 0, j = 0;
1379  for (itHit = MuonDtContainer->begin(); itHit != MuonDtContainer->end(); ++itHit) {
1380  ++i;
1381 
1382  // create a DetId from the detUnitId
1383  DetId theDetUnitId(itHit->detUnitId());
1384  int detector = theDetUnitId.det();
1385  int subdetector = theDetUnitId.subdetId();
1386 
1387  // check that expected detector is returned
1388  if ((detector == dMuon) && (subdetector == sdMuonDT)) {
1389  // CSC uses wires and layers rather than the full detID
1390  // get the wireId
1391  DTWireId wireId(itHit->detUnitId());
1392 
1393  // get the DTLayer from the geometry using the wireID
1394  const DTLayer *theDet = theDTMuon.layer(wireId.layerId());
1395 
1396  if (!theDet) {
1397  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theDtMuon for hit " << i;
1398  continue;
1399  }
1400 
1401  ++j;
1402 
1403  // get the Surface of the hit (knows how to go from local <-> global)
1404  const BoundPlane &bSurface = theDet->surface();
1405 
1406  if (meMuonDtToF[0])
1407  meMuonDtToF[0]->Fill(itHit->tof());
1408  if (meMuonDtToF[1])
1409  meMuonDtToF[1]->Fill(itHit->tof());
1410  if (meMuonDtR)
1411  meMuonDtR->Fill(bSurface.toGlobal(itHit->localPosition()).perp());
1412  if (meMuonPhi)
1413  meMuonPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
1414  if (meMuonEta)
1415  meMuonEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
1416 
1417  } else {
1418  edm::LogWarning(MsgLoggerCat) << "MuonDt PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon << ","
1419  << sdMuonDT << "); value returned is: (" << detector << "," << subdetector << ")";
1420  continue;
1421  } // end detector type check
1422  } // end loop through DT Hits
1423 
1424  if (verbosity > 1) {
1425  eventout += "\n Number of DT muon Hits collected:.......... ";
1426  eventout += j;
1427  }
1428 
1429  nMuonHits += j;
1430  }
1431 
1432  // int RPCBrl = 0, RPCFwd = 0;
1434  // access the RPC Muon
1436  // access the RPC Muon geometry
1437  edm::ESHandle<RPCGeometry> theRPCGeometry;
1438  iSetup.get<MuonGeometryRecord>().get(theRPCGeometry);
1439  if (!theRPCGeometry.isValid()) {
1440  edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the RPCGeometry in event!";
1441  return;
1442  }
1443  const RPCGeometry &theRPCMuon(*theRPCGeometry);
1444 
1445  // get Muon RPC information
1446  edm::Handle<edm::PSimHitContainer> MuonRPCContainer;
1447  iEvent.getByToken(MuonRpcSrc_Token_, MuonRPCContainer);
1448  if (!MuonRPCContainer.isValid()) {
1449  LogDebug(MsgLoggerCat) << "Unable to find MuonRPCHits in event!";
1450  validMuonRPC = false;
1451  }
1452 
1453  if (validMuonRPC) {
1454  // cycle through container
1455  int i = 0, j = 0;
1456  int RPCBrl = 0, RPCFwd = 0;
1457  for (itHit = MuonRPCContainer->begin(); itHit != MuonRPCContainer->end(); ++itHit) {
1458  ++i;
1459 
1460  // create a DetID from the detUnitId
1461  DetId theDetUnitId(itHit->detUnitId());
1462  int detector = theDetUnitId.det();
1463  int subdetector = theDetUnitId.subdetId();
1464 
1465  // check that expected detector is returned
1466  if ((detector == dMuon) && (subdetector == sdMuonRPC)) {
1467  // get an RPCDetID from the detUnitID
1468  RPCDetId RPCId(itHit->detUnitId());
1469 
1470  // find the region of the RPC hit
1471  int region = RPCId.region();
1472 
1473  // get the GeomDetUnit from the geometry using the RPCDetId
1474  const GeomDetUnit *theDet = theRPCMuon.idToDetUnit(theDetUnitId);
1475 
1476  if (!theDet) {
1477  edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theRPCMuon for hit " << i;
1478  continue;
1479  }
1480 
1481  ++j;
1482 
1483  // get the Surface of the hit (knows how to go from local <-> global)
1484  const BoundPlane &bSurface = theDet->surface();
1485 
1486  // gather necessary information
1487  if ((region == sdMuonRPCRgnFwdp) || (region == sdMuonRPCRgnFwdn)) {
1488  ++RPCFwd;
1489 
1490  if (meMuonRpcFToF[0])
1491  meMuonRpcFToF[0]->Fill(itHit->tof());
1492  if (meMuonRpcFToF[1])
1493  meMuonRpcFToF[1]->Fill(itHit->tof());
1494  if (meMuonRpcFZ)
1495  meMuonRpcFZ->Fill(bSurface.toGlobal(itHit->localPosition()).z());
1496  if (meMuonPhi)
1497  meMuonPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
1498  if (meMuonEta)
1499  meMuonEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
1500 
1501  } else if (region == sdMuonRPCRgnBrl) {
1502  ++RPCBrl;
1503 
1504  if (meMuonRpcBToF[0])
1505  meMuonRpcBToF[0]->Fill(itHit->tof());
1506  if (meMuonRpcBToF[1])
1507  meMuonRpcBToF[1]->Fill(itHit->tof());
1508  if (meMuonRpcBR)
1509  meMuonRpcBR->Fill(bSurface.toGlobal(itHit->localPosition()).perp());
1510  if (meMuonPhi)
1511  meMuonPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
1512  if (meMuonEta)
1513  meMuonEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
1514 
1515  } else {
1516  edm::LogWarning(MsgLoggerCat) << "Invalid region for RPC Muon hit" << i;
1517  continue;
1518  } // end check of region
1519  } else {
1520  edm::LogWarning(MsgLoggerCat) << "MuonRpc PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon
1521  << "," << sdMuonRPC << "); value returned is: (" << detector << "," << subdetector
1522  << ")";
1523  continue;
1524  } // end detector type check
1525  } // end loop through RPC Hits
1526 
1527  if (verbosity > 1) {
1528  eventout += "\n Number of RPC muon Hits collected:......... ";
1529  eventout += j;
1530  eventout += "\n RPC Barrel muon Hits:............ ";
1531  eventout += RPCBrl;
1532  eventout += "\n RPC Forward muon Hits:........... ";
1533  eventout += RPCFwd;
1534  }
1535 
1536  nMuonHits += j;
1537  }
1538 
1539  if (meMuon[0])
1540  meMuon[0]->Fill((float)nMuonHits);
1541  if (meMuon[1])
1542  meMuon[1]->Fill((float)nMuonHits);
1543 
1544  if (verbosity > 0)
1545  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1546 
1547  return;
1548 }
1549 
1551  std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillECal";
1552 
1553  TString eventout;
1554  if (verbosity > 0)
1555  eventout = "\nGathering info:";
1556 
1557  // access the calorimeter geometry
1558  edm::ESHandle<CaloGeometry> theCaloGeometry;
1559  iSetup.get<CaloGeometryRecord>().get(theCaloGeometry);
1560  if (!theCaloGeometry.isValid()) {
1561  edm::LogWarning(MsgLoggerCat) << "Unable to find CaloGeometryRecord in event!";
1562  return;
1563  }
1564  const CaloGeometry &theCalo(*theCaloGeometry);
1565 
1566  // iterator to access containers
1567  edm::PCaloHitContainer::const_iterator itHit;
1568 
1570  // get ECal information
1572  edm::PCaloHitContainer theECalHits;
1573  // extract EB container
1575  iEvent.getByToken(ECalEBSrc_Token_, EBContainer);
1576  if (!EBContainer.isValid()) {
1577  LogDebug(MsgLoggerCat) << "Unable to find EcalHitsEB in event!";
1578  validEB = false;
1579  }
1580  // extract EE container
1582  iEvent.getByToken(ECalEESrc_Token_, EEContainer);
1583  if (!EEContainer.isValid()) {
1584  LogDebug(MsgLoggerCat) << "Unable to find EcalHitsEE in event!";
1585  validEE = false;
1586  }
1587  // place both containers into new container
1588  if (validEB)
1589  theECalHits.insert(theECalHits.end(), EBContainer->begin(), EBContainer->end());
1590  if (validEE)
1591  theECalHits.insert(theECalHits.end(), EEContainer->begin(), EEContainer->end());
1592 
1593  // cycle through new container
1594  int i = 0, j = 0;
1595  for (itHit = theECalHits.begin(); itHit != theECalHits.end(); ++itHit) {
1596  ++i;
1597 
1598  // create a DetId from the detUnitId
1599  DetId theDetUnitId(itHit->id());
1600  int detector = theDetUnitId.det();
1601  int subdetector = theDetUnitId.subdetId();
1602 
1603  // check that expected detector is returned
1604  if ((detector == dEcal) && ((subdetector == sdEcalBrl) || (subdetector == sdEcalFwd))) {
1605  // get the Cell geometry
1606  auto theDet = (theCalo.getSubdetectorGeometry(theDetUnitId))->getGeometry(theDetUnitId);
1607 
1608  if (!theDet) {
1609  edm::LogWarning(MsgLoggerCat) << "Unable to get CaloCellGeometry from ECalHits for Hit " << i;
1610  continue;
1611  }
1612 
1613  ++j;
1614 
1615  // get the global position of the cell
1616  const GlobalPoint &globalposition = theDet->getPosition();
1617 
1618  if (meCaloEcalE[0])
1619  meCaloEcalE[0]->Fill(itHit->energy());
1620  if (meCaloEcalE[1])
1621  meCaloEcalE[1]->Fill(itHit->energy());
1622  if (meCaloEcalToF[0])
1623  meCaloEcalToF[0]->Fill(itHit->time());
1624  if (meCaloEcalToF[1])
1625  meCaloEcalToF[1]->Fill(itHit->time());
1626  if (meCaloEcalPhi)
1627  meCaloEcalPhi->Fill(globalposition.phi());
1628  if (meCaloEcalEta)
1629  meCaloEcalEta->Fill(globalposition.eta());
1630 
1631  } else {
1632  edm::LogWarning(MsgLoggerCat) << "ECal PCaloHit " << i << " is expected to be (det,subdet) = (" << dEcal << ","
1633  << sdEcalBrl << " || " << sdEcalFwd << "); value returned is: (" << detector << ","
1634  << subdetector << ")";
1635  continue;
1636  } // end detector type check
1637  } // end loop through ECal Hits
1638 
1639  if (verbosity > 1) {
1640  eventout += "\n Number of ECal Hits collected:............. ";
1641  eventout += j;
1642  }
1643 
1644  if (meCaloEcal[0])
1645  meCaloEcal[0]->Fill((float)j);
1646  if (meCaloEcal[1])
1647  meCaloEcal[1]->Fill((float)j);
1648 
1650  // Get Preshower information
1652  // extract PreShower container
1653  edm::Handle<edm::PCaloHitContainer> PreShContainer;
1654  iEvent.getByToken(ECalESSrc_Token_, PreShContainer);
1655  if (!PreShContainer.isValid()) {
1656  LogDebug(MsgLoggerCat) << "Unable to find EcalHitsES in event!";
1657  validPresh = false;
1658  }
1659 
1660  if (validPresh) {
1661  // cycle through container
1662  int i = 0, j = 0;
1663  for (itHit = PreShContainer->begin(); itHit != PreShContainer->end(); ++itHit) {
1664  ++i;
1665 
1666  // create a DetId from the detUnitId
1667  DetId theDetUnitId(itHit->id());
1668  int detector = theDetUnitId.det();
1669  int subdetector = theDetUnitId.subdetId();
1670 
1671  // check that expected detector is returned
1672  if ((detector == dEcal) && (subdetector == sdEcalPS)) {
1673  // get the Cell geometry
1674  auto theDet = (theCalo.getSubdetectorGeometry(theDetUnitId))->getGeometry(theDetUnitId);
1675 
1676  if (!theDet) {
1677  edm::LogWarning(MsgLoggerCat) << "Unable to get CaloCellGeometry from PreShContainer for Hit " << i;
1678  continue;
1679  }
1680 
1681  ++j;
1682 
1683  // get the global position of the cell
1684  const GlobalPoint &globalposition = theDet->getPosition();
1685 
1686  if (meCaloPreShE[0])
1687  meCaloPreShE[0]->Fill(itHit->energy());
1688  if (meCaloPreShE[1])
1689  meCaloPreShE[1]->Fill(itHit->energy());
1690  if (meCaloPreShToF[0])
1691  meCaloPreShToF[0]->Fill(itHit->time());
1692  if (meCaloPreShToF[1])
1693  meCaloPreShToF[1]->Fill(itHit->time());
1694  if (meCaloPreShPhi)
1695  meCaloPreShPhi->Fill(globalposition.phi());
1696  if (meCaloPreShEta)
1697  meCaloPreShEta->Fill(globalposition.eta());
1698 
1699  } else {
1700  edm::LogWarning(MsgLoggerCat) << "PreSh PCaloHit " << i << " is expected to be (det,subdet) = (" << dEcal << ","
1701  << sdEcalPS << "); value returned is: (" << detector << "," << subdetector << ")";
1702  continue;
1703  } // end detector type check
1704  } // end loop through PreShower Hits
1705 
1706  if (verbosity > 1) {
1707  eventout += "\n Number of PreSh Hits collected:............ ";
1708  eventout += j;
1709  }
1710 
1711  if (meCaloPreSh[0])
1712  meCaloPreSh[0]->Fill((float)j);
1713  if (meCaloPreSh[1])
1714  meCaloPreSh[1]->Fill((float)j);
1715  }
1716 
1717  if (verbosity > 0)
1718  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1719 
1720  return;
1721 }
1722 
1724  std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillHCal";
1725 
1726  TString eventout;
1727  if (verbosity > 0)
1728  eventout = "\nGathering info:";
1729 
1730  // access the calorimeter geometry
1731  edm::ESHandle<CaloGeometry> theCaloGeometry;
1732  iSetup.get<CaloGeometryRecord>().get(theCaloGeometry);
1733  if (!theCaloGeometry.isValid()) {
1734  edm::LogWarning(MsgLoggerCat) << "Unable to find CaloGeometryRecord in event!";
1735  return;
1736  }
1737  const CaloGeometry &theCalo(*theCaloGeometry);
1738 
1740  iSetup.get<HcalRecNumberingRecord>().get(pHRNDC);
1741  const HcalDDDRecConstants *hcons = &(*pHRNDC);
1742 
1743  // iterator to access containers
1744  edm::PCaloHitContainer::const_iterator itHit;
1745 
1747  // get HCal information
1749  // extract HCal container
1751  iEvent.getByToken(HCalSrc_Token_, HCalContainer);
1752  if (!HCalContainer.isValid()) {
1753  LogDebug(MsgLoggerCat) << "Unable to find HCalHits in event!";
1754  validHcal = false;
1755  }
1756 
1757  if (validHcal) {
1758  // cycle through container
1759  int i = 0, j = 0;
1760  for (itHit = HCalContainer->begin(); itHit != HCalContainer->end(); ++itHit) {
1761  ++i;
1762 
1763  // create a DetId from the detUnitId
1764  DetId theDetUnitId;
1765  unsigned int id_ = itHit->id();
1766  if (testNumber)
1767  theDetUnitId = HcalHitRelabeller::relabel(id_, hcons);
1768  else
1769  theDetUnitId = id_;
1770 
1771  int detector = theDetUnitId.det();
1772  int subdetector = theDetUnitId.subdetId();
1773 
1774  // check that expected detector is returned
1775  if ((detector == dHcal) && ((subdetector == sdHcalBrl) || (subdetector == sdHcalEC) ||
1776  (subdetector == sdHcalOut) || (subdetector == sdHcalFwd))) {
1777  // get the Cell geometry
1778  const HcalGeometry *theDet = dynamic_cast<const HcalGeometry *>(theCalo.getSubdetectorGeometry(theDetUnitId));
1779 
1780  if (!theDet) {
1781  edm::LogWarning(MsgLoggerCat) << "Unable to get HcalGeometry from HCalContainer for Hit " << i;
1782  continue;
1783  }
1784 
1785  ++j;
1786 
1787  // get the global position of the cell
1788  const GlobalPoint &globalposition = theDet->getPosition(theDetUnitId);
1789 
1790  if (meCaloHcalE[0])
1791  meCaloHcalE[0]->Fill(itHit->energy());
1792  if (meCaloHcalE[1])
1793  meCaloHcalE[1]->Fill(itHit->energy());
1794  if (meCaloHcalToF[0])
1795  meCaloHcalToF[0]->Fill(itHit->time());
1796  if (meCaloHcalToF[1])
1797  meCaloHcalToF[1]->Fill(itHit->time());
1798  if (meCaloHcalPhi)
1799  meCaloHcalPhi->Fill(globalposition.phi());
1800  if (meCaloHcalEta)
1801  meCaloHcalEta->Fill(globalposition.eta());
1802 
1803  } else {
1804  edm::LogWarning(MsgLoggerCat) << "HCal PCaloHit " << i << " is expected to be (det,subdet) = (" << dHcal << ","
1805  << sdHcalBrl << " || " << sdHcalEC << " || " << sdHcalOut << " || " << sdHcalFwd
1806  << "); value returned is: (" << detector << "," << subdetector << ")";
1807  continue;
1808  } // end detector type check
1809  } // end loop through HCal Hits
1810 
1811  if (verbosity > 1) {
1812  eventout += "\n Number of HCal Hits collected:............. ";
1813  eventout += j;
1814  }
1815 
1816  if (meCaloHcal[0])
1817  meCaloHcal[0]->Fill((float)j);
1818  if (meCaloHcal[1])
1819  meCaloHcal[1]->Fill((float)j);
1820  }
1821 
1822  if (verbosity > 0)
1823  edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1824 
1825  return;
1826 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:39
MonitorElement * meTrackerSiPhi
T getParameter(std::string const &) const
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:49
EventNumber_t event() const
Definition: EventID.h:41
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::PSimHitContainer > SiTIDLowSrc_Token_
void fillG4MC(const edm::Event &)
static const int dEcal
static const int dTrk
std::vector< PCaloHit > PCaloHitContainer
edm::InputTag SiTECLowSrc_
edm::EDGetTokenT< edm::PSimHitContainer > SiTECHighSrc_Token_
const GeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Definition: RPCGeometry.cc:48
edm::InputTag PxlBrlLowSrc_
edm::InputTag MuonDtSrc_
static const int sdMuonRPCRgnFwdn
static const int sdHcalOut
MonitorElement * meMuonDtToF[2]
static const int sdMuonDT
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
MonitorElement * meGeantVtxRad[2]
TString subdetector
MonitorElement * meCaloHcal[2]
MonitorElement * meMCG4Trk[2]
static const int sdSiTID
MonitorElement * meTrackerPxPhi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
MonitorElement * meCaloHcalToF[2]
edm::EDGetTokenT< edm::PSimHitContainer > SiTIDHighSrc_Token_
unsigned long long EventNumber_t
MonitorElement * meCaloPreSh[2]
static const int sdEcalPS
edm::EDGetTokenT< edm::PCaloHitContainer > ECalEESrc_Token_
MonitorElement * meTrackerSiEta
void getManyByType(std::vector< Handle< PROD >> &results) const
Definition: Event.h:508
void fillHCal(const edm::Event &, const edm::EventSetup &)
MonitorElement * meTrackerSiBToF
static const int sdMuonRPC
MonitorElement * meTrackerSi[2]
edm::EDGetTokenT< edm::SimTrackContainer > G4TrkSrc_Token_
CaloGeometry const * getGeometry()
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
edm::EDGetTokenT< edm::PSimHitContainer > SiTIBHighSrc_Token_
MonitorElement * meMCG4Vtx[2]
edm::InputTag SiTIBHighSrc_
MonitorElement * meGeantVtxY[2]
MonitorElement * meGeantVtxMulti
void Fill(long long x)
MonitorElement * meTrackerPxFZ
edm::InputTag MuonCscSrc_
edm::InputTag PxlBrlHighSrc_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
char const * label
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
int iEvent
Definition: GenABIO.cc:224
MonitorElement * meMuonCscToF[2]
MonitorElement * meCaloPreShPhi
MonitorElement * meGeantTrkE
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
static const int sdSiTIB
MonitorElement * meCaloEcalEta
static const int sdPxlBrl
MonitorElement * meTrackerPxBR
MonitorElement * meCaloPreShE[2]
edm::InputTag PxlFwdLowSrc_
T sqrt(T t)
Definition: SSEVec.h:18
static const int sdMuonCSC
MonitorElement * meTrackerPxBToF
static const int sdEcalFwd
MonitorElement * meGeantVtxPhi
edm::InputTag SiTIDLowSrc_
edm::InputTag ECalESSrc_
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
MonitorElement * meCaloEcalPhi
edm::EDGetTokenT< edm::PSimHitContainer > SiTIBLowSrc_Token_
MonitorElement * meTrackerPx[2]
MonitorElement * meGeantTrkPt
MonitorElement * meGeantVtxEta
edm::InputTag PxlFwdHighSrc_
MonitorElement * meMuonRpcFZ
edm::EDGetTokenT< edm::PSimHitContainer > PxlBrlHighSrc_Token_
static const int sdSiTOB
static const int sdEcalBrl
edm::InputTag SiTECHighSrc_
static const int sdMuonRPCRgnFwdp
static const int sdMuonRPCRgnBrl
edm::EDGetTokenT< edm::PCaloHitContainer > ECalEBSrc_Token_
bool isValid() const
Definition: HandleBase.h:74
void fillTrk(const edm::Event &, const edm::EventSetup &)
MonitorElement * meMCRGP[2]
edm::EDGetTokenT< edm::PSimHitContainer > PxlBrlLowSrc_Token_
GlobalPoint getPosition(const DetId &id) const
MonitorElement * meMuonRpcBToF[2]
MonitorElement * meCaloHcalE[2]
MonitorElement * meMuonCscZ
MonitorElement * meGeantVtxX[2]
Definition: DetId.h:18
void fillMuon(const edm::Event &, const edm::EventSetup &)
static const int dHcal
edm::EDGetTokenT< edm::PSimHitContainer > SiTOBLowSrc_Token_
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:38
BranchDescription const & branchDescription() const
Definition: Provenance.h:45
edm::EDGetTokenT< edm::PSimHitContainer > MuonRpcSrc_Token_
MonitorElement * meCaloEcal[2]
edm::EDGetTokenT< edm::PSimHitContainer > PxlFwdLowSrc_Token_
MonitorElement * meTrackerSiFZ
MonitorElement * meGeantVtxZ[2]
MonitorElement * meCaloEcalToF[2]
edm::EDGetTokenT< edm::PSimHitContainer > SiTOBHighSrc_Token_
std::vector< SimVertex > SimVertexContainer
static const int sdHcalFwd
edm::EDGetTokenT< edm::PSimHitContainer > MuonCscSrc_Token_
void fillECal(const edm::Event &, const edm::EventSetup &)
edm::InputTag SiTIDHighSrc_
MonitorElement * meMuon[2]
static const int sdHcalBrl
MonitorElement * meMuonRpcFToF[2]
MonitorElement * meCaloPreShToF[2]
MonitorElement * meCaloPreShEta
std::string const & label() const
Definition: InputTag.h:36
MonitorElement * meTrackerSiFToF
T eta() const
Definition: PV3DBase.h:76
MonitorElement * meTrackerPxFToF
const GeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Definition: CSCGeometry.cc:108
edm::InputTag MuonRpcSrc_
edm::EDGetTokenT< edm::SimVertexContainer > G4VtxSrc_Token_
edm::EventID id() const
Definition: EventBase.h:59
static const int sdSiTEC
T perp() const
Magnitude of transverse component.
static const int dMuon
HLT enums.
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * meMuonEta
T get() const
Definition: EventSetup.h:71
edm::InputTag SiTOBLowSrc_
edm::InputTag SiTOBHighSrc_
MonitorElement * meMuonDtR
edm::InputTag ECalEBSrc_
edm::EDGetTokenT< edm::PCaloHitContainer > HCalSrc_Token_
std::vector< PSimHit > PSimHitContainer
unsigned int RunNumber_t
edm::EDGetTokenT< edm::PSimHitContainer > PxlFwdHighSrc_Token_
static const int sdPxlFwd
const DTLayer * layer(const DTLayerId &id) const
Return a layer given its id.
Definition: DTGeometry.cc:127
DetId relabel(const uint32_t testId) const
edm::InputTag SiTIBLowSrc_
MonitorElement * meCaloHcalPhi
bool isValid() const
Definition: ESHandle.h:44
MonitorElement * meMuonRpcBR
edm::InputTag ECalEESrc_
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * meTrackerPxEta
edm::EDGetTokenT< edm::PCaloHitContainer > ECalESSrc_Token_
std::vector< SimTrack > SimTrackContainer
MonitorElement * meCaloHcalEta
std::string const & instance() const
Definition: InputTag.h:37
static const int sdHcalEC
MonitorElement * meMuonPhi
Definition: Run.h:45
GlobalHitsAnalyzer(const edm::ParameterSet &)
edm::EDGetTokenT< edm::PSimHitContainer > MuonDtSrc_Token_
Provenance const * provenance() const
Definition: HandleBase.h:83
edm::EDGetTokenT< edm::PSimHitContainer > SiTECLowSrc_Token_
MonitorElement * meTrackerSiBR
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:39
void analyze(const edm::Event &, const edm::EventSetup &) override
void getAllStableProvenance(std::vector< StableProvenance const * > &provenances) const
Definition: Event.cc:117
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:63
MonitorElement * meCaloEcalE[2]