00001 #ifndef HijingHadronizer_h 00002 #define HijingHadronizer_h 00003 00004 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00005 #include "GeneratorInterface/Core/interface/BaseHadronizer.h" 00006 #include "CLHEP/Random/RandomEngine.h" 00007 00008 #include <map> 00009 #include <string> 00010 #include <vector> 00011 #include <math.h> 00012 00013 namespace HepMC { 00014 class GenEvent; 00015 class GenParticle; 00016 class GenVertex; 00017 } 00018 00019 extern CLHEP::HepRandomEngine* hijRandomEngine; 00020 00021 namespace gen 00022 { 00023 extern "C" { 00024 double hijran_(int*); 00025 } 00026 00027 class HijingHadronizer : public BaseHadronizer { 00028 public: 00029 HijingHadronizer(const edm::ParameterSet &); 00030 virtual ~HijingHadronizer(); 00031 00032 bool generatePartonsAndHadronize(); 00033 bool hadronize(); 00034 bool decay(); 00035 bool residualDecay(); 00036 bool readSettings( int ) { return true; } 00037 bool initializeForExternalPartons(); 00038 bool initializeForInternalPartons(); 00039 bool declareStableParticles( const std::vector<int> ); 00040 bool declareSpecialSettings( const std::vector<std::string> ) { return true; } 00041 00042 void finalizeEvent(); 00043 void statistics(); 00044 const char* classname() const; 00045 00046 private: 00047 00048 void add_heavy_ion_rec(HepMC::GenEvent *evt); 00049 HepMC::GenParticle* build_hijing( int index, int barcode ); 00050 HepMC::GenVertex* build_hijing_vertex(int i, int id); 00051 bool get_particles(HepMC::GenEvent* evt); 00052 bool call_hijset(double efrm, std::string frame, std::string proj, 00053 std::string targ, int iap, int izp, int iat, int izt); 00054 // inline double nuclear_radius() const; 00055 void rotateEvtPlane(); 00056 00057 HepMC::GenEvent *evt; 00058 edm::ParameterSet pset_; 00059 double bmax_; // max impact param; 00060 // units of nucl radius 00061 double bmin_; // min impact param; 00062 // units of nucl radius 00063 double efrm_; // collision energy 00064 std::string frame_; 00065 std::string proj_; 00066 std::string targ_; 00067 int iap_; 00068 int izp_; 00069 int iat_; 00070 int izt_; 00071 00072 // unsigned int maxEventsToPrint_; // Events to print if verbosity 00073 // unsigned int pythiaPylistVerbosity_; // pythia verbosity; def=1 00074 00075 double phi0_; // Event plane angle 00076 double sinphi0_; 00077 double cosphi0_; 00078 bool rotate_; // Switch to rotate event plane 00079 00080 // unsigned int shadowingswitch_; // shadowing switcher 00081 // 1-ON, 0-OFF 00082 // double signn_; // inelastic nucleon nucleon cross section [mb] 00083 // DEFAULT= 58 mb 00084 // CLHEP::HepRandomEngine* fRandomEngine; 00085 // Pythia6Service* pythia6Service_; 00086 }; 00087 00088 } /*end namespace*/ 00089 00090 #endif