Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/cross_sections/include/G4HadronNucleonXsc.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 // Calculation of the total, elastic and inelastic cross-sections
 27 // based on parametrisations of (proton, pion, kaon, photon) nucleon
 28 // cross-sections and the hadron-nucleous cross-section model in 
 29 // the framework of Glauber-Gribov approach
 30 //
 31 // 14.03.07 V. Grichine - first implementation
 32 // 04.11.11 V. Grichine - update for kaon-(p,n) xsc, vector spline
 33 // 21.02.12 V. Grichine - update for pion-(p,n) xsc, NS fit++, vector spline
 34 // 30.07.18 V. Ivanchenko - general clean-up
 35 // 30.09.18 V. Grichine hyperon-nucleon xsc first implementation
 36 // 09.04.19 V. Grichine hyperon-nucleon xsc for c- and b- hyperons (and s-)
 37 // 12.04.19 V. Grichine meson-nucleon xsc for c- and b- hyperons (and s-)
 38 // 09.05.20 V. Ivanchenko general code clean-up
 39 
 40 
 41 #ifndef G4HadronNucleonXsc_h
 42 #define G4HadronNucleonXsc_h
 43 
 44 #include "globals.hh"
 45 #include "G4ParticleDefinition.hh"
 46 #include "G4DynamicParticle.hh"
 47 
 48 class G4Pow;
 49 class G4Element;
 50 
 51 class G4HadronNucleonXsc 
 52 {
 53 public:
 54 
 55   G4HadronNucleonXsc();
 56   ~G4HadronNucleonXsc() = default;
 57  
 58   // Xsc parametrisations return total x-section  
 59   G4double HadronNucleonXsc(const G4ParticleDefinition* theParticle, 
 60           const G4ParticleDefinition* nucleon, G4double ekin);
 61   
 62   G4double HadronNucleonXscPDG(const G4ParticleDefinition* theParticle, 
 63              const G4ParticleDefinition* nucleon, G4double ekin);
 64 
 65   G4double HadronNucleonXscNS(const G4ParticleDefinition* theParticle, 
 66             const G4ParticleDefinition* nucleon, G4double ekin);
 67 
 68   G4double KaonNucleonXscNS(const G4ParticleDefinition* theParticle, 
 69           const G4ParticleDefinition* nucleon, G4double ekin);
 70 
 71   G4double KaonNucleonXscGG(const G4ParticleDefinition* theParticle, 
 72           const G4ParticleDefinition* nucleon, G4double ekin);
 73 
 74   G4double KaonNucleonXscVG(const G4ParticleDefinition* theParticle, 
 75           const G4ParticleDefinition* nucleon, G4double ekin);
 76 
 77   G4double HyperonNucleonXscNS(const G4ParticleDefinition* theParticle, 
 78           const G4ParticleDefinition* nucleon, G4double ekin);
 79   
 80   G4double SCBMesonNucleonXscNS(const G4ParticleDefinition* theParticle, 
 81         const G4ParticleDefinition* nucleon, G4double ekin );
 82   
 83   G4double HadronNucleonXscVU(const G4ParticleDefinition* theParticle, 
 84             const G4ParticleDefinition* nucleon, G4double ekin);
 85 
 86   G4double HadronNucleonXscEL(const G4ParticleDefinition* theParticle, 
 87             const G4ParticleDefinition* nucleon, G4double ekin);
 88 
 89   G4double CoulombBarrier(const G4ParticleDefinition* theParticle, 
 90         const G4ParticleDefinition* nucleon, G4double ekin);
 91 
 92   // Xsc for G4DynamicParticle projectile
 93   inline G4double GetHadronNucleonXscEL(const G4DynamicParticle* dp, 
 94           const G4ParticleDefinition* p)
 95   { return HadronNucleonXscEL(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
 96 
 97   inline G4double GetHadronNucleonXscPDG(const G4DynamicParticle* dp, 
 98            const G4ParticleDefinition* p)
 99   { return HadronNucleonXscPDG(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
100 
101   inline G4double GetHadronNucleonXscNS(const G4DynamicParticle* dp, 
102           const G4ParticleDefinition* p)
103   { return HadronNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
104 
105   inline G4double GetKaonNucleonXscGG(const G4DynamicParticle* dp, 
106               const G4ParticleDefinition* p)
107   { return KaonNucleonXscGG(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
108 
109   inline G4double GetHyperonNucleonXscNS(const G4DynamicParticle* dp, 
110           const G4ParticleDefinition* p)
111   { return HyperonNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
112 
113   inline G4double GetHadronNucleonXscVU(const G4DynamicParticle* dp, 
114           const G4ParticleDefinition* p)
115   { return HadronNucleonXscVU(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
116 
117   inline G4double GetCoulombBarrier(const G4DynamicParticle* dp, 
118             const G4ParticleDefinition* p)
119   { return CoulombBarrier(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
120 
121   // Xsc access
122   inline G4double GetTotalHadronNucleonXsc()     const { return fTotalXsc;     }; 
123   inline G4double GetElasticHadronNucleonXsc()   const { return fElasticXsc;   }; 
124   inline G4double GetInelasticHadronNucleonXsc() const { return fInelasticXsc; }; 
125 
126   void CrossSectionDescription(std::ostream&) const;
127 
128 private:
129 
130   inline G4double CalcMandelstamS(G4double ekin1, G4double mass1, G4double mass2)
131   { return mass1*mass1 + mass2*mass2 + 2*mass2*(ekin1 + mass1); }
132 
133   inline G4double CalculateEcmValue(G4double ekin1, G4double mass1, G4double mass2)
134   { return std::sqrt(CalcMandelstamS(ekin1, mass1, mass2)); };
135 
136   G4double fTotalXsc{0.0};
137   G4double fElasticXsc{0.0};
138   G4double fInelasticXsc{0.0};
139   G4Pow* g4calc;
140 
141   const G4ParticleDefinition* theProton;
142   const G4ParticleDefinition* theNeutron;
143   const G4ParticleDefinition* thePiPlus;
144   // strange
145   const G4ParticleDefinition* theKPlus;
146   const G4ParticleDefinition* theKMinus;
147   const G4ParticleDefinition* theK0S;
148   const G4ParticleDefinition* theK0L;
149 };
150 
151 #endif
152