00001 #ifndef HydjetProducer_h
00002 #define HydjetProducer_h
00003
00004
00005
00014 #define PYCOMP pycomp_
00015
00016 #include "FWCore/Framework/interface/EDProducer.h"
00017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00018 #include "SimDataFormats/HiGenData/interface/SubEvent.h"
00019 #include <map>
00020 #include <string>
00021 #include <vector>
00022 #include <math.h>
00023
00024 namespace HepMC {
00025 class GenEvent;
00026 class GenParticle;
00027 class GenVertex;
00028 }
00029 namespace CLHEP {
00030 class HepRandomEngine;
00031 }
00032
00033 namespace edm
00034 {
00035 class HydjetProducer : public EDProducer {
00036 public:
00037 HydjetProducer(const ParameterSet &);
00038 virtual ~HydjetProducer();
00039
00040 private:
00041 void add_heavy_ion_rec(HepMC::GenEvent *evt);
00042 HepMC::GenParticle* build_hyjet( int index, int barcode );
00043 HepMC::GenVertex* build_hyjet_vertex(int i, int id);
00044 bool call_pygive(const std::string& iParm);
00045 void clear();
00046 bool get_hard_particles(HepMC::GenEvent* evt, std::vector<SubEvent>& subs);
00047 bool get_soft_particles(HepMC::GenEvent* evt, std::vector<SubEvent>& subs);
00048 bool call_hyinit(double energy, double a, int ifb, double bmin,
00049 double bmax,double bfix,int nh);
00050 bool hydjet_init(const ParameterSet &pset);
00051 bool hyjpythia_init(const ParameterSet &pset);
00052 inline double nuclear_radius() const;
00053 virtual void produce(Event & e, const EventSetup & es);
00054
00055 HepMC::GenEvent *evt;
00056 double abeamtarget_;
00057 double bfixed_;
00058 double bmax_;
00059
00060 double bmin_;
00061
00062 int cflag_;
00063
00064
00065 double comenergy;
00066 bool doradiativeenloss_;
00067 bool docollisionalenloss_;
00068 double fracsoftmult_;
00069
00070
00071
00072
00073
00074 double hadfreeztemp_;
00075
00076 std::string hymode_;
00077 unsigned int maxEventsToPrint_;
00078 double maxlongy_;
00079
00080
00081 double maxtrany_;
00082
00083
00084 int nsub_;
00085 int nhard_;
00086 int nmultiplicity_;
00087
00088 int nsoft_;
00089 unsigned int nquarkflavor_;
00090
00091 unsigned int pythiaPylistVerbosity_;
00092 double qgpt0_;
00093
00094 double qgptau0_;
00095
00096 unsigned int shadowingswitch_;
00097
00098 double signn_;
00099
00100 CLHEP::HepRandomEngine* fRandomEngine;
00101 unsigned int eventNumber_;
00102 };
00103
00104 double HydjetProducer::nuclear_radius() const
00105 {
00106
00107
00108
00109 return 1.15 * pow((double)abeamtarget_, 1./3.);
00110 }
00111
00112 }
00113
00114 #endif