00001 00002 #ifndef MollerPrimaryGenAction_h 00003 #define MollerPrimaryGenAction_h 1 00004 00005 #include "G4VUserPrimaryGeneratorAction.hh" 00006 #include "globals.hh" 00007 #include "Randomize.hh" 00008 00009 #include "Rtypes.h" 00010 00011 class G4ParticleGun; 00012 class G4Event; 00013 class MollerPrimaryGeneratorMessenger; 00014 00015 00016 typedef struct { 00017 double theta; 00018 double y; 00019 double xs; 00020 }cms_cross_section_t; 00021 00022 typedef struct { 00023 double theta; 00024 double Eprime; 00025 double xs; 00026 }double_differential_t; 00027 00028 class MollerPrimaryGenAction : public G4VUserPrimaryGeneratorAction 00029 { 00030 00031 public: 00032 MollerPrimaryGenAction(); 00033 ~MollerPrimaryGenAction(); 00034 00035 public: 00036 void GeneratePrimaries(G4Event* anEvent); 00037 void GeneratePrimaries_moller_dustin(G4Event* anEvent); 00038 void GeneratePrimaries_elasticep_dustin(G4Event* anevent); 00039 void GeneratePrimaries_inelasticep_dustin(G4Event* anevent); 00040 void GeneratePrimaries_phasespace_mollers(G4Event* anevent); 00041 void GeneratePrimaries_phasespace_motts(G4Event* anevent); 00042 void GeneratePrimaries_pion(G4Event* anevent); 00043 void SetGenerator(G4int val) { GeneratorNumber = val;} 00044 G4int GetGenerator() {return GeneratorNumber;} 00045 double EnergNumInt(double btt, double a0, double b0); 00046 double RadProfile(double eloss, double btt); 00047 00048 void setSeedValue (G4bool value) { fSetSeedConst = value; 00049 G4cout<<"Setting fSetSeedConst"<<G4endl;}; 00050 00051 Double_t wiser_sigma(Double_t ebeam, Double_t pf, Double_t thf, Double_t rl, Int_t type); 00052 static Double_t wiser_all_fit( Double_t *x, Double_t *par ); 00053 00054 00055 private: 00056 G4ParticleGun* particleGun; 00057 MollerPrimaryGeneratorMessenger* gunMessenger; //messenger of this class 00058 G4int GeneratorNumber; // Number of generator to use 00059 G4int eventnumber; 00060 static const G4int nbin = 1000; 00061 static const G4int nbinIneEP = 100; 00062 cms_cross_section_t XStable[nbin]; 00063 double_differential_t DDtable[nbinIneEP][nbinIneEP]; 00064 const G4double ebeam; 00065 const G4double mp; 00066 const G4double bremcut; //lower limit of bremsstrahlung (1 keV) 00067 const G4double me; 00068 00069 00070 G4bool fSetSeedConst; 00071 }; 00072 00073 #endif