CMS 3D CMS Logo

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