ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dasu/UltraFastSim/generateData.cc
(Generate patch)

Comparing UserCode/dasu/UltraFastSim/generateData.cc (file contents):
Revision 1.2 by dasu, Wed Feb 9 07:20:36 2011 UTC vs.
Revision 1.21 by dasu, Tue Jul 31 23:40:10 2012 UTC

# Line 14 | Line 14 | using namespace std;
14   using namespace Pythia8;
15  
16   #include "UltraFastSim.h"
17 + #include "UFSDataStore.h"
18 +
19 + int poisson(double mean, Rndm *rndmPtr) {
20 +  static double oldMean = -1;
21 +  static double g;
22 +  if(mean != oldMean) {
23 +    oldMean = mean;
24 +    if(mean == 0) {
25 +      g = 0;
26 +    }
27 +    else {
28 +      g = exp(-mean);
29 +    }
30 +  }    
31 +  double em = -1;
32 +  double t = 1;
33 +  do {
34 +    em++;
35 +    t *= rndmPtr->flat();
36 +  } while(t > g);
37 +  return em;
38 + }
39  
40   int main(int argc, char **argv) {
41    // Generator. Process selection. LHC initialization. Histogram.
# Line 21 | Line 43 | int main(int argc, char **argv) {
43    int nEvents = 0;
44    int runNumber = 0;
45    int meanPileupEventCount = 0;
46 <  if(argc < 3 || argc > 5)
46 >  float cmEnergy = 14000.;
47 >  bool cutOnMET = false;
48 >  if(argc < 3 || argc > 6)
49      {
50 <      cerr << "Command syntax: " << argv[0] << " BBA[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
51 <      cerr << "or              " << argv[0] << " ZLL[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
52 <      cerr << "or              " << argv[0] << " TLN[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
53 <      cerr << "or              " << argv[0] << " WLN[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
50 >      cerr << "Command syntax: " << argv[0] << " ZHmmbb[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
51 >      cerr << "or              " << argv[0] << " ZHeebb[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
52 >      cerr << "or              " << argv[0] << " ZHmmXX[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
53 >      cerr << "or              " << argv[0] << " ZHeeXX[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
54 >      cerr << "or              " << argv[0] << " ZZmmbb[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
55 >      cerr << "or              " << argv[0] << " ZZmmnn[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
56 >      cerr << "or              " << argv[0] << " ZZeebb[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
57 >      cerr << "or              " << argv[0] << " ZZeenn[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
58 >      cerr << "or              " << argv[0] << " BBHmh[...] " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
59 >      cerr << "or              " << argv[0] << " BBAmh[...] " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
60 >      cerr << "or              " << argv[0] << " VBFHXX[..] " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
61 >      cerr << "or              " << argv[0] << " Zee[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
62 >      cerr << "or              " << argv[0] << " Zmm[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
63 >      cerr << "or              " << argv[0] << " Zeh[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
64 >      cerr << "or              " << argv[0] << " Zmh[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
65 >      cerr << "or              " << argv[0] << " Zhh[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
66 >      cerr << "or              " << argv[0] << " Znn[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
67 >      cerr << "or              " << argv[0] << " Wen[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
68 >      cerr << "or              " << argv[0] << " Wmn[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
69 >      cerr << "or              " << argv[0] << " Ten[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
70 >      cerr << "or              " << argv[0] << " Tmn[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
71 >      cerr << "or              " << argv[0] << " QCD[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
72 >      cerr << "or              " << argv[0] << " QED[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
73 >      cerr << "or              " << argv[0] << " EWK[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
74 >      cerr << "or              " << argv[0] << " Top[...]   " << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
75 >      cerr << "or              " << argv[0] << " QCDMET[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
76 >      cerr << "or              " << argv[0] << " ZnnMET[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
77 >      cerr << "or              " << argv[0] << " ZZTo4L[...]" << " <nEvents> [RandomSeed] [meanPileupEventcount] [cmEnergy]" << endl;
78 >      cerr << "In above e-electron, m-muon, h-hadronic tau. n-neutrino" << endl;
79 >      cerr << "QCD, QED, EWK and Top do not specify the decays -- they are useful for generic BG production" << endl;
80 >      cerr << "QCDMET has MET > 50 GeV to make efficient to study QCD MET BG" << endl;
81 >      cerr << "ZnnMET has MET > 50 GeV to make efficient to study Znn MET BG" << endl;
82        exit(1);
83      }
84    else {
85      nEvents = atoi(argv[2]);
86      if(argc >= 4) runNumber = atoi(argv[3]);
87      if(argc >= 5) meanPileupEventCount = atoi(argv[4]);
88 <    if(strncmp(argv[1], "ZLL", 3) == 0)
88 >    if(argc >= 6) cmEnergy = atof(argv[5]);
89 >    if(strncmp(argv[1], "Zee", 3) == 0)
90 >      {
91 >        pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
92 >        pythia.readString("PhaseSpace:mHatMin = 60.");    
93 >        pythia.readString("PhaseSpace:mHatMax = -1");    
94 >        pythia.readString("23:onMode = 0");       // Z decays to electrons only
95 >        pythia.readString("23:onIfAny = 11");
96 >      }
97 >    else if(strncmp(argv[1], "Zmm", 3) == 0)
98        {
99          pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
100          pythia.readString("PhaseSpace:mHatMin = 60.");    
101          pythia.readString("PhaseSpace:mHatMax = -1");    
102 <        pythia.readString("23:onMode = 0");       // Z decays to leptons only
103 <        pythia.readString("23:onIfAny = 11 13 15");
104 <        pythia.readString("15:onMode = 2");       // tau- decays to electrons and muons - second tau decays in all modes
105 <        pythia.readString("15:onIfAny = 11 13");
102 >        pythia.readString("23:onMode = 0");       // Z decays to muons only
103 >        pythia.readString("23:onIfAny = 13");
104 >      }
105 >    else if(strncmp(argv[1], "Znn", 3) == 0)
106 >      {
107 >        pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
108 >        pythia.readString("PhaseSpace:mHatMin = 60.");    
109 >        pythia.readString("PhaseSpace:mHatMax = -1");    
110 >        pythia.readString("23:onMode = 0");       // Z decays to neutrinos only
111 >        pythia.readString("23:onIfAny = 12, 14, 16");
112 >        if(strncmp(argv[1], "ZnnMET", 6) == 0) {
113 >          cutOnMET = true;
114 >        }
115        }
116 <    else if(strncmp(argv[1], "WLN", 3) == 0)
116 >    else if(strncmp(argv[1], "Zeh", 3) == 0)
117 >      {
118 >        pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
119 >        pythia.readString("PhaseSpace:mHatMin = 60.");    
120 >        pythia.readString("PhaseSpace:mHatMax = -1");    
121 >        pythia.readString("23:onMode = 0");       // Z decays to taus only
122 >        pythia.readString("23:onIfAny = 15");
123 >        pythia.readString("15:onMode = 2");       // tau- decays to electrons - second tau decays in all modes
124 >        pythia.readString("15:onIfAny = 11");
125 >      }
126 >    else if(strncmp(argv[1], "Zmh", 3) == 0)
127 >      {
128 >        pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
129 >        pythia.readString("PhaseSpace:mHatMin = 60.");    
130 >        pythia.readString("PhaseSpace:mHatMax = -1");    
131 >        pythia.readString("23:onMode = 0");       // Z decays to taus only
132 >        pythia.readString("23:onIfAny = 15");
133 >        pythia.readString("15:onMode = 2");       // tau- decays to muons - second tau decays in all modes
134 >        pythia.readString("15:onIfAny = 13");
135 >      }
136 >    else if(strncmp(argv[1], "Zhh", 3) == 0)
137 >      {
138 >        pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
139 >        pythia.readString("PhaseSpace:mHatMin = 60.");    
140 >        pythia.readString("PhaseSpace:mHatMax = -1");    
141 >        pythia.readString("23:onMode = 0");       // Z decays to taus only
142 >        pythia.readString("23:onIfAny = 15");
143 >      }
144 >    else if(strncmp(argv[1], "Wen", 3) == 0)
145        {
146          pythia.readString("WeakSingleBoson:ffbar2W = on");
147 <        pythia.readString("24:onMode = 0");       // W decays to light leptons only
148 <        pythia.readString("24:onIfAny = 11 13");
147 >        pythia.readString("24:onMode = 0");       // W decays to electron
148 >        pythia.readString("24:onIfAny = 11");
149        }
150 <    else if(strncmp(argv[1], "TLN", 3) == 0)
150 >    else if(strncmp(argv[1], "Wmn", 3) == 0)
151 >      {
152 >        pythia.readString("WeakSingleBoson:ffbar2W = on");
153 >        pythia.readString("24:onMode = 0");       // W decays to muon
154 >        pythia.readString("24:onIfAny = 13");
155 >      }
156 >    else if(strncmp(argv[1], "Ten", 3) == 0)
157        {
158          pythia.readString("Top:all = on");
159 <        pythia.readString("24:onMode = 2");       // W+ decays to light leptons only
160 <        pythia.readString("24:onIfAny = 11 13");
159 >        pythia.readString("24:onMode = 2");       // W+ decays to electron
160 >        pythia.readString("24:onIfAny = 11");
161        }
162 <    else if(strncmp(argv[1], "BBA", 3) == 0)
162 >    else if(strncmp(argv[1], "Tmn", 3) == 0)
163        {
164 <        pythia.readString("Higgs:useBSM = on");
165 <        pythia.readString("HiggsBSM:gg2A3bbbar = on");
166 <        pythia.readString("36:onMode = 0");      // A0(H_3) decays only to tau-pairs
63 <        pythia.readString("36:onIfAny = 15");
164 >        pythia.readString("Top:all = on");
165 >        pythia.readString("24:onMode = 2");       // W+ decays to muon
166 >        pythia.readString("24:onIfAny = 13");
167        }
168 <    else
168 >    else if(strncmp(argv[1], "HZGamma", 7) == 0)
169        {
170 <        cerr << "Unknown process type " << argv[1] << " - aborting" << endl;
171 <        exit(1);
170 >        pythia.readString("HiggsSM:all = on");
171 >        pythia.readString("25:m0 = 125");
172 >        pythia.readString("25:onMode = 0");      // Higgs decays to Zgamma only
173 >        pythia.readString("25:onIfMatch = 22 23");
174 >        pythia.readString("23:onMode = 0");      // Z decays to light leptons
175 >        pythia.readString("23:onIfAny = 11 13");
176 >      }
177 >    else if(strncmp(argv[1], "ZHmmbb", 6) == 0)
178 >      {
179 >        pythia.readString("HiggsSM:ffbar2HZ = on");
180 >        pythia.readString("25:m0 = 125");
181 >        pythia.readString("25:onMode = 0");      // Higgs decays to bbBar only
182 >        pythia.readString("25:onIfAny = 5");
183 >        pythia.readString("23:onMode = 0");      // Z decays to mu+,mu- only (for trigger)
184 >        pythia.readString("23:onIfAny = 13");
185 >      }
186 >     else if(strncmp(argv[1], "ZHmmXX", 6) == 0)
187 >       {
188 >        pythia.readString("HiggsSM:ffbar2HZ = on");
189 >        pythia.readString("25:m0 = 125");
190 >        pythia.readString("25:mayDecay = false");      // Higgs does not decay -- becomes invisible
191 >        pythia.readString("25:isVisible = false");
192 >        pythia.readString("23:onMode = 0");      // Z decays to mu+,mu- only (for trigger)
193 >        pythia.readString("23:onIfAny = 13");
194 >       }
195 >    else if(strncmp(argv[1], "ZHeebb", 6) == 0)
196 >      {
197 >        pythia.readString("HiggsSM:ffbar2HZ = on");
198 >        pythia.readString("25:m0 = 125");
199 >        pythia.readString("25:onMode = 0");      // Higgs decays to bbBar only
200 >        pythia.readString("25:onIfAny = 5");
201 >        pythia.readString("23:onMode = 0");      // Z decays to e+,e- only (for trigger)
202 >        pythia.readString("23:onIfAny = 11");
203 >      }
204 >     else if(strncmp(argv[1], "ZHeeXX", 6) == 0)
205 >       {
206 >        pythia.readString("HiggsSM:ffbar2HZ = on");
207 >        pythia.readString("25:m0 = 125");
208 >        pythia.readString("25:mayDecay = false");      // Higgs does not decay -- becomes invisible
209 >        pythia.readString("25:isVisible = false");
210 >        pythia.readString("23:onMode = 0");      // Z decays to mu+,mu- only (for trigger)
211 >        pythia.readString("23:onIfAny = 11");
212 >       }
213 >    else if(strncmp(argv[1], "BB", 2) == 0)
214 >      {
215 >        pythia.readString("Higgs:useBSM = on");
216 >        pythia.readString("25:m0 = 129");
217 >        pythia.readString("35:m0 = 499.7");
218 >        pythia.readString("36:m0 = 500");
219 >        pythia.readString("37:m0 = 506");
220 >        pythia.readString("HiggsHchg:tanBeta = 30");
221 >        if(strncmp(argv[1], "BBH", 3) == 0) {
222 >          pythia.readString("HiggsBSM:gg2H2bbbar = on");
223 >          pythia.readString("35:onMode = 0");      // H2(H_2) decays only to tau-pairs
224 >          pythia.readString("35:onIfAny = 15");
225 >        }
226 >        else {
227 >          pythia.readString("HiggsBSM:gg2A3bbbar = on");
228 >          pythia.readString("36:onMode = 0");      // A0(H_3) decays only to tau-pairs
229 >          pythia.readString("36:onIfAny = 15");
230 >        }
231 >        if(strncmp(argv[1], "BBHmh", 5) == 0 ||
232 >           strncmp(argv[1], "BBAmh", 5) == 0) {
233 >          pythia.readString("15:onMode = 2");       // tau- decays to muons - second tau decays in all modes
234 >          pythia.readString("15:onIfAny = 13");
235 >        }
236        }
237 +     else if(strncmp(argv[1], "ZZmmbb", 6) == 0)
238 +       {
239 +         pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
240 +         pythia.readString("23:onMode = 0");
241 +         pythia.readString("23:onIfAny = 5 13");   // Let the Z decay to bQuarks or muons
242 +       }
243 +     else if(strncmp(argv[1], "ZZTo4L", 6) == 0)
244 +       {
245 +         pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
246 +         pythia.readString("PhaseSpace:mHatMin = 60.");// Start way offshell for the ZZ to catch low M4L
247 +         pythia.readString("PhaseSpace:mHatMax = -1");    
248 +         pythia.readString("23:onMode = 0");
249 +         pythia.readString("23:onIfAny = 11 13 15");   // Let the Z decay to charged lepton pairs
250 +       }
251 +     else if(strncmp(argv[1], "ZZmmnn", 6) == 0)
252 +       {
253 +         pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
254 +         pythia.readString("23:onMode = 0");
255 +         pythia.readString("23:onIfAny = 13 12 14 16");   // Let the Z decay to muons or neutrinos
256 +       }
257 +     else if(strncmp(argv[1], "ZZeebb", 6) == 0)
258 +       {
259 +         pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
260 +         pythia.readString("23:onMode = 0");
261 +         pythia.readString("23:onIfAny = 5 11");   // Let the Z decay to bQuarks or electrons
262 +       }
263 +     else if(strncmp(argv[1], "ZZeenn", 6) == 0)
264 +       {
265 +         pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
266 +         pythia.readString("23:onMode = 0");
267 +         pythia.readString("23:onIfAny = 11 12 14 16");   // Let the Z decay to electrons or neutrinos
268 +       }
269 +     else if(strncmp(argv[1], "QCD", 3) == 0)
270 +       {
271 +         pythia.readString("HardQCD:all = on");    
272 +         pythia.readString("PhaseSpace:pTHatMin = 50.");
273 +         if(strncmp(argv[1], "QCDMET", 6) == 0) {
274 +           cutOnMET = true;
275 +         }
276 +       }
277 +     else if(strcmp(argv[1], "QED") == 0)
278 +       {
279 +         pythia.readString("PromptPhoton:all = on");
280 +         pythia.readString("PhaseSpace:mHatMin = 60.");    
281 +         pythia.readString("PhaseSpace:mHatMax = -1");
282 +       }
283 +     else if(strncmp(argv[1], "EWK", 3) == 0)
284 +       {
285 +         pythia.readString("WeakSingleBoson:all = on");
286 +         pythia.readString("PhaseSpace:mHatMin = 60.");    
287 +         pythia.readString("PhaseSpace:mHatMax = -1");    
288 +         pythia.readString("WeakDoubleBoson:all = on");
289 +       }
290 +     else if(strncmp(argv[1], "Top", 3) == 0)
291 +       {
292 +         pythia.readString("Top:all = on");
293 +       }
294 +     else if(strncmp(argv[1], "VBFHXX", 6) == 0)
295 +       {
296 +         pythia.readString("HiggsSM:ff2Hff(t:ZZ) = on");
297 +         pythia.readString("HiggsSM:ff2Hff(t:WW) = on");
298 +         pythia.readString("25:m0 = 125");
299 +         pythia.readString("25:mayDecay = false");      // Higgs does not decay -- becomes invisible
300 +         pythia.readString("25:isVisible = false");
301 +       }
302 +     else
303 +       {
304 +         cerr << "Unknown process type " << argv[1] << " - aborting" << endl;
305 +         exit(1);
306 +       }
307    }
308  
309    // Initialize pythia
310  
311 <  pythia.init( 2212, 2212, 14000.);
311 >  pythia.init(2212, 2212, cmEnergy);
312    pythia.particleData.listAll();
313    Rndm * rndmPtr = &pythia.rndm;
314    rndmPtr->init(runNumber);
# Line 85 | Line 322 | int main(int argc, char **argv) {
322  
323    // Ultra Fast Simulator
324  
325 <  UltraFastSim ufs(rndmPtr);
325 >  UltraFastSim ufs;
326 >  char jobName[256];
327 >  sprintf(jobName, "%s-PU%3.3d-%4.4d", argv[1], meanPileupEventCount, runNumber);
328 >  UFSDataStore dataStore(jobName, &ufs);
329  
330    // Begin event loop
331    for (int iEvent = 0; iEvent < nEvents; ) {
# Line 93 | Line 333 | int main(int argc, char **argv) {
333      // Generate event. Skip if error. List first one.
334      if (!pythia.next()) continue;
335  
336 +    if(iEvent < 10) pythia.event.list();
337 +
338      // Add pileup
339  
340      int pileupEventCount = 0;
341 <    if(meanPileupEventCount > 0) pileupEventCount = meanPileupEventCount; // * rmdmPtr->pois(); (not available yet)
341 >    if(meanPileupEventCount > 0) pileupEventCount = poisson(meanPileupEventCount, rndmPtr);
342      for (int puEvent = 0; puEvent < pileupEventCount; ) {
343        if(!pileupPythia.next()) continue;
344 +      double vx = rndmPtr->gauss()*2.; // Mean beam spread is 2 mm in x-y and 75 mm in z
345 +      double vy = rndmPtr->gauss()*2.;
346 +      double vz = rndmPtr->gauss()*75.;
347        for(int i = 0; i < pileupPythia.event.size(); i++) {
348          Particle& particle = pileupPythia.event[i];
349 +        particle.xProd(vx+particle.xProd());
350 +        particle.yProd(vy+particle.yProd());
351 +        particle.zProd(vz+particle.zProd());
352          if(particle.status() > 0) {
353            if(particle.isVisible()) {
354              if(particle.pT() > 0.5) {
# Line 114 | Line 362 | int main(int argc, char **argv) {
362  
363      // Ultra fast simulation
364  
365 <    if(!ufs.run(pythia.event))
365 >    if(!ufs.run(pythia.event, rndmPtr))
366        {
367          cerr << "Ultra fast simulation failed - aborting" << endl;
368          exit(1);
369        }
370  
371 <    cout << "Number of Particles = " << ufs.particleList().size() << endl;
372 <    cout << "Number of Gen Elecs = " << ufs.electronList().size() << endl;
373 <    cout << "Number of Gen Muons = " << ufs.muonList().size() << endl;
374 <    cout << "Number of Gen Taus =  " << ufs.genTauList().size() << endl;
375 <    cout << "Number of b Quarks =  " << ufs.bQuarkList().size() << endl;
376 <    cout << "Number of Jets =      " << ufs.sortedJetList().size() << endl;
377 <    cout << "Number of bJets =     " << ufs.bJetList().size() << endl;
378 <    cout << "Number of taus =      " << ufs.tauList().size() << endl;
379 <    cout << endl;
380 <  
371 >    // If necessary, check MET and decide to store or not
372 >
373 >    bool doStore = true;
374 >    if(cutOnMET) {
375 >      double MET = ufs.getMET().Pt();
376 >      if(MET < 50.) {
377 >        doStore = false;
378 >      }
379 >    }
380 >    // Store data
381 >
382 >    if(doStore && !dataStore.run())
383 >      {
384 >        cerr << "Failed to store data" << endl;
385 >        exit(3);
386 >      }
387 >
388      // End of event loop. Statistics. Histogram. Done.
389  
390      if(!(iEvent % 100)) cout << "Processed event " << iEvent << endl;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines