ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dasu/UltraFastSim/generateData.cc
Revision: 1.3
Committed: Thu Feb 10 14:15:45 2011 UTC (14 years, 3 months ago) by dasu
Content type: text/plain
Branch: MAIN
Changes since 1.2: +31 -2 lines
Log Message:
Added ZH and added parameters to change for MSSM H

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    
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 dasu 1.3 cerr << "Command syntax: " << argv[0] << " BBH[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
27 dasu 1.1 cerr << "Command syntax: " << argv[0] << " BBA[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
28     cerr << "or " << argv[0] << " ZLL[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
29 dasu 1.3 cerr << "or " << argv[0] << " ZMM[...]" << " <nEvents> [RandomSeed] [meanPileupEventCount]" << endl;
30 dasu 1.1 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 dasu 1.3 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 dasu 1.1 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 dasu 1.3 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 dasu 1.1 {
79     pythia.readString("Higgs:useBSM = on");
80 dasu 1.3 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 dasu 1.1 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     // Add pileup
126    
127     int pileupEventCount = 0;
128     if(meanPileupEventCount > 0) pileupEventCount = meanPileupEventCount; // * rmdmPtr->pois(); (not available yet)
129     for (int puEvent = 0; puEvent < pileupEventCount; ) {
130     if(!pileupPythia.next()) continue;
131     for(int i = 0; i < pileupPythia.event.size(); i++) {
132     Particle& particle = pileupPythia.event[i];
133     if(particle.status() > 0) {
134     if(particle.isVisible()) {
135     if(particle.pT() > 0.5) {
136     pythia.event.append(particle);
137     }
138     }
139     }
140     }
141     puEvent++;
142     }
143    
144     // Ultra fast simulation
145    
146     if(!ufs.run(pythia.event))
147     {
148     cerr << "Ultra fast simulation failed - aborting" << endl;
149     exit(1);
150     }
151    
152 dasu 1.2 cout << "Number of Particles = " << ufs.particleList().size() << endl;
153     cout << "Number of Gen Elecs = " << ufs.electronList().size() << endl;
154     cout << "Number of Gen Muons = " << ufs.muonList().size() << endl;
155     cout << "Number of Gen Taus = " << ufs.genTauList().size() << endl;
156     cout << "Number of b Quarks = " << ufs.bQuarkList().size() << endl;
157     cout << "Number of Jets = " << ufs.sortedJetList().size() << endl;
158     cout << "Number of bJets = " << ufs.bJetList().size() << endl;
159     cout << "Number of taus = " << ufs.tauList().size() << endl;
160     cout << endl;
161    
162 dasu 1.1 // End of event loop. Statistics. Histogram. Done.
163    
164     if(!(iEvent % 100)) cout << "Processed event " << iEvent << endl;
165     iEvent++;
166    
167     }
168    
169     // Save output
170    
171     pythia.statistics();
172     pileupPythia.statistics();
173    
174     return 0;
175    
176     }