ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dasu/UltraFastSim/generateData.cc
Revision: 1.12
Committed: Thu Feb 24 20:17:12 2011 UTC (14 years, 2 months ago) by mmhl
Content type: text/plain
Branch: MAIN
Changes since 1.11: +7 -5 lines
Log Message:
bbHAnalysis.cc

File Contents

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