00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "HepMC/IO_GenEvent.h"
00013 #include "HepMC/GenEvent.h"
00014
00015 #include <iostream>
00016 #include <fstream>
00017
00018
00019 #include "../../include/Configuration.h"
00020 #include "../../include/JetFinder.h"
00021 #include "../../include/ttbarAnalysis.h"
00022 #include "../../include/ZtautauAnalysis.h"
00023 #include "../../include/WtaunuAnalysis.h"
00024 #include "../../include/bbbarAnalysis.h"
00025 #include "../../include/JetAnalysis.h"
00026 #include "../../include/WplusJetAnalysis.h"
00027 #include "../../include/ZAnalysis.h"
00028 #include "../../include/UEAnalysis.h"
00029 #include "../../include/EtMissAnalysis.h"
00030 #include "../../include/ElasScatAnalysis.h"
00031 #include "../../include/UserAnalysis.h"
00032
00033 #include "TFile.h"
00034
00035 int main(int argc, const char* argv[]) {
00036
00037 if(argc <= 1 ) {
00038 std::cout << "Usage: " << argv[0] << " <Configuration File>" << std::endl;
00039 return 0;
00040 }
00041
00042
00043 Configuration* currentconfig = new Configuration();
00044 if(currentconfig->read(argv[1]))
00045 {
00046 std::cout << " ... skip !" << std::endl;
00047 return 0;
00048 }
00049
00050 JetFinder FindJet;
00051 FindJet.Init(currentconfig->max_eta,currentconfig->min_pt);
00052 FindJet.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin,currentconfig->lepton_ptmin,currentconfig->DeltaR_lepton_track);
00053
00054
00055
00056 std::vector<baseAnalysis*> analysis;
00057
00058 if (currentconfig->jet) {
00059 cout << "Adding module JetAnalysis" << endl;
00060 analysis.push_back(new JetAnalysis);
00061 }
00062 if (currentconfig->wplusjet) {
00063 cout << "Adding module WplusJetAnalysis" << endl;
00064 analysis.push_back(new WplusJetAnalysis);
00065 }
00066 if(currentconfig->z){
00067 cout << "Adding module ZAnalysis" << endl;
00068 analysis.push_back(new ZAnalysis);
00069 }
00070 if(currentconfig->ztautau){
00071 cout << "Adding module ZtautauAnalysis" << endl;
00072 analysis.push_back(new ZtautauAnalysis);
00073 }
00074 if(currentconfig->wtaunu){
00075 cout << "Adding module WtaunuAnalysis" << endl;
00076 analysis.push_back(new WtaunuAnalysis);
00077 }
00078 if(currentconfig->bbbar){
00079 cout << "Adding module bbbarAnalysis" << endl;
00080 analysis.push_back(new bbbarAnalysis);
00081 }
00082 if(currentconfig->ttbar ){
00083 cout << "Adding module ttbarAnalysis" << endl;
00084 analysis.push_back(new ttbarAnalysis);
00085 }
00086 if(currentconfig->ue){
00087 cout << "Adding module UEAnalysis" << endl;
00088 analysis.push_back(new UEAnalysis);
00089 }
00090 if(currentconfig->etmiss){
00091 cout << "Adding module EtMissAnalysis" << endl;
00092 analysis.push_back(new EtMissAnalysis);
00093 }
00094 if(currentconfig->elasScat){
00095 cout << "Adding module ElasScatAnalysis" << endl;
00096 analysis.push_back(new ElasScatAnalysis);
00097 }
00098 if(currentconfig->user){
00099 cout << "Adding module UserAnalysis" << endl;
00100 analysis.push_back(new UserAnalysis);
00101 }
00102
00103
00104 for (std::vector<baseAnalysis*>::const_iterator i(analysis.begin()); i != analysis.end(); ++i) {
00105 (*i)->Init(currentconfig->max_eta,currentconfig->min_pt);
00106 (*i)->InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin,currentconfig->lepton_ptmin,currentconfig->DeltaR_lepton_track);
00107 }
00108
00109
00110
00111 std::cout<<"Reading events and filling histograms..."<<std::endl;
00112
00113 size_t iEvent(0);
00114 for (size_t i(0); iEvent < currentconfig->nevents && i<currentconfig->InputFileNames.size(); ++i) {
00115
00116
00117 std::ifstream istr(currentconfig->InputFileNames[i].c_str());
00118 if (!istr) {
00119 std::cerr << "reader: can not open file " << currentconfig->InputFileNames[i] << std::endl;
00120 exit(-1);
00121 }
00122
00123 HepMC::IO_GenEvent ascii_in(istr);
00124
00125
00126 HepMC::GenEvent* evt = ascii_in.read_next_event();
00127
00128 while (evt && (iEvent < currentconfig->nevents)) {
00129 ++iEvent;
00130
00131
00132
00133
00134 if (iEvent%50==0) {
00135 std::cout << "Processing event number " << iEvent << std::endl;
00136
00137 }
00138
00139
00140 std::vector<fastjet::PseudoJet> inclusive_jets = FindJet.GetJet(evt);
00141
00142
00143 int ret_all = true;
00144 for (std::vector<baseAnalysis*>::const_iterator i(analysis.begin()); i != analysis.end(); ++i) {
00145 (*i)->SetJet(&inclusive_jets);
00146 int ret = (*i)->Process(evt);
00147 if (ret == false) ret_all = false;
00148 }
00149
00150
00151 if (ret_all==false) {
00152 std::cout << "Processing event number " << iEvent << std::endl;
00153 std::cout << "throw FAILURE"<<std::endl;
00154
00155
00156 std::cout<<std::endl;
00157 }
00158
00159
00160 FindJet.ClearEvent(evt);
00161
00162
00163 delete evt;
00164 ascii_in >> evt;
00165
00166 }
00167
00168 }
00169 std::cout << "reader: " << iEvent << " events found." << std::endl;
00170
00171
00172 TFile* f = new TFile(currentconfig->OutputFileName.c_str(),"RECREATE");
00173 for (std::vector<baseAnalysis*>::const_iterator i(analysis.begin()); i != analysis.end(); ++i) {
00174 (*i)->Finalize(f);
00175 }
00176
00177
00178 for (std::vector<baseAnalysis*>::const_iterator i(analysis.begin()); i != analysis.end(); ++i) {
00179 delete (*i);
00180 }
00181 analysis.resize(0);
00182
00183 delete currentconfig;
00184
00185 std::cout << "reader: finished successfully!" << std::endl;
00186 return 0;
00187 }