CMS 3D CMS Logo

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