00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef G4ReactionDynamics_h
00037 #define G4ReactionDynamics_h 1
00038
00039 #include "G4ParticleTypes.hh"
00040 #include "G4DynamicParticle.hh"
00041 #include "G4ReactionProduct.hh"
00042 #include "G4Nucleus.hh"
00043 #include "G4FastVector.hh"
00044 #include "G4HadProjectile.hh"
00045
00046 enum{ GHADLISTSIZE=256};
00047
00048 class G4ReactionDynamics
00049 {
00050 public:
00051
00052 G4ReactionDynamics() {}
00053
00054 virtual ~G4ReactionDynamics() {}
00055
00056 virtual G4double FindInelasticity()
00057 { return 0.0; }
00058
00059 virtual G4double FindTimeDelay()
00060 { return 0.0; }
00061
00062 G4bool GenerateXandPt(
00063 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00064 G4int &vecLen,
00065 G4ReactionProduct &modifiedOriginal,
00066 const G4HadProjectile *originalIncident,
00067 G4ReactionProduct ¤tParticle,
00068 G4ReactionProduct &targetParticle,
00069 const G4DynamicParticle* originalTarget,
00070 const G4Nucleus &targetNucleus,
00071 G4bool &incidentHasChanged,
00072 G4bool &targetHasChanged,
00073 G4bool leadFlag,
00074 G4ReactionProduct &leadingStrangeParticle );
00075
00076 void SuppressChargedPions(
00077 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00078 G4int &vecLen,
00079 const G4ReactionProduct &modifiedOriginal,
00080 G4ReactionProduct ¤tParticle,
00081 G4ReactionProduct &targetParticle,
00082 const G4Nucleus &targetNucleus,
00083 G4bool &incidentHasChanged,
00084 G4bool &targetHasChanged );
00085
00086 G4bool TwoCluster(
00087 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00088 G4int &vecLen,
00089 G4ReactionProduct &modifiedOriginal,
00090 const G4HadProjectile *originalIncident,
00091 G4ReactionProduct ¤tParticle,
00092 G4ReactionProduct &targetParticle,
00093 const G4DynamicParticle* originalTarget,
00094 const G4Nucleus &targetNucleus,
00095 G4bool &incidentHasChanged,
00096 G4bool &targetHasChanged,
00097 G4bool leadFlag,
00098 G4ReactionProduct &leadingStrangeParticle );
00099
00100 void TwoBody(
00101 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00102 G4int &vecLen,
00103 G4ReactionProduct &modifiedOriginal,
00104 const G4DynamicParticle *originalTarget,
00105 G4ReactionProduct ¤tParticle,
00106 G4ReactionProduct &targetParticle,
00107 const G4Nucleus &targetNucleus,
00108 G4bool &targetHasChanged );
00109
00110 G4int Factorial( G4int n );
00111
00112 G4double GenerateNBodyEvent(
00113 const G4double totalEnergy,
00114 const G4bool constantCrossSection,
00115 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00116 G4int &vecLen );
00117
00118 void ProduceStrangeParticlePairs(
00119 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00120 G4int &vecLen,
00121 const G4ReactionProduct &modifiedOriginal,
00122 const G4DynamicParticle *originalTarget,
00123 G4ReactionProduct ¤tParticle,
00124 G4ReactionProduct &targetParticle,
00125 G4bool &incidentHasChanged,
00126 G4bool &targetHasChanged );
00127
00128 void NuclearReaction(
00129 G4FastVector<G4ReactionProduct,4> &vec,
00130 G4int &vecLen,
00131 const G4HadProjectile *originalIncident,
00132 const G4Nucleus &aNucleus,
00133 const G4double theAtomicMass,
00134 const G4double *massVec );
00135
00136 private:
00137
00138 void Rotate(
00139 const G4double numberofFinalStateNucleons,
00140 const G4ThreeVector &temp,
00141 const G4ReactionProduct &modifiedOriginal,
00142 const G4HadProjectile *originalIncident,
00143 const G4Nucleus &targetNucleus,
00144 G4ReactionProduct ¤tParticle,
00145 G4ReactionProduct &targetParticle,
00146 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00147 G4int &vecLen );
00148
00149 void Defs1(
00150 const G4ReactionProduct &modifiedOriginal,
00151 G4ReactionProduct ¤tParticle,
00152 G4ReactionProduct &targetParticle,
00153 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00154 G4int &vecLen );
00155
00156 void AddBlackTrackParticles(
00157 const G4double epnb,
00158 const G4int npnb,
00159 const G4double edta,
00160 const G4int ndta,
00161 const G4double sprob,
00162 const G4double kineticMinimum,
00163 const G4double kineticFactor,
00164 const G4ReactionProduct &modifiedOriginal,
00165 G4int PinNucleus,
00166 G4int NinNucleus,
00167 const G4Nucleus &aNucleus,
00168 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00169 G4int &vecLen );
00170
00171 std::pair<G4int, G4int> GetFinalStateNucleons(
00172 const G4DynamicParticle* originalTarget,
00173 const G4FastVector<G4ReactionProduct,GHADLISTSIZE>& vec,
00174 const G4int& vecLen );
00175
00176 void MomentumCheck(
00177 const G4ReactionProduct &modifiedOriginal,
00178 G4ReactionProduct ¤tParticle,
00179 G4ReactionProduct &targetParticle,
00180 G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
00181 G4int &vecLen );
00182
00183 G4double normal();
00184
00185 G4int Poisson( G4double x );
00186
00187 };
00188
00189 #endif
00190