00001 #ifndef AMPTHadronizer_h 00002 #define AMPTHadronizer_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* _amptRandomEngine; 00020 00021 namespace gen 00022 { 00023 00024 extern "C" { 00025 float ranart_(int*); 00026 } 00027 00028 extern "C" { 00029 float ran1_(int*); 00030 } 00031 00032 class AMPTHadronizer : public BaseHadronizer { 00033 public: 00034 AMPTHadronizer(const edm::ParameterSet &); 00035 virtual ~AMPTHadronizer(); 00036 00037 bool generatePartonsAndHadronize(); 00038 bool hadronize(); 00039 bool decay(); 00040 bool residualDecay(); 00041 bool readSettings( int ) { return true; } 00042 bool initializeForExternalPartons(); 00043 bool initializeForInternalPartons(); 00044 bool declareStableParticles( const std::vector<int> ); 00045 bool declareSpecialSettings( const std::vector<std::string> ) { return true; } 00046 00047 void finalizeEvent(); 00048 void statistics(); 00049 const char* classname() const; 00050 00051 private: 00052 00053 void add_heavy_ion_rec(HepMC::GenEvent *evt); 00054 HepMC::GenParticle* build_ampt( int index, int barcode ); 00055 HepMC::GenVertex* build_ampt_vertex(int i, int id); 00056 bool get_particles(HepMC::GenEvent* evt); 00057 bool ampt_init(const edm::ParameterSet &pset); 00058 bool call_amptset(double efrm, std::string frame, std::string proj, std::string targ, int iap, int izp, int iat, int izt); 00059 // inline double nuclear_radius() const; 00060 void rotateEvtPlane(); 00061 00062 HepMC::GenEvent *evt; 00063 edm::ParameterSet pset_; 00064 double bmax_; // max impact param; 00065 // units of nucl radius 00066 double bmin_; // min impact param; 00067 // units of nucl radius 00068 double efrm_; // collision energy 00069 std::string frame_; 00070 std::string proj_; 00071 std::string targ_; 00072 int iap_; 00073 int izp_; 00074 int iat_; 00075 int izt_; 00076 int amptmode_; 00077 int ntmax_; 00078 double dt_; 00079 double stringFragA_; 00080 double stringFragB_; 00081 bool popcornmode_; 00082 double popcornpar_; 00083 bool shadowingmode_; 00084 bool quenchingmode_; 00085 double quenchingpar_; 00086 double pthard_; 00087 double mu_; 00088 int izpc_; 00089 double alpha_; 00090 double dpcoal_; 00091 double drcoal_; 00092 bool ks0decay_; 00093 bool phidecay_; 00094 int deuteronmode_; 00095 int deuteronfactor_; 00096 int deuteronxsec_; 00097 double minijetpt_; 00098 int maxmiss_; 00099 int doInitialAndFinalRadiation_; 00100 int ktkick_; 00101 int diquarkembedding_; 00102 double diquarkpx_; 00103 double diquarkpy_; 00104 double diquarkx_; 00105 double diquarky_; 00106 int nsembd_; 00107 double psembd_; 00108 double tmaxembd_; 00109 bool shadowingmodflag_; 00110 double shadowingfactor_; 00111 double phi0_; // Event plane angle 00112 double sinphi0_; 00113 double cosphi0_; 00114 bool rotate_; // Switch to rotate event plane 00115 }; 00116 } /*end namespace*/ 00117 00118 #endif