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