Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4KaonMinusAbsorptionAtRest.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// Author: Christian V"olcker ([email protected]),
27//
28// Creation date: November 1997
29//
30// Testfile: ../G4KaonMinusAbsorptionAtRestTest.cc
31//
32// Modifications:
33// Maria Grazia Pia September 1998
34// Various bug fixes, eliminated several memory leaks
35//
36// -------------------------------------------------------------------
37
38
40
41#include "G4StopDeexcitation.hh"
47
48G4KaonMinusAbsorptionAtRest::G4KaonMinusAbsorptionAtRest(const G4String& processName,
49 G4ProcessType aType ) :
50 G4VRestProcess (processName, aType)
51{
52 G4HadronicDeprecate("G4KaonMinusAbsorptionAtRest");
53 if (verboseLevel>0) {
54 G4cout << GetProcessName() << " is created "<< G4endl;
55 }
57
58 // see Cohn et al, PLB27(1968) 527;
59 // Davis et al, PLB1(1967) 434;
60
61 pionAbsorptionRate = 0.07;
62
63 // see VanderVelde-Wilquet et al, Nuov.Cim.39A(1978)538;
64 // see VanderVelde-Wilquet et al, Nuov.Cim.38A(1977)178;
65 // see VanderVelde-Wilquet et al, Nucl.Phys.A241(1975)511;
66 // primary production rates ( for absorption on Carbon)
67 // .. other elements are extrapolated by the halo factor.
68
69 rateLambdaZeroPiZero = 0.052;
70 rateSigmaMinusPiPlus = 0.199;
71 rateSigmaPlusPiMinus = 0.446;
72 rateSigmaZeroPiZero = 0.303;
73 rateLambdaZeroPiMinus = 0.568;
74 rateSigmaZeroPiMinus = 0.216;
75 rateSigmaMinusPiZero = 0.216;
76
77 // for sigma- p -> lambda n
78 // sigma+ n -> lambda p
79 // sigma- n -> lambda
80 // all values compatible with 0.55 same literature as above.
81
82 sigmaPlusLambdaConversionRate = 0.55;
83 sigmaMinusLambdaConversionRate = 0.55;
84 sigmaZeroLambdaConversionRate = 0.55;
85
87}
88
89
91{
93}
94
96{
98}
99
101{
103}
104
106(const G4Track& track, const G4Step& )
107{
108 stoppedHadron = track.GetDynamicParticle();
109
110 // Check applicability
111
112 if (!IsApplicable(*(stoppedHadron->GetDefinition())))
113 {
114 G4cerr <<"G4KaonMinusAbsorptionAtRest:ERROR, particle must be a Kaon!" <<G4endl;
115 return 0;
116 }
117
118 G4Material* material;
119 material = track.GetMaterial();
120 nucleus = 0;
121 do
122 {
123 // Select the nucleus, get nucleon
124 nucleus = new G4Nucleus(material);
125 if (nucleus->GetA_asInt() < 1.5)
126 {
127 delete nucleus;
128 nucleus = 0;
129 }
130 } while(nucleus == 0);
131
132 G4double Z = nucleus->GetZ_asInt();
133 G4double A = nucleus->GetA_asInt();
134
135 // Do the interaction with the nucleon
136 G4DynamicParticleVector* absorptionProducts = KaonNucleonReaction();
137
138 //A.R. 26-Jul-2012 Coverity fix
139 if ( ! absorptionProducts ) {
140 G4Exception("G4KaonMinusAbsorptionAtRest::AtRestDoIt()", "HAD_STOP_0001",
141 FatalException, "NULL absorptionProducts");
142 return 0;
143 }
144
145 // Secondary interactions
146
147 G4DynamicParticle* thePion;
148 unsigned int i;
149 for(i = 0; i < absorptionProducts->size(); i++)
150 {
151 thePion = (*absorptionProducts)[i];
152 if (thePion->GetDefinition() == G4PionMinus::PionMinus()
153 || thePion->GetDefinition() == G4PionPlus::PionPlus()
154 || thePion->GetDefinition() == G4PionZero::PionZero())
155 {
156 if (AbsorbPionByNucleus(thePion))
157 {
158 absorptionProducts->erase(absorptionProducts->begin()+i);
159 i--;
160 delete thePion;
161 if (verboseLevel > 1)
162 G4cout << "G4KaonMinusAbsorption::AtRestDoIt: Pion absorbed in Nucleus"
163 << G4endl;
164 }
165 }
166 }
167
168 G4DynamicParticle* theSigma;
169 G4DynamicParticle* theLambda;
170 for (i = 0; i < absorptionProducts->size(); i++)
171 {
172 theSigma = (*absorptionProducts)[i];
173 if (theSigma->GetDefinition() == G4SigmaMinus::SigmaMinus()
174 || theSigma->GetDefinition() == G4SigmaPlus::SigmaPlus()
175 || theSigma->GetDefinition() == G4SigmaZero::SigmaZero())
176 {
177 theLambda = SigmaLambdaConversion(theSigma);
178 if (theLambda != 0){
179 absorptionProducts->erase(absorptionProducts->begin()+i);
180 i--;
181 delete theSigma;
182 absorptionProducts->push_back(theLambda);
183
184 if (verboseLevel > 1)
185 G4cout << "G4KaonMinusAbsorption::AtRestDoIt: SigmaLambdaConversion Done"
186 << G4endl;
187 }
188 }
189 }
190
191 // Nucleus deexcitation
192
193 G4double productEnergy = 0.;
194 G4ThreeVector pProducts(0.,0.,0.);
195
196 unsigned int nAbsorptionProducts = 0;
197 if (absorptionProducts != 0) nAbsorptionProducts = absorptionProducts->size();
198
199 for ( i = 0; i<nAbsorptionProducts; i++)
200 {
201 pProducts += (*absorptionProducts)[i]->GetMomentum();
202 productEnergy += (*absorptionProducts)[i]->GetKineticEnergy();
203 }
204
205 G4double newZ = nucleus->GetZ_asInt();
206 G4double newA = nucleus->GetA_asInt();
207
208 G4double bDiff = G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(A),static_cast<G4int>(Z)) -
209 G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(newA), static_cast<G4int>(newZ));
210
211 G4StopDeexcitationAlgorithm* nucleusAlgorithm = new G4StopTheoDeexcitation();
212 G4StopDeexcitation stopDeexcitation(nucleusAlgorithm);
213
214 nucleus->AddExcitationEnergy(bDiff);
215
216 // returns excitation energy for the moment ..
217 G4double energyDeposit = nucleus->GetEnergyDeposit();
218 if (verboseLevel>0)
219 {
220 G4cout << " -- KaonAtRest -- excitation = "
221 << energyDeposit
222 << ", pNucleus = "
223 << pProducts
224 << ", A: "
225 << A
226 << ", "
227 << newA
228 << ", Z: "
229 << Z
230 << ", "
231 << newZ
232 << G4endl;
233 }
234
235 if (energyDeposit < 0.)
236 G4Exception("G4KaonMinusAbsorptionAtRest::AtRestDoIt()", "HAD_STOP_0002",
237 FatalException, "Excitation energy < 0");
238 delete nucleus;
239
240 G4ReactionProductVector* fragmentationProducts = stopDeexcitation.DoBreakUp(newA,newZ,energyDeposit,pProducts);
241
242 unsigned int nFragmentationProducts = 0;
243 if (fragmentationProducts != 0) nFragmentationProducts = fragmentationProducts->size();
244
245 //Initialize ParticleChange
247 aParticleChange.SetNumberOfSecondaries(G4int(nAbsorptionProducts+nFragmentationProducts) );
248
249 // update List of alive particles. put energy deposit at the right place ...
250 for (i = 0; i < nAbsorptionProducts; i++)
251 {aParticleChange.AddSecondary((*absorptionProducts)[i]); }
252 if (absorptionProducts != 0) delete absorptionProducts;
253
254// for (i = 0; i < nFragmentationProducts; i++)
255// { aParticleChange.AddSecondary(fragmentationProducts->at(i)); }
256 for(i=0; i<nFragmentationProducts; i++)
257 {
258 G4DynamicParticle * aNew =
259 new G4DynamicParticle((*fragmentationProducts)[i]->GetDefinition(),
260 (*fragmentationProducts)[i]->GetTotalEnergy(),
261 (*fragmentationProducts)[i]->GetMomentum());
262 G4double newTime = aParticleChange.GetGlobalTime((*fragmentationProducts)[i]->GetFormationTime());
263 aParticleChange.AddSecondary(aNew, newTime);
264 delete (*fragmentationProducts)[i];
265 }
266 if (fragmentationProducts != 0) delete fragmentationProducts;
267
268 // finally ...
269 aParticleChange.ProposeTrackStatus(fStopAndKill); // Kill the incident Kaon
270 return &aParticleChange;
271}
272
273
274G4DynamicParticle G4KaonMinusAbsorptionAtRest::GetAbsorbingNucleon()
275{
276 G4DynamicParticle aNucleon;
277
278 // Get nucleon definition, based on Z,N of current Nucleus
279 aNucleon.SetDefinition(SelectAbsorbingNucleon());
280
281 // Fermi momentum distribution in three dimensions
282 G4ThreeVector pFermi = nucleus->GetFermiMomentum();
283 aNucleon.SetMomentum(pFermi);
284
285 return aNucleon;
286}
287
288G4ParticleDefinition* G4KaonMinusAbsorptionAtRest::SelectAbsorbingNucleon()
289{
290 // (Ch. Voelcker) extended from ReturnTargetParticle():
291 // Choose a proton or a neutron as the absorbing particle,
292 // taking weight into account!
293 // Update nucleon's atomic numbers.
294
295 G4ParticleDefinition* absorbingParticleDef;
296
297 G4double ranflat = G4UniformRand();
298
299 G4double myZ = nucleus->GetZ_asInt(); // number of protons
300 G4double myN = nucleus->GetA_asInt(); // number of nucleons (not neutrons!!)
301
302 // See VanderVelde-Wilquet et al, Nuov.Cim.39A(1978)538;
303 G4double carbonRatioNP = 0.18; // (Rn/Rp)c, see page 544
304
305 G4double neutronProtonRatio = NeutronHaloFactor(myZ,myN)*carbonRatioNP*(myN-myZ)/myZ;
306 G4double protonProbability = 1./(1.+neutronProtonRatio);
307
308 if ( ranflat < protonProbability )
309 {
310 absorbingParticleDef = G4Proton::Proton();
311 myZ-= 1.;
312 }
313 else
314 { absorbingParticleDef = G4Neutron::Neutron(); }
315
316 myN -= 1.;
317 nucleus->SetParameters(myN,myZ);
318 return absorbingParticleDef;
319}
320
321
322G4double G4KaonMinusAbsorptionAtRest::NeutronHaloFactor(G4double Z, G4double N)
323{
324 // this function should take care of the probability for absorption
325 // on neutrons, depending on number of protons Z and number of neutrons N-Z
326 // parametrisation from fit to
327 // VanderVelde-Wilquet et al, Nuov.Cim.39A(1978)538;
328 //
329
330 if (Z == 1.) return 1.389; // deuterium
331 else if (Z == 2.) return 1.78; // helium
332 else if (Z == 10.) return 0.66; // neon
333 else
334 return 0.6742+(N-Z)*0.06524;
335}
336
337
338G4DynamicParticleVector* G4KaonMinusAbsorptionAtRest::KaonNucleonReaction()
339{
341
342 G4double ranflat = G4UniformRand();
343 G4double prob = 0;
344
345 G4ParticleDefinition* producedBaryonDef;
346 G4ParticleDefinition* producedMesonDef;
347
348 G4double iniZ = nucleus->GetZ_asInt();
349 G4double iniA = nucleus->GetA_asInt();
350
351 G4DynamicParticle aNucleon = GetAbsorbingNucleon();
352
353 // DHW 15 may 2011: unused: G4double nucleonMass;
354
355 if (aNucleon.GetDefinition() == G4Proton::Proton())
356 {
357 // DHW 15 May 2011: unused: nucleonMass = proton_mass_c2+electron_mass_c2;
358 if ( (prob += rateLambdaZeroPiZero) > ranflat)
359 { // lambda pi0
360 producedBaryonDef = G4Lambda::Lambda();
361 producedMesonDef = G4PionZero::PionZero();
362 }
363 else if ((prob += rateSigmaPlusPiMinus) > ranflat)
364 { // sigma+ pi-
365 producedBaryonDef = G4SigmaPlus::SigmaPlus();
366 producedMesonDef = G4PionMinus::PionMinus();
367 }
368 else if ((prob += rateSigmaMinusPiPlus) > ranflat)
369 { // sigma- pi+
370 producedBaryonDef = G4SigmaMinus::SigmaMinus();
371 producedMesonDef = G4PionPlus::PionPlus();
372 }
373 else
374 { // sigma0 pi0
375 producedBaryonDef = G4SigmaZero::SigmaZero();
376 producedMesonDef = G4PionZero::PionZero();
377 }
378 }
379 else if (aNucleon.GetDefinition() == G4Neutron::Neutron())
380 {
381 // DHW 15 May 2011: unused: nucleonMass = neutron_mass_c2;
382 if ((prob += rateLambdaZeroPiMinus) > ranflat)
383 { // lambda pi-
384 producedBaryonDef = G4Lambda::Lambda();
385 producedMesonDef = G4PionMinus::PionMinus();
386 }
387 else if ((prob += rateSigmaZeroPiMinus) > ranflat)
388 { // sigma0 pi-
389 producedBaryonDef = G4SigmaZero::SigmaZero();
390 producedMesonDef = G4PionMinus::PionMinus();
391 }
392 else
393 { // sigma- pi0
394 producedBaryonDef = G4SigmaMinus::SigmaMinus();
395 producedMesonDef = G4PionZero::PionZero();
396 }
397 }
398 else
399 {
400 if (verboseLevel>0)
401 {
402 G4cout
403 << "G4KaonMinusAbsorption::KaonNucleonReaction: "
404 << aNucleon.GetDefinition()->GetParticleName()
405 << " is not a good nucleon - check G4Nucleus::ReturnTargetParticle()!"
406 << G4endl;
407 }
408
409 //A.R. 26-Jul-2012 Coverity fix
410 if ( products ) delete products;
411
412 return 0;
413 }
414
415 G4double newZ = nucleus->GetZ_asInt();
416 G4double newA = nucleus->GetA_asInt();
417
418 // Modify the Kaon mass to take nuclear binding energy into account
419 // .. using mas formula ..
420 // .. using mass table ..
421 // equivalent to -'initialBindingEnergy+nucleus.GetBindingEnergy' !
422
423 G4double nucleonBindingEnergy =
424 -G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(iniA), static_cast<G4int>(iniZ) )
425 +G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(newA), static_cast<G4int>(newZ) );
426
427 G4DynamicParticle modifiedHadron = (*stoppedHadron);
428 modifiedHadron.SetMass(stoppedHadron->GetMass() + nucleonBindingEnergy);
429
430 // Setup outgoing dynamic particles
431 G4ThreeVector dummy(0.,0.,0.);
432 G4DynamicParticle* producedBaryon = new G4DynamicParticle(producedBaryonDef,dummy);
433 G4DynamicParticle* producedMeson = new G4DynamicParticle(producedMesonDef,dummy);
434
435 // Produce the secondary particles in a twobody process:
436 G4ReactionKinematics theReactionKinematics;
437 theReactionKinematics.TwoBodyScattering( &modifiedHadron, &aNucleon,
438 producedBaryon, producedMeson);
439
440 products->push_back(producedBaryon);
441 products->push_back(producedMeson);
442
443 if (verboseLevel > 1)
444 {
445 G4cout
446 << "G4KaonMinusAbsorption::KaonNucleonReaction: Number of primaries = "
447 << products->size()
448 << ": " <<producedMesonDef->GetParticleName()
449 << ", " <<producedBaryonDef->GetParticleName() << G4endl;
450 }
451
452 return products;
453}
454
455
456G4bool G4KaonMinusAbsorptionAtRest::AbsorbPionByNucleus(G4DynamicParticle* aPion)
457{
458 // Needs some more investigation!
459
460 G4double ranflat = G4UniformRand();
461
462 if (ranflat < pionAbsorptionRate){
463 // Add pion energy to ExcitationEnergy and NucleusMomentum
464 nucleus->AddExcitationEnergy(aPion->GetTotalEnergy());
465 nucleus->AddMomentum(aPion->GetMomentum());
466 }
467
468 return (ranflat < pionAbsorptionRate);
469}
470
471G4DynamicParticle* G4KaonMinusAbsorptionAtRest::SigmaLambdaConversion(G4DynamicParticle* aSigma)
472{
473 G4double ranflat = G4UniformRand();
474 G4double sigmaLambdaConversionRate;
475
476 G4double A = nucleus->GetA_asInt();
477 G4double Z = nucleus->GetZ_asInt();
478
479 G4double newZ = Z;
480 // DHW 15 May 2011: unused: G4double nucleonMassDifference = 0;
481
482 G4ParticleDefinition* inNucleonDef=NULL;
483 G4ParticleDefinition* outNucleonDef=NULL;
484
485 // Decide which sigma
486 switch((int) aSigma->GetDefinition()->GetPDGCharge()) {
487
488 case 1:
489 sigmaLambdaConversionRate = sigmaPlusLambdaConversionRate;
490 inNucleonDef = G4Neutron::Neutron();
491 outNucleonDef = G4Proton::Proton();
492 newZ = Z+1;
493 // DHW 15 May 2011: unused: nucleonMassDifference = neutron_mass_c2 - proton_mass_c2-electron_mass_c2;
494 break;
495
496 case -1:
497 sigmaLambdaConversionRate = sigmaMinusLambdaConversionRate;
498 inNucleonDef = G4Proton::Proton();
499 outNucleonDef = G4Neutron::Neutron();
500 newZ = Z-1;
501 // DHW 15 May 2011: unused: nucleonMassDifference = proton_mass_c2+electron_mass_c2 - neutron_mass_c2;
502 break;
503
504 case 0:
505 sigmaLambdaConversionRate = sigmaZeroLambdaConversionRate;
506 // The 'outgoing' nucleon is just virtual, to keep the energy-momentum
507 // balance and will not appear in the ParticleChange. Therefore no need
508 // choose between neutron and proton here!
509 inNucleonDef = G4Neutron::Neutron();
510 outNucleonDef = G4Neutron::Neutron();
511 break;
512
513 default:
514 sigmaLambdaConversionRate = 0.;
515 // Add dummy particles to avoid possibility of passing NULL pointers
516 inNucleonDef = G4Proton::Proton();
517 outNucleonDef = G4Proton::Proton();
518 }
519
520 if (ranflat >= sigmaLambdaConversionRate) return 0;
521
522 G4ThreeVector dummy(0.,0.,0.);
523
524 // Fermi momentum distribution in three dimensions
525 G4ThreeVector momentum = nucleus->GetFermiMomentum();
526
528
529 G4DynamicParticle inNucleon(inNucleonDef,momentum);
530 G4DynamicParticle outNucleon(outNucleonDef,dummy);
531 G4DynamicParticle* outLambda = new G4DynamicParticle(lambdaDef,dummy);
532
533 G4ReactionKinematics theReactionKinematics;
534
535 // Now do the twobody scattering
536 theReactionKinematics.TwoBodyScattering(aSigma, &inNucleon,
537 &outNucleon, outLambda);
538
539 // Binding energy of nucleus has changed. This will change the
540 // ExcitationEnergy.
541 // .. using mass formula ..
542 // .. using mass table ..
543 // equivalent to -'initialBindingEnergy+nucleus.GetBindingEnergy' !
544
545 // Add energy and momentum to nucleus, change Z,A
546 nucleus->AddExcitationEnergy(outNucleon.GetKineticEnergy());
547 nucleus->AddMomentum(outNucleon.GetMomentum());
548 nucleus->SetParameters(A,newZ);
549
550 // The calling routine is responsible to delete the sigma!!
551 return outLambda;
552}
553
554
555
std::vector< G4DynamicParticle * > G4DynamicParticleVector
@ FatalException
#define G4HadronicDeprecate(name)
@ fHadronAtRest
G4ProcessType
std::vector< G4ReactionProduct * > G4ReactionProductVector
@ fStopAndKill
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:53
G4double GetMass() const
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetMass(G4double mass)
G4ParticleDefinition * GetDefinition() const
G4double GetTotalEnergy() const
void SetMomentum(const G4ThreeVector &momentum)
G4ThreeVector GetMomentum() const
void DeRegisterExtraProcess(G4VProcess *)
void RegisterExtraProcess(G4VProcess *)
void RegisterParticleForExtraProcess(G4VProcess *, const G4ParticleDefinition *)
static G4HadronicProcessStore * Instance()
void PrintInfo(const G4ParticleDefinition *)
void BuildPhysicsTable(const G4ParticleDefinition &)
G4bool IsApplicable(const G4ParticleDefinition &particle)
G4VParticleChange * AtRestDoIt(const G4Track &aTrack, const G4Step &aStep)
void PreparePhysicsTable(const G4ParticleDefinition &)
static G4Lambda * Lambda()
Definition: G4Lambda.cc:108
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
static G4double GetBindingEnergy(const G4int A, const G4int Z)
void AddExcitationEnergy(G4double anEnergy)
Definition: G4Nucleus.cc:435
G4int GetA_asInt() const
Definition: G4Nucleus.hh:109
G4int GetZ_asInt() const
Definition: G4Nucleus.hh:115
G4double GetEnergyDeposit()
Definition: G4Nucleus.hh:184
void SetParameters(const G4double A, const G4double Z)
Definition: G4Nucleus.cc:198
void AddMomentum(const G4ThreeVector aMomentum)
Definition: G4Nucleus.cc:430
G4ThreeVector GetFermiMomentum()
Definition: G4Nucleus.cc:398
void AddSecondary(G4Track *aSecondary)
virtual void Initialize(const G4Track &)
G4double GetGlobalTime(G4double timeDelay=0.0) const
G4double GetPDGCharge() const
const G4String & GetParticleName() const
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
static G4PionZero * PionZero()
Definition: G4PionZero.cc:104
static G4Proton * Proton()
Definition: G4Proton.cc:93
void TwoBodyScattering(const G4DynamicParticle *pIn1, const G4DynamicParticle *pIn2, G4DynamicParticle *pOut1, G4DynamicParticle *pOut2)
static G4SigmaMinus * SigmaMinus()
static G4SigmaPlus * SigmaPlus()
Definition: G4SigmaPlus.cc:108
static G4SigmaZero * SigmaZero()
Definition: G4SigmaZero.cc:99
Definition: G4Step.hh:78
G4ReactionProductVector * DoBreakUp(G4double A, G4double Z, G4double excitation, const G4ThreeVector &p) const
G4Material * GetMaterial() const
const G4DynamicParticle * GetDynamicParticle() const
void ProposeTrackStatus(G4TrackStatus status)
void SetNumberOfSecondaries(G4int totSecondaries)
G4ParticleChange aParticleChange
Definition: G4VProcess.hh:289
G4int verboseLevel
Definition: G4VProcess.hh:368
void SetProcessSubType(G4int)
Definition: G4VProcess.hh:403
const G4String & GetProcessName() const
Definition: G4VProcess.hh:379
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41