00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <stdlib.h>
00018 #include <time.h>
00019
00020 #include <stdio.h>
00021 #include <iostream>
00022 #include <fstream>
00023 #include <sstream>
00024 #include "HepMC/PythiaWrapper.h"
00025 #include "HepMC/IO_HEPEVT.h"
00026 #include "HepMC/IO_Ascii.h"
00027 #include "HepMC/GenEvent.h"
00028 #include "HepMC/SimpleVector.h"
00029 #include "MyPythia6Wrapper.h"
00030
00031 #include "TH1.h"
00032 #include "TFile.h"
00033 #include "TMath.h"
00034 #include <TCanvas.h>
00035
00036 #include "TF1.h"
00037 #include <TH2.h>
00038 #include <TStyle.h>
00039 #include "TLegend.h"
00040 #include <TTree.h>
00041 #include <TString.h>
00042
00043 using namespace std;
00044
00045
00046 #include "../../include/TopAnalysis.h"
00047 #include "../../include/TauAnalysis.h"
00048 #include "../../include/DiJetAnalysis.h"
00049 #include "../../include/WplusJetAnalysis.h"
00050 #include "../../include/ZAnalysis.h"
00051 #include "../../include/UEAnalysis.h"
00052 #include "readpythiaConfigFile.h"
00053 #include "../../include/Configuration.h"
00054
00055
00056
00057 int main(int argc, const char* argv[]) {
00058
00059 if(argc <= 1 ) {
00060 std::cout << "Usage: " << argv[0] << " <Configuration File>" << std::endl;
00061 return 0;
00062 }
00063
00064
00065 Configuration* currentconfig = new Configuration();
00066 if(currentconfig->read(argv[1]))
00067 {
00068 std::cout << " ... skip !" << std::endl;
00069 return 0;
00070 }
00071
00072 DiJetAnalysis dijet;
00073 WplusJetAnalysis wplusjet;
00074 ZAnalysis z0;
00075 TauAnalysis tau;
00076 TopAnalysis top;
00077 UEAnalysis ue;
00078
00079
00080 if(currentconfig->dijet){
00081 dijet.Init(currentconfig->max_eta,currentconfig->min_pt);
00082 dijet.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00083 }
00084
00085 if(currentconfig->wplusjet){
00086 wplusjet.Init(currentconfig->max_eta,currentconfig->min_pt);
00087 wplusjet.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00088 }
00089
00090 if(currentconfig->z){
00091 z0.Init(currentconfig->max_eta,currentconfig->min_pt);
00092 z0.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00093 }
00094 if(currentconfig->tau){
00095 tau.Init(currentconfig->max_eta,currentconfig->min_pt);
00096 tau.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00097 }
00098 if(currentconfig->top){
00099 top.Init(currentconfig->max_eta,currentconfig->min_pt);
00100 top.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00101 }
00102 if(currentconfig->ue){
00103 ue.Init(currentconfig->max_eta,currentconfig->min_pt);
00104 ue.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00105 }
00106
00107
00108
00109
00110
00111
00112 pyjets.n=0;
00113 call_pyhepc(1);
00114
00115 HepMC::HEPEVT_Wrapper::set_max_number_entries(10000);
00116 HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 pydatr.mrpy[1-1] = currentconfig->rseed ;
00128
00129
00130
00131
00132 std::cout << "Configuration Parameter List:" << std::endl;
00133
00134 for (unsigned int files=0; files<(currentconfig->ConfigFileNames).size(); files++)
00135 readConfigFile((currentconfig->ConfigFileNames)[files]);
00136
00137
00138 pypars.mstp[61-1]=int(currentconfig->ISR);
00139 pypars.mstp[71-1]=int(currentconfig->FSR);
00140 pypars.mstp[81-1]=int(currentconfig->MI);
00141
00142
00143 call_pyinit("CMS", "p", "p", 14000.);
00144
00145
00146
00147
00148 HepMC::IO_HEPEVT hepevtio;
00149
00150
00151
00152
00153
00154
00155
00156 int nShow = 50;
00157 int nShowPace = max(1,int(currentconfig->nevents)/nShow);
00158
00159 for (unsigned int i = 1 ; i <= currentconfig->nevents; i++) {
00160
00161
00162 if (i%nShowPace == 0) cout << "pythia6: Now begin event "
00163 << i << endl;
00164
00165 call_pyevnt();
00166
00167 call_pyhepc(1);
00168 HepMC::GenEvent* evt = hepevtio.read_next_event();
00169
00170 evt->set_event_number(i);
00171 evt->set_signal_process_id(20);
00172
00173
00174
00175 int ret_dijet = SUCCESS;
00176 int ret_wplusjet = SUCCESS;
00177 int ret_z0 = SUCCESS;
00178 int ret_tau = SUCCESS;
00179 int ret_top = SUCCESS;
00180 int ret_ue = SUCCESS;
00181
00182
00183 if(currentconfig->dijet) ret_dijet = dijet.Process(evt);
00184 if(currentconfig->wplusjet) ret_wplusjet = wplusjet.Process(evt);
00185 if(currentconfig->z) ret_z0 = z0.Process(evt);
00186 if(currentconfig->tau) ret_tau = tau.Process(evt);
00187 if(currentconfig->top) ret_top = top.Process(evt);
00188 if(currentconfig->ue) ret_ue = ue.Process(evt);
00189
00190 if (ret_dijet==FAILURE || ret_wplusjet==FAILURE || ret_z0==FAILURE
00191 || ret_tau==FAILURE || ret_top==FAILURE || ret_ue==FAILURE)
00192 {
00193 std::cout << "Processing event number " << i << std::endl;
00194 std::cout << "throw FAILURE"<<std::endl;
00195
00196
00197
00198
00199
00200 std::cout<<std::endl;
00201 }
00202
00203
00204 if(currentconfig->dijet) dijet.DeleteJetObject(evt);
00205 if(currentconfig->wplusjet) wplusjet.DeleteJetObject(evt);
00206 if(currentconfig->z) z0.DeleteJetObject(evt);
00207 if(currentconfig->tau) tau.DeleteJetObject(evt);
00208 if(currentconfig->top) top.DeleteJetObject(evt);
00209 if(currentconfig->ue) ue.DeleteJetObject(evt);
00210
00211
00212 delete evt;
00213 }
00214
00215
00216
00217 call_pystat(1);
00218
00219 TFile* f = new TFile(currentconfig->OutputFileName.c_str(),"RECREATE");
00220 if(currentconfig->dijet) dijet.Finalize(f);
00221 if(currentconfig->wplusjet) wplusjet.Finalize(f);
00222 if(currentconfig->z) z0.Finalize(f);
00223 if(currentconfig->tau) tau.Finalize(f);
00224 if(currentconfig->top) top.Finalize(f);
00225 if(currentconfig->ue) ue.finalize(f);
00226
00227 std::cout<<"pythia6: program ends"<<std::endl;
00228 f->Close();
00229
00230 return 0;
00231
00232 }
00233