CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_6/src/GeneratorInterface/Pythia6Interface/plugins/Pythia6Hadronizer.h

Go to the documentation of this file.
00001 #ifndef gen_Pythia6Hadronizer_h
00002 #define gen_Pythia6Hadronizer_h
00003 
00004 // -*- C++ -*-
00005 
00006 // class Pythia6Hadronizer is an example of a class that models the
00007 // Hadronizer concept.
00008 
00009 #include <memory>
00010 
00011 #include <boost/shared_ptr.hpp>
00012 
00013 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
00014 
00015 #include "GeneratorInterface/Core/interface/BaseHadronizer.h"
00016 
00017 namespace lhef
00018 {
00019 class LHERunInfo;
00020 class LHEEvent;
00021 }
00022 
00023 class LHEEventProduct;
00024 
00025 namespace HepMC
00026 {
00027 class GenEvent;
00028 }
00029 
00030 
00031 namespace gen
00032 {
00033 
00034 class Pythia6Service;
00035 class JetMatching;
00036 
00037   class Pythia6Hadronizer : public BaseHadronizer
00038   {
00039   
00040   public:
00041      Pythia6Hadronizer(edm::ParameterSet const& ps);
00042      ~Pythia6Hadronizer();
00043 
00044      // bool generatePartons();
00045      bool generatePartonsAndHadronize();
00046      bool hadronize();
00047      bool decay();
00048      bool residualDecay();
00049      bool readSettings( int );
00050      bool initializeForExternalPartons();
00051      bool initializeForInternalPartons();
00052      bool declareStableParticles( const std::vector<int> );
00053      bool declareSpecialSettings( const std::vector<std::string> );
00054      
00055      static JetMatching* getJetMatching() { return fJetMatching; }
00056           
00057      void finalizeEvent();
00058 
00059      void statistics();
00060 
00061      const char* classname() const;
00062      
00063   private:
00064      // methods
00065      //
00066      void flushTmpStorage();
00067      void fillTmpStorage();
00068      
00069      void imposeProperTime();
00070      
00071      // data members
00072      //
00073      
00074      Pythia6Service* fPy6Service;
00075 
00076      // some of the following params are common for all generators(interfaces)
00077      // probably better to wrap them up in a class and reuse ?
00078      // (the event/run pointers are already moved to BaseHadronizer)
00079      //
00080      enum { PP, PPbar, ElectronPositron, ElectronProton, PositronProton };
00081      
00082      int    fInitialState ; // pp, ppbar, e-e+, or e-p
00083      double fCOMEnergy ;  // this one is irrelevant for setting py6 as hadronizer
00084                           // or if anything, it should be picked up from LHERunInfoProduct !
00085      double fBeam1PZ;
00086      double fBeam2PZ; 
00087 
00088      static JetMatching* fJetMatching; 
00089 
00090      bool            fHepMCVerbosity;
00091      unsigned int    fMaxEventsToPrint ;
00092            
00093      // this is the only one specific to Pythia6
00094      //
00095      unsigned int    fPythiaListVerbosity ;
00096      bool            fDisplayPythiaBanner;
00097      bool            fDisplayPythiaCards;
00098      
00099      // these two params control stop- and r-handron features,
00100      // that are "custom" add-ons to Py6; 
00101      // I doubt they should drag along Py6Int main library...
00102      //
00103      bool fStopHadronsEnabled;
00104      bool fGluinoHadronsEnabled;
00105      
00106      // this is a "trick" to generate enriched mu-samples and the likes
00107      bool fImposeProperTime;
00108      
00109      // and final touch - conversion of Py6 PID's into PDG convension 
00110      bool fConvertToPDG;
00111      
00112      // tmp stuff, to deal with EvtGen corrupting pyjets
00113      // int NPartsBeforeDecays;
00114                 
00115   };
00116 }
00117 
00118 #endif