Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:24:50

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   virtual ~FullModelReactionDynamics() {}
0028 
0029   virtual G4double FindInelasticity() { return 0.0; }
0030 
0031   virtual G4double FindTimeDelay() { return 0.0; }
0032 
0033   G4bool GenerateXandPt(  // derived from GENXPT
0034       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0035       G4int &vecLen,
0036       G4ReactionProduct &modifiedOriginal,  // Fermi motion & evap. effect included
0037       const G4HadProjectile *originalIncident,
0038       G4ReactionProduct &currentParticle,
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 &currentParticle,
0050                             G4ReactionProduct &targetParticle,
0051                             const G4Nucleus &targetNucleus,
0052                             G4bool &incidentHasChanged,
0053                             G4bool &targetHasChanged);
0054 
0055   G4bool TwoCluster(  // derived from TWOCLU
0056       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0057       G4int &vecLen,
0058       G4ReactionProduct &modifiedOriginal,  // Fermi motion & evap. effect included
0059       const G4HadProjectile *originalIncident,
0060       G4ReactionProduct &currentParticle,
0061       G4ReactionProduct &targetParticle,
0062       const G4Nucleus &targetNucleus,
0063       G4bool &incidentHasChanged,
0064       G4bool &targetHasChanged,
0065       G4bool leadFlag,
0066       G4ReactionProduct &leadingStrangeParticle);
0067 
0068   void TwoBody(  // derived from TWOB
0069       G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0070       G4int &vecLen,
0071       G4ReactionProduct &modifiedOriginal,
0072       const G4DynamicParticle *originalTarget,
0073       G4ReactionProduct &currentParticle,
0074       G4ReactionProduct &targetParticle,
0075       const G4Nucleus &targetNucleus,
0076       G4bool &targetHasChanged);
0077 
0078   G4int Factorial(G4int n);
0079 
0080   G4double GenerateNBodyEvent(  // derived from PHASP
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 &currentParticle,
0091                                    G4ReactionProduct &targetParticle,
0092                                    G4bool &incidentHasChanged,
0093                                    G4bool &targetHasChanged);
0094 
0095   void NuclearReaction(  // derived from NUCREC
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,  // Fermi motion & evap. effect included
0107               const G4HadProjectile *originalIncident,
0108               const G4Nucleus &targetNucleus,
0109               G4ReactionProduct &currentParticle,
0110               G4ReactionProduct &targetParticle,
0111               G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0112               G4int &vecLen);
0113 
0114   void Defs1(const G4ReactionProduct &modifiedOriginal,
0115              G4ReactionProduct &currentParticle,
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 &currentParticle,
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