CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/GeneratorInterface/Core/interface/FortranCallback.h

Go to the documentation of this file.
00001 #ifndef gen_FortranCallback_h
00002 #define gen_FortranCallback_h
00003 
00004 #include <boost/shared_ptr.hpp>
00005 
00006 #include "SimDataFormats/GeneratorProducts/interface/LHECommonBlocks.h"
00007 
00008 #include "GeneratorInterface/LHEInterface/interface/LHERunInfo.h"
00009 #include "GeneratorInterface/LHEInterface/interface/LHEEvent.h"
00010 
00011 namespace HepMC
00012 {
00013 class GenEvent;
00014 }
00015 
00016 namespace gen {
00017 
00018   class FortranCallback 
00019   {
00020 
00021     public:
00022     
00023       static FortranCallback* getInstance() ;
00024     
00025       //void setLHEEvent(lhef::LHEEvent* lhev) { fPartonLevel = lhev; }
00026       void setLHERunInfo( lhef::LHERunInfo* lheri ) { fRunBlock=lheri; }
00027       void setLHEEvent( lhef::LHEEvent* lhee ) { fEventBlock=lhee; }
00028       
00029       void resetIterationsPerEvent() { fIterationsPerEvent = 0; }
00030       
00031       void fillHeader();
00032       void fillEvent();  
00033       
00034       int getIterationsPerEvent() const { return fIterationsPerEvent; }
00035 
00036    private:
00037    
00038      // ctor
00039      
00040      FortranCallback();
00041 
00042      // data member(s)
00043      
00044      lhef::LHERunInfo*       fRunBlock;
00045      lhef::LHEEvent*         fEventBlock;
00046      int                     fIterationsPerEvent;
00047      
00048      static FortranCallback* fInstance;
00049 
00050         
00051   };
00052 
00053 // --** Implementation **---
00054 
00055 FortranCallback* FortranCallback::fInstance = 0;
00056 
00057 FortranCallback::FortranCallback()
00058 //   : fPartonLevel(0)
00059    : fRunBlock(0), fEventBlock(0), fIterationsPerEvent(0)
00060 {   
00061 }
00062 
00063 FortranCallback* FortranCallback::getInstance()
00064 {
00065    if ( fInstance == 0 ) fInstance = new FortranCallback;
00066    return fInstance;
00067 }
00068 
00069 void FortranCallback::fillHeader()
00070 {
00071    
00072    if ( fRunBlock == 0 ) return;
00073       
00074    //const lhef::HEPRUP* heprup = &(fRunBlock->heprup());
00075    const lhef::HEPRUP* heprup = fRunBlock->getHEPRUP();
00076    
00077    lhef::CommonBlocks::fillHEPRUP(heprup);   
00078    
00079    return;
00080 
00081 }
00082 
00083 void FortranCallback::fillEvent()
00084 {
00085 
00086    //if ( fPartonLevel == 0 ) return;    
00087    //const lhef::HEPEUP* hepeup = fPartonLevel->getHEPEUP();
00088    
00089    if ( fEventBlock == 0 ) return;
00090    
00091    const lhef::HEPEUP* hepeup = fEventBlock->getHEPEUP(); 
00092 
00093         if (fIterationsPerEvent++) 
00094         {
00095            hepeup_.nup = 0;
00096            return;
00097         }
00098 
00099    lhef::CommonBlocks::fillHEPEUP(hepeup);
00100 
00101    return;
00102     
00103 }
00104 
00105 
00106 } // end namespace
00107 
00108 #endif
00109 
00110 
00111