Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4GammaConversionToMuons Class Reference

#include <G4GammaConversionToMuons.hh>

+ Inheritance diagram for G4GammaConversionToMuons:

Public Member Functions

 G4GammaConversionToMuons (const G4String &processName="GammaToMuPair", G4ProcessType type=fElectromagnetic)
 
 ~G4GammaConversionToMuons () override
 
G4bool IsApplicable (const G4ParticleDefinition &) override
 
void BuildPhysicsTable (const G4ParticleDefinition &) override
 
void PrintInfoDefinition ()
 
void SetCrossSecFactor (G4double fac)
 
G4double GetCrossSecFactor () const
 
G4double GetMeanFreePath (const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition) override
 
G4double GetCrossSectionPerAtom (const G4DynamicParticle *aDynamicGamma, const G4Element *anElement)
 
G4VParticleChangePostStepDoIt (const G4Track &aTrack, const G4Step &aStep) override
 
G4double ComputeCrossSectionPerAtom (G4double GammaEnergy, G4int Z)
 
G4double ComputeMeanFreePath (G4double GammaEnergy, const G4Material *aMaterial)
 
G4GammaConversionToMuonsoperator= (const G4GammaConversionToMuons &right)=delete
 
 G4GammaConversionToMuons (const G4GammaConversionToMuons &)=delete
 
- Public Member Functions inherited from G4VDiscreteProcess
 G4VDiscreteProcess (const G4String &aName, G4ProcessType aType=fNotDefined)
 
 G4VDiscreteProcess (G4VDiscreteProcess &)
 
virtual ~G4VDiscreteProcess ()
 
G4VDiscreteProcessoperator= (const G4VDiscreteProcess &)=delete
 
virtual G4double PostStepGetPhysicalInteractionLength (const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
 
virtual G4double AlongStepGetPhysicalInteractionLength (const G4Track &, G4double, G4double, G4double &, G4GPILSelection *)
 
virtual G4double AtRestGetPhysicalInteractionLength (const G4Track &, G4ForceCondition *)
 
virtual G4VParticleChangeAtRestDoIt (const G4Track &, const G4Step &)
 
virtual G4VParticleChangeAlongStepDoIt (const G4Track &, const G4Step &)
 
virtual G4double GetCrossSection (const G4double, const G4MaterialCutsCouple *)
 
virtual G4double MinPrimaryEnergy (const G4ParticleDefinition *, const G4Material *)
 
- Public Member Functions inherited from G4VProcess
 G4VProcess (const G4String &aName="NoName", G4ProcessType aType=fNotDefined)
 
 G4VProcess (const G4VProcess &right)
 
virtual ~G4VProcess ()
 
G4VProcessoperator= (const G4VProcess &)=delete
 
G4bool operator== (const G4VProcess &right) const
 
G4bool operator!= (const G4VProcess &right) const
 
G4double GetCurrentInteractionLength () const
 
void SetPILfactor (G4double value)
 
G4double GetPILfactor () const
 
G4double AlongStepGPIL (const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)
 
G4double AtRestGPIL (const G4Track &track, G4ForceCondition *condition)
 
G4double PostStepGPIL (const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
 
virtual void PreparePhysicsTable (const G4ParticleDefinition &)
 
virtual G4bool StorePhysicsTable (const G4ParticleDefinition *, const G4String &, G4bool)
 
virtual G4bool RetrievePhysicsTable (const G4ParticleDefinition *, const G4String &, G4bool)
 
const G4StringGetPhysicsTableFileName (const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
 
const G4StringGetProcessName () const
 
G4ProcessType GetProcessType () const
 
void SetProcessType (G4ProcessType)
 
G4int GetProcessSubType () const
 
void SetProcessSubType (G4int)
 
virtual const G4VProcessGetCreatorProcess () const
 
virtual void StartTracking (G4Track *)
 
virtual void EndTracking ()
 
virtual void SetProcessManager (const G4ProcessManager *)
 
virtual const G4ProcessManagerGetProcessManager ()
 
virtual void ResetNumberOfInteractionLengthLeft ()
 
G4double GetNumberOfInteractionLengthLeft () const
 
G4double GetTotalNumberOfInteractionLengthTraversed () const
 
G4bool isAtRestDoItIsEnabled () const
 
G4bool isAlongStepDoItIsEnabled () const
 
G4bool isPostStepDoItIsEnabled () const
 
virtual void DumpInfo () const
 
virtual void ProcessDescription (std::ostream &outfile) const
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
virtual void SetMasterProcess (G4VProcess *masterP)
 
const G4VProcessGetMasterProcess () const
 
virtual void BuildWorkerPhysicsTable (const G4ParticleDefinition &part)
 
virtual void PrepareWorkerPhysicsTable (const G4ParticleDefinition &)
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VProcess
static const G4StringGetProcessTypeName (G4ProcessType)
 
- Protected Member Functions inherited from G4VDiscreteProcess
- Protected Member Functions inherited from G4VProcess
void SubtractNumberOfInteractionLengthLeft (G4double prevStepSize)
 
void ClearNumberOfInteractionLengthLeft ()
 
- Protected Attributes inherited from G4VProcess
const G4ProcessManageraProcessManager = nullptr
 
G4VParticleChangepParticleChange = nullptr
 
G4ParticleChange aParticleChange
 
G4double theNumberOfInteractionLengthLeft = -1.0
 
G4double currentInteractionLength = -1.0
 
G4double theInitialNumberOfInteractionLength = -1.0
 
G4String theProcessName
 
G4String thePhysicsTableFileName
 
G4ProcessType theProcessType = fNotDefined
 
G4int theProcessSubType = -1
 
G4double thePILfactor = 1.0
 
G4int verboseLevel = 0
 
G4bool enableAtRestDoIt = true
 
G4bool enableAlongStepDoIt = true
 
G4bool enablePostStepDoIt = true
 

Detailed Description

Definition at line 61 of file G4GammaConversionToMuons.hh.

Constructor & Destructor Documentation

◆ G4GammaConversionToMuons() [1/2]

G4GammaConversionToMuons::G4GammaConversionToMuons ( const G4String & processName = "GammaToMuPair",
G4ProcessType type = fElectromagnetic )
explicit

Definition at line 59 of file G4GammaConversionToMuons.cc.

61 : G4VDiscreteProcess (processName, type),
62 Mmuon(G4MuonPlus::MuonPlus()->GetPDGMass()),
63 Rc(CLHEP::elm_coupling / Mmuon),
64 LimitEnergy(5. * Mmuon),
65 LowestEnergyLimit(2. * Mmuon),
66 HighestEnergyLimit(1e12 * CLHEP::GeV), // ok to 1e12GeV, then LPM suppression
67 theGamma(G4Gamma::Gamma()),
68 theMuonPlus(G4MuonPlus::MuonPlus()),
69 theMuonMinus(G4MuonMinus::MuonMinus())
70{
73 fManager->Register(this);
74}
@ fGammaConversionToMuMu
static G4Gamma * Gamma()
Definition G4Gamma.cc:81
static G4LossTableManager * Instance()
void Register(G4VEnergyLossProcess *p)
static G4MuonMinus * MuonMinus()
static G4MuonPlus * MuonPlus()
Definition G4MuonPlus.cc:98
void SetProcessSubType(G4int)

◆ ~G4GammaConversionToMuons()

G4GammaConversionToMuons::~G4GammaConversionToMuons ( )
override

Definition at line 78 of file G4GammaConversionToMuons.cc.

79{
80 fManager->DeRegister(this);
81}
void DeRegister(G4VEnergyLossProcess *p)

◆ G4GammaConversionToMuons() [2/2]

G4GammaConversionToMuons::G4GammaConversionToMuons ( const G4GammaConversionToMuons & )
delete

Member Function Documentation

◆ BuildPhysicsTable()

void G4GammaConversionToMuons::BuildPhysicsTable ( const G4ParticleDefinition & p)
overridevirtual

Reimplemented from G4VProcess.

Definition at line 92 of file G4GammaConversionToMuons.cc.

93{
95
96 auto table = G4Material::GetMaterialTable();
97 std::size_t nelm = 0;
98 for (auto const& mat : *table) {
99 std::size_t n = mat->GetNumberOfElements();
100 nelm = std::max(nelm, n);
101 }
102 temp.resize(nelm, 0);
103
104 if (Energy5DLimit > 0.0 && nullptr != f5Dmodel) {
105 f5Dmodel = new G4BetheHeitler5DModel();
106 f5Dmodel->SetLeptonPair(theMuonPlus, theMuonMinus);
107 const std::size_t numElems = G4ProductionCutsTable::GetProductionCutsTable()->GetTableSize();
108 const G4DataVector cuts(numElems);
109 f5Dmodel->Initialise(&p, cuts);
110 }
112}
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
void SetLeptonPair(const G4ParticleDefinition *p1, const G4ParticleDefinition *p2)
static G4EmParameters * Instance()
G4double MaxEnergyFor5DMuPair() const
static G4MaterialTable * GetMaterialTable()
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()

Referenced by G4GammaGeneralProcess::BuildPhysicsTable().

◆ ComputeCrossSectionPerAtom()

G4double G4GammaConversionToMuons::ComputeCrossSectionPerAtom ( G4double GammaEnergy,
G4int Z )

Definition at line 170 of file G4GammaConversionToMuons.cc.

176{
177 if(Egam <= LowestEnergyLimit) { return 0.0; }
178
180
181 G4double PowThres, Ecor, B, Dn, Zthird, Winfty, WMedAppr, Wsatur, sigfac;
182
183 if (Z == 1) { // special case of Hydrogen
184 B = 202.4;
185 Dn = 1.49;
186 }
187 else {
188 B = 183.;
189 Dn = 1.54 * nist->GetA27(Z);
190 }
191 Zthird = 1. / nist->GetZ13(Z); // Z**(-1/3)
192 Winfty = B * Zthird * Mmuon / (Dn * electron_mass_c2);
193 WMedAppr = 1. / (4. * Dn * sqrte * Mmuon);
194 Wsatur = Winfty / WMedAppr;
195 sigfac = 4. * fine_structure_const * Z * Z * Rc * Rc;
196 PowThres = 1.479 + 0.00799 * Dn;
197 Ecor = -18. + 4347. / (B * Zthird);
198
199 G4double CorFuc = 1. + .04 * G4Log(1. + Ecor / Egam);
200 G4double Eg =
201 G4Exp(G4Log(1. - 4. * Mmuon / Egam) * PowThres)
202 * G4Exp(G4Log(G4Exp(G4Log(Wsatur) * PowSat) + G4Exp(G4Log(Egam) * PowSat)) / PowSat);
203
204 G4double CrossSection = 7. / 9. * sigfac * G4Log(1. + WMedAppr * CorFuc * Eg);
205 CrossSection *= CrossSecFactor; // increase the CrossSection by (by default 1)
206 return CrossSection;
207}
G4double B(G4double temperature)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:180
G4double G4Log(G4double x)
Definition G4Log.hh:227
double G4double
Definition G4Types.hh:83
G4double GetA27(G4int Z) const
G4double GetZ13(G4double Z) const
static G4NistManager * Instance()

Referenced by ComputeMeanFreePath(), and GetCrossSectionPerAtom().

◆ ComputeMeanFreePath()

G4double G4GammaConversionToMuons::ComputeMeanFreePath ( G4double GammaEnergy,
const G4Material * aMaterial )

Definition at line 129 of file G4GammaConversionToMuons.cc.

133{
134 if(GammaEnergy <= LowestEnergyLimit) { return DBL_MAX; }
135 const G4ElementVector* theElementVector = aMaterial->GetElementVector();
136 const G4double* NbOfAtomsPerVolume = aMaterial->GetVecNbOfAtomsPerVolume();
137
138 G4double SIGMA = 0.0;
139 G4double fact = 1.0;
140 G4double e = GammaEnergy;
141 // low energy approximation as in Bethe-Heitler model
142 if(e < LimitEnergy) {
143 G4double y = (e - LowestEnergyLimit)/(LimitEnergy - LowestEnergyLimit);
144 fact = y*y;
145 e = LimitEnergy;
146 }
147
148 for ( std::size_t i=0 ; i < aMaterial->GetNumberOfElements(); ++i)
149 {
150 SIGMA += NbOfAtomsPerVolume[i] * fact *
151 ComputeCrossSectionPerAtom(e, (*theElementVector)[i]->GetZasInt());
152 }
153 return (SIGMA > 0.0) ? 1./SIGMA : DBL_MAX;
154}
std::vector< const G4Element * > G4ElementVector
G4double ComputeCrossSectionPerAtom(G4double GammaEnergy, G4int Z)
const G4ElementVector * GetElementVector() const
const G4double * GetVecNbOfAtomsPerVolume() const
std::size_t GetNumberOfElements() const
#define DBL_MAX
Definition templates.hh:62

Referenced by G4GammaGeneralProcess::BuildPhysicsTable(), and GetMeanFreePath().

◆ GetCrossSecFactor()

G4double G4GammaConversionToMuons::GetCrossSecFactor ( ) const
inline

Definition at line 86 of file G4GammaConversionToMuons.hh.

86{ return CrossSecFactor;}

◆ GetCrossSectionPerAtom()

G4double G4GammaConversionToMuons::GetCrossSectionPerAtom ( const G4DynamicParticle * aDynamicGamma,
const G4Element * anElement )

Definition at line 158 of file G4GammaConversionToMuons.cc.

163{
164 return ComputeCrossSectionPerAtom(aDynamicGamma->GetKineticEnergy(),
165 anElement->GetZasInt());
166}
G4double GetKineticEnergy() const
G4int GetZasInt() const
Definition G4Element.hh:120

◆ GetMeanFreePath()

G4double G4GammaConversionToMuons::GetMeanFreePath ( const G4Track & aTrack,
G4double previousStepSize,
G4ForceCondition * condition )
overridevirtual

Implements G4VDiscreteProcess.

Definition at line 116 of file G4GammaConversionToMuons.cc.

119{
120 const G4DynamicParticle* aDynamicGamma = aTrack.GetDynamicParticle();
121 G4double GammaEnergy = aDynamicGamma->GetKineticEnergy();
122 const G4Material* aMaterial = aTrack.GetMaterial();
123 return ComputeMeanFreePath(GammaEnergy, aMaterial);
124}
G4double ComputeMeanFreePath(G4double GammaEnergy, const G4Material *aMaterial)
G4Material * GetMaterial() const
const G4DynamicParticle * GetDynamicParticle() const

◆ IsApplicable()

G4bool G4GammaConversionToMuons::IsApplicable ( const G4ParticleDefinition & part)
overridevirtual

Reimplemented from G4VProcess.

Definition at line 85 of file G4GammaConversionToMuons.cc.

86{
87 return (&part == theGamma);
88}

◆ operator=()

G4GammaConversionToMuons & G4GammaConversionToMuons::operator= ( const G4GammaConversionToMuons & right)
delete

◆ PostStepDoIt()

G4VParticleChange * G4GammaConversionToMuons::PostStepDoIt ( const G4Track & aTrack,
const G4Step & aStep )
overridevirtual

Reimplemented from G4VDiscreteProcess.

Definition at line 224 of file G4GammaConversionToMuons.cc.

230{
232 const G4Material* aMaterial = aTrack.GetMaterial();
233
234 // current Gamma energy and direction, return if energy too low
235 const G4DynamicParticle* aDynamicGamma = aTrack.GetDynamicParticle();
236 G4double Egam = aDynamicGamma->GetKineticEnergy();
237 if (Egam <= LowestEnergyLimit) {
238 return G4VDiscreteProcess::PostStepDoIt(aTrack,aStep);
239 }
240 //
241 // Kill the incident photon
242 //
246
247 if (Egam <= Energy5DLimit) {
248 std::vector<G4DynamicParticle*> fvect;
249 f5Dmodel->SampleSecondaries(&fvect, aTrack.GetMaterialCutsCouple(),
250 aTrack.GetDynamicParticle(), 0.0, DBL_MAX);
251 for(auto dp : fvect) { aParticleChange.AddSecondary(dp); }
252 return G4VDiscreteProcess::PostStepDoIt(aTrack,aStep);
253 }
254
255 G4ParticleMomentum GammaDirection = aDynamicGamma->GetMomentumDirection();
256
257 // select randomly one element constituting the material
258 const G4Element* anElement = SelectRandomAtom(aDynamicGamma, aMaterial);
259 G4int Z = anElement->GetZasInt();
261
262 G4double B, Dn;
263 G4double A027 = nist->GetA27(Z);
264
265 if (Z == 1) { // special case of Hydrogen
266 B = 202.4;
267 Dn = 1.49;
268 }
269 else {
270 B = 183.;
271 Dn = 1.54 * A027;
272 }
273 G4double Zthird = 1. / nist->GetZ13(Z); // Z**(-1/3)
274 G4double Winfty = B * Zthird * Mmuon / (Dn * electron_mass_c2);
275
276 G4double C1Num = 0.138 * A027;
277 G4double C1Num2 = C1Num * C1Num;
278 G4double C2Term2 = electron_mass_c2 / (183. * Zthird * Mmuon);
279
280 G4double GammaMuonInv = Mmuon / Egam;
281
282 // generate xPlus according to the differential cross section by rejection
283 G4double xmin = (Egam <= LimitEnergy) ? 0.5 : 0.5 - std::sqrt(0.25 - GammaMuonInv);
284 G4double xmax = 1. - xmin;
285
286 G4double Ds2 = (Dn * sqrte - 2.);
287 G4double sBZ = sqrte * B * Zthird / electron_mass_c2;
288 G4double LogWmaxInv =
289 1. / G4Log(Winfty * (1. + 2. * Ds2 * GammaMuonInv) / (1. + 2. * sBZ * Mmuon * GammaMuonInv));
290 G4double xPlus = 0.5;
291 G4double xMinus = 0.5;
292 G4double xPM = 0.25;
293
294 G4int nn = 0;
295 const G4int nmax = 1000;
296
297 // sampling for Egam > LimitEnergy
298 if (xmin < 0.5) {
299 G4double result, W;
300 do {
301 xPlus = xmin + G4UniformRand() * (xmax - xmin);
302 xMinus = 1. - xPlus;
303 xPM = xPlus * xMinus;
304 G4double del = Mmuon * Mmuon / (2. * Egam * xPM);
305 W = Winfty * (1. + Ds2 * del / Mmuon) / (1. + sBZ * del);
306 G4double xxp = 1. - 4. / 3. * xPM; // the main xPlus dependence
307 result = (xxp > 0.) ? xxp * G4Log(W) * LogWmaxInv : 0.0;
308 if (result > 1.) {
309 G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:"
310 << " in dSigxPlusGen, result=" << result << " > 1" << G4endl;
311 }
312 ++nn;
313 if(nn >= nmax) { break; }
314 }
315 // Loop checking, 07-Aug-2015, Vladimir Ivanchenko
316 while (G4UniformRand() > result);
317 }
318
319 // now generate the angular variables via the auxilary variables t,psi,rho
320 G4double t;
321 G4double psi;
322 G4double rho;
323
324 G4double a3 = (GammaMuonInv / (2. * xPM));
325 G4double a33 = a3 * a3;
326 G4double f1;
327 G4double b1 = 1./(4.*C1Num2);
328 G4double b3 = b1*b1*b1;
329 G4double a21 = a33 + b1;
330
331 G4double f1_max=-(1.-xPM)*(2.*b1+(a21+a33)*G4Log(a33/a21))/(2*b3);
332
333 G4double thetaPlus,thetaMinus,phiHalf; // final angular variables
334 nn = 0;
335 // t, psi, rho generation start (while angle < pi)
336 do {
337 //generate t by the rejection method
338 do {
339 ++nn;
340 t=G4UniformRand();
341 G4double a34=a33/(t*t);
342 G4double a22 = a34 + b1;
343 if(std::abs(b1)<0.0001*a34) {
344 // special case of a34=a22 because of logarithm accuracy
345 f1=(1.-2.*xPM+4.*xPM*t*(1.-t))/(12.*a34*a34*a34*a34);
346 }
347 else {
348 f1=-(1.-2.*xPM+4.*xPM*t*(1.-t))*(2.*b1+(a22+a34)*G4Log(a34/a22))/(2*b3);
349 }
350 if (f1 < 0.0 || f1 > f1_max) { // should never happend
351 G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:"
352 << "outside allowed range f1=" << f1
353 << " is set to zero, a34 = "<< a34 << " a22 = "<<a22<<"."
354 << G4endl;
355 f1 = 0.0;
356 }
357 if(nn > nmax) { break; }
358 // Loop checking, 07-Aug-2015, Vladimir Ivanchenko
359 } while ( G4UniformRand()*f1_max > f1);
360 // generate psi by the rejection method
361 G4double f2_max=1.-2.*xPM*(1.-4.*t*(1.-t));
362 // long version
363 G4double f2;
364 do {
365 ++nn;
366 psi=twopi*G4UniformRand();
367 f2=1.-2.*xPM+4.*xPM*t*(1.-t)*(1.+std::cos(2.*psi));
368 if(f2<0 || f2> f2_max) { // should never happend
369 G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:"
370 << "outside allowed range f2=" << f2 << " is set to zero" << G4endl;
371 f2 = 0.0;
372 }
373 if(nn >= nmax) { break; }
374 // Loop checking, 07-Aug-2015, Vladimir Ivanchenko
375 } while ( G4UniformRand()*f2_max > f2);
376
377 // generate rho by direct transformation
378 G4double C2Term1=GammaMuonInv/(2.*xPM*t);
379 G4double C22 = C2Term1*C2Term1+C2Term2*C2Term2;
380 G4double C2=4.*C22*C22/std::sqrt(xPM);
381 G4double rhomax=(1./t-1.)*1.9/A027;
382 G4double beta=G4Log( (C2+rhomax*rhomax*rhomax*rhomax)/C2 );
383 rho=G4Exp(G4Log(C2 *( G4Exp(beta*G4UniformRand())-1. ))*0.25);
384
385 //now get from t and psi the kinematical variables
386 G4double u=std::sqrt(1./t-1.);
387 G4double xiHalf=0.5*rho*std::cos(psi);
388 phiHalf=0.5*rho/u*std::sin(psi);
389
390 thetaPlus =GammaMuonInv*(u+xiHalf)/xPlus;
391 thetaMinus=GammaMuonInv*(u-xiHalf)/xMinus;
392
393 // protection against infinite loop
394 if(nn > nmax) {
395 if(std::abs(thetaPlus)>pi) { thetaPlus = 0.0; }
396 if(std::abs(thetaMinus)>pi) { thetaMinus = 0.0; }
397 }
398
399 // Loop checking, 07-Aug-2015, Vladimir Ivanchenko
400 } while ( std::abs(thetaPlus)>pi || std::abs(thetaMinus) >pi);
401
402 // now construct the vectors
403 // azimuthal symmetry, take phi0 at random between 0 and 2 pi
404 G4double phi0=twopi*G4UniformRand();
405 G4double EPlus=xPlus*Egam;
406 G4double EMinus=xMinus*Egam;
407
408 // mu+ mu- directions for gamma in z-direction
409 G4ThreeVector MuPlusDirection ( std::sin(thetaPlus) *std::cos(phi0+phiHalf),
410 std::sin(thetaPlus) *std::sin(phi0+phiHalf), std::cos(thetaPlus) );
411 G4ThreeVector MuMinusDirection (-std::sin(thetaMinus)*std::cos(phi0-phiHalf),
412 -std::sin(thetaMinus) *std::sin(phi0-phiHalf), std::cos(thetaMinus) );
413 // rotate to actual gamma direction
414 MuPlusDirection.rotateUz(GammaDirection);
415 MuMinusDirection.rotateUz(GammaDirection);
416
417 // create G4DynamicParticle object for the particle1
418 auto aParticle1 = new G4DynamicParticle(theMuonPlus, MuPlusDirection, EPlus - Mmuon);
419 aParticleChange.AddSecondary(aParticle1);
420 // create G4DynamicParticle object for the particle2
421 auto aParticle2 = new G4DynamicParticle(theMuonMinus, MuMinusDirection, EMinus - Mmuon);
422 aParticleChange.AddSecondary(aParticle2);
423 // Reset NbOfInteractionLengthLeft and return aParticleChange
424 return G4VDiscreteProcess::PostStepDoIt( aTrack, aStep );
425}
@ fStopAndKill
int G4int
Definition G4Types.hh:85
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
const double C2
#define G4UniformRand()
Definition Randomize.hh:52
void SampleSecondaries(std::vector< G4DynamicParticle * > *fvect, const G4MaterialCutsCouple *couple, const G4DynamicParticle *aDynamicGamma, G4double, G4double) override
const G4ThreeVector & GetMomentumDirection() const
void AddSecondary(G4Track *aSecondary)
void Initialize(const G4Track &) override
void ProposeEnergy(G4double finalEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
void ProposeTrackStatus(G4TrackStatus status)
G4ParticleChange aParticleChange
#define W
Definition crc32.c:85

◆ PrintInfoDefinition()

void G4GammaConversionToMuons::PrintInfoDefinition ( )

Definition at line 462 of file G4GammaConversionToMuons.cc.

463{
464 G4String comments = "gamma->mu+mu- Bethe Heitler process, SubType= ";
465 G4cout << G4endl << GetProcessName() << ": " << comments << GetProcessSubType() << G4endl;
466 G4cout << " good cross section parametrization from "
467 << G4BestUnit(LowestEnergyLimit, "Energy") << " to " << HighestEnergyLimit / GeV
468 << " GeV for all Z." << G4endl;
469 G4cout << " cross section factor: " << CrossSecFactor << G4endl;
470}
#define G4BestUnit(a, b)
G4int GetProcessSubType() const
const G4String & GetProcessName() const

Referenced by BuildPhysicsTable().

◆ SetCrossSecFactor()

void G4GammaConversionToMuons::SetCrossSecFactor ( G4double fac)

Definition at line 211 of file G4GammaConversionToMuons.cc.

213{
214 if (fac < 0.0) return;
215 CrossSecFactor = fac;
216 if (verboseLevel > 1) {
217 G4cout << "The cross section for GammaConversionToMuons is artificially "
218 << "increased by the CrossSecFactor=" << CrossSecFactor << G4endl;
219 }
220}
G4int verboseLevel

Referenced by G4EmExtraPhysics::ConstructProcess().


The documentation for this class was generated from the following files: