Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:30:19

0001 
0002 //
0003 // Hadronic Process: Reaction Dynamics
0004 // original by H.P. Wellisch
0005 // Modified by J.L.Chuma 19-Nov-96
0006 // Modified by J.L.Chuma 27-Mar-97
0007 // Modified by J.L.Chuma 30-Apr-97
0008 // Modified by J.L.Chuma 06-Aug-97  to include the original incident particle
0009 //                                  before Fermi motion and evaporation effects
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(  // derived from GENXPT
0030       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0031       G4int &vecLen,
0032       G4ReactionProduct &modifiedOriginal,  // Fermi motion & evap. effect included
0033       const G4HadProjectile *originalIncident,
0034       G4ReactionProduct &currentParticle,
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 &currentParticle,
0046                             G4ReactionProduct &targetParticle,
0047                             const G4Nucleus &targetNucleus,
0048                             G4bool &incidentHasChanged,
0049                             G4bool &targetHasChanged);
0050 
0051   G4bool TwoCluster(  // derived from TWOCLU
0052       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0053       G4int &vecLen,
0054       G4ReactionProduct &modifiedOriginal,  // Fermi motion & evap. effect included
0055       const G4HadProjectile *originalIncident,
0056       G4ReactionProduct &currentParticle,
0057       G4ReactionProduct &targetParticle,
0058       const G4Nucleus &targetNucleus,
0059       G4bool &incidentHasChanged,
0060       G4bool &targetHasChanged,
0061       G4bool leadFlag,
0062       G4ReactionProduct &leadingStrangeParticle);
0063 
0064   void TwoBody(  // derived from TWOB
0065       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0066       G4int &vecLen,
0067       G4ReactionProduct &modifiedOriginal,
0068       const G4DynamicParticle *originalTarget,
0069       G4ReactionProduct &currentParticle,
0070       G4ReactionProduct &targetParticle,
0071       const G4Nucleus &targetNucleus,
0072       G4bool &targetHasChanged);
0073 
0074   G4int Factorial(G4int n);
0075 
0076   G4double GenerateNBodyEvent(  // derived from PHASP
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 &currentParticle,
0087                                    G4ReactionProduct &targetParticle,
0088                                    G4bool &incidentHasChanged,
0089                                    G4bool &targetHasChanged);
0090 
0091   void NuclearReaction(  // derived from NUCREC
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,  // Fermi motion & evap. effect included
0106               const G4HadProjectile *originalIncident,
0107               const G4Nucleus &targetNucleus,
0108               G4ReactionProduct &currentParticle,
0109               G4ReactionProduct &targetParticle,
0110               G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0111               G4int &vecLen);
0112 
0113   void Defs1(const G4ReactionProduct &modifiedOriginal,
0114              G4ReactionProduct &currentParticle,
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 &currentParticle,
0134                      G4ReactionProduct &targetParticle,
0135                      G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0136                      G4int &vecLen);
0137 
0138   G4double normal();
0139 };
0140 
0141 #endif