Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Class Members | File Members

cascade.cc

Go to the documentation of this file.
00001 /***********************************************************************
00002 *                                                                      *
00003 * File: cascade.cc                                                     *
00004 * This is a simple test program.                                       *
00005 * based on the example cascade program                                 *
00006 * from the MC School at DESY in April 2008                             *
00007 *                                                                      *
00008 * Modified by sj                                                       *
00009 *                                                                      *
00010 ***********************************************************************/
00011 
00012 //////////////////////////////////////////////////////////////////////////
00013 // Events are read into the HepMC event record from the FORTRAN HEPEVT 
00014 // common block using the IO_HEPEVT strategy -- nothing is done with them.
00015 // This program is just used to find the total time required to transfer
00016 // from HEPEVT into the HepMC event record.
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 // include our own classes
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   // create analysis Objects and initialize them
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   //........................................HEPEVT
00117   // CASCADE (via PYTHIA6) uses HEPEVT with 10000 entries and 
00118   // 8-byte floating point numbers. We need to explicitly pass
00119   // this information to the HEPEVT_Wrapper.
00120   //
00121   //    HepMC::HEPEVT_Wrapper::set_sizeof_int(4);
00122   //    HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
00123   //    HepMC::HEPEVT_Wrapper::set_max_number_entries(10000);
00124   //
00125   pyjets.n=0;     // ensure dummyness of the next call
00126   call_pyhepc(1); // mstu(8) is set to NMXHEP in this dummy call (version >=6.404)
00127   //HepMC::HEPEVT_Wrapper::set_max_number_entries(pydat1.mstu[8-1]);
00128   HepMC::HEPEVT_Wrapper::set_max_number_entries(10000);
00129   HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
00130   
00131   //    
00132   //    initPythia();
00133   //........................................CASCADE INITIALIZATIONS
00134   //  call_rluxgo(lux,iseed,k1,k2)
00135   // lux = luxory level
00136   // iseed = seed for random number generator
00137   //    call_rluxgo(4,87777886,0,0);
00138   //--initialise CASCADE parameters
00139 
00140   call_casini();
00141 
00142   //call steering
00143   //call_steer();
00144 
00145   //-- change standard parameters of CASCADE
00146   call_cascha();
00147   
00148   //change cascade parameters
00149   std::vector< std::string > cascade_commands;
00150   // read in commandlines
00151   for (unsigned int files=0; files<(currentconfig->ConfigFileNames).size(); files++)
00152     readConfigFile((currentconfig->ConfigFileNames)[files]);
00153 
00154   //-- change standard parameters of JETSET/PYTHIA
00155   call_pytcha();
00156 
00157   //-- set up for running CASCADE  
00158   call_cascade();
00159 
00160   //-- print result from integration
00161   call_caend(1);   
00162 
00163   //
00164   //........................................HepMC INITIALIZATIONS
00165   //
00166   // Instantiate an IO strategy for reading from HEPEVT.
00167   HepMC::IO_HEPEVT hepevtio;
00168   //
00169   // Instantial an IO strategy to write the data to file - it uses the 
00170   //  same ParticleDataTable
00171   //HepMC::IO_GenEvent ascii_io("example_MyCASCADE.dat",std::ios::out);
00172   //
00173   //........................................EVENT LOOP
00174   //int Nevent = steer1.Nevent;
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();      // generate one event with CASCADE
00181 
00182     // pythia pyhepc routine convert common PYJETS in common HEPEVT
00183     call_pyhepc( 1 );
00184     HepMC::GenEvent* hepmcevt = hepevtio.read_next_event();
00185     //
00186     // add some information to the event
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     //call analysis
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         //std::cout<<std::endl;
00211         //std::cout<<"HepMC Output"<<std::endl;
00212         //hepmcevt->print();
00213         std::cout<<std::endl;
00214      }
00215 
00216     //// write the event out to the ascii file
00217     //ascii_io << hepmcevt;
00218     
00219     //delete all the jet objects to be free for the next event
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     // we also need to delete the created event from memory
00228     delete hepmcevt;
00229 
00230   }
00231   //........................................TERMINATION
00232   //  Print out of generated event summary
00233   call_caend(2);
00234   // write out some information from Pythia to the screen
00235   //    call_pystat( 1 );    
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   // Done.
00249   return 0;
00250 }

Generated on Mon Feb 16 15:58:15 2009 for HepMCAnalysis by  doxygen 1.3.9.1