ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dasu/UltraFastSim/generateData.cc
Revision: 1.4
Committed: Thu Feb 10 14:29:41 2011 UTC (14 years, 3 months ago) by dasu
Content type: text/plain
Branch: MAIN
Changes since 1.3: +2 -0 lines
Log Message:
Added event listing for the first 10 events

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
18 int main(int argc, char **argv) {
19 // Generator. Process selection. LHC initialization. Histogram.
20 Pythia pythia;
21 int nEvents = 0;
22 int runNumber = 0;
23 int meanPileupEventCount = 0;
24 if(argc < 3 || argc > 5)
25 {
26 cerr << "Command syntax: " << argv[0] << " BBH[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
27 cerr << "Command syntax: " << argv[0] << " BBA[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
28 cerr << "or " << argv[0] << " ZLL[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
29 cerr << "or " << argv[0] << " ZMM[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
30 cerr << "or " << argv[0] << " TLN[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
31 cerr << "or " << argv[0] << " WLN[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
32 exit(1);
33 }
34 else {
35 nEvents = atoi(argv[2]);
36 if(argc >= 4) runNumber = atoi(argv[3]);
37 if(argc >= 5) meanPileupEventCount = atoi(argv[4]);
38 if(strncmp(argv[1], "ZLL", 3) == 0)
39 {
40 pythia.readString("WeakSingleBoson:ffbar2gmZ = on");
41 pythia.readString("PhaseSpace:mHatMin = 60.");
42 pythia.readString("PhaseSpace:mHatMax = -1");
43 pythia.readString("23:onMode = 0"); // Z decays to leptons only
44 pythia.readString("23:onIfAny = 11 13 15");
45 pythia.readString("15:onMode = 2"); // tau- decays to electrons and muons - second tau decays in all modes
46 pythia.readString("15:onIfAny = 11 13");
47 }
48 else if(strncmp(argv[1], "ZMM", 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 muons only
54 pythia.readString("23:onIfAny = 13");
55 }
56 else if(strncmp(argv[1], "WLN", 3) == 0)
57 {
58 pythia.readString("WeakSingleBoson:ffbar2W = on");
59 pythia.readString("24:onMode = 0"); // W decays to light leptons only
60 pythia.readString("24:onIfAny = 11 13");
61 }
62 else if(strncmp(argv[1], "TLN", 3) == 0)
63 {
64 pythia.readString("Top:all = on");
65 pythia.readString("24:onMode = 2"); // W+ decays to light leptons only
66 pythia.readString("24:onIfAny = 11 13");
67 }
68 else if(strncmp(argv[1], "ZH", 2) == 0)
69 {
70 pythia.readString("HiggsSM:ffbar2HZ = on");
71 pythia.readString("25:m0 = 120");
72 pythia.readString("25:onMode = 0"); // Higgs decays to bbBar only
73 pythia.readString("25:onIfAny = 5");
74 pythia.readString("23:onMode = 0"); // Z decays to mu+,mu- only (for trigger)
75 pythia.readString("23:onIfAny = 13");
76 }
77 else if(strncmp(argv[1], "BB", 2) == 0)
78 {
79 pythia.readString("Higgs:useBSM = on");
80 if(strncmp(argv[1], "BBH", 3) == 0)
81 pythia.readString("HiggsBSM:gg2H2bbbar = on");
82 else
83 pythia.readString("HiggsBSM:gg2A3bbbar = on");
84 pythia.readString("25:m0 = 129");
85 pythia.readString("35:m0 = 499.7");
86 pythia.readString("36:m0 = 500");
87 pythia.readString("37:m0 = 506");
88 pythia.readString("HiggsHchg:tanBeta = 30");
89 pythia.readString("35:onMode = 0"); // H2(H_2) decays only to tau-pairs
90 pythia.readString("35:onIfAny = 15");
91 pythia.readString("36:onMode = 0"); // A0(H_3) decays only to tau-pairs
92 pythia.readString("36:onIfAny = 15");
93 }
94 else
95 {
96 cerr << "Unknown process type " << argv[1] << " - aborting" << endl;
97 exit(1);
98 }
99 }
100
101 // Initialize pythia
102
103 pythia.init( 2212, 2212, 14000.);
104 pythia.particleData.listAll();
105 Rndm * rndmPtr = &pythia.rndm;
106 rndmPtr->init(runNumber);
107
108 // Pileup pythia
109
110 Pythia pileupPythia;
111 pileupPythia.readString("SoftQCD:minBias = on");
112 pileupPythia.init( 2212, 2212, 14000.);
113 pileupPythia.rndm.init(runNumber);
114
115 // Ultra Fast Simulator
116
117 UltraFastSim ufs(rndmPtr);
118
119 // Begin event loop
120 for (int iEvent = 0; iEvent < nEvents; ) {
121
122 // Generate event. Skip if error. List first one.
123 if (!pythia.next()) continue;
124
125 if(iEvent < 10) pythia.event.list();
126
127 // Add pileup
128
129 int pileupEventCount = 0;
130 if(meanPileupEventCount > 0) pileupEventCount = meanPileupEventCount; // * rmdmPtr->pois(); (not available yet)
131 for (int puEvent = 0; puEvent < pileupEventCount; ) {
132 if(!pileupPythia.next()) continue;
133 for(int i = 0; i < pileupPythia.event.size(); i++) {
134 Particle& particle = pileupPythia.event[i];
135 if(particle.status() > 0) {
136 if(particle.isVisible()) {
137 if(particle.pT() > 0.5) {
138 pythia.event.append(particle);
139 }
140 }
141 }
142 }
143 puEvent++;
144 }
145
146 // Ultra fast simulation
147
148 if(!ufs.run(pythia.event))
149 {
150 cerr << "Ultra fast simulation failed - aborting" << endl;
151 exit(1);
152 }
153
154 cout << "Number of Particles = " << ufs.particleList().size() << endl;
155 cout << "Number of Gen Elecs = " << ufs.electronList().size() << endl;
156 cout << "Number of Gen Muons = " << ufs.muonList().size() << endl;
157 cout << "Number of Gen Taus = " << ufs.genTauList().size() << endl;
158 cout << "Number of b Quarks = " << ufs.bQuarkList().size() << endl;
159 cout << "Number of Jets = " << ufs.sortedJetList().size() << endl;
160 cout << "Number of bJets = " << ufs.bJetList().size() << endl;
161 cout << "Number of taus = " << ufs.tauList().size() << endl;
162 cout << endl;
163
164 // End of event loop. Statistics. Histogram. Done.
165
166 if(!(iEvent % 100)) cout << "Processed event " << iEvent << endl;
167 iEvent++;
168
169 }
170
171 // Save output
172
173 pythia.statistics();
174 pileupPythia.statistics();
175
176 return 0;
177
178 }