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.12 by mmhl, Thu Feb 24 20:17:12 2011 UTC vs.
Revision 1.19 by dasu, Mon Apr 9 03:36:35 2012 UTC

# Line 13 | Line 13 | using namespace std;
13   #include "Pythia.h"
14   using namespace Pythia8;
15  
16 #include "TROOT.h"
17 #include "TFile.h"
18
16   #include "UltraFastSim.h"
17 < #include "bbHAnalysis.h"
18 < //#include "ZHAnalysis.h"
19 < #include "bbHAnalysis.cc"
20 < //#include "ZHAnalysis.cc"
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 28 | 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] << " ZHmmbb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
51 <      cerr << "or              " << argv[0] << " ZHeebb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
52 <      cerr << "or              " << argv[0] << " ZZmmbb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
53 <      cerr << "or              " << argv[0] << " BBHmh[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
54 <      cerr << "or              " << argv[0] << " BBAmh[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
55 <      cerr << "or              " << argv[0] << " Zee[...]   " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
56 <      cerr << "or              " << argv[0] << " Zmm[...]   " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
57 <      cerr << "or              " << argv[0] << " Zeh[...]   " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
58 <      cerr << "or              " << argv[0] << " Zmh[...]   " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
59 <      cerr << "or              " << argv[0] << " Zhh[...]   " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
60 <      cerr << "or              " << argv[0] << " Wen[...]   " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
61 <      cerr << "or              " << argv[0] << " Wmn[...]   " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
62 <      cerr << "or              " << argv[0] << " Ten[...]   " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
63 <      cerr << "or              " << argv[0] << " Tmn[...]   " << " <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 << "In above e-electron, m-muon, h-hadronic tau. n-neutrino" << endl;
78 +      cerr << "QCD, QED, EWK and Top do not specify the decays -- they are useful for generic BG production" << endl;
79 +      cerr << "QCDMET has MET > 50 GeV to make efficient to study QCD MET BG" << endl;
80 +      cerr << "ZnnMET has MET > 50 GeV to make efficient to study Znn MET BG" << endl;
81        exit(1);
82      }
83    else {
84      nEvents = atoi(argv[2]);
85      if(argc >= 4) runNumber = atoi(argv[3]);
86      if(argc >= 5) meanPileupEventCount = atoi(argv[4]);
87 +    if(argc >= 6) cmEnergy = atof(argv[5]);
88      if(strncmp(argv[1], "Zee", 3) == 0)
89        {
90          pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
# Line 67 | Line 101 | int main(int argc, char **argv) {
101          pythia.readString("23:onMode = 0");       // Z decays to muons only
102          pythia.readString("23:onIfAny = 13");
103        }
104 +    else if(strncmp(argv[1], "Znn", 3) == 0)
105 +      {
106 +        pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
107 +        pythia.readString("PhaseSpace:mHatMin = 60.");    
108 +        pythia.readString("PhaseSpace:mHatMax = -1");    
109 +        pythia.readString("23:onMode = 0");       // Z decays to neutrinos only
110 +        pythia.readString("23:onIfAny = 12, 14, 16");
111 +        if(strncmp(argv[1], "ZnnMET", 6) == 0) {
112 +          cutOnMET = true;
113 +        }
114 +      }
115      else if(strncmp(argv[1], "Zeh", 3) == 0)
116        {
117          pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
# Line 128 | Line 173 | int main(int argc, char **argv) {
173          pythia.readString("23:onMode = 0");      // Z decays to mu+,mu- only (for trigger)
174          pythia.readString("23:onIfAny = 13");
175        }
176 +     else if(strncmp(argv[1], "ZHmmXX", 6) == 0)
177 +       {
178 +        pythia.readString("HiggsSM:ffbar2HZ = on");
179 +        pythia.readString("25:m0 = 120");
180 +        pythia.readString("25:mayDecay = false");      // Higgs does not decay -- becomes invisible
181 +        pythia.readString("25:isVisible = false");
182 +        pythia.readString("23:onMode = 0");      // Z decays to mu+,mu- only (for trigger)
183 +        pythia.readString("23:onIfAny = 13");
184 +       }
185      else if(strncmp(argv[1], "ZHeebb", 6) == 0)
186        {
187          pythia.readString("HiggsSM:ffbar2HZ = on");
# Line 137 | Line 191 | int main(int argc, char **argv) {
191          pythia.readString("23:onMode = 0");      // Z decays to e+,e- only (for trigger)
192          pythia.readString("23:onIfAny = 11");
193        }
194 +     else if(strncmp(argv[1], "ZHeeXX", 6) == 0)
195 +       {
196 +        pythia.readString("HiggsSM:ffbar2HZ = on");
197 +        pythia.readString("25:m0 = 120");
198 +        pythia.readString("25:mayDecay = false");      // Higgs does not decay -- becomes invisible
199 +        pythia.readString("25:isVisible = false");
200 +        pythia.readString("23:onMode = 0");      // Z decays to mu+,mu- only (for trigger)
201 +        pythia.readString("23:onIfAny = 11");
202 +       }
203      else if(strncmp(argv[1], "BB", 2) == 0)
204        {
205          pythia.readString("Higgs:useBSM = on");
# Line 167 | Line 230 | int main(int argc, char **argv) {
230           pythia.readString("23:onMode = 0");
231           pythia.readString("23:onIfAny = 5 13");   // Let the Z decay to bQuarks or muons
232         }
233 <    else
234 <      {
235 <        cerr << "Unknown process type " << argv[1] << " - aborting" << endl;
236 <        exit(1);
237 <      }
233 >     else if(strncmp(argv[1], "ZZmmnn", 6) == 0)
234 >       {
235 >         pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
236 >         pythia.readString("23:onMode = 0");
237 >         pythia.readString("23:onIfAny = 13 12 14 16");   // Let the Z decay to muons or neutrinos
238 >       }
239 >     else if(strncmp(argv[1], "ZZeebb", 6) == 0)
240 >       {
241 >         pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
242 >         pythia.readString("23:onMode = 0");
243 >         pythia.readString("23:onIfAny = 5 11");   // Let the Z decay to bQuarks or electrons
244 >       }
245 >     else if(strncmp(argv[1], "ZZeenn", 6) == 0)
246 >       {
247 >         pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
248 >         pythia.readString("23:onMode = 0");
249 >         pythia.readString("23:onIfAny = 11 12 14 16");   // Let the Z decay to electrons or neutrinos
250 >       }
251 >     else if(strncmp(argv[1], "QCD", 3) == 0)
252 >       {
253 >         pythia.readString("HardQCD:all = on");    
254 >         pythia.readString("PhaseSpace:pTHatMin = 50.");
255 >         if(strncmp(argv[1], "QCDMET", 6) == 0) {
256 >           cutOnMET = true;
257 >         }
258 >       }
259 >     else if(strcmp(argv[1], "QED") == 0)
260 >       {
261 >         pythia.readString("PromptPhoton:all = on");
262 >         pythia.readString("PhaseSpace:mHatMin = 60.");    
263 >         pythia.readString("PhaseSpace:mHatMax = -1");
264 >       }
265 >     else if(strncmp(argv[1], "EWK", 3) == 0)
266 >       {
267 >         pythia.readString("WeakSingleBoson:all = on");
268 >         pythia.readString("PhaseSpace:mHatMin = 60.");    
269 >         pythia.readString("PhaseSpace:mHatMax = -1");    
270 >         pythia.readString("WeakDoubleBoson:all = on");
271 >       }
272 >     else if(strncmp(argv[1], "Top", 3) == 0)
273 >       {
274 >         pythia.readString("Top:all = on");
275 >       }
276 >     else if(strncmp(argv[1], "VBFHXX", 6) == 0)
277 >       {
278 >         pythia.readString("HiggsSM:ff2Hff(t:ZZ) = on");
279 >         pythia.readString("HiggsSM:ff2Hff(t:WW) = on");
280 >         pythia.readString("25:m0 = 120");
281 >         pythia.readString("25:mayDecay = false");      // Higgs does not decay -- becomes invisible
282 >         pythia.readString("25:isVisible = false");
283 >       }
284 >     else
285 >       {
286 >         cerr << "Unknown process type " << argv[1] << " - aborting" << endl;
287 >         exit(1);
288 >       }
289    }
290  
177  string name(argv[1]);
178  name += ".root";
179  TFile *outFile = TFile::Open(name.c_str(), "recreate");
180
291    // Initialize pythia
292  
293 <  pythia.init( 2212, 2212, 14000.);
293 >  pythia.init(2212, 2212, cmEnergy);
294    pythia.particleData.listAll();
295    Rndm * rndmPtr = &pythia.rndm;
296    rndmPtr->init(runNumber);
# Line 194 | Line 304 | int main(int argc, char **argv) {
304  
305    // Ultra Fast Simulator
306  
307 <  UltraFastSim ufs(rndmPtr);
308 <  bbHAnalysis bbH(outFile, &pythia, &ufs, true);
309 <  //ZHAnalysis ZH; // outFile, &pythia, &ufs, true);
310 <  //ZH.BookTree();
307 >  UltraFastSim ufs;
308 >  char jobName[256];
309 >  sprintf(jobName, "%s-PU%3.3d-%4.4d", argv[1], meanPileupEventCount, runNumber);
310 >  UFSDataStore dataStore(jobName, &ufs);
311  
312    // Begin event loop
313    for (int iEvent = 0; iEvent < nEvents; ) {
# Line 210 | Line 320 | int main(int argc, char **argv) {
320      // Add pileup
321  
322      int pileupEventCount = 0;
323 <    if(meanPileupEventCount > 0) pileupEventCount = meanPileupEventCount; // * rmdmPtr->pois(); (not available yet)
323 >    if(meanPileupEventCount > 0) pileupEventCount = poisson(meanPileupEventCount, rndmPtr);
324      for (int puEvent = 0; puEvent < pileupEventCount; ) {
325        if(!pileupPythia.next()) continue;
326        double vx = rndmPtr->gauss()*2.; // Mean beam spread is 2 mm in x-y and 75 mm in z
# Line 234 | Line 344 | int main(int argc, char **argv) {
344  
345      // Ultra fast simulation
346  
347 <    if(!ufs.run(pythia.event))
347 >    if(!ufs.run(pythia.event, rndmPtr))
348        {
349          cerr << "Ultra fast simulation failed - aborting" << endl;
350          exit(1);
351        }
352  
353 <    // Run bbHAnalysis
353 >    // If necessary, check MET and decide to store or not
354  
355 <    if(!bbH.run())
356 <      {
357 <        cerr << "bbH Analysis failed - aborting" << endl;
358 <        exit(2);
355 >    bool doStore = true;
356 >    if(cutOnMET) {
357 >      double MET = ufs.getMET().Pt();
358 >      if(MET < 50.) {
359 >        doStore = false;
360        }
361 +    }
362 +    // Store data
363  
364 <    // Run ZHAnalysis
252 <
253 <    /* if(!ZH.Run(&ufs))
364 >    if(doStore && !dataStore.run())
365        {
366 <        cerr << "ZH Analysis failed - aborting" << endl;
366 >        cerr << "Failed to store data" << endl;
367          exit(3);
368        }
369 <    */
369 >
370      // End of event loop. Statistics. Histogram. Done.
371  
372      if(!(iEvent % 100)) cout << "Processed event " << iEvent << endl;
# Line 268 | Line 379 | int main(int argc, char **argv) {
379    pythia.statistics();
380    pileupPythia.statistics();
381  
271  bbH.end();
272
273  outFile->cd();
274  outFile->Write();
275  outFile->Close();
276
382    return 0;
383  
384   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines