ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dasu/UltraFastSim/generateData.cc
Revision: 1.15
Committed: Mon Feb 28 11:13:18 2011 UTC (14 years, 2 months ago) by dasu
Content type: text/plain
Branch: MAIN
Changes since 1.14: +3 -1 lines
Log Message:
Added farmoutJobs script and chanaged the name of output file to include the random seed

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     #include "UltraFastSim.h"
17 dasu 1.13 #include "UFSDataStore.h"
18 dasu 1.1
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 dasu 1.6 cerr << "Command syntax: " << argv[0] << " ZHmmbb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
28     cerr << "or " << argv[0] << " ZHeebb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
29 dasu 1.10 cerr << "or " << argv[0] << " ZZmmbb[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
30 dasu 1.6 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 dasu 1.1 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 dasu 1.6 if(strncmp(argv[1], "Zee", 3) == 0)
49 dasu 1.1 {
50     pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
51     pythia.readString("PhaseSpace:mHatMin = 60.");
52     pythia.readString("PhaseSpace:mHatMax = -1");
53 dasu 1.6 pythia.readString("23:onMode = 0"); // Z decays to electrons only
54     pythia.readString("23:onIfAny = 11");
55 dasu 1.1 }
56 dasu 1.6 else if(strncmp(argv[1], "Zmm", 3) == 0)
57 dasu 1.3 {
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 dasu 1.6 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 dasu 1.1 {
100     pythia.readString("WeakSingleBoson:ffbar2W = on");
101 dasu 1.6 pythia.readString("24:onMode = 0"); // W decays to muon
102     pythia.readString("24:onIfAny = 13");
103 dasu 1.1 }
104 dasu 1.6 else if(strncmp(argv[1], "Ten", 3) == 0)
105 dasu 1.1 {
106     pythia.readString("Top:all = on");
107 dasu 1.6 pythia.readString("24:onMode = 2"); // W+ decays to electron
108     pythia.readString("24:onIfAny = 11");
109 dasu 1.1 }
110 dasu 1.6 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 dasu 1.3 {
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 dasu 1.6 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 dasu 1.3 else if(strncmp(argv[1], "BB", 2) == 0)
135 dasu 1.1 {
136     pythia.readString("Higgs:useBSM = on");
137 dasu 1.3 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 dasu 1.6 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 dasu 1.1 }
158 dasu 1.9 else if(strncmp(argv[1], "ZZmmbb", 6) == 0)
159     {
160 dasu 1.10 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 dasu 1.9 }
164 dasu 1.1 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 dasu 1.14 UltraFastSim ufs;
188 dasu 1.15 char jobName[256];
189     sprintf(jobName, "%s-%4.4d", argv[1], runNumber);
190     UFSDataStore dataStore(jobName, &ufs);
191 dasu 1.1
192     // Begin event loop
193     for (int iEvent = 0; iEvent < nEvents; ) {
194    
195     // Generate event. Skip if error. List first one.
196     if (!pythia.next()) continue;
197    
198 dasu 1.4 if(iEvent < 10) pythia.event.list();
199    
200 dasu 1.1 // Add pileup
201    
202     int pileupEventCount = 0;
203     if(meanPileupEventCount > 0) pileupEventCount = meanPileupEventCount; // * rmdmPtr->pois(); (not available yet)
204     for (int puEvent = 0; puEvent < pileupEventCount; ) {
205     if(!pileupPythia.next()) continue;
206 dasu 1.11 double vx = rndmPtr->gauss()*2.; // Mean beam spread is 2 mm in x-y and 75 mm in z
207     double vy = rndmPtr->gauss()*2.;
208     double vz = rndmPtr->gauss()*75.;
209 dasu 1.1 for(int i = 0; i < pileupPythia.event.size(); i++) {
210     Particle& particle = pileupPythia.event[i];
211 dasu 1.11 particle.xProd(vx+particle.xProd());
212     particle.yProd(vy+particle.yProd());
213     particle.zProd(vz+particle.zProd());
214 dasu 1.1 if(particle.status() > 0) {
215     if(particle.isVisible()) {
216     if(particle.pT() > 0.5) {
217     pythia.event.append(particle);
218     }
219     }
220     }
221     }
222     puEvent++;
223     }
224    
225     // Ultra fast simulation
226    
227 dasu 1.14 if(!ufs.run(pythia.event, rndmPtr))
228 dasu 1.1 {
229     cerr << "Ultra fast simulation failed - aborting" << endl;
230     exit(1);
231     }
232    
233 dasu 1.13 // Store data
234 dasu 1.5
235 dasu 1.13 if(!dataStore.run())
236 dasu 1.5 {
237 dasu 1.13 cerr << "Failed to store data" << endl;
238     exit(3);
239 dasu 1.5 }
240    
241 dasu 1.1 // End of event loop. Statistics. Histogram. Done.
242    
243     if(!(iEvent % 100)) cout << "Processed event " << iEvent << endl;
244     iEvent++;
245    
246     }
247    
248     // Save output
249    
250     pythia.statistics();
251     pileupPythia.statistics();
252    
253     return 0;
254    
255     }