|
| G4PenelopeAnnihilationModel (const G4ParticleDefinition *p=0, const G4String &processName="PenAnnih") |
|
virtual | ~G4PenelopeAnnihilationModel () |
|
virtual void | Initialise (const G4ParticleDefinition *, const G4DataVector &) |
|
virtual void | InitialiseLocal (const G4ParticleDefinition *, G4VEmModel *) |
|
virtual G4double | ComputeCrossSectionPerAtom (const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0, G4double cut=0, G4double emax=DBL_MAX) |
|
virtual void | SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) |
|
void | SetVerbosityLevel (G4int lev) |
|
G4int | GetVerbosityLevel () |
|
| G4VEmModel (const G4String &nam) |
|
virtual | ~G4VEmModel () |
|
virtual void | InitialiseForMaterial (const G4ParticleDefinition *, const G4Material *) |
|
virtual void | InitialiseForElement (const G4ParticleDefinition *, G4int Z) |
|
virtual G4double | ComputeDEDXPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX) |
|
virtual G4double | CrossSectionPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX) |
|
virtual G4double | ChargeSquareRatio (const G4Track &) |
|
virtual G4double | GetChargeSquareRatio (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy) |
|
virtual G4double | GetParticleCharge (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy) |
|
virtual void | StartTracking (G4Track *) |
|
virtual void | CorrectionsAlongStep (const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length) |
|
virtual G4double | Value (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy) |
|
virtual G4double | MinPrimaryEnergy (const G4Material *, const G4ParticleDefinition *, G4double cut=0.0) |
|
virtual G4double | MinEnergyCut (const G4ParticleDefinition *, const G4MaterialCutsCouple *) |
|
virtual void | SetupForMaterial (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy) |
|
virtual void | DefineForRegion (const G4Region *) |
|
void | InitialiseElementSelectors (const G4ParticleDefinition *, const G4DataVector &) |
|
std::vector
< G4EmElementSelector * > * | GetElementSelectors () |
|
void | SetElementSelectors (std::vector< G4EmElementSelector * > *) |
|
G4double | ComputeDEDX (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX) |
|
G4double | CrossSection (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX) |
|
G4double | ComputeMeanFreePath (const G4ParticleDefinition *, G4double kineticEnergy, const G4Material *, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX) |
|
G4double | ComputeCrossSectionPerAtom (const G4ParticleDefinition *, const G4Element *, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX) |
|
G4int | SelectIsotopeNumber (const G4Element *) |
|
const G4Element * | SelectRandomAtom (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX) |
|
const G4Element * | SelectRandomAtom (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX) |
|
G4int | SelectRandomAtomNumber (const G4Material *) |
|
void | SetParticleChange (G4VParticleChange *, G4VEmFluctuationModel *f=0) |
|
void | SetCrossSectionTable (G4PhysicsTable *, G4bool isLocal) |
|
G4ElementData * | GetElementData () |
|
G4PhysicsTable * | GetCrossSectionTable () |
|
G4VEmFluctuationModel * | GetModelOfFluctuations () |
|
G4VEmAngularDistribution * | GetAngularDistribution () |
|
void | SetAngularDistribution (G4VEmAngularDistribution *) |
|
G4double | HighEnergyLimit () const |
|
G4double | LowEnergyLimit () const |
|
G4double | HighEnergyActivationLimit () const |
|
G4double | LowEnergyActivationLimit () const |
|
G4double | PolarAngleLimit () const |
|
G4double | SecondaryThreshold () const |
|
G4bool | LPMFlag () const |
|
G4bool | DeexcitationFlag () const |
|
G4bool | ForceBuildTableFlag () const |
|
G4bool | UseAngularGeneratorFlag () const |
|
void | SetAngularGeneratorFlag (G4bool) |
|
void | SetHighEnergyLimit (G4double) |
|
void | SetLowEnergyLimit (G4double) |
|
void | SetActivationHighEnergyLimit (G4double) |
|
void | SetActivationLowEnergyLimit (G4double) |
|
G4bool | IsActive (G4double kinEnergy) |
|
void | SetPolarAngleLimit (G4double) |
|
void | SetSecondaryThreshold (G4double) |
|
void | SetLPMFlag (G4bool val) |
|
void | SetDeexcitationFlag (G4bool val) |
|
void | SetForceBuildTable (G4bool val) |
|
void | SetMasterThread (G4bool val) |
|
G4bool | IsMaster () const |
|
G4double | MaxSecondaryKinEnergy (const G4DynamicParticle *dynParticle) |
|
const G4String & | GetName () const |
|
void | SetCurrentCouple (const G4MaterialCutsCouple *) |
|
const G4Element * | GetCurrentElement () const |
|
Implements G4VEmModel.
Definition at line 153 of file G4PenelopeAnnihilationModel.cc.
References python.hepunit::electron_mass_c2, python.hepunit::eV, fParticleChange, fStopAndKill, G4cout, G4endl, G4UniformRand, G4Gamma::Gamma(), G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetMomentumDirection(), python.hepunit::keV, G4INCL::Math::max(), python.hepunit::pi, G4VParticleChange::ProposeTrackStatus(), CLHEP::Hep3Vector::rotateUz(), G4ParticleChangeForGamma::SetProposedKineticEnergy(), mcscore::test(), and python.hepunit::twopi.
174 if (verboseLevel > 3)
175 G4cout <<
"Calling SamplingSecondaries() of G4PenelopeAnnihilationModel" <<
G4endl;
183 if (kineticEnergy == 0.0)
187 G4double sinTheta = std::sqrt(1.0-cosTheta*cosTheta);
189 G4ThreeVector direction (sinTheta*std::cos(phi),sinTheta*std::sin(phi),cosTheta);
195 fvect->push_back(firstGamma);
196 fvect->push_back(secondGamma);
204 G4double gamma21 = std::sqrt(gamma*gamma-1);
206 G4double chimin = 1.0/(ani+gamma21);
207 G4double rchi = (1.0-chimin)/chimin;
213 G4double reject = ani*ani*(1.0-epsilon)+2.0*gamma-(1.0/epsilon);
218 G4double photon1Energy = epsilon*totalAvailableEnergy;
219 G4double photon2Energy = (1.0-epsilon)*totalAvailableEnergy;
220 G4double cosTheta1 = (ani-1.0/epsilon)/gamma21;
221 G4double cosTheta2 = (ani-1.0/(1.0-epsilon))/gamma21;
225 G4double sinTheta1 = std::sqrt(1.-cosTheta1*cosTheta1);
227 G4double dirx1 = sinTheta1 * std::cos(phi1);
228 G4double diry1 = sinTheta1 * std::sin(phi1);
231 G4double sinTheta2 = std::sqrt(1.-cosTheta2*cosTheta2);
233 G4double dirx2 = sinTheta2 * std::cos(phi2);
234 G4double diry2 = sinTheta2 * std::sin(phi2);
238 photon1Direction.rotateUz(positronDirection);
243 fvect->push_back(aParticle1);
246 photon2Direction.rotateUz(positronDirection);
251 fvect->push_back(aParticle2);
253 if (verboseLevel > 1)
255 G4cout <<
"-----------------------------------------------------------" <<
G4endl;
256 G4cout <<
"Energy balance from G4PenelopeAnnihilation" <<
G4endl;
257 G4cout <<
"Kinetic positron energy: " << kineticEnergy/
keV <<
" keV" <<
G4endl;
258 G4cout <<
"Total available energy: " << totalAvailableEnergy/
keV <<
" keV " <<
G4endl;
259 G4cout <<
"-----------------------------------------------------------" <<
G4endl;
260 G4cout <<
"Photon energy 1: " << photon1Energy/
keV <<
" keV" <<
G4endl;
261 G4cout <<
"Photon energy 2: " << photon2Energy/
keV <<
" keV" <<
G4endl;
262 G4cout <<
"Total final state: " << (photon1Energy+photon2Energy)/
keV <<
264 G4cout <<
"-----------------------------------------------------------" <<
G4endl;
266 if (verboseLevel > 0)
268 G4double energyDiff = std::fabs(totalAvailableEnergy-photon1Energy-photon2Energy);
269 if (energyDiff > 0.05*
keV)
270 G4cout <<
"Warning from G4PenelopeAnnihilation: problem with energy conservation: " <<
271 (photon1Energy+photon2Energy)/
keV <<
272 " keV (final) vs. " <<
273 totalAvailableEnergy/
keV <<
" keV (initial)" << G4endl;
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
const G4ThreeVector & GetMomentumDirection() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4ParticleChangeForGamma * fParticleChange
void ProposeTrackStatus(G4TrackStatus status)