File indexing completed on 2023-03-17 11:24:50
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef SimG4Core_CustomPhysics_FullModelReactionDynamics_h
0012 #define SimG4Core_CustomPhysics_FullModelReactionDynamics_h 1
0013
0014 #include "G4ParticleTypes.hh"
0015 #include "G4DynamicParticle.hh"
0016 #include "G4ReactionProduct.hh"
0017 #include "G4Nucleus.hh"
0018 #include "G4FastVector.hh"
0019 #include "G4HadProjectile.hh"
0020
0021 enum { MYGHADLISTSIZE = 256 };
0022
0023 class FullModelReactionDynamics {
0024 public:
0025 FullModelReactionDynamics() {}
0026
0027 virtual ~FullModelReactionDynamics() {}
0028
0029 virtual G4double FindInelasticity() { return 0.0; }
0030
0031 virtual G4double FindTimeDelay() { return 0.0; }
0032
0033 G4bool GenerateXandPt(
0034 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0035 G4int &vecLen,
0036 G4ReactionProduct &modifiedOriginal,
0037 const G4HadProjectile *originalIncident,
0038 G4ReactionProduct ¤tParticle,
0039 G4ReactionProduct &targetParticle,
0040 const G4Nucleus &targetNucleus,
0041 G4bool &incidentHasChanged,
0042 G4bool &targetHasChanged,
0043 G4bool leadFlag,
0044 G4ReactionProduct &leadingStrangeParticle);
0045
0046 void SuppressChargedPions(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0047 G4int &vecLen,
0048 const G4ReactionProduct &modifiedOriginal,
0049 G4ReactionProduct ¤tParticle,
0050 G4ReactionProduct &targetParticle,
0051 const G4Nucleus &targetNucleus,
0052 G4bool &incidentHasChanged,
0053 G4bool &targetHasChanged);
0054
0055 G4bool TwoCluster(
0056 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0057 G4int &vecLen,
0058 G4ReactionProduct &modifiedOriginal,
0059 const G4HadProjectile *originalIncident,
0060 G4ReactionProduct ¤tParticle,
0061 G4ReactionProduct &targetParticle,
0062 const G4Nucleus &targetNucleus,
0063 G4bool &incidentHasChanged,
0064 G4bool &targetHasChanged,
0065 G4bool leadFlag,
0066 G4ReactionProduct &leadingStrangeParticle);
0067
0068 void TwoBody(
0069 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0070 G4int &vecLen,
0071 G4ReactionProduct &modifiedOriginal,
0072 const G4DynamicParticle *originalTarget,
0073 G4ReactionProduct ¤tParticle,
0074 G4ReactionProduct &targetParticle,
0075 const G4Nucleus &targetNucleus,
0076 G4bool &targetHasChanged);
0077
0078 G4int Factorial(G4int n);
0079
0080 G4double GenerateNBodyEvent(
0081 const G4double totalEnergy,
0082 const G4bool constantCrossSection,
0083 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0084 G4int &vecLen);
0085
0086 void ProduceStrangeParticlePairs(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0087 G4int &vecLen,
0088 const G4ReactionProduct &modifiedOriginal,
0089 const G4DynamicParticle *originalTarget,
0090 G4ReactionProduct ¤tParticle,
0091 G4ReactionProduct &targetParticle,
0092 G4bool &incidentHasChanged,
0093 G4bool &targetHasChanged);
0094
0095 void NuclearReaction(
0096 G4FastVector<G4ReactionProduct, 4> &vec,
0097 G4int &vecLen,
0098 const G4HadProjectile *originalIncident,
0099 const G4Nucleus &aNucleus,
0100 const G4double theAtomicMass,
0101 const G4double *massVec);
0102
0103 private:
0104 void Rotate(const G4double numberofFinalStateNucleons,
0105 const G4ThreeVector &temp,
0106 const G4ReactionProduct &modifiedOriginal,
0107 const G4HadProjectile *originalIncident,
0108 const G4Nucleus &targetNucleus,
0109 G4ReactionProduct ¤tParticle,
0110 G4ReactionProduct &targetParticle,
0111 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0112 G4int &vecLen);
0113
0114 void Defs1(const G4ReactionProduct &modifiedOriginal,
0115 G4ReactionProduct ¤tParticle,
0116 G4ReactionProduct &targetParticle,
0117 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0118 G4int &vecLen);
0119
0120 void AddBlackTrackParticles(const G4double epnb,
0121 const G4int npnb,
0122 const G4double edta,
0123 const G4int ndta,
0124 const G4double sprob,
0125 const G4double kineticMinimum,
0126 const G4double kineticFactor,
0127 const G4ReactionProduct &modifiedOriginal,
0128 G4double spall,
0129 const G4Nucleus &aNucleus,
0130 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0131 G4int &vecLen);
0132
0133 void MomentumCheck(const G4ReactionProduct &modifiedOriginal,
0134 G4ReactionProduct ¤tParticle,
0135 G4ReactionProduct &targetParticle,
0136 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0137 G4int &vecLen);
0138
0139 G4double normal();
0140
0141 G4int Poisson(G4double x);
0142 };
0143
0144 #endif