ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dasu/UltraFastSim/generateData.cc
Revision: 1.14
Committed: Fri Feb 25 17:10:39 2011 UTC (14 years, 2 months ago) by dasu
Content type: text/plain
Branch: MAIN
Changes since 1.13: +2 -2 lines
Log Message:
Fixed bugs in writing UltraFastSim

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