00001 #ifndef RAD_TCrossPart 00002 #define RAD_TCrossPart 00003 00004 #include "TLorentzVector.h" 00005 #include "TLorentzVectorC.h" 00006 #include "TPhoton_o.h" 00007 #include "TDFun_o.h" 00008 #include "TGenPhaseSpace.h" 00009 00010 const size_t NPARTMAX = 5; 00011 class TCrossPart { 00012 protected: 00013 TGenPhaseSpace fevent; 00014 rb::TPhoton *fphot; 00015 rb::TPhotonD *fsphot; 00016 rb::TDFun *fD; 00017 double fe; // Beam energy 00018 double fs; // (2*e)^2 00019 double flogs; 00020 double fbeta2; 00021 double fdelta; // soft and virtual photon energy cut 00022 double fK; // K-factor 00023 double fep; // positron energy 00024 double fem; // electron energy 00025 double fsigmap; // positron energy spread 00026 double fsigmam; // electron energy spread 00027 double fppz; // positron momentum 00028 double fpmz; // electron momentum 00029 bool fBeamSpread; 00030 double fsum[NPARTMAX]; 00031 double fsum2[NPARTMAX]; 00032 double fmin[NPARTMAX]; //minimum cross section 00033 double fmax[NPARTMAX]; //maximum cross section 00034 size_t fN[NPARTMAX]; // number of events to calculate cross section 00035 double fcs[NPARTMAX]; 00036 double fecs[NPARTMAX]; 00037 double facs[NPARTMAX]; // parts of total cross section for generation 00038 double fxm; // Energy of photon emmitted by electron 00039 double fxp; // Energy of photon emmitted by positron 00040 bool inc[NPARTMAX]; 00041 size_t fNRad; // Minimal number of generated events for integral calculation 00042 TLorentzVector fpp; // inital momentum of positron 00043 TLorentzVector fpm; // inital momentum of electron 00044 TLorentzVector fW; // momentum in cm 00045 TLorentzVector fq; // momentum in cm after photons emission 00046 TLorentzVectorC fJc; // hadronic current (complex) 00047 size_t fNfinal; // number of final particles 00048 TLorentzVector **fres; // pointers to output particles 00049 double fm[7]; // masses of final particle 00050 int fpid[7+2]; // pid of particles according to PDG 00051 double fq2; // square momentum in cm after photon emission 00052 double radB(const TLorentzVector &k);// Bremsstrahlung 00053 double rad(double zp, double zm); // Collinear region emmision 00054 void SetFinalParticles(size_t, const double *, const int *); 00055 double Generate(); 00056 virtual void SetJ() = 0; // Set hadronic current 00057 virtual bool Accepted() = 0; 00058 void J3PseudoScalars(); 00059 public: 00060 TCrossPart(double e, double de, double nth0); 00061 virtual ~TCrossPart(); 00062 00063 double GetValue(const unsigned int npart); // Generate events of part npart 00064 void MakeParts(double err); // Calculate cross sections of parts with precision err 00065 size_t GenUnWeightedEvent(); 00066 size_t GenWeightedEvent(double &w); 00067 TLorentzVector **GetParticles() {return fres;} 00068 void SetNRad(size_t x = 25000){ fNRad = x;} 00069 size_t GetNRad(){return fNRad;} 00070 size_t GetNfinal(){return fNfinal;} 00071 int GetPid(size_t i){return fpid[i];} 00072 void BeamSpread(); 00073 void SetBeamSpread(double x=1){ // beam spread in MeV 00074 fBeamSpread = true; 00075 fsigmap = x; 00076 fsigmam = x; 00077 } 00078 }; 00079 00080 #endif// RAD_TCrossPart