Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:58:22

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 // Calculation of the total, elastic and inelastic cross-sections
0027 // based on parametrisations of (proton, pion, kaon, photon) nucleon
0028 // cross-sections and the hadron-nucleous cross-section model in 
0029 // the framework of Glauber-Gribov approach
0030 //
0031 // 14.03.07 V. Grichine - first implementation
0032 // 04.11.11 V. Grichine - update for kaon-(p,n) xsc, vector spline
0033 // 21.02.12 V. Grichine - update for pion-(p,n) xsc, NS fit++, vector spline
0034 // 30.07.18 V. Ivanchenko - general clean-up
0035 // 30.09.18 V. Grichine hyperon-nucleon xsc first implementation
0036 // 09.04.19 V. Grichine hyperon-nucleon xsc for c- and b- hyperons (and s-)
0037 // 12.04.19 V. Grichine meson-nucleon xsc for c- and b- hyperons (and s-)
0038 // 09.05.20 V. Ivanchenko general code clean-up
0039 
0040 
0041 #ifndef G4HadronNucleonXsc_h
0042 #define G4HadronNucleonXsc_h
0043 
0044 #include "globals.hh"
0045 #include "G4ParticleDefinition.hh"
0046 #include "G4DynamicParticle.hh"
0047 
0048 class G4Pow;
0049 class G4Element;
0050 
0051 class G4HadronNucleonXsc 
0052 {
0053 public:
0054 
0055   explicit G4HadronNucleonXsc ();
0056   ~G4HadronNucleonXsc ();
0057    
0058   // Xsc parametrisations return total x-section  
0059   G4double HadronNucleonXsc(const G4ParticleDefinition* theParticle, 
0060                 const G4ParticleDefinition* nucleon, G4double ekin);
0061   
0062   G4double HadronNucleonXscPDG(const G4ParticleDefinition* theParticle, 
0063                    const G4ParticleDefinition* nucleon, G4double ekin);
0064 
0065   G4double HadronNucleonXscNS(const G4ParticleDefinition* theParticle, 
0066                   const G4ParticleDefinition* nucleon, G4double ekin);
0067 
0068   G4double KaonNucleonXscNS(const G4ParticleDefinition* theParticle, 
0069                 const G4ParticleDefinition* nucleon, G4double ekin);
0070 
0071   G4double KaonNucleonXscGG(const G4ParticleDefinition* theParticle, 
0072                 const G4ParticleDefinition* nucleon, G4double ekin);
0073 
0074   G4double KaonNucleonXscVG(const G4ParticleDefinition* theParticle, 
0075                 const G4ParticleDefinition* nucleon, G4double ekin);
0076 
0077   G4double HyperonNucleonXscNS(const G4ParticleDefinition* theParticle, 
0078                 const G4ParticleDefinition* nucleon, G4double ekin);
0079   
0080   G4double SCBMesonNucleonXscNS(const G4ParticleDefinition* theParticle, 
0081                 const G4ParticleDefinition* nucleon, G4double ekin );
0082   
0083   G4double HadronNucleonXscVU(const G4ParticleDefinition* theParticle, 
0084                   const G4ParticleDefinition* nucleon, G4double ekin);
0085 
0086   G4double HadronNucleonXscEL(const G4ParticleDefinition* theParticle, 
0087                   const G4ParticleDefinition* nucleon, G4double ekin);
0088 
0089   G4double CoulombBarrier(const G4ParticleDefinition* theParticle, 
0090               const G4ParticleDefinition* nucleon, G4double ekin);
0091 
0092   // Xsc for G4DynamicParticle projectile
0093   inline G4double GetHadronNucleonXscEL(const G4DynamicParticle* dp, 
0094                     const G4ParticleDefinition* p)
0095   { return HadronNucleonXscEL(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
0096 
0097   inline G4double GetHadronNucleonXscPDG(const G4DynamicParticle* dp, 
0098                      const G4ParticleDefinition* p)
0099   { return HadronNucleonXscPDG(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
0100 
0101   inline G4double GetHadronNucleonXscNS(const G4DynamicParticle* dp, 
0102                     const G4ParticleDefinition* p)
0103   { return HadronNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
0104 
0105   inline G4double GetKaonNucleonXscGG(const G4DynamicParticle* dp, 
0106                       const G4ParticleDefinition* p)
0107   { return KaonNucleonXscGG(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
0108 
0109   inline G4double GetHyperonNucleonXscNS(const G4DynamicParticle* dp, 
0110                     const G4ParticleDefinition* p)
0111   { return HyperonNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
0112 
0113   inline G4double GetHadronNucleonXscVU(const G4DynamicParticle* dp, 
0114                     const G4ParticleDefinition* p)
0115   { return HadronNucleonXscVU(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
0116 
0117   inline G4double GetCoulombBarrier(const G4DynamicParticle* dp, 
0118                     const G4ParticleDefinition* p)
0119   { return CoulombBarrier(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
0120 
0121   // Xsc access
0122   inline G4double GetTotalHadronNucleonXsc()     const { return fTotalXsc;     }; 
0123   inline G4double GetElasticHadronNucleonXsc()   const { return fElasticXsc;   }; 
0124   inline G4double GetInelasticHadronNucleonXsc() const { return fInelasticXsc; }; 
0125 
0126   void CrossSectionDescription(std::ostream&) const;
0127 
0128 private:
0129 
0130   inline G4double CalcMandelstamS(G4double ekin1, G4double mass1, G4double mass2)
0131   { return mass1*mass1 + mass2*mass2 + 2*mass2*(ekin1 + mass1); }
0132 
0133   inline G4double CalculateEcmValue(G4double ekin1, G4double mass1, G4double mass2)
0134   { return std::sqrt(CalcMandelstamS(ekin1, mass1, mass2)); };
0135 
0136   G4double fTotalXsc, fElasticXsc, fInelasticXsc;
0137   G4Pow* g4calc;
0138 
0139   const G4ParticleDefinition* theProton;
0140   const G4ParticleDefinition* theNeutron;
0141   const G4ParticleDefinition* thePiPlus;
0142   // strange
0143   const G4ParticleDefinition* theKPlus;
0144   const G4ParticleDefinition* theKMinus;
0145   const G4ParticleDefinition* theK0S;
0146   const G4ParticleDefinition* theK0L;
0147 };
0148 
0149 #endif