ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4teoCrossSection.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4teoCrossSection.cc
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 //
27 //
28 //
29 // History:
30 // -----------
31 // 21 Apr 2009 ALF 1st implementation
32 // 29 Apr 2009 ALF Updated Desing for Integration
33 // 15 Mar 2011 ALF introduced the usage of G4AtomicShellEnumerator
34 // 20 Oct 2011 ALF updated to take into account ECPSSR Form Factor
35 // 09 Mar 2012 LP update methods
36 // 09 Mar 2012 ALF update for M-shells Simulation
37 //
38 
39 #include "globals.hh"
40 #include "G4teoCrossSection.hh"
41 #include "G4Proton.hh"
42 #include "G4ecpssrBaseKxsModel.hh"
43 #include "G4ecpssrBaseLixsModel.hh"
44 
48 
50  :G4VhShellCrossSection(nam),totalCS(0.0)
51 {
52  ecpssrShellMi = nullptr;
53  if (nam == "ECPSSR_Analytical")
54  {
57  }
58  else if (nam == "ECPSSR_FormFactor")
59  {
63  }
64  else
65  {
66  G4cout << "G4teoCrossSection::G4teoCrossSection: ERROR "
67  << " in cross section name ECPSSR_Analytical is used"
68  << G4endl;
71  }
72 }
73 
75 {
76  delete ecpssrShellK;
77  delete ecpssrShellLi;
78  delete ecpssrShellMi;
79 }
80 
82  G4double incidentEnergy,
83  G4double mass,
84  G4double,
85  const G4Material*)
86 {
87  std::vector<G4double> crossSections;
88 
89  crossSections.push_back( ecpssrShellK->CalculateCrossSection(Z, mass, incidentEnergy) );
90 
91  crossSections.push_back( ecpssrShellLi->CalculateL1CrossSection(Z, mass, incidentEnergy) );
92  crossSections.push_back( ecpssrShellLi->CalculateL2CrossSection(Z, mass, incidentEnergy) );
93  crossSections.push_back( ecpssrShellLi->CalculateL3CrossSection(Z, mass, incidentEnergy) );
94 
95  if (ecpssrShellMi) {
96 
97  crossSections.push_back( ecpssrShellMi->CalculateM1CrossSection(Z, mass, incidentEnergy) );
98  crossSections.push_back( ecpssrShellMi->CalculateM2CrossSection(Z, mass, incidentEnergy) );
99  crossSections.push_back( ecpssrShellMi->CalculateM3CrossSection(Z, mass, incidentEnergy) );
100  crossSections.push_back( ecpssrShellMi->CalculateM4CrossSection(Z, mass, incidentEnergy) );
101  crossSections.push_back( ecpssrShellMi->CalculateM5CrossSection(Z, mass, incidentEnergy) );
102 
103  }
104 
105 
106  return crossSections;
107 }
108 
110  G4double incidentEnergy,
111  G4double mass,
112  const G4Material*)
113 {
114  G4double res = 0.0;
115  if(shell > 3 && !ecpssrShellMi) {
116  return res;
117  }
118 
119  else if(shell > 8) {
120  return res;
121  }
122 
123  else if(fKShell == shell)
124  {
125  res = ecpssrShellK->CalculateCrossSection(Z, mass, incidentEnergy);
126  }
127 
128  else if(fL1Shell == shell)
129  {
130  res = ecpssrShellLi->CalculateL1CrossSection(Z, mass, incidentEnergy);
131  }
132 
133  else if(fL2Shell == shell)
134  {
135  res = ecpssrShellLi->CalculateL2CrossSection(Z, mass, incidentEnergy);
136  }
137 
138  else if(fL3Shell == shell)
139  {
140  res = ecpssrShellLi->CalculateL3CrossSection(Z, mass, incidentEnergy);
141  }
142 
143  else if(fM1Shell == shell)
144  {
145  res = ecpssrShellMi->CalculateM1CrossSection(Z, mass, incidentEnergy);
146  }
147 
148  else if(fM2Shell == shell)
149  {
150  res = ecpssrShellMi->CalculateM2CrossSection(Z, mass, incidentEnergy);
151  }
152 
153  else if(fM3Shell == shell)
154  {
155  res = ecpssrShellMi->CalculateM3CrossSection(Z, mass, incidentEnergy);
156  }
157 
158  else if(fM4Shell == shell)
159  {
160  res = ecpssrShellMi->CalculateM4CrossSection(Z, mass, incidentEnergy);
161  }
162 
163  else if(fM5Shell == shell)
164  {
165  res = ecpssrShellMi->CalculateM5CrossSection(Z, mass, incidentEnergy);
166  }
167  return res;
168 }
169 
171  G4double incidentEnergy,
172  G4double mass,
173  G4double deltaEnergy,
174  const G4Material*)
175 {
176  std::vector<G4double> crossSections =
177  GetCrossSection(Z, incidentEnergy, mass, deltaEnergy);
178 
179  for (size_t i=0; i<crossSections.size(); i++ ) {
180 
181  if (totalCS) {
182  crossSections[i] = crossSections[i]/totalCS;
183  }
184 
185  }
186  return crossSections;
187 }
188 
190 
191  totalCS = val;
192  // G4cout << "totalXS set to: " << val / barn << " barns" << G4endl;
193 }
194 
195 
196