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