ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dasu/UltraFastSim/generateData.cc
Revision: 1.11
Committed: Thu Feb 24 07:34:29 2011 UTC (14 years, 2 months ago) by dasu
Content type: text/plain
Branch: MAIN
Changes since 1.10: +9 -3 lines
Log Message:
Added Majid's changes

File Contents

# User Rev Content
1 dasu 1.1 // This simple program generates various signal processes for
2     // MSSM bbPhi process and its backgrounds.
3     // It includes the mixing of required level of pileup.
4     // It then takes pythia output and runs it through very simplistic
5     // detector simulation using parameterizations, including making
6     // isolated light leptons, photons, composite tau, jet and b-tagged
7     // jet objects.
8     // It saves the output in root format for later analysis.
9    
10     using namespace std;
11     #include <math.h>
12    
13     #include "Pythia.h"
14     using namespace Pythia8;
15    
16 dasu 1.10 #include "TROOT.h"
17     #include "TFile.h"
18    
19 dasu 1.1 #include "UltraFastSim.h"
20 dasu 1.8 #include "bbHAnalysis.h"
21 dasu 1.10 #include "ZHAnalysis.h"
22 dasu 1.1
23     int main(int argc, char **argv) {
24     // Generator. Process selection. LHC initialization. Histogram.
25     Pythia pythia;
26     int nEvents = 0;
27     int runNumber = 0;
28     int meanPileupEventCount = 0;
29     if(argc < 3 || argc > 5)
30     {
31 dasu 1.6 cerr << "Command syntax: " << argv[0] << " ZHmmbb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
32     cerr << "or " << argv[0] << " ZHeebb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
33 dasu 1.10 cerr << "or " << argv[0] << " ZZmmbb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
34 dasu 1.6 cerr << "or " << argv[0] << " BBHmh[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
35     cerr << "or " << argv[0] << " BBAmh[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
36     cerr << "or " << argv[0] << " Zee[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
37     cerr << "or " << argv[0] << " Zmm[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
38     cerr << "or " << argv[0] << " Zeh[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
39     cerr << "or " << argv[0] << " Zmh[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
40     cerr << "or " << argv[0] << " Zhh[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
41     cerr << "or " << argv[0] << " Wen[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
42     cerr << "or " << argv[0] << " Wmn[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
43     cerr << "or " << argv[0] << " Ten[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
44     cerr << "or " << argv[0] << " Tmn[...] " << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
45     cerr << "In above e-electron, m-muon, h-hadronic tau. n-neutrino" << endl;
46 dasu 1.1 exit(1);
47     }
48     else {
49     nEvents = atoi(argv[2]);
50     if(argc >= 4) runNumber = atoi(argv[3]);
51     if(argc >= 5) meanPileupEventCount = atoi(argv[4]);
52 dasu 1.6 if(strncmp(argv[1], "Zee", 3) == 0)
53 dasu 1.1 {
54     pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
55     pythia.readString("PhaseSpace:mHatMin = 60.");
56     pythia.readString("PhaseSpace:mHatMax = -1");
57 dasu 1.6 pythia.readString("23:onMode = 0"); // Z decays to electrons only
58     pythia.readString("23:onIfAny = 11");
59 dasu 1.1 }
60 dasu 1.6 else if(strncmp(argv[1], "Zmm", 3) == 0)
61 dasu 1.3 {
62     pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
63     pythia.readString("PhaseSpace:mHatMin = 60.");
64     pythia.readString("PhaseSpace:mHatMax = -1");
65     pythia.readString("23:onMode = 0"); // Z decays to muons only
66     pythia.readString("23:onIfAny = 13");
67     }
68 dasu 1.6 else if(strncmp(argv[1], "Zeh", 3) == 0)
69     {
70     pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
71     pythia.readString("PhaseSpace:mHatMin = 60.");
72     pythia.readString("PhaseSpace:mHatMax = -1");
73     pythia.readString("23:onMode = 0"); // Z decays to taus only
74     pythia.readString("23:onIfAny = 15");
75     pythia.readString("15:onMode = 2"); // tau- decays to electrons - second tau decays in all modes
76     pythia.readString("15:onIfAny = 11");
77     }
78     else if(strncmp(argv[1], "Zmh", 3) == 0)
79     {
80     pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
81     pythia.readString("PhaseSpace:mHatMin = 60.");
82     pythia.readString("PhaseSpace:mHatMax = -1");
83     pythia.readString("23:onMode = 0"); // Z decays to taus only
84     pythia.readString("23:onIfAny = 15");
85     pythia.readString("15:onMode = 2"); // tau- decays to muons - second tau decays in all modes
86     pythia.readString("15:onIfAny = 13");
87     }
88     else if(strncmp(argv[1], "Zhh", 3) == 0)
89     {
90     pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
91     pythia.readString("PhaseSpace:mHatMin = 60.");
92     pythia.readString("PhaseSpace:mHatMax = -1");
93     pythia.readString("23:onMode = 0"); // Z decays to taus only
94     pythia.readString("23:onIfAny = 15");
95     }
96     else if(strncmp(argv[1], "Wen", 3) == 0)
97     {
98     pythia.readString("WeakSingleBoson:ffbar2W = on");
99     pythia.readString("24:onMode = 0"); // W decays to electron
100     pythia.readString("24:onIfAny = 11");
101     }
102     else if(strncmp(argv[1], "Wmn", 3) == 0)
103 dasu 1.1 {
104     pythia.readString("WeakSingleBoson:ffbar2W = on");
105 dasu 1.6 pythia.readString("24:onMode = 0"); // W decays to muon
106     pythia.readString("24:onIfAny = 13");
107 dasu 1.1 }
108 dasu 1.6 else if(strncmp(argv[1], "Ten", 3) == 0)
109 dasu 1.1 {
110     pythia.readString("Top:all = on");
111 dasu 1.6 pythia.readString("24:onMode = 2"); // W+ decays to electron
112     pythia.readString("24:onIfAny = 11");
113 dasu 1.1 }
114 dasu 1.6 else if(strncmp(argv[1], "Tmn", 3) == 0)
115     {
116     pythia.readString("Top:all = on");
117     pythia.readString("24:onMode = 2"); // W+ decays to muon
118     pythia.readString("24:onIfAny = 13");
119     }
120     else if(strncmp(argv[1], "ZHmmbb", 6) == 0)
121 dasu 1.3 {
122     pythia.readString("HiggsSM:ffbar2HZ = on");
123     pythia.readString("25:m0 = 120");
124     pythia.readString("25:onMode = 0"); // Higgs decays to bbBar only
125     pythia.readString("25:onIfAny = 5");
126     pythia.readString("23:onMode = 0"); // Z decays to mu+,mu- only (for trigger)
127     pythia.readString("23:onIfAny = 13");
128     }
129 dasu 1.6 else if(strncmp(argv[1], "ZHeebb", 6) == 0)
130     {
131     pythia.readString("HiggsSM:ffbar2HZ = on");
132     pythia.readString("25:m0 = 120");
133     pythia.readString("25:onMode = 0"); // Higgs decays to bbBar only
134     pythia.readString("25:onIfAny = 5");
135     pythia.readString("23:onMode = 0"); // Z decays to e+,e- only (for trigger)
136     pythia.readString("23:onIfAny = 11");
137     }
138 dasu 1.3 else if(strncmp(argv[1], "BB", 2) == 0)
139 dasu 1.1 {
140     pythia.readString("Higgs:useBSM = on");
141 dasu 1.3 pythia.readString("25:m0 = 129");
142     pythia.readString("35:m0 = 499.7");
143     pythia.readString("36:m0 = 500");
144     pythia.readString("37:m0 = 506");
145     pythia.readString("HiggsHchg:tanBeta = 30");
146 dasu 1.6 if(strncmp(argv[1], "BBH", 3) == 0) {
147     pythia.readString("HiggsBSM:gg2H2bbbar = on");
148     pythia.readString("35:onMode = 0"); // H2(H_2) decays only to tau-pairs
149     pythia.readString("35:onIfAny = 15");
150     }
151     else {
152     pythia.readString("HiggsBSM:gg2A3bbbar = on");
153     pythia.readString("36:onMode = 0"); // A0(H_3) decays only to tau-pairs
154     pythia.readString("36:onIfAny = 15");
155     }
156     if(strncmp(argv[1], "BBHmh", 5) == 0 ||
157     strncmp(argv[1], "BBAmh", 5) == 0) {
158     pythia.readString("15:onMode = 2"); // tau- decays to muons - second tau decays in all modes
159     pythia.readString("15:onIfAny = 13");
160     }
161 dasu 1.1 }
162 dasu 1.9 else if(strncmp(argv[1], "ZZmmbb", 6) == 0)
163     {
164 dasu 1.10 pythia.readString("WeakDoubleBoson:ffbar2gmZgmZ = on");
165     pythia.readString("23:onMode = 0");
166     pythia.readString("23:onIfAny = 5 13"); // Let the Z decay to bQuarks or muons
167 dasu 1.9 }
168 dasu 1.1 else
169     {
170     cerr << "Unknown process type " << argv[1] << " - aborting" << endl;
171     exit(1);
172     }
173     }
174    
175 dasu 1.10 string name(argv[1]);
176     name += ".root";
177     TFile *outFile = TFile::Open(name.c_str(), "recreate");
178    
179 dasu 1.1 // Initialize pythia
180    
181     pythia.init( 2212, 2212, 14000.);
182     pythia.particleData.listAll();
183     Rndm * rndmPtr = &pythia.rndm;
184     rndmPtr->init(runNumber);
185    
186     // Pileup pythia
187    
188     Pythia pileupPythia;
189     pileupPythia.readString("SoftQCD:minBias = on");
190     pileupPythia.init( 2212, 2212, 14000.);
191     pileupPythia.rndm.init(runNumber);
192    
193     // Ultra Fast Simulator
194    
195     UltraFastSim ufs(rndmPtr);
196 dasu 1.10 bbHAnalysis bbH(outFile, &pythia, &ufs, true);
197 dasu 1.11 ZHAnalysis ZH; // outFile, &pythia, &ufs, true);
198     ZH.BookTree();
199 dasu 1.1
200     // Begin event loop
201     for (int iEvent = 0; iEvent < nEvents; ) {
202    
203     // Generate event. Skip if error. List first one.
204     if (!pythia.next()) continue;
205    
206 dasu 1.4 if(iEvent < 10) pythia.event.list();
207    
208 dasu 1.1 // Add pileup
209    
210     int pileupEventCount = 0;
211     if(meanPileupEventCount > 0) pileupEventCount = meanPileupEventCount; // * rmdmPtr->pois(); (not available yet)
212     for (int puEvent = 0; puEvent < pileupEventCount; ) {
213     if(!pileupPythia.next()) continue;
214 dasu 1.11 double vx = rndmPtr->gauss()*2.; // Mean beam spread is 2 mm in x-y and 75 mm in z
215     double vy = rndmPtr->gauss()*2.;
216     double vz = rndmPtr->gauss()*75.;
217 dasu 1.1 for(int i = 0; i < pileupPythia.event.size(); i++) {
218     Particle& particle = pileupPythia.event[i];
219 dasu 1.11 particle.xProd(vx+particle.xProd());
220     particle.yProd(vy+particle.yProd());
221     particle.zProd(vz+particle.zProd());
222 dasu 1.1 if(particle.status() > 0) {
223     if(particle.isVisible()) {
224     if(particle.pT() > 0.5) {
225     pythia.event.append(particle);
226     }
227     }
228     }
229     }
230     puEvent++;
231     }
232    
233     // Ultra fast simulation
234    
235     if(!ufs.run(pythia.event))
236     {
237     cerr << "Ultra fast simulation failed - aborting" << endl;
238     exit(1);
239     }
240    
241 dasu 1.10 // Run bbHAnalysis
242 dasu 1.5
243 dasu 1.10 if(!bbH.run())
244 dasu 1.5 {
245 dasu 1.10 cerr << "bbH Analysis failed - aborting" << endl;
246 dasu 1.5 exit(2);
247     }
248    
249 dasu 1.10 // Run ZHAnalysis
250    
251 dasu 1.11 if(!ZH.Run(&ufs))
252 dasu 1.10 {
253     cerr << "ZH Analysis failed - aborting" << endl;
254     exit(3);
255     }
256    
257 dasu 1.1 // End of event loop. Statistics. Histogram. Done.
258    
259     if(!(iEvent % 100)) cout << "Processed event " << iEvent << endl;
260     iEvent++;
261    
262     }
263    
264     // Save output
265    
266     pythia.statistics();
267     pileupPythia.statistics();
268    
269 dasu 1.10 bbH.end();
270    
271     outFile->cd();
272     outFile->Write();
273     outFile->Close();
274    
275 dasu 1.1 return 0;
276    
277     }