ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4UPiNuclearCrossSection.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4UPiNuclearCrossSection.hh
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 Barashenkov parametrisations of pion data
28 //
29 // 16.08.06 V.Ivanchenko - first implementation
30 // 22.01.07 V.Ivanchenko - add cross section interfaces with Z and A
31 // 05.03.07 V.Ivanchenko - add IfZAApplicable
32 //
33 
34 #ifndef G4UPiNuclearCrossSection_h
35 #define G4UPiNuclearCrossSection_h
36 
38 #include "G4DynamicParticle.hh"
39 #include "G4ParticleDefinition.hh"
40 #include "globals.hh"
41 #include "G4Threading.hh"
42 
43 class G4PhysicsTable;
44 
46 {
47 public:
48 
49  explicit G4UPiNuclearCrossSection();
50 
51  ~G4UPiNuclearCrossSection() override;
52 
54  G4int Z, const G4Material*) final;
55 
56  inline
58  G4int Z, G4int A) const;
59 
60  inline
62  G4int Z, G4int A) const;
63 
64  void BuildPhysicsTable(const G4ParticleDefinition&) final;
65 
66  void DumpPhysicsTable(const G4ParticleDefinition&) final;
67 
68  void CrossSectionDescription(std::ostream&) const final;
69 
70 private:
71 
73  const G4PhysicsTable*) const;
74 
75  void AddDataSet(const G4String& p, const G4double* tot,
76  const G4double* in, const G4double* e, G4int n);
77 
78  void LoadData();
79 
82 
83  static const G4int NZ = 16;
84  static G4int theZ[NZ];
85  static G4int idxZ[93];
86 
87  static G4double theA[NZ];
88  static G4double APower[93];
89 
94 
97 
99 
100 #ifdef G4MULTITHREADED
101  static G4Mutex pionUXSMutex;
102 #endif
103 };
104 
105 inline G4double
107  const G4DynamicParticle* dp, G4int Z, G4int A) const
108 {
109  const G4PhysicsTable* table =
111  return Interpolate(Z, A, dp->GetKineticEnergy(), table);
112 }
113 
114 inline G4double
116  const G4DynamicParticle* dp, G4int Z, G4int A) const
117 {
118  const G4PhysicsTable* table =
120  return Interpolate(Z, A, dp->GetKineticEnergy(), table);
121 }
122 
123 #endif