#include <G4PiMinusStopMaterial.hh>
Inheritance diagram for G4PiMinusStopMaterial:
Public Member Functions | |
G4PiMinusStopMaterial () | |
virtual | ~G4PiMinusStopMaterial () |
virtual std::vector< G4ParticleDefinition * > * | DefinitionVector () |
virtual std::vector< G4LorentzVector * > * | P4Vector (const G4double binding, const G4double mass) |
virtual G4double | FinalNucleons ()=0 |
Protected Member Functions | |
G4double | GenerateAngle (G4double range) |
G4LorentzVector | MakeP4 (G4double p, G4double theta, G4double phi, G4double e) |
G4double | RecoilEnergy (const G4double mass) |
Protected Attributes | |
std::vector< G4ParticleDefinition * > * | _definitions |
std::vector< G4LorentzVector * > * | _momenta |
G4DistributionGenerator * | _distributionE |
G4DistributionGenerator * | _distributionAngle |
G4double | theR |
Definition at line 49 of file G4PiMinusStopMaterial.hh.
G4PiMinusStopMaterial::G4PiMinusStopMaterial | ( | ) |
Definition at line 55 of file G4PiMinusStopMaterial.cc.
References _definitions, _distributionAngle, _distributionE, _momenta, and theR.
00056 { 00057 _definitions = 0; 00058 _momenta = 0; 00059 _distributionE = 0; 00060 _distributionAngle = 0; 00061 theR = 0.5; 00062 }
G4PiMinusStopMaterial::~G4PiMinusStopMaterial | ( | ) | [virtual] |
Definition at line 67 of file G4PiMinusStopMaterial.cc.
References _definitions, _distributionAngle, _distributionE, and _momenta.
00068 { 00069 if (_definitions != 0) delete _definitions; 00070 _definitions = 0; 00071 00072 //A.R. 26-Jul-2012 Coverity fix 00073 if (_momenta != 0) { 00074 for (unsigned int i=0; i<_momenta->size(); i++) delete(*_momenta)[i]; 00075 delete _momenta; 00076 } 00077 00078 delete _distributionE; 00079 delete _distributionAngle; 00080 }
std::vector< G4ParticleDefinition * > * G4PiMinusStopMaterial::DefinitionVector | ( | ) | [virtual] |
Definition at line 82 of file G4PiMinusStopMaterial.cc.
References _definitions, G4UniformRand, G4Neutron::Neutron(), G4Proton::Proton(), and theR.
Referenced by G4PiMinusStopAbsorption::DoAbsorption().
00083 { 00084 00085 _definitions->push_back(G4Neutron::Neutron()); 00086 00087 G4double ranflat = G4UniformRand(); 00088 if (ranflat < theR) 00089 { _definitions->push_back(G4Proton::Proton()); } 00090 else 00091 { _definitions->push_back(G4Neutron::Neutron()); } 00092 00093 return _definitions; 00094 00095 }
virtual G4double G4PiMinusStopMaterial::FinalNucleons | ( | ) | [pure virtual] |
Implemented in G4PiMinusStopAl, G4PiMinusStopC, G4PiMinusStopCo, G4PiMinusStopCu, G4PiMinusStopLi, G4PiMinusStopN, G4PiMinusStopO, G4PiMinusStopPb, and G4PiMinusStopTa.
Referenced by G4PiMinusStopAbsorption::DoAbsorption().
Definition at line 165 of file G4PiMinusStopMaterial.cc.
References G4UniformRand.
Referenced by P4Vector().
00166 { 00167 G4double ranflat = G4UniformRand(); 00168 G4double value = ranflat * x; 00169 return value; 00170 }
G4LorentzVector G4PiMinusStopMaterial::MakeP4 | ( | G4double | p, | |
G4double | theta, | |||
G4double | phi, | |||
G4double | e | |||
) | [protected] |
Definition at line 172 of file G4PiMinusStopMaterial.cc.
Referenced by P4Vector().
00173 { 00174 // G4LorentzVector p4; 00175 G4double px = p * std::sin(theta) * std::cos(phi); 00176 G4double py = p * std::sin(theta) * std::sin(phi); 00177 G4double pz = p * std::cos(theta); 00178 G4LorentzVector p4(px,py,pz,e); 00179 return p4; 00180 }
std::vector< G4LorentzVector * > * G4PiMinusStopMaterial::P4Vector | ( | const G4double | binding, | |
const G4double | mass | |||
) | [virtual] |
Definition at line 98 of file G4PiMinusStopMaterial.cc.
References _distributionAngle, _distributionE, _momenta, G4UniformRand, G4DistributionGenerator::Generate(), GenerateAngle(), G4ParticleDefinition::GetPDGMass(), MakeP4(), G4INCL::Math::pi, and G4PionMinus::PionMinus().
Referenced by G4PiMinusStopAbsorption::DoAbsorption().
00100 { 00101 // Generate energy of direct absorption products according to experimental 00102 // data. The energy distribution of the two nucleons is assumed to be the 00103 // same for protons and neutrons. 00104 00105 G4double eKin1; 00106 G4double eKin2; 00107 G4double eRecoil; 00108 00109 // Assume absorption on two nucleons 00110 G4int nNucleons = 2; 00111 G4double availableE = G4PionMinus::PionMinus()->GetPDGMass() - nNucleons * binding; 00112 G4LorentzVector p1; 00113 G4LorentzVector p2; 00114 00115 do 00116 { 00117 G4double ranflat; 00118 G4double p; 00119 G4double energy; 00120 G4double mass; 00121 00122 ranflat = G4UniformRand(); 00123 eKin1 = _distributionE->Generate(ranflat); 00124 mass = (*_definitions)[0]->GetPDGMass(); 00125 energy = eKin1 + mass; 00126 p = std::sqrt(energy*energy - mass*mass); 00127 G4double theta1 = pi*G4UniformRand(); 00128 G4double phi1 = GenerateAngle(2.*pi); 00129 p1 = MakeP4(p,theta1,phi1,energy); 00130 00131 ranflat = G4UniformRand(); 00132 eKin2 = _distributionE->Generate(ranflat); 00133 mass = (*_definitions)[1]->GetPDGMass(); 00134 energy = eKin2 + mass; 00135 p = std::sqrt(energy*energy - mass*mass); 00136 ranflat = G4UniformRand(); 00137 G4double opAngle = _distributionAngle->Generate(ranflat); 00138 G4double theta2 = theta1 + opAngle; 00139 G4double phi2 = phi1 + opAngle; 00140 00141 p2 = MakeP4(p,theta2,phi2,energy); 00142 00143 G4double pNucleus = (p1.vect() + p2.vect()).mag(); 00144 eRecoil = std::sqrt(pNucleus*pNucleus + massNucleus*massNucleus) - massNucleus; 00145 00146 // ---- Debug 00147 // G4cout << " ---- binding = " << binding << ", nucleus mass = " << massNucleus 00148 // << ", p nucleus = " << pNucleus << G4endl; 00149 // G4cout << "eKin1,2 " << eKin1 << " " << eKin2 << " eRecoil " << eRecoil 00150 // << " availableE " << availableE << G4endl; 00151 // ---- 00152 00153 } while ((eKin1 + eKin2 + eRecoil) > availableE); 00154 00155 //A.R. 26-Jul-2012 Coverity fix 00156 if (_momenta != 0) { 00157 _momenta->push_back(new G4LorentzVector(p1)); 00158 _momenta->push_back(new G4LorentzVector(p2)); 00159 } 00160 00161 return _momenta; 00162 00163 }
Definition at line 182 of file G4PiMinusStopMaterial.cc.
References _momenta.
00183 { 00184 G4ThreeVector p(0.,0.,0.); 00185 00186 //A.R. 26-Jul-2012 Coverity fix 00187 if (_momenta != 0) { 00188 for (unsigned int i = 0; i< _momenta->size(); i++) 00189 { 00190 p = p + (*_momenta)[i]->vect(); 00191 } 00192 } 00193 00194 G4double pNucleus = p.mag(); 00195 G4double eNucleus = std::sqrt(pNucleus*pNucleus + mass*mass); 00196 00197 return eNucleus; 00198 }
std::vector<G4ParticleDefinition* >* G4PiMinusStopMaterial::_definitions [protected] |
Definition at line 80 of file G4PiMinusStopMaterial.hh.
Referenced by DefinitionVector(), G4PiMinusStopAl::G4PiMinusStopAl(), G4PiMinusStopC::G4PiMinusStopC(), G4PiMinusStopCo::G4PiMinusStopCo(), G4PiMinusStopCu::G4PiMinusStopCu(), G4PiMinusStopLi::G4PiMinusStopLi(), G4PiMinusStopMaterial(), G4PiMinusStopN::G4PiMinusStopN(), G4PiMinusStopO::G4PiMinusStopO(), G4PiMinusStopPb::G4PiMinusStopPb(), G4PiMinusStopTa::G4PiMinusStopTa(), and ~G4PiMinusStopMaterial().
Definition at line 83 of file G4PiMinusStopMaterial.hh.
Referenced by G4PiMinusStopAl::G4PiMinusStopAl(), G4PiMinusStopC::G4PiMinusStopC(), G4PiMinusStopCo::G4PiMinusStopCo(), G4PiMinusStopCu::G4PiMinusStopCu(), G4PiMinusStopLi::G4PiMinusStopLi(), G4PiMinusStopMaterial(), G4PiMinusStopN::G4PiMinusStopN(), G4PiMinusStopO::G4PiMinusStopO(), G4PiMinusStopPb::G4PiMinusStopPb(), G4PiMinusStopTa::G4PiMinusStopTa(), P4Vector(), and ~G4PiMinusStopMaterial().
Definition at line 82 of file G4PiMinusStopMaterial.hh.
Referenced by G4PiMinusStopAl::G4PiMinusStopAl(), G4PiMinusStopC::G4PiMinusStopC(), G4PiMinusStopCo::G4PiMinusStopCo(), G4PiMinusStopCu::G4PiMinusStopCu(), G4PiMinusStopLi::G4PiMinusStopLi(), G4PiMinusStopMaterial(), G4PiMinusStopN::G4PiMinusStopN(), G4PiMinusStopO::G4PiMinusStopO(), G4PiMinusStopPb::G4PiMinusStopPb(), G4PiMinusStopTa::G4PiMinusStopTa(), P4Vector(), and ~G4PiMinusStopMaterial().
std::vector<G4LorentzVector* >* G4PiMinusStopMaterial::_momenta [protected] |
Definition at line 81 of file G4PiMinusStopMaterial.hh.
Referenced by G4PiMinusStopAl::G4PiMinusStopAl(), G4PiMinusStopC::G4PiMinusStopC(), G4PiMinusStopCo::G4PiMinusStopCo(), G4PiMinusStopCu::G4PiMinusStopCu(), G4PiMinusStopLi::G4PiMinusStopLi(), G4PiMinusStopMaterial(), G4PiMinusStopN::G4PiMinusStopN(), G4PiMinusStopO::G4PiMinusStopO(), G4PiMinusStopPb::G4PiMinusStopPb(), G4PiMinusStopTa::G4PiMinusStopTa(), P4Vector(), RecoilEnergy(), and ~G4PiMinusStopMaterial().
G4double G4PiMinusStopMaterial::theR [protected] |
Definition at line 84 of file G4PiMinusStopMaterial.hh.
Referenced by DefinitionVector(), G4PiMinusStopAl::G4PiMinusStopAl(), G4PiMinusStopC::G4PiMinusStopC(), G4PiMinusStopCo::G4PiMinusStopCo(), G4PiMinusStopCu::G4PiMinusStopCu(), G4PiMinusStopLi::G4PiMinusStopLi(), G4PiMinusStopMaterial(), G4PiMinusStopN::G4PiMinusStopN(), G4PiMinusStopO::G4PiMinusStopO(), G4PiMinusStopPb::G4PiMinusStopPb(), and G4PiMinusStopTa::G4PiMinusStopTa().