00001
00002
00003 #include "ThePEG/Repository/EventGenerator.h"
00004 #include "ThePEG/Repository/Repository.h"
00005 #include "ThePEG/Persistency/PersistentIStream.h"
00006 #include "ThePEG/Utilities/DynamicLoader.h"
00007 #include "ThePEG/EventRecord/Event.h"
00008 #include "ThePEG/EventRecord/SubProcess.h"
00009 #include "ThePEG/Handlers/XComb.h"
00010 #include "ThePEG/Handlers/EventHandler.h"
00011 #include "ThePEG/PDF/PartonExtractor.h"
00012 #include "ThePEG/PDF/PDF.h"
00013 #include "ThePEG/Vectors/HepMCConverter.h"
00014 #include "ThePEGHepMC_1.3.0.h"
00015
00016 #include "HepMC/GenEvent.h"
00017 #include "HepMC/IO_GenEvent.h"
00018 #include "HepMC/GenEvent.h"
00019 #include "HepMC/IO_AsciiParticles.h"
00020 #include "HepMC/SimpleVector.h"
00021
00022 #include <iostream>
00023 #include <stdio.h>
00024 #include <string>
00025
00026 #include "TH1.h"
00027 #include "TFile.h"
00028 #include "TMath.h"
00029 #include <TCanvas.h>
00030
00031 #include "TF1.h"
00032 #include <TH2.h>
00033 #include <TStyle.h>
00034 #include "TLegend.h"
00035 #include <TTree.h>
00036 #include <TString.h>
00037
00038 using namespace ThePEG;
00039
00040
00041 #include "../../include/Configuration.h"
00042 #include "../../include/JetFinder.h"
00043 #include "../../include/ttbarAnalysis.h"
00044 #include "../../include/ZtautauAnalysis.h"
00045 #include "../../include/WtaunuAnalysis.h"
00046 #include "../../include/bbbarAnalysis.h"
00047 #include "../../include/JetAnalysis.h"
00048 #include "../../include/WplusJetAnalysis.h"
00049 #include "../../include/ZAnalysis.h"
00050 #include "../../include/UEAnalysis.h"
00051 #include "../../include/EtMissAnalysis.h"
00052 #include "../../include/ElasScatAnalysis.h"
00053 #include "../../include/UserAnalysis.h"
00054 #include "readHerwigConfigFile.h"
00055
00056 int main(int argc, const char* argv[]) {
00057
00058 if(argc <= 1 ) {
00059 std::cout << "Usage: " << argv[0] << " <Configuration File>" << std::endl;
00060 return 0;
00061 }
00062
00063
00064 Configuration* currentconfig = new Configuration();
00065 if(currentconfig->read(argv[1]))
00066 {
00067 std::cout << " ... skip !" << std::endl;
00068 return 0;
00069 }
00070
00071 JetFinder FindJet;
00072 FindJet.Init(currentconfig->max_eta,currentconfig->min_pt);
00073 FindJet.InitJetFinder( currentconfig->coneRadius, currentconfig->overlapThreshold, currentconfig->jet_ptmin,
00074 currentconfig->lepton_ptmin, currentconfig->DeltaR_lepton_track, currentconfig->jetalgorithm );
00075
00076
00077 std::vector<baseAnalysis*> analysis;
00078
00079
00080 if (currentconfig->jet) {
00081 std::cout << "Adding module JetAnalysis" << std::endl;
00082 analysis.push_back(new JetAnalysis);
00083 }
00084 if (currentconfig->wplusjet) {
00085 std::cout << "Adding module WplusJetAnalysis" << std::endl;
00086 analysis.push_back(new WplusJetAnalysis);
00087 }
00088 if(currentconfig->z){
00089 std::cout << "Adding module ZAnalysis" << std::endl;
00090 analysis.push_back(new ZAnalysis);
00091 }
00092 if(currentconfig->ztautau){
00093 std::cout << "Adding module ZtautauAnalysis" << std::endl;
00094 analysis.push_back(new ZtautauAnalysis);
00095 }
00096 if(currentconfig->wtaunu){
00097 std::cout << "Adding module WtaunuAnalysis" << std::endl;
00098 analysis.push_back(new WtaunuAnalysis);
00099 }
00100 if(currentconfig->bbbar){
00101 std::cout << "Adding module bbbarAnalysis" << std::endl;
00102 analysis.push_back(new bbbarAnalysis);
00103 }
00104 if(currentconfig->ttbar){
00105 std::cout << "Adding module ttbarAnalysis" << std::endl;
00106 analysis.push_back(new ttbarAnalysis);
00107 }
00108 if(currentconfig->ue){
00109 std::cout << "Adding module UEAnalysis" << std::endl;
00110 analysis.push_back(new UEAnalysis);
00111 }
00112 if(currentconfig->etmiss){
00113 std::cout << "Adding module EtMissAnalysis" << std::endl;
00114 analysis.push_back(new EtMissAnalysis);
00115 }
00116 if(currentconfig->elasScat){
00117 std::cout << "Adding module ElasScatAnalysis" << std::endl;
00118 analysis.push_back(new ElasScatAnalysis);
00119 }
00120 if(currentconfig->user){
00121 std::cout << "Adding module UserAnalysis" << std::endl;
00122 analysis.push_back(new UserAnalysis);
00123 }
00124
00125
00126
00127 for (std::vector<baseAnalysis*>::const_iterator i(analysis.begin()); i != analysis.end(); ++i) {
00128 (*i)->Init(currentconfig->max_eta,currentconfig->min_pt);
00129 (*i)->InitJetFinder( currentconfig->coneRadius, currentconfig->overlapThreshold, currentconfig->jet_ptmin,
00130 currentconfig->lepton_ptmin, currentconfig->DeltaR_lepton_track, currentconfig->jetalgorithm );
00131 }
00132
00133
00134
00135 std::cout<<"Add a path to seach for dynamically linkable libraries..."<<std::endl;
00136 ThePEG::DynamicLoader::appendPath(HWMODULEDIR);
00137 ThePEG::DynamicLoader::appendPath(THEPEGMODULEDIR);
00138
00139
00140 std::cout<<"Load repository from a given file..."<<std::endl;
00141 const string repopath = string(HWREPODIR) + "/HerwigDefaults.rpo";
00142 ThePEG::Repository::load(repopath);
00143
00144
00145 std::cout<<"Setup process,interpret the command in cmd and return possible messages..."<<std::endl;
00146
00147
00148 char exec_command[100];
00149 sprintf(exec_command,"set LHCGenerator:RandomNumberGenerator:Seed %ld",currentconfig->rseed);
00150 ThePEG::Repository::exec("cd /Herwig/Generators", cout);
00151 ThePEG::Repository::exec(exec_command, cout);
00152
00153
00154 std::vector< std::string > herwig_commands;
00155
00156 for (unsigned int files=0; files<(currentconfig->ConfigFileNames).size(); files++)
00157 readConfigFile(&herwig_commands,(currentconfig->ConfigFileNames)[files]);
00158
00159
00160 for(unsigned int i=0; i<herwig_commands.size(); i++)
00161 ThePEG::Repository::exec( herwig_commands[i].c_str(), cout);
00162
00163
00164 ThePEG::Repository::exec("cd /Herwig/Shower", cout);
00165
00166 sprintf(exec_command,"set SplittingGenerator:ISR %c",currentconfig->ISR);
00167 ThePEG::Repository::exec(exec_command, cout);
00168
00169 sprintf(exec_command,"set SplittingGenerator:FSR %c",currentconfig->FSR);
00170 ThePEG::Repository::exec(exec_command, cout);
00171
00172 sprintf(exec_command,"set ShowerHandler:MPI %c",currentconfig->MI);
00173 ThePEG::Repository::exec(exec_command, cout);
00174
00175
00176
00177 ThePEG::Repository::update();
00178
00179
00180 ThePEG::EGPtr m_hw;
00181
00182
00183 ThePEG::EventPtr m_event;
00184
00185
00186 std::cout<<"make a run object ..."<<std::endl;
00187 ThePEG::EGPtr tmpEG = ThePEG::BaseRepository::GetObject<ThePEG::EGPtr>("/Herwig/Generators/LHCGenerator");
00188 m_hw = ThePEG::Repository::makeRun(tmpEG, "LHC");
00189
00190
00191 std::cout<<"Herwig++ initializing..."<<std::endl;
00192 m_hw->initialize();
00193
00194
00195 std::cout<<"Generating events and filling histograms..."<<std::endl;
00196
00197
00198 for (unsigned int iEvent = 0; iEvent < currentconfig->nevents; ++iEvent) {
00199
00200
00201 assert(m_hw);
00202 m_event = m_hw->shoot();
00203
00204
00205
00206 HepMC::GenEvent* evt = new HepMC::GenEvent();
00207 ThePEG::HepMCConverter<HepMC::GenEvent>::convert(*m_event, *evt, false, ThePEG::GeV);
00208
00209
00210 std::cout << "Processing event number " << iEvent << std::endl;
00211 if (iEvent < 0) evt->print();
00212
00213
00214 vector<fastjet::PseudoJet> inclusive_jets = FindJet.GetJet(evt);
00215
00216
00217 int ret_all = true;
00218 for (std::vector<baseAnalysis*>::const_iterator i(analysis.begin()); i != analysis.end(); ++i) {
00219 (*i)->SetJet(&inclusive_jets);
00220 int ret = (*i)->Process(evt);
00221 if (ret == false) ret_all = false;
00222 }
00223
00224 if (ret_all==false) {
00225 std::cout << "Processing event number " << iEvent << std::endl;
00226 std::cout << "throw FAILURE"<<std::endl;
00227
00228
00229 std::cout<<std::endl;
00230 }
00231
00232
00233 FindJet.ClearEvent(evt);
00234
00235
00236 delete evt;
00237 }
00238
00239 TFile* f = new TFile(currentconfig->OutputFileName.c_str(),"RECREATE");
00240 for (std::vector<baseAnalysis*>::const_iterator i(analysis.begin()); i != analysis.end(); ++i) {
00241 (*i)->Finalize(f);
00242 }
00243
00244
00245 for (std::vector<baseAnalysis*>::const_iterator i(analysis.begin()); i != analysis.end(); ++i) {
00246 delete (*i);
00247 }
00248 analysis.resize(0);
00249
00250
00251 delete currentconfig;
00252
00253
00254 std::cout<<"Herwig++ finalizing..."<<std::endl;
00255 assert(m_hw);
00256 m_hw->finalize();
00257 ThePEG::Repository::cleanup();
00258
00259 std::cout<<"Run successfully!"<<std::endl;
00260 return 0;
00261 }