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