Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 28 #include "globals.hh" 29 #include "G4SystemOfUnits.hh" 30 #include "G4HadronicException.hh" 31 #include "G4ios.hh" 32 #include "G4Pow.hh" 33 #include "G4VCrossSectionSource.hh" 34 #include "G4ParticleDefinition.hh" 35 #include "G4KineticTrack.hh" 36 #include "G4CrossSectionVector.hh" 37 #include "G4CrossSectionSourcePtr.hh" 38 #include "G4Proton.hh" 39 #include "G4Neutron.hh" 40 41 G4VCrossSectionSource::G4VCrossSectionSource() 42 { } 43 44 45 G4VCrossSectionSource::~G4VCrossSectionSource( 46 { } 47 48 49 const G4ParticleDefinition * G4VCrossSectionSo 50 FindKeyParticle(const G4KineticTrack& trk1,con 51 { 52 const G4ParticleDefinition * result; 53 54 const G4ParticleDefinition * p1 = trk1.GetDe 55 const G4ParticleDefinition * p2 = trk2.GetDe 56 57 if( (p1==G4Proton::Proton() && p2==G4Proton: 58 (p1==G4Neutron::Neutron() && p2==G4Neutr 59 { 60 result = G4Proton::Proton(); 61 } 62 else if( (p1==G4Neutron::Neutron() && p2==G4 63 (p2==G4Neutron::Neutron() && p1==G4 64 { 65 result = G4Neutron::Neutron(); 66 } 67 else 68 { 69 throw G4HadronicException(__FILE__, __LINE 70 } 71 return result; 72 } 73 74 G4bool G4VCrossSectionSource::operator==(const 75 { 76 return (this == (G4VCrossSectionSource *) &r 77 } 78 79 80 G4bool G4VCrossSectionSource::operator!=(const 81 { 82 return (this != (G4VCrossSectionSource *) &r 83 } 84 85 86 void G4VCrossSectionSource::Print() const 87 { 88 std::size_t nComponents = 0; 89 const G4CrossSectionVector* components = Get 90 if (components) 91 { 92 nComponents = components->size(); 93 } 94 G4cout << "---- " << this->Name() << " ---- 95 for (std::size_t i=0; i<nComponents; ++i) 96 { 97 G4cout << "-" << this->Name() << " - Co 98 99 G4CrossSectionSourcePtr componentPtr = ( 100 G4VCrossSectionSource* component = compo 101 component->Print(); 102 } 103 } 104 105 106 void G4VCrossSectionSource::PrintAll(const G4K 107 { 108 G4double sqrtS = (trk1.Get4Momentum() + trk2 109 G4double sigma = CrossSection(trk1,trk2) / m 110 G4cout << "---- " << Name() << ": " 111 << "Ecm = " << sqrtS / GeV << " GeV - " 112 << " Cross section = " << sigma << " mb " 113 << G4endl; 114 115 std::size_t nComponents = 0; 116 const G4CrossSectionVector* components = Get 117 if (components != 0) 118 { 119 nComponents = components->size(); 120 } 121 for (std::size_t i=0; i<nComponents; ++i) 122 { 123 G4cout << "* Component " << i << ": "; 124 G4CrossSectionSourcePtr componentPtr = ( 125 G4VCrossSectionSource* component = compo 126 component->PrintAll(trk1,trk2); 127 } 128 } 129 130 131 G4bool G4VCrossSectionSource::InLimits(G4doubl 132 { 133 G4bool answer = false; 134 if (e >= eLow && e <= eHigh) answer = true; 135 return answer; 136 } 137 138 G4double G4VCrossSectionSource::LowLimit() con 139 { 140 return 0.; 141 } 142 143 144 G4double G4VCrossSectionSource::HighLimit() co 145 { 146 return DBL_MAX; 147 } 148 149 G4bool G4VCrossSectionSource::IsValid(G4double 150 { 151 G4bool answer = false; 152 if (e >= LowLimit() && e <= HighLimit()) ans 153 return answer; 154 } 155 156 const G4ParticleDefinition* G4VCrossSectionSou 157 const G4KineticTrack& trk 158 { 159 G4double mass1 = trk1.GetDefinition()->GetPD 160 G4double mass2 = trk2.GetDefinition()->GetPD 161 if (mass1 < mass2) 162 { 163 return trk1.GetDefinition(); 164 } 165 else 166 { 167 return trk2.GetDefinition(); 168 } 169 } 170 171 172 G4double G4VCrossSectionSource::FcrossX(G4doub 173 G4double sigma, G4double 174 { 175 G4double result = 0.; 176 177 G4double denom = eParam*eParam + (e-e0)*(e-e 178 if (denom > 0.) 179 { 180 G4double value = (2.* eParam * sigma * (e- 181 result = std::max(0., value); 182 } 183 return result; 184 } 185 186 187 188 189