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

pythia6.cc

Go to the documentation of this file.
00001 /***********************************************************************
00002 *                                                                      *
00003 * File: pythia6_jet.cc                                                 *
00004 * This is a simple test program.                                       *
00005 * Copyright \ufffd 2005 Torbj\ufffdrn Sj\ufffdstrand                   *
00006 *                                                                      *
00007 * Modified by sj and ca                                                *
00008 *                                                                      *
00009 ***********************************************************************/
00010 //#include "Pythia.h"
00011 
00012 //#include "LHAFortran.h"
00013 
00014 //#include "HepMCInterface.h"
00015 
00016 // this is needed to generate some random numbers
00017 #include <stdlib.h>
00018 #include <time.h>
00019 
00020 #include <stdio.h>
00021 #include <iostream>
00022 #include <fstream>
00023 #include <sstream>
00024 #include "HepMC/PythiaWrapper.h"
00025 #include "HepMC/IO_HEPEVT.h"
00026 #include "HepMC/IO_Ascii.h"
00027 #include "HepMC/GenEvent.h"
00028 #include "HepMC/SimpleVector.h"
00029 #include "MyPythia6Wrapper.h"
00030 
00031 #include "TH1.h"
00032 #include "TFile.h"
00033 #include "TMath.h"
00034 #include <TCanvas.h>
00035 
00036 #include "TF1.h"
00037 #include <TH2.h>
00038 #include <TStyle.h>
00039 #include "TLegend.h"
00040 #include <TTree.h>
00041 #include <TString.h>
00042 
00043 using namespace std;
00044 
00045 // include our own classes
00046 #include "../../include/TopAnalysis.h"
00047 #include "../../include/TauAnalysis.h"
00048 #include "../../include/DiJetAnalysis.h"
00049 #include "../../include/WplusJetAnalysis.h"
00050 #include "../../include/ZAnalysis.h"
00051 #include "../../include/UEAnalysis.h"
00052 #include "readpythiaConfigFile.h"
00053 #include "../../include/Configuration.h"
00054 
00055 /**************************************************************************/
00056 
00057 int main(int argc, const char* argv[]) {
00058     
00059   if(argc <= 1 ) {
00060     std::cout << "Usage: " << argv[0] << " <Configuration File>" << std::endl;
00061     return 0;
00062   }
00063   
00064   
00065   Configuration* currentconfig = new Configuration();
00066   if(currentconfig->read(argv[1]))
00067     {
00068       std::cout << " ... skip !" << std::endl;
00069       return 0;
00070     }
00071   
00072   DiJetAnalysis dijet;
00073   WplusJetAnalysis wplusjet;
00074   ZAnalysis z0;
00075   TauAnalysis tau;
00076   TopAnalysis top;
00077   UEAnalysis ue;
00078 
00079   // create analysis Objects and initialize them
00080   if(currentconfig->dijet){
00081     dijet.Init(currentconfig->max_eta,currentconfig->min_pt);
00082     dijet.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00083   }
00084   
00085   if(currentconfig->wplusjet){
00086     wplusjet.Init(currentconfig->max_eta,currentconfig->min_pt);
00087     wplusjet.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00088   }
00089   
00090   if(currentconfig->z){
00091     z0.Init(currentconfig->max_eta,currentconfig->min_pt);
00092     z0.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00093   }
00094   if(currentconfig->tau){
00095     tau.Init(currentconfig->max_eta,currentconfig->min_pt);
00096     tau.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00097   }
00098   if(currentconfig->top){  
00099     top.Init(currentconfig->max_eta,currentconfig->min_pt);
00100     top.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00101   }
00102   if(currentconfig->ue){
00103     ue.Init(currentconfig->max_eta,currentconfig->min_pt);
00104     ue.InitJetFinder(currentconfig->coneRadius,currentconfig->overlapThreshold,currentconfig->jet_ptmin);
00105   }
00106   
00107   
00108   //........................................HEPEVT
00109   //  Standard Pythia >6.1 uses HEPEVT with NMXHEP=4000 entries and 8-byte
00110   //  floating point numbers. We need to explicitly pass this information
00111   //  to the HEPEVT_Wrapper.
00112   pyjets.n=0; // ensure dummyness of the next call
00113   call_pyhepc(1); // mstu(8) is set to NMXHEP in this dummy call (version >=6.404)
00114   //HepMC::HEPEVT_Wrapper::set_max_number_entries(pydat1.mstu[8-1]);
00115   HepMC::HEPEVT_Wrapper::set_max_number_entries(10000);
00116   HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
00117   
00118   //
00119   //........................................PYTHIA INITIALIZATIONS
00120   // (Some platforms may require the initialization of pythia PYDATA block
00121   //  data as external - if you get pythia initialization errors try
00122   //  commenting in/out the below call to initpydata() )
00123   // initpydata();
00124   //
00125   
00126   // set random number seed (mandatory!) ... this may be overwritten by function readConfigFile
00127   pydatr.mrpy[1-1] = currentconfig->rseed ;
00128   
00129   //int tunemode=300;
00130   //pytune( &tunemode );
00131   
00132   std::cout << "Configuration Parameter List:" << std::endl;
00133   
00134   for (unsigned int files=0; files<(currentconfig->ConfigFileNames).size(); files++)
00135     readConfigFile((currentconfig->ConfigFileNames)[files]);
00136 
00137   // master switches for FSR, ISR and MI
00138   pypars.mstp[61-1]=int(currentconfig->ISR); 
00139   pypars.mstp[71-1]=int(currentconfig->FSR); 
00140   pypars.mstp[81-1]=int(currentconfig->MI); 
00141 
00142   // Call pythia initialization
00143   call_pyinit("CMS", "p", "p", 14000.);
00144   
00145   //........................................HepMC INITIALIZATIONS
00146   //
00147   // Instantiate an IO strategy for reading from HEPEVT.
00148   HepMC::IO_HEPEVT hepevtio;
00149   //
00150   // Instantiate an IO strategy to write the data to file - it uses the 
00151   //  same ParticleDataTable
00152   //HepMC::IO_Ascii ascii_io("test_pythia_hepmc.dat",std::ios::out);
00153   
00154   //.......EVENT LOOP:
00155   
00156   int nShow = 50;
00157   int nShowPace = max(1,int(currentconfig->nevents)/nShow);
00158   
00159   for (unsigned int i = 1 ; i <= currentconfig->nevents; i++) {
00160     
00161     // Begin event loop. 
00162     if (i%nShowPace == 0) cout << "pythia6:  Now begin event "
00163                                << i << endl;
00164     
00165     call_pyevnt();      // generate one event with Pythia
00166     // pythia pyhepc routine converts common PYJETS in common HEPEVT
00167     call_pyhepc(1);
00168     HepMC::GenEvent* evt = hepevtio.read_next_event();
00169     // add some information to the event
00170     evt->set_event_number(i);
00171     evt->set_signal_process_id(20);
00172     // write the event out to the ascii file
00173     //    ascii_io << evt;
00174     
00175     int ret_dijet = SUCCESS;
00176     int ret_wplusjet = SUCCESS;
00177     int ret_z0 = SUCCESS;
00178     int ret_tau = SUCCESS;
00179     int ret_top = SUCCESS;
00180     int ret_ue = SUCCESS;
00181 
00182     //call analysis
00183     if(currentconfig->dijet)       ret_dijet = dijet.Process(evt);
00184     if(currentconfig->wplusjet)    ret_wplusjet = wplusjet.Process(evt);
00185     if(currentconfig->z)           ret_z0 = z0.Process(evt);
00186     if(currentconfig->tau)  ret_tau = tau.Process(evt);
00187     if(currentconfig->top)  ret_top = top.Process(evt);
00188     if(currentconfig->ue)   ret_ue = ue.Process(evt);
00189     
00190     if (ret_dijet==FAILURE || ret_wplusjet==FAILURE || ret_z0==FAILURE 
00191         || ret_tau==FAILURE || ret_top==FAILURE || ret_ue==FAILURE)
00192       {
00193         std::cout << "Processing event number " << i << std::endl;    
00194         std::cout << "throw FAILURE"<<std::endl;
00195         //std::cout<<"pylist"<<std::endl;
00196         //call_pylist(2);
00197         //std::cout<<std::endl;
00198         //std::cout<<"HepMC Output"<<std::endl;
00199         //evt->print();
00200         std::cout<<std::endl;
00201       }
00202 
00203     //delete all the jet objects to be free for the next event
00204     if(currentconfig->dijet)       dijet.DeleteJetObject(evt);
00205     if(currentconfig->wplusjet)    wplusjet.DeleteJetObject(evt);
00206     if(currentconfig->z)         z0.DeleteJetObject(evt);
00207     if(currentconfig->tau)       tau.DeleteJetObject(evt);
00208     if(currentconfig->top)       top.DeleteJetObject(evt);
00209     if(currentconfig->ue)        ue.DeleteJetObject(evt);
00210 
00211     // we also need to delete the created event from memory
00212     delete evt;
00213   } // end of event loop
00214   
00215   
00216   // write out some information from Pythia to the screen
00217   call_pystat(1);    
00218   
00219   TFile* f = new TFile(currentconfig->OutputFileName.c_str(),"RECREATE");
00220   if(currentconfig->dijet)       dijet.Finalize(f);
00221   if(currentconfig->wplusjet)    wplusjet.Finalize(f);
00222   if(currentconfig->z)         z0.Finalize(f);
00223   if(currentconfig->tau)       tau.Finalize(f);
00224   if(currentconfig->top)       top.Finalize(f);
00225   if(currentconfig->ue)        ue.finalize(f);
00226   
00227   std::cout<<"pythia6:  program ends"<<std::endl;
00228   f->Close();
00229   // Done.
00230   return 0;
00231   
00232 }
00233 

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