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