CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/GeneratorInterface/ExternalDecays/interface/EvtGenInterface.h

Go to the documentation of this file.
00001 #ifndef gen_EvtGenInterface_h
00002 #define gen_EvtGenInterface_h
00003 
00004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00005 #include <memory>
00006 
00007 // user include files
00008 #include "FWCore/Framework/interface/Frameworkfwd.h"
00009 #include "FWCore/Framework/interface/EDProducer.h"
00010 
00011 #include "FWCore/Framework/interface/Event.h"
00012 #include "FWCore/Framework/interface/MakerMacros.h"
00013 
00014 #include "CLHEP/Random/RandFlat.h"
00015 
00016 #include "EvtGen/EvtGen.hh"     
00017 #include "EvtGenBase/EvtId.hh"
00018 #include "EvtGenBase/EvtPDL.hh"
00019 #include "EvtGenBase/EvtDecayTable.hh"
00020 #include "EvtGenBase/EvtSpinType.hh"
00021 #include "EvtGenBase/EvtVector4R.hh"
00022 #include "EvtGenBase/EvtParticle.hh"
00023 #include "EvtGenBase/EvtScalarParticle.hh"
00024 #include "EvtGenBase/EvtStringParticle.hh"
00025 #include "EvtGenBase/EvtDiracParticle.hh"
00026 #include "EvtGenBase/EvtVectorParticle.hh"
00027 #include "EvtGenBase/EvtRaritaSchwingerParticle.hh"
00028 #include "EvtGenBase/EvtTensorParticle.hh"
00029 #include "EvtGenBase/EvtHighSpinParticle.hh"
00030 #include "EvtGenBase/EvtStdHep.hh"
00031 #include "EvtGenBase/EvtSecondary.hh"
00032 #include "EvtGenModels/EvtPythia.hh"
00033 
00034 namespace CLHEP {
00035   class HepRandomEngine;
00036   class RandFlat;
00037 }
00038 
00039 namespace HepMC {
00040   class GenParticle;
00041   class GenEvent;
00042 }
00043 
00044 namespace gen {
00045 
00046    class Pythia6Service;
00047 
00048    class EvtGenInterface
00049    {
00050       public:
00051       
00052       // ctor & dtor
00053       EvtGenInterface( const edm::ParameterSet& );
00054       ~EvtGenInterface();
00055 
00056       void init();
00057       const std::vector<int>& operatesOnParticles() { return m_PDGs; }      
00058       HepMC::GenEvent* decay( HepMC::GenEvent* );
00059       void addToHepMC(HepMC::GenParticle* partHep, EvtId idEvt, HepMC::GenEvent* theEvent, bool del_daug);
00060       void go_through_daughters(EvtParticle* part);
00061       void update_candlist( int theIndex, HepMC::GenParticle *thePart );
00062   
00063       // from Pythia
00064       // void call_pygive(const std::string& iParm );
00065 
00066       private:
00067       
00068       Pythia6Service* m_Py6Service;
00069       
00070       std::vector<int> m_PDGs;
00071       
00072       CLHEP::RandFlat* m_flat;   
00073       EvtGen *m_EvtGen;
00074       std::vector<EvtId> forced_Evt;     // EvtId's of particles with forced decay
00075       std::vector<int> forced_Hep;       // HepId's of particles with forced decay
00076       int nforced;                       // number of particles with forced decay
00077       int ntotal, npartial, nevent;      // generic counters
00078       
00079       int nPythia;
00080       bool usePythia;
00081       // std::vector<std::string> pythia_params;  // Pythia stuff
00082 
00083       // Adding parameters for polarization of spin-1/2 particles
00084       std::vector<int> polarize_ids;
00085       std::vector<double> polarize_pol;
00086       std::map<int, float> polarizations;
00087       
00088       int nlist; 
00089       HepMC::GenParticle *listp[10]; 
00090       int index[10];                     // list of candidates to be forced  
00091        
00092    };
00093 
00094 }
00095 
00096 #endif