File indexing completed on 2024-04-06 12:30:19
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 ~FullModelReactionDynamics() = default;
0028
0029 G4bool GenerateXandPt(
0030 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0031 G4int &vecLen,
0032 G4ReactionProduct &modifiedOriginal,
0033 const G4HadProjectile *originalIncident,
0034 G4ReactionProduct ¤tParticle,
0035 G4ReactionProduct &targetParticle,
0036 const G4Nucleus &targetNucleus,
0037 G4bool &incidentHasChanged,
0038 G4bool &targetHasChanged,
0039 G4bool leadFlag,
0040 G4ReactionProduct &leadingStrangeParticle);
0041
0042 void SuppressChargedPions(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0043 G4int &vecLen,
0044 const G4ReactionProduct &modifiedOriginal,
0045 G4ReactionProduct ¤tParticle,
0046 G4ReactionProduct &targetParticle,
0047 const G4Nucleus &targetNucleus,
0048 G4bool &incidentHasChanged,
0049 G4bool &targetHasChanged);
0050
0051 G4bool TwoCluster(
0052 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0053 G4int &vecLen,
0054 G4ReactionProduct &modifiedOriginal,
0055 const G4HadProjectile *originalIncident,
0056 G4ReactionProduct ¤tParticle,
0057 G4ReactionProduct &targetParticle,
0058 const G4Nucleus &targetNucleus,
0059 G4bool &incidentHasChanged,
0060 G4bool &targetHasChanged,
0061 G4bool leadFlag,
0062 G4ReactionProduct &leadingStrangeParticle);
0063
0064 void TwoBody(
0065 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0066 G4int &vecLen,
0067 G4ReactionProduct &modifiedOriginal,
0068 const G4DynamicParticle *originalTarget,
0069 G4ReactionProduct ¤tParticle,
0070 G4ReactionProduct &targetParticle,
0071 const G4Nucleus &targetNucleus,
0072 G4bool &targetHasChanged);
0073
0074 G4int Factorial(G4int n);
0075
0076 G4double GenerateNBodyEvent(
0077 const G4double totalEnergy,
0078 const G4bool constantCrossSection,
0079 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0080 G4int &vecLen);
0081
0082 void ProduceStrangeParticlePairs(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0083 G4int &vecLen,
0084 const G4ReactionProduct &modifiedOriginal,
0085 const G4DynamicParticle *originalTarget,
0086 G4ReactionProduct ¤tParticle,
0087 G4ReactionProduct &targetParticle,
0088 G4bool &incidentHasChanged,
0089 G4bool &targetHasChanged);
0090
0091 void NuclearReaction(
0092 G4FastVector<G4ReactionProduct, 4> &vec,
0093 G4int &vecLen,
0094 const G4HadProjectile *originalIncident,
0095 const G4Nucleus &aNucleus,
0096 const G4double theAtomicMass,
0097 const G4double *massVec);
0098
0099 FullModelReactionDynamics(const FullModelReactionDynamics &) = delete;
0100 FullModelReactionDynamics &operator=(const FullModelReactionDynamics &) = delete;
0101
0102 private:
0103 void Rotate(const G4double numberofFinalStateNucleons,
0104 const G4ThreeVector &temp,
0105 const G4ReactionProduct &modifiedOriginal,
0106 const G4HadProjectile *originalIncident,
0107 const G4Nucleus &targetNucleus,
0108 G4ReactionProduct ¤tParticle,
0109 G4ReactionProduct &targetParticle,
0110 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0111 G4int &vecLen);
0112
0113 void Defs1(const G4ReactionProduct &modifiedOriginal,
0114 G4ReactionProduct ¤tParticle,
0115 G4ReactionProduct &targetParticle,
0116 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0117 G4int &vecLen);
0118
0119 void AddBlackTrackParticles(const G4double epnb,
0120 const G4int npnb,
0121 const G4double edta,
0122 const G4int ndta,
0123 const G4double sprob,
0124 const G4double kineticMinimum,
0125 const G4double kineticFactor,
0126 const G4ReactionProduct &modifiedOriginal,
0127 G4double spall,
0128 const G4Nucleus &aNucleus,
0129 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0130 G4int &vecLen);
0131
0132 void MomentumCheck(const G4ReactionProduct &modifiedOriginal,
0133 G4ReactionProduct ¤tParticle,
0134 G4ReactionProduct &targetParticle,
0135 G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0136 G4int &vecLen);
0137
0138 G4double normal();
0139 };
0140
0141 #endif