CMS 3D CMS Logo

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