reader.cc

Go to the documentation of this file.
00001 
00002 /**
00003  *
00004  *   @short Program to read HepMC format from file and run analysis modules
00005  *
00006  *  @author Wolfgang Ehrenfeld, DESY, Germany
00007  *
00008  * @version \$Id: reader.cc,v 1.3 2009-05-27 11:06:59 sjohnert Exp $
00009  *
00010  */
00011 
00012 #include "HepMC/IO_GenEvent.h"
00013 #include "HepMC/GenEvent.h"
00014 
00015 #include <iostream>
00016 #include <fstream>
00017 
00018 // include our analysis modules
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   // create analysis Objects and initialize them                                                                                          
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   // init requested analysis modules and jet finder
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   // Loop over events from files and fill histograms
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     // open input stream
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     // now read the file
00126     HepMC::GenEvent* evt = ascii_in.read_next_event();
00127 
00128     while (evt && (iEvent < currentconfig->nevents)) {
00129       ++iEvent;
00130 
00131       /* --- analysis of event --- */
00132 
00133       // debug print out
00134       if (iEvent%50==0) {
00135         std::cout << "Processing event number " << iEvent << std::endl;
00136         // evt->print();
00137       }
00138 
00139       // call the Jetfinder
00140       std::vector<fastjet::PseudoJet> inclusive_jets = FindJet.GetJet(evt);
00141 
00142       // call active analysis modules
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       // catch errors
00151       if (ret_all==false) {
00152         std::cout << "Processing event number " << iEvent << std::endl;
00153         std::cout << "throw FAILURE"<<std::endl;
00154         //std::cout<<"HepMC Output"<<std::endl;
00155         //evt->print();
00156         std::cout<<std::endl;
00157       }
00158     
00159       // delete all the jet objects, missingEt etc. to be free for the next event
00160       FindJet.ClearEvent(evt);
00161           
00162       //delete event and read in next
00163       delete evt;
00164       ascii_in >> evt;
00165 
00166     } // while loop over events
00167 
00168   } // loop over input fules
00169   std::cout << "reader: " << iEvent << " events found." << std::endl;
00170 
00171   // finalise step
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   // clean up analysis modules and configuration
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 }

Generated on Tue Mar 1 01:18:31 2011 for HepMCAnalysis by  doxygen 1.4.7