Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-07-09 05:00:33

0001 //
0002 // Hadronic Process: Reaction Dynamics
0003 // original by H.P. Wellisch 1997 from GHEISHA code
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(  // derived from GENXPT
0025       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0026       G4int &vecLen,
0027       G4ReactionProduct &modifiedOriginal,  // Fermi motion & evap. effect included
0028       const G4HadProjectile *originalIncident,
0029       G4ReactionProduct &currentParticle,
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 &currentParticle,
0041                             G4ReactionProduct &targetParticle,
0042                             const G4Nucleus &targetNucleus,
0043                             G4bool &incidentHasChanged,
0044                             G4bool &targetHasChanged);
0045 
0046   G4bool TwoCluster(  // derived from TWOCLU
0047       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0048       G4int &vecLen,
0049       G4ReactionProduct &modifiedOriginal,  // Fermi motion & evap. effect included
0050       const G4HadProjectile *originalIncident,
0051       G4ReactionProduct &currentParticle,
0052       G4ReactionProduct &targetParticle,
0053       const G4Nucleus &targetNucleus,
0054       G4bool &incidentHasChanged,
0055       G4bool &targetHasChanged,
0056       G4bool leadFlag,
0057       G4ReactionProduct &leadingStrangeParticle);
0058 
0059   void TwoBody(  // derived from TWOB
0060       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0061       G4int &vecLen,
0062       G4ReactionProduct &modifiedOriginal,
0063       const G4DynamicParticle *originalTarget,
0064       G4ReactionProduct &currentParticle,
0065       G4ReactionProduct &targetParticle,
0066       const G4Nucleus &targetNucleus,
0067       G4bool &targetHasChanged);
0068 
0069   G4int Factorial(G4int n);
0070 
0071   G4double GenerateNBodyEvent(  // derived from PHASP
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 &currentParticle,
0082                                    G4ReactionProduct &targetParticle,
0083                                    G4bool &incidentHasChanged,
0084                                    G4bool &targetHasChanged);
0085 
0086   void NuclearReaction(  // derived from NUCREC
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,  // Fermi motion & evap. effect included
0101               const G4HadProjectile *originalIncident,
0102               const G4Nucleus &targetNucleus,
0103               G4ReactionProduct &currentParticle,
0104               G4ReactionProduct &targetParticle,
0105               G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0106               G4int &vecLen);
0107 
0108   void Defs1(const G4ReactionProduct &modifiedOriginal,
0109              G4ReactionProduct &currentParticle,
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 &currentParticle,
0129                      G4ReactionProduct &targetParticle,
0130                      G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0131                      G4int &vecLen);
0132 
0133   G4double normal();
0134 };
0135 
0136 #endif