CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Histograms.cc
Go to the documentation of this file.
3 
4 #include "TROOT.h"
5 #include "TTree.h"
6 #include "TFile.h"
7 #include "TH1F.h"
8 #include "TH2F.h"
9 #include "TH3F.h"
10 
11 #include <iostream>
12 
13 #include <cmath>
14 
15 /*****************************************************************************/
16 #define nCharges 2
17 enum Charges
19 
20 const char *chargeName[nCharges + 2] =
21 { "pos", "neg", "zero", "undefined" };
22 
23 /*****************************************************************************/
24 #define nParticles 21
26 {
27  pip, pim, kap, kam,
28  prp, prm, elp, elm,
29  hap, ham,
30  gam, k0s, lam, ala,
31  rho, kst, aks, phi,
32  sip, asi,
34 };
35 
36 const char *partName[nParticles] =
37 {
38  "pip", "pim", "kap", "kam",
39  "prp", "prm", "elp", "elm",
40  "hap", "ham",
41  "gam", "k0s", "lam", "ala",
42  "rho", "kst", "aks", "phi",
43  "sip", "asi",
44  "any"
45 };
46 
47 const int partCharge[nParticles] =
48 {
49  pos , neg , pos , neg ,
50  pos , neg , pos , neg ,
51  pos , neg ,
52  zero, zero, zero, zero,
53  zero, zero, zero, zero,
54  pos , neg ,
55  undefined
56 };
57 
58 /*****************************************************************************/
59 #define nFeedDowns 18
60 const std::pair<int,int> feedDown[nFeedDowns] =
61 {
62  std::pair<int,int>(k0s, pip), std::pair<int,int>(k0s, pim),
63  std::pair<int,int>(lam, prp), std::pair<int,int>(lam, pim),
64  std::pair<int,int>(ala, prm), std::pair<int,int>(ala, pip),
65  std::pair<int,int>(sip, prp), std::pair<int,int>(asi, prm),
66  std::pair<int,int>(any, pip), std::pair<int,int>(any, pim),
67  std::pair<int,int>(any, kap), std::pair<int,int>(any, kam),
68  std::pair<int,int>(any, prp), std::pair<int,int>(any, prm),
69  std::pair<int,int>(any, elp), std::pair<int,int>(any, elm),
70  std::pair<int,int>(any, hap), std::pair<int,int>(any, ham)
71 };
72 
73 #define nResonances 4
74 const std::pair<int,int> resonance[nResonances] =
75 {
76  std::pair<int,int>(pip, pim),
77  std::pair<int,int>(kap, pim),
78  std::pair<int,int>(pip, kam),
79  std::pair<int,int>(kap, kam)
80 };
81 
82 /*****************************************************************************/
84 {
85  fillHistograms = pset.getParameter<bool>("fillHistograms");
86  fillNtuples = pset.getParameter<bool>("fillNtuples");
87 
88  std::string histoFileLabel = pset.getParameter<std::string>("histoFile");
89  histoFile = new TFile(histoFileLabel.c_str(),"recreate");
90 
91  std::string ntupleFileLabel = pset.getParameter<std::string>("ntupleFile");
92  ntupleFile = new TFile(ntupleFileLabel.c_str(),"recreate");
93 
94 // resultFile->cd();
95 }
96 
97 /*****************************************************************************/
99 {
100 }
101 
102 /****************************************************************************/
104 {
105  switch(id)
106  {
107  case 211 : return pip; break;
108  case -211 : return pim; break;
109 
110  case 321 : return kap; break;
111  case -321 : return kam; break;
112 
113  case 2212 : return prp; break;
114  case -2212 : return prm; break;
115 
116  case 11 : return elp; break;
117  case -11 : return elm; break;
118 
119  // SimG4Core/Notification/src/G4TrackToParticleID.cc
120  // "deuteron" = -100; 1p 1n
121  // "triton" = -101; 1p 2n
122  // "alpha" = -102; 2p 2n
123  // "He3" = -104; 2p 1n
124 
125  case 22 : return gam; break;
126  case 310 : return k0s; break;
127  case 3122 : return lam; break;
128  case -3122 : return ala; break;
129 
130 /*
131  case 113 : return rho; break;
132  case 313 : return kst; break;
133  case -313 : return aks; break;
134  case 333 : return phi; break;
135 */
136 
137  case 3222 : return sip; break;
138  case -3222 : return asi; break;
139 
140  default : return -1; break;
141  }
142 }
143 
144 /****************************************************************************/
146 {
147  if(charge > 0) return pos;
148  else return neg;
149 }
150 
151 /*****************************************************************************/
153 {
154  if(fillNtuples)
155  {
156  TString leafStr;
157 
158  trackTrees.push_back(new TTree("simTrackTree","simTrackTree"));
159  leafStr = "ids/I:etas/F:pts/F:acc/I:prim/I:nrec/I:ntrkr/I";
160  trackTrees[0]->Branch("simTrackValues", &simTrackValues, leafStr.Data());
161 
162  trackTrees.push_back(new TTree("recTrackTree","recTrackTree"));
163  leafStr = "charge/I:etar/F:ptr/F:phir/F:zr/F:logpr/F:logde/F:nhitr/I:prim/I:nsim/I:ids/I:parids/I:etas/F:pts/F:ntrkr/I";
164  trackTrees[1]->Branch("recTrackValues", &recTrackValues, leafStr.Data());
165 
166  trackTrees.push_back(new TTree("recVzeroTree","recVzeroTree"));
167  leafStr = "etar/F:ptr/F:ima/F:rhor/F";
168  trackTrees[2]->Branch("recVzeroValues", &recVzeroValues, leafStr.Data());
169 
170  trackTrees.push_back(new TTree("eventInfoTree","eventInfoTree"));
171  leafStr = "proc/I:strk/I:ntrkr/I";
172  trackTrees[3]->Branch("eventInfoValues", &eventInfoValues, leafStr.Data());
173  }
174 
175  if(fillHistograms)
176  {
178  // Pt
179  const double small = 1e-3;
180  double pt;
181 
182  for(pt = 0; pt < 1 - small; pt += 0.05) ptBins.push_back(pt);
183  for(pt = 1; pt < 2 - small; pt += 0.1 ) ptBins.push_back(pt);
184  for(pt = 2; pt < 4 - small; pt += 0.2 ) ptBins.push_back(pt);
185  for(pt = 4; pt < 8 - small; pt += 0.5 ) ptBins.push_back(pt);
186  for(pt = 8; pt < 16 - small; pt += 1. ) ptBins.push_back(pt);
187  for(pt = 16; pt < 32 - small; pt += 2. ) ptBins.push_back(pt);
188  for(pt = 32; pt < 64 - small; pt += 4. ) ptBins.push_back(pt);
189 
190  constexpr float ratMin = 0.5;
191  constexpr float ratMax = 1.5;
192  constexpr float ratWidth = 1./200;
193 
194  for(double rat = ratMin; rat < ratMax + ratWidth/2; rat += ratWidth)
195  ratBins.push_back(rat);
196 
198  // Eta (-3,3)
199  constexpr float etaMin = -3.0;
200  constexpr float etaMax = 3.0;
201  constexpr float etaWidth = 0.2;
202 
203  for(double eta = etaMin; eta < etaMax + etaWidth/2; eta += etaWidth)
204  etaBins.push_back(eta);
205 
206 // for(double eta = etaMin; eta < etaMax + etaWidth/2; eta += etaWidth/10)
207  for(double eta = etaMin; eta < etaMax + etaWidth/2; eta += etaWidth/5)
208  metaBins.push_back(eta);
209 
210  constexpr float zMin = -20.;
211  constexpr float zMax = 20.;
212 // constexpr float zWidth = 0.1;
213  constexpr float zWidth = 0.2;
214 
215  for(double z = zMin; z < zMax + zWidth/2; z += zWidth)
216  zBins.push_back(z);
217 
219  // Number of recontructed tracks
220  constexpr float ntrkMin = 0.5;
221 // FIXME
222 // constexpr float ntrkMax = 200.;
223 // constexpr float ntrkWidth = 5.;
224  constexpr float ntrkMax = 1000.;
225  constexpr float ntrkWidth = 10.;
226 
227  for(double ntrk = ntrkMin; ntrk < ntrkMax + ntrkWidth; ntrk += ntrkWidth)
228  ntrkBins.push_back(ntrk);
229 
230 
231  char histName[256];
232 
234  // EventInfo
235  sprintf(histName,"heve");
236  heve.push_back(new TH1F(histName,histName, 200, -0.5,199.5));
237 
238  sprintf(histName,"hsdx");
239  heve.push_back(new TH1F(histName,histName, 200, -0.5,199.5));
240 
241  sprintf(histName,"hddx");
242  heve.push_back(new TH1F(histName,histName, 200, -0.5,199.5));
243 
244  sprintf(histName,"hndx");
245  heve.push_back(new TH1F(histName,histName, 200, -0.5,199.5));
246 
247  sprintf(histName,"hder");
248  hder.push_back(new TH2F(histName,histName, 200, -0.5,199.5,
249  200, -0.5,199.5));
250 
252  // SimTrack
253  for(int part = pip; part <= ala; part++)
254  {
255  // simulated
256  sprintf(histName,"hsim_%s", partName[part]);
257  hsim.push_back(new TH3F(histName,histName,
258  etaBins.size()-1, &etaBins[0],
259  ptBins.size()-1, &ptBins[0],
260  ntrkBins.size()-1, &ntrkBins[0]));
261 
262  // accepted
263  sprintf(histName,"hacc_%s", partName[part]);
264  hacc.push_back(new TH3F(histName,histName,
265  etaBins.size()-1, &etaBins[0],
266  ptBins.size()-1, &ptBins[0],
267  ntrkBins.size()-1, &ntrkBins[0]));
268 
269  // reconstructed/efficiency
270  sprintf(histName,"href_%s", partName[part]);
271  href.push_back(new TH3F(histName,histName,
272  etaBins.size()-1, &etaBins[0],
273  ptBins.size()-1, &ptBins[0],
274  ntrkBins.size()-1, &ntrkBins[0]));
275 
276  // multiply reconstructed
277  sprintf(histName,"hmul_%s", partName[part]);
278  hmul.push_back(new TH3F(histName,histName,
279  etaBins.size()-1, &etaBins[0],
280  ptBins.size()-1, &ptBins[0],
281  ntrkBins.size()-1, &ntrkBins[0]));
282  }
283 
285  // RecTrack
286  for(int charge = 0; charge < nCharges; charge++)
287  {
288  sprintf(histName,"hall_%s",chargeName[charge]);
289  hall.push_back(new TH3F(histName,histName,
290  etaBins.size()-1, &etaBins[0],
291  ptBins.size()-1, &ptBins[0],
292  ntrkBins.size()-1, &ntrkBins[0]));
293 
294  sprintf(histName,"hdac_%s",chargeName[charge]);
295  hdac.push_back(new TH2F(histName,histName,
296  metaBins.size()-1, &metaBins[0],
297  zBins.size()-1, &zBins[0]));
298 
300  // RecTrack -- FakeRate
301  sprintf(histName,"hfak_%s",chargeName[charge]);
302  hfak.push_back(new TH3F(histName,histName,
303  etaBins.size()-1, &etaBins[0],
304  ptBins.size()-1, &ptBins[0],
305  ntrkBins.size()-1, &ntrkBins[0]));
306  }
307 
309  // RecTrack -- Resolution, bias
310  for(int part = pip; part <= ala; part++)
311  {
312  // value
313  sprintf(histName,"hvpt_%s",partName[part]);
314  hvpt.push_back(new TH3F(histName,histName,
315  etaBins.size()-1, &etaBins[0],
316  ptBins.size()-1, &ptBins[0],
317  ptBins.size()-1, &ptBins[0]));
318 
319  // ratio
320  sprintf(histName,"hrpt_%s",partName[part]);
321  hrpt.push_back(new TH3F(histName,histName,
322  etaBins.size()-1, &etaBins[0],
323  ptBins.size()-1, &ptBins[0],
324  ratBins.size()-1, &ratBins[0]));
325 
326  sprintf(histName,"hsp0_%s",partName[part]);
327  hsp0.push_back(new TH2F(histName,histName,
328  etaBins.size()-1, &etaBins[0],
329  ptBins.size()-1, &ptBins[0]));
330 
331  sprintf(histName,"hsp1_%s",partName[part]);
332  hsp1.push_back(new TH2F(histName,histName,
333  etaBins.size()-1, &etaBins[0],
334  ptBins.size()-1, &ptBins[0]));
335 
336  sprintf(histName,"hsp2_%s",partName[part]);
337  hsp2.push_back(new TH2F(histName,histName,
338  etaBins.size()-1, &etaBins[0],
339  ptBins.size()-1, &ptBins[0]));
340  }
341 
343  // RecTrack -- FeedDown
344  for(int k = 0; k < nFeedDowns; k++)
345  {
346  sprintf(histName,"hpro_%s_%s", partName[feedDown[k].first], // produced
348  hpro.push_back(new TH2F(histName,histName,
349  etaBins.size()-1, &etaBins[0],
350  ptBins.size()-1, &ptBins[0]));
351 
352  sprintf(histName,"hdec_%s_%s", partName[feedDown[k].first], // decay
353  partName[feedDown[k].second]);
354  hdec.push_back(new TH2F(histName,histName,
355  etaBins.size()-1, &etaBins[0],
356  ptBins.size()-1, &ptBins[0]));
357  }
358 
360  // EnergyLoss
361  constexpr float lpMin = -3; // 50 MeV
362  constexpr float lpMax = 2; // 7.4 GeV
363  constexpr float lpWidth = (lpMax - lpMin)/100;
364  for(double lp = lpMin; lp < lpMax + lpWidth/2; lp += lpWidth)
365  lpBins.push_back(lp);
366 
367  const float ldeMin = log(1);
368  const float ldeMax = log(100);
369  const float ldeWidth = (ldeMax - ldeMin)/250;
370  for(double lde = ldeMin; lde < ldeMax + ldeWidth/2; lde += ldeWidth)
371  ldeBins.push_back(lde);
372 
373  for(double nhit = -0.5; nhit < 50; nhit += 1)
374  nhitBins.push_back(nhit);
375 
376  for(int charge = 0; charge < nCharges; charge++)
377  {
378  // All hits
379  // dE/dx
380  sprintf(histName,"helo_%s", chargeName[charge]);
381  helo.push_back(new TH3F(histName,histName,
382  etaBins.size()-1, &etaBins[0],
383  ptBins.size()-1, &ptBins[0],
384  ldeBins.size()-1, &ldeBins[0]));
385 
386  // Number of hits used
387  sprintf(histName,"hnhi_%s", chargeName[charge]);
388  hnhi.push_back(new TH3F(histName,histName,
389  etaBins.size()-1, &etaBins[0],
390  ptBins.size()-1, &ptBins[0],
391  nhitBins.size()-1, &nhitBins[0]));
392 
393  // Demo plot
394  sprintf(histName,"held_%s", chargeName[charge]);
395  held.push_back(new TH2F(histName,histName,
396  lpBins.size()-1, &lpBins[0],
397  ldeBins.size()-1, &ldeBins[0]));
398  }
399 
400 /*
401  for(int charge = 0; charge < nCharges; charge++)
402  {
403  // Strip hits
404  // dE/dx
405  sprintf(histName,"selo_%s", chargeName[charge]);
406  selo.push_back(new TH3F(histName,histName,
407  etaBins.size()-1, &etaBins[0],
408  ptBins.size()-1, &ptBins[0],
409  ldeBins.size()-1, &ldeBins[0]));
410 
411  // Number of hits used
412  sprintf(histName,"snhi_%s", chargeName[charge]);
413  snhi.push_back(new TH3F(histName,histName,
414  etaBins.size()-1, &etaBins[0],
415  ptBins.size()-1, &ptBins[0],
416  nhitBins.size()-1, &nhitBins[0]));
417 
418  // Demo plot
419  sprintf(histName,"seld_%s", chargeName[charge]);
420  seld.push_back(new TH2F(histName,histName,
421  lpBins.size()-1, &lpBins[0],
422  ldeBins.size()-1, &ldeBins[0]));
423  }
424 */
425 
427  // Invariant mass
428  constexpr float rhoMin = 0.;
429  constexpr float rhoMax = 5.;
430  constexpr float rhoWidth = 0.2;
431  for(double rho_ = rhoMin; rho_ < rhoMax + rhoWidth/2; rho_ += rhoWidth)
432  rhoBins.push_back(rho_);
433 
434 
435  for(int part = gam; part <= phi; part++)
436  {
437  float imMin = 0;
438  float imMax = 0;
439  float imWidth = 0;
440 
441  if(part == gam) { imMin = 0.0; imMax = 0.2; imWidth = 0.005; }
442  if(part == k0s) { imMin = 0.3; imMax = 0.7; imWidth = 0.005; }
443  if(part == lam ||
444  part == ala) { imMin = 1.0; imMax = 1.3; imWidth = 0.002; }
445 
446  if(part == rho) { imMin = 0.2; imMax = 1.2; imWidth = 0.010; }
447  if(part == kst ||
448  part == aks) { imMin = 0.6; imMax = 1.6; imWidth = 0.010; }
449  if(part == phi) { imMin = 0.9; imMax = 1.1; imWidth = 0.002; }
450 
451  std::vector<double> imBins;
452  double im;
453  for(im = imMin; im < imMax + imWidth/2; im += imWidth)
454  imBins.push_back(im);
455 
456  if(imWidth > 0)
457  {
458  sprintf(histName,"hima_%s", partName[part]);
459  hima.push_back(new TH3F(histName,histName,
460  etaBins.size()-1, &etaBins[0],
461  ptBins.size()-1, &ptBins[0],
462  imBins.size()-1, &imBins[0]));
463 
464  if(part >= rho && part <= phi)
465  {
466  sprintf(histName,"himp_%s", partName[part]);
467  hima.push_back(new TH3F(histName,histName,
468  etaBins.size()-1, &etaBins[0],
469  ptBins.size()-1, &ptBins[0],
470  imBins.size()-1, &imBins[0]));
471 
472  sprintf(histName,"himm_%s", partName[part]);
473  hima.push_back(new TH3F(histName,histName,
474  etaBins.size()-1, &etaBins[0],
475  ptBins.size()-1, &ptBins[0],
476  imBins.size()-1, &imBins[0]));
477 
478  sprintf(histName,"himx_%s", partName[part]);
479  hima.push_back(new TH3F(histName,histName,
480  etaBins.size()-1, &etaBins[0],
481  ptBins.size()-1, &ptBins[0],
482  imBins.size()-1, &imBins[0]));
483  }
484 
485  sprintf(histName,"hrho_%s", partName[part]);
486  hrho.push_back(new TH3F(histName,histName,
487  rhoBins.size()-1, &rhoBins[0],
488  ptBins.size()-1, &ptBins[0],
489  imBins.size()-1, &imBins[0]));
490  }
491  }
492  }
493 }
494 
495 /****************************************************************************/
496 void Histograms::fillEventInfo(int proc, int strk, int ntrk)
497 {
498  if(fillNtuples)
499  {
500  EventInfo_t e;
501  e.proc = proc;
502  e.strk = strk;
503  e.ntrkr = ntrk;
504 
505  eventInfoValues = e;
506 
507  trackTrees[3]->Fill();
508  }
509 
510  if(fillHistograms)
511  {
512  heve[0]->Fill(ntrk);
513 
514  if(proc == 92 || proc == 93)
515  heve[1]->Fill(ntrk); // hsdx
516 
517  if(proc == 94)
518  heve[2]->Fill(ntrk); // hddx
519 
520  if(!(proc == 92 || proc == 93 || proc == 94))
521  heve[3]->Fill(ntrk); // hndx
522 
523  // For multiplicity, detector response matrix
524  hder[0]->Fill(strk,ntrk);
525  }
526 }
527 
528 /****************************************************************************/
530 {
531  if(fillNtuples)
532  {
533  if(s.prim)
534  {
535  simTrackValues = s;
536  trackTrees[0]->Fill();
537  }
538  }
539 
540  if(fillHistograms)
541  {
542  int part = getParticle(s.ids);
543 
544  if(pip <= part && part <= ala && s.prim)
545  {
546  hsim[part]->Fill(s.etas, s.pts, s.ntrkr);
547  if(s.acc) hacc[part]->Fill(s.etas, s.pts, s.ntrkr);
548 if(s.acc)
549 {
550  if(s.nrec > 0) href[part]->Fill(s.etas, s.pts, s.ntrkr);
551  if(s.nrec > 1) hmul[part]->Fill(s.etas, s.pts, s.ntrkr);
552 }
553 
554  if(partCharge[part] == pos || partCharge[part] == neg)
555  {
556  if(partCharge[part] == pos) part = hap;
557  if(partCharge[part] == neg) part = ham;
558 
559  hsim[part]->Fill(s.etas, s.pts, s.ntrkr);
560  if(s.acc) hacc[part]->Fill(s.etas, s.pts, s.ntrkr);
561 if(s.acc)
562 {
563  if(s.nrec > 0) href[part]->Fill(s.etas, s.pts, s.ntrkr);
564  if(s.nrec > 1) hmul[part]->Fill(s.etas, s.pts, s.ntrkr);
565 }
566  }
567  }
568  }
569 }
570 
571 /****************************************************************************/
573 {
574  if(fillNtuples)
575  {
576  if(r.prim)
577  {
578  recTrackValues = r;
579  trackTrees[1]->Fill();
580  }
581  }
582 
583  if(fillHistograms)
584  {
585  int charge = getCharge(r.charge);
586  double p = exp(r.logpr);
587 
588  if(r.prim)
589  {
590  hall[charge]->Fill(r.etar, r.ptr, r.ntrkr);
591 
592  if(r.ptr > 0.3) // !!!
593  hdac[charge]->Fill(r.etar, r.zr);
594 
595  if(r.nsim == 0)
596  hfak[charge]->Fill(r.etar, r.ptr, r.ntrkr);
597 
598  if(r.nsim == 1)
599  {
600  int part = getParticle(r.ids);
601  int moth = getParticle(r.parids);
602 
603  if(pip <= part && part <= ala)
604  {
605  hvpt[part]->Fill(r.etas, r.pts, r.ptr ); // value
606  hrpt[part]->Fill(r.etas, r.pts, r.ptr/r.pts); // ratio
607 
608  hsp0[part]->Fill(r.etas, r.pts); // sum p^0
609  hsp1[part]->Fill(r.etas, r.pts, p); // sum p^1
610  hsp2[part]->Fill(r.etas, r.pts, p*p); // sum p^2
611  }
612 
613  for(int k = 0; k < nFeedDowns; k++)
614  if(part == feedDown[k].second) // daughter same
615  {
616  hpro[k]->Fill(r.etar, r.ptr);
617 
618  if((r.parids != 0 && feedDown[k].first == any) ||
619  feedDown[k].first == moth)
620  hdec[k]->Fill(r.etar, r.ptr);
621  }
622 
623  if(partCharge[part] == pos || partCharge[part] == neg)
624  {
625  if(partCharge[part] == pos) part = hap;
626  if(partCharge[part] == neg) part = ham;
627 
628  hvpt[part]->Fill(r.etas, r.pts, r.ptr ); // value
629  hrpt[part]->Fill(r.etas, r.pts, r.ptr/r.pts); // ratio
630 
631  hsp0[part]->Fill(r.etas, r.pts); // sum p^0
632  hsp1[part]->Fill(r.etas, r.pts, p); // sum p^1
633  hsp2[part]->Fill(r.etas, r.pts, p*p); // sum p^2
634 
635  for(int k = 0; k < nFeedDowns; k++)
636  if(part == feedDown[k].second) // daughter same
637  {
638  hpro[k]->Fill(r.etar, r.ptr);
639 
640  if((r.parids != 0 && feedDown[k].first == any) ||
641  feedDown[k].first == moth)
642  hdec[k]->Fill(r.etar, r.ptr);
643  }
644  }
645  }
646 
647  // All hits
648  helo[charge]->Fill(r.etar, r.ptr, r.logde);
649  hnhi[charge]->Fill(r.etar, r.ptr, r.nhitr);
650  held[charge]->Fill(r.logpr, r.logde);
651 
652  // Strip hits
653 /*
654  selo[charge]->Fill(r.etar, r.ptr, r.logde_strip);
655  snhi[charge]->Fill(r.etar, r.ptr, r.nhitr_strip);
656  seld[charge]->Fill(r.logpr, r.logde_strip);
657 */
658  }
659  }
660 }
661 
662 /****************************************************************************/
664 {
665  if(fillNtuples)
666  {
667  recVzeroValues = v;
668  trackTrees[2]->Fill();
669  }
670 
671  if(fillHistograms)
672  hima[part]->Fill(v.etar, v.ptr, v.ima);
673 }
674 
675 /****************************************************************************/
677 {
678  typedef std::vector<TH3F *>::const_iterator H3I;
679  typedef std::vector<TH2F *>::const_iterator H2I;
680  typedef std::vector<TH1F *>::const_iterator H1I;
681  typedef std::vector<TTree *>::const_iterator TI;
682 
683  if(fillHistograms)
684  {
685  histoFile->cd();
686  for(H1I h = heve.begin(); h!= heve.end(); h++) (*h)->Write();
687  for(H2I h = hder.begin(); h!= hder.end(); h++) (*h)->Write();
688 
689  for(H3I h = hsim.begin(); h!= hsim.end(); h++) (*h)->Write();
690  for(H3I h = hacc.begin(); h!= hacc.end(); h++) (*h)->Write();
691  for(H3I h = href.begin(); h!= href.end(); h++) (*h)->Write();
692  for(H3I h = hmul.begin(); h!= hmul.end(); h++) (*h)->Write();
693 
694  for(H3I h = hall.begin(); h!= hall.end(); h++) (*h)->Write();
695  for(H2I h = hdac.begin(); h!= hdac.end(); h++) (*h)->Write();
696 
697  for(H3I h = hvpt.begin(); h!= hvpt.end(); h++) (*h)->Write();
698  for(H3I h = hrpt.begin(); h!= hrpt.end(); h++) (*h)->Write();
699 
700  for(H2I h = hsp0.begin(); h!= hsp0.end(); h++) (*h)->Write();
701  for(H2I h = hsp1.begin(); h!= hsp1.end(); h++) (*h)->Write();
702  for(H2I h = hsp2.begin(); h!= hsp2.end(); h++) (*h)->Write();
703 
704  for(H3I h = hfak.begin(); h!= hfak.end(); h++) (*h)->Write();
705 
706  for(H2I h = hpro.begin(); h!= hpro.end(); h++) (*h)->Write();
707  for(H2I h = hdec.begin(); h!= hdec.end(); h++) (*h)->Write();
708 
709  for(H3I h = helo.begin(); h!= helo.end(); h++) (*h)->Write();
710  for(H3I h = hnhi.begin(); h!= hnhi.end(); h++) (*h)->Write();
711  for(H2I h = held.begin(); h!= held.end(); h++) (*h)->Write();
712 
713  for(H3I h = hima.begin(); h!= hima.end(); h++) (*h)->Write();
714  for(H3I h = hrho.begin(); h!= hrho.end(); h++) (*h)->Write();
715  histoFile->Close();
716  }
717 
718  if(fillNtuples)
719  {
720  ntupleFile->cd();
721  for(TI t = trackTrees.begin(); t!= trackTrees.end(); t++) (*t)->Write();
722  ntupleFile->Close();
723  }
724 }
725 
std::vector< TH2F * > hdec
Definition: Histograms.h:120
T getParameter(std::string const &) const
float pts
Definition: Histograms.h:42
#define nFeedDowns
Definition: Histograms.cc:59
float etar
Definition: Histograms.h:48
std::vector< TH3F * > hmul
Definition: Histograms.h:101
EventInfo_t eventInfoValues
Definition: Histograms.h:79
TrainProcessor *const proc
Definition: MVATrainer.cc:101
std::vector< TH1F * > heve
Definition: Histograms.h:94
std::vector< TH2F * > held
Definition: Histograms.h:125
Definition: DDAxes.h:10
int charge
Definition: Histograms.h:28
float etas
Definition: Histograms.h:16
std::vector< TH2F * > hpro
Definition: Histograms.h:119
float pts
Definition: Histograms.h:17
T eta() const
RecTrack_t recTrackValues
Definition: Histograms.h:77
std::vector< TH3F * > href
Definition: Histograms.h:100
double charge(const std::vector< uint8_t > &Ampls)
float float float z
float logpr
Definition: Histograms.h:33
const char * chargeName[nCharges+2]
Definition: Histograms.cc:20
float ima
Definition: Histograms.h:50
const std::pair< int, int > resonance[nResonances]
Definition: Histograms.cc:74
std::vector< double > lpBins
Definition: Histograms.h:86
U second(std::pair< T, U > const &p)
std::vector< double > ptBins
Definition: Histograms.h:86
std::vector< double > ntrkBins
Definition: Histograms.h:86
std::vector< TH2F * > hder
Definition: Histograms.h:95
void declareHistograms()
Definition: Histograms.cc:152
std::vector< TH3F * > hrpt
Definition: Histograms.h:110
std::vector< double > ldeBins
Definition: Histograms.h:86
const int partCharge[nParticles]
Definition: Histograms.cc:47
const char * partName[nParticles]
Definition: Histograms.cc:36
std::vector< TH3F * > helo
Definition: Histograms.h:123
std::vector< TH3F * > hrho
Definition: Histograms.h:135
std::vector< double > ratBins
Definition: Histograms.h:86
#define nParticles
Definition: Histograms.cc:24
std::vector< TH2F * > hsp0
Definition: Histograms.h:111
bool fillNtuples
Definition: Histograms.h:84
std::vector< TH3F * > hfak
Definition: Histograms.h:116
std::vector< double > nhitBins
Definition: Histograms.h:86
std::vector< TTree * > trackTrees
Definition: Histograms.h:75
TFile * ntupleFile
Definition: Histograms.h:82
#define nCharges
Definition: Histograms.cc:16
int parids
Definition: Histograms.h:40
bool first
Definition: L1TdeRCT.cc:94
#define nResonances
Definition: Histograms.cc:73
int getCharge(int charge)
Definition: Histograms.cc:145
Particles
Definition: Histograms.cc:25
int k[5][pyjets_maxn]
void fillSimHistograms(const SimTrack_t &s)
Definition: Histograms.cc:529
void fillVzeroHistograms(const RecVzero_t &r, int part)
Definition: Histograms.cc:663
bool fillHistograms
Definition: Histograms.h:83
SimTrack_t simTrackValues
Definition: Histograms.h:76
std::vector< TH2F * > hdac
Definition: Histograms.h:106
std::vector< double > etaBins
Definition: Histograms.h:86
std::vector< TH2F * > hsp2
Definition: Histograms.h:113
std::vector< double > rhoBins
Definition: Histograms.h:86
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
float zr
Definition: Histograms.h:32
float ptr
Definition: Histograms.h:30
part
Definition: HCALResponse.h:20
const std::pair< int, int > feedDown[nFeedDowns]
Definition: Histograms.cc:60
std::vector< double > metaBins
Definition: Histograms.h:86
void fillEventInfo(int proc, int strk, int ntrkr)
Definition: Histograms.cc:496
float logde
Definition: Histograms.h:34
std::vector< double > zBins
Definition: Histograms.h:86
RecVzero_t recVzeroValues
Definition: Histograms.h:78
TFile * histoFile
Definition: Histograms.h:81
float etas
Definition: Histograms.h:41
void fillRecHistograms(const RecTrack_t &r)
Definition: Histograms.cc:572
Charges
Definition: Histograms.cc:17
virtual ~Histograms()
Definition: Histograms.h:58
int getParticle(int id)
Definition: Histograms.cc:103
std::vector< TH3F * > hsim
Definition: Histograms.h:98
std::vector< TH3F * > hacc
Definition: Histograms.h:99
void writeHistograms()
Definition: Histograms.cc:676
std::vector< TH3F * > hima
Definition: Histograms.h:134
std::vector< TH2F * > hsp1
Definition: Histograms.h:112
float etar
Definition: Histograms.h:29
std::vector< TH3F * > hvpt
Definition: Histograms.h:109
#define constexpr
std::vector< TH3F * > hall
Definition: Histograms.h:104
float ptr
Definition: Histograms.h:49
Definition: DDAxes.h:10
std::vector< TH3F * > hnhi
Definition: Histograms.h:124