Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // >> 26 // $Id: G4teoCrossSection.cc,v 1.9 2011-01-03 19:35:11 vnivanch Exp $ >> 27 // GEANT4 tag $Name: geant4-09-04-patch-01 $ 26 // 28 // 27 // 29 // 28 // 30 // 29 // History: 31 // History: 30 // ----------- 32 // ----------- 31 // 21 Apr 2009 ALF 1st implementation 33 // 21 Apr 2009 ALF 1st implementation 32 // 29 Apr 2009 ALF Updated Desing for Integ 34 // 29 Apr 2009 ALF Updated Desing for Integration 33 // 15 Mar 2011 ALF introduced the usage of << 35 // 34 // 20 Oct 2011 ALF updated to take into acc << 36 35 // 09 Mar 2012 LP update methods << 36 // 09 Mar 2012 ALF update for M-shells Sim << 37 // 10 Nov 2021 S. Guatelli & S. Bakr Added << 38 // in Bakr et al, NIM B, vol. 4 << 39 // called here ECPSSR_ANSTO << 40 37 41 #include "globals.hh" 38 #include "globals.hh" 42 #include "G4teoCrossSection.hh" 39 #include "G4teoCrossSection.hh" 43 #include "G4Proton.hh" 40 #include "G4Proton.hh" 44 #include "G4ecpssrBaseKxsModel.hh" << 41 //#include "G4Alpha.hh" 45 #include "G4ecpssrBaseLixsModel.hh" << 46 #include "G4ecpssrFormFactorKxsModel.hh" << 47 #include "G4ecpssrFormFactorLixsModel.hh" << 48 #include "G4ecpssrFormFactorMixsModel.hh" << 49 #include "G4ANSTOecpssrKxsModel.hh" << 50 #include "G4ANSTOecpssrLixsModel.hh" << 51 #include "G4ANSTOecpssrMixsModel.hh" << 52 42 53 //....oooOO0OOooo........oooOO0OOooo........oo << 54 G4teoCrossSection::G4teoCrossSection(const G4S 43 G4teoCrossSection::G4teoCrossSection(const G4String& nam) 55 :G4VhShellCrossSection(nam),totalCS(0.0) 44 :G4VhShellCrossSection(nam),totalCS(0.0) 56 { 45 { 57 ecpssrShellMi = nullptr; << 46 ecpssrShellK = new G4AnalyticalEcpssrKCrossSection(); 58 if (nam == "ECPSSR_Analytical") << 47 ecpssrShellLi = new G4AnalyticalEcpssrLiCrossSection(); 59 { << 60 ecpssrShellK = new G4ecpssrBaseKxsModel << 61 ecpssrShellLi = new G4ecpssrBaseLixsMode << 62 } << 63 else if (nam == "ECPSSR_FormFactor") << 64 { << 65 ecpssrShellK = new G4ecpssrFormFactorKx << 66 ecpssrShellLi = new G4ecpssrFormFactorLi << 67 ecpssrShellMi = new G4ecpssrFormFactorMi << 68 } << 69 else if (nam == "ECPSSR_ANSTO") << 70 { << 71 ecpssrShellK = new G4ANSTOecpssrKxsMode << 72 ecpssrShellLi = new G4ANSTOecpssrLixsMod << 73 ecpssrShellMi = new G4ANSTOecpssrMixsMod << 74 } << 75 else << 76 { << 77 G4cout << "G4teoCrossSection::G4teoCross << 78 << " in cross section name ECPSSR_Analy << 79 << G4endl; << 80 ecpssrShellK = new G4ecpssrBaseKxsModel << 81 ecpssrShellLi = new G4ecpssrBaseLixsMode << 82 } << 83 } 48 } 84 49 85 //....oooOO0OOooo........oooOO0OOooo........oo << 86 << 87 G4teoCrossSection::~G4teoCrossSection() 50 G4teoCrossSection::~G4teoCrossSection() 88 { 51 { 89 delete ecpssrShellK; 52 delete ecpssrShellK; 90 delete ecpssrShellLi; 53 delete ecpssrShellLi; 91 delete ecpssrShellMi; << 92 } 54 } 93 55 94 //....oooOO0OOooo........oooOO0OOooo........oo << 95 << 96 std::vector<G4double> G4teoCrossSection::GetCr 56 std::vector<G4double> G4teoCrossSection::GetCrossSection(G4int Z, 97 G4double incidentEnergy, 57 G4double incidentEnergy, 98 G4double mass, 58 G4double mass, 99 G4double, 59 G4double, 100 const G4Material*) << 60 G4bool) const 101 { 61 { 102 std::vector<G4double> crossSections; 62 std::vector<G4double> crossSections; 103 63 104 crossSections.push_back( ecpssrShellK->Calcu 64 crossSections.push_back( ecpssrShellK->CalculateCrossSection(Z, mass, incidentEnergy) ); 105 65 106 crossSections.push_back( ecpssrShellLi->Calc 66 crossSections.push_back( ecpssrShellLi->CalculateL1CrossSection(Z, mass, incidentEnergy) ); 107 crossSections.push_back( ecpssrShellLi->Calc 67 crossSections.push_back( ecpssrShellLi->CalculateL2CrossSection(Z, mass, incidentEnergy) ); 108 crossSections.push_back( ecpssrShellLi->Calc 68 crossSections.push_back( ecpssrShellLi->CalculateL3CrossSection(Z, mass, incidentEnergy) ); 109 69 110 if (ecpssrShellMi) { << 111 crossSections.push_back( ecpssrShellMi->Ca << 112 crossSections.push_back( ecpssrShellMi->Ca << 113 crossSections.push_back( ecpssrShellMi->Ca << 114 crossSections.push_back( ecpssrShellMi->Ca << 115 crossSections.push_back( ecpssrShellMi->Ca << 116 } << 117 return crossSections; 70 return crossSections; 118 } 71 } 119 72 120 //....oooOO0OOooo........oooOO0OOooo........oo << 73 G4double G4teoCrossSection::CrossSection(G4int Z, G4int shell, 121 << 122 G4double G4teoCrossSection::CrossSection(G4int << 123 G4double incidentEnergy, 74 G4double incidentEnergy, 124 G4double mass, << 75 G4double mass) const 125 const G4Material*) << 126 { 76 { 127 G4double res = 0.0; 77 G4double res = 0.0; 128 if(shell > 3 && !ecpssrShellMi) { << 78 if(3 < shell) { 129 return res; 79 return res; 130 } << 80 } else if(0 == shell) { 131 else if(shell > 8) { << 81 res = ecpssrShellK->CalculateCrossSection(Z, mass, incidentEnergy); 132 return res; << 82 } else if(1 == shell) { 133 } << 83 res = ecpssrShellLi->CalculateL1CrossSection(Z, mass, incidentEnergy); 134 else if(fKShell == shell) << 84 } else if(2 == shell) { 135 { << 85 res = ecpssrShellLi->CalculateL2CrossSection(Z, mass, incidentEnergy); 136 res = ecpssrShellK->CalculateCrossSectio << 86 } else if(3 == shell) { 137 } << 87 res = ecpssrShellLi->CalculateL3CrossSection(Z, mass, incidentEnergy); 138 else if(fL1Shell == shell) << 88 } 139 { << 140 res = ecpssrShellLi->CalculateL1CrossSec << 141 } << 142 else if(fL2Shell == shell) << 143 { << 144 res = ecpssrShellLi->CalculateL2CrossSec << 145 } << 146 else if(fL3Shell == shell) << 147 { << 148 res = ecpssrShellLi->CalculateL3CrossSec << 149 } << 150 else if(fM1Shell == shell) << 151 { << 152 res = ecpssrShellMi->CalculateM1CrossSec << 153 } << 154 else if(fM2Shell == shell) << 155 { << 156 res = ecpssrShellMi->CalculateM2CrossSec << 157 } << 158 else if(fM3Shell == shell) << 159 { << 160 res = ecpssrShellMi->CalculateM3CrossSec << 161 } << 162 else if(fM4Shell == shell) << 163 { << 164 res = ecpssrShellMi->CalculateM4CrossSec << 165 } << 166 else if(fM5Shell == shell) << 167 { << 168 res = ecpssrShellMi->CalculateM5CrossSec << 169 } << 170 return res; 89 return res; 171 } 90 } 172 91 173 //....oooOO0OOooo........oooOO0OOooo........oo << 174 << 175 std::vector<G4double> G4teoCrossSection::Proba 92 std::vector<G4double> G4teoCrossSection::Probabilities(G4int Z, 176 G4double incidentEnergy, 93 G4double incidentEnergy, 177 G4double mass, 94 G4double mass, 178 G4double deltaEnergy, << 95 G4double deltaEnergy) const 179 const G4Material*) << 180 { 96 { 181 std::vector<G4double> crossSections = 97 std::vector<G4double> crossSections = 182 GetCrossSection(Z, incidentEnergy, mass, d 98 GetCrossSection(Z, incidentEnergy, mass, deltaEnergy); 183 99 184 for (size_t i=0; i<crossSections.size(); ++i << 100 for (size_t i=0; i<crossSections.size(); i++ ) { >> 101 185 if (totalCS) { 102 if (totalCS) { 186 crossSections[i] = crossSections[i]/tota 103 crossSections[i] = crossSections[i]/totalCS; 187 } << 104 } >> 105 188 } 106 } 189 return crossSections; 107 return crossSections; 190 } 108 } 191 109 192 //....oooOO0OOooo........oooOO0OOooo........oo << 193 << 194 void G4teoCrossSection::SetTotalCS(G4double va 110 void G4teoCrossSection::SetTotalCS(G4double val){ >> 111 195 totalCS = val; 112 totalCS = val; >> 113 // G4cout << "totalXS set to: " << val / barn << " barns" << G4endl; 196 } 114 } 197 115 198 116 199 117 200 118