Geant4 11.3.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4GenericBiasingPhysics.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//
27//---------------------------------------------------------------------------
28//
29// ClassName: G4GenericBiasingPhysics
30//
31// Author: M. Verderi (Sept.10.2013)
32// Modified:
33// 07/11/2014, M. Verderi : fix bug of PhysicsBias(...) which was not taking
34// into account the vector of processes passed, but biasing all.
35//
36//----------------------------------------------------------------------------
37//
38//
39//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
40//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
41
43
45#include "G4ProcessManager.hh"
46
47#include "G4BiasingHelper.hh"
50
51
52// factory
54//
56
57//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
58
61 fPhysBiasAllCharged(false), fNonPhysBiasAllCharged(false),
62 fPhysBiasAllChargedISL(false), fNonPhysBiasAllChargedISL(false),
63 fPhysBiasAllNeutral(false), fNonPhysBiasAllNeutral(false),
64 fPhysBiasAllNeutralISL(false), fNonPhysBiasAllNeutralISL(false),
65 fVerbose(false)
66{;}
67
68//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
69
72
73
74//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
75
77{
78 fBiasedParticles.push_back(particleName);
79 fBiasedProcesses.emplace_back();
80 fBiasAllProcesses.push_back(true);
81}
82
83//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
84
85void G4GenericBiasingPhysics::PhysicsBias(const G4String& particleName, const std::vector< G4String >& processNames)
86{
87 fBiasedParticles.push_back(particleName);
88 fBiasedProcesses.push_back(processNames);
89 fBiasAllProcesses.push_back(false);
90}
91
92//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
93
95{
96 fNonPhysBiasedParticles.push_back(particleName);
97}
98
99//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
100
102{
103 PhysicsBias(particleName);
104 NonPhysicsBias(particleName);
105}
106
107//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
108
109void G4GenericBiasingPhysics::Bias(const G4String& particleName, const std::vector< G4String >& processNames)
110{
111 PhysicsBias(particleName, processNames);
112 NonPhysicsBias(particleName);
113}
114
115//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
116void G4GenericBiasingPhysics::PhysicsBiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle )
117{
118 if ( PDGlow > PDGhigh ) G4cout << " G4GenericBiasingPhysics::PhysicsBiasAddPDGRange(...) : PDGlow > PDGhigh, call ignored." << G4endl;
119 fPhysBiasByPDGRangeLow .push_back( PDGlow );
120 fPhysBiasByPDGRangeHigh.push_back( PDGhigh );
121 if ( includeAntiParticle )
122 {
123 fPhysBiasByPDGRangeLow .push_back( -PDGhigh );
124 fPhysBiasByPDGRangeHigh.push_back( -PDGlow );
125 }
126}
127
128//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
129void G4GenericBiasingPhysics::NonPhysicsBiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle )
130{
131 if ( PDGlow > PDGhigh ) G4cout << " G4GenericBiasingPhysics::NonPhysicsBiasAddPDGRange(...) : PDGlow > PDGhigh, call ignored." << G4endl;
132 fNonPhysBiasByPDGRangeLow .push_back( PDGlow );
133 fNonPhysBiasByPDGRangeHigh.push_back( PDGhigh );
134 if ( includeAntiParticle )
135 {
136 fNonPhysBiasByPDGRangeLow .push_back( -PDGhigh );
137 fNonPhysBiasByPDGRangeHigh.push_back( -PDGlow );
138 }
139}
140
141
142//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
143void G4GenericBiasingPhysics::BiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle )
144{
145 if ( PDGlow > PDGhigh ) G4cout << " G4GenericBiasingPhysics::BiasAddPDGRange(...) : PDGlow > PDGhigh, call ignored." << G4endl;
146 PhysicsBiasAddPDGRange ( PDGlow, PDGhigh, includeAntiParticle );
147 NonPhysicsBiasAddPDGRange( PDGlow, PDGhigh, includeAntiParticle );
148}
149
151{
152 fPhysBiasAllCharged = true;
153 fPhysBiasAllChargedISL = includeShortLived;
154}
156{
157 fNonPhysBiasAllCharged = true;
158 fNonPhysBiasAllChargedISL = includeShortLived;
159}
161{
162 fPhysBiasAllCharged = true;
163 fNonPhysBiasAllCharged = true;
164 fPhysBiasAllChargedISL = includeShortLived;
165 fNonPhysBiasAllChargedISL = includeShortLived;
166}
168{
169 fPhysBiasAllNeutral = true;
170 fPhysBiasAllNeutralISL = includeShortLived;
171}
173{
174 fNonPhysBiasAllNeutral = true;
175 fNonPhysBiasAllNeutralISL = includeShortLived;
176}
178{
179 fPhysBiasAllNeutral = true;
180 fNonPhysBiasAllNeutral = true;
181 fPhysBiasAllNeutralISL = includeShortLived;
182 fNonPhysBiasAllNeutralISL = includeShortLived;
183}
184
185
186void G4GenericBiasingPhysics::AddParallelGeometry( const G4String& particleName, const G4String& parallelGeometryName )
187{
188 // -- add particle, caring of possible duplication:
189 G4bool isKnown = false;
190 for ( G4String knownParticle : fParticlesWithParallelGeometries )
191 {
192 if ( knownParticle == particleName )
193 {
194 isKnown = true;
195 break;
196 }
197 }
198
199 // -- add the geometry, caring for possible duplication of this geometry, for this particle:
200 if ( !isKnown ) fParticlesWithParallelGeometries.push_back( particleName );
201 std::vector< G4String >& geometries = fParallelGeometriesForParticle[particleName];
202
203 isKnown = false;
204 for ( G4String knownGeometry : geometries )
205 {
206 if ( knownGeometry == parallelGeometryName )
207 {
208 isKnown = true;
209 break;
210 }
211 }
212 if ( !isKnown ) geometries.push_back( parallelGeometryName );
213
214}
215
216void G4GenericBiasingPhysics::AddParallelGeometry( const G4String& particleName, const std::vector< G4String >& parallelGeometryNames )
217{
218 for ( G4String geometry : parallelGeometryNames ) AddParallelGeometry( particleName, geometry );
219}
220
221void G4GenericBiasingPhysics::AddParallelGeometry( G4int PDGlow, G4int PDGhigh, const G4String& parallelGeometryName , G4bool includeAntiParticle )
222{
223 if ( PDGlow > PDGhigh )
224 {
225 G4cout << "G4GenericBiasingPhysics::AddParallelGeometry( G4int PDGlow, G4int PDGhigh, const G4String& parallelGeometryName , G4bool includeAntiParticle = true ), PDGlow > PDGhigh : call ignored" << G4endl;
226 return;
227 }
228
229 fPDGlowParallelGeometries .push_back( PDGlow );
230 fPDGhighParallelGeometries.push_back( PDGhigh );
231 G4int rangeIndex = G4int(fPDGlowParallelGeometries.size() - 1);
232 fPDGrangeParallelGeometries[rangeIndex].push_back( parallelGeometryName );
233
234 if ( includeAntiParticle )
235 {
236 fPDGlowParallelGeometries .push_back( -PDGhigh );
237 fPDGhighParallelGeometries.push_back( -PDGlow );
238 rangeIndex = G4int(fPDGlowParallelGeometries.size() - 1);
239 fPDGrangeParallelGeometries[rangeIndex].push_back( parallelGeometryName );
240 }
241
242}
243
244void G4GenericBiasingPhysics::AddParallelGeometry( G4int PDGlow, G4int PDGhigh, const std::vector< G4String >& parallelGeometryNames, G4bool includeAntiParticle )
245{
246 if ( PDGlow > PDGhigh )
247 {
248 G4cout << "G4GenericBiasingPhysics::AddParallelGeometry( G4int PDGlow, G4int PDGhigh, const std::vector< G4String >& parallelGeometryNames, G4bool includeAntiParticle = true ), PDGlow > PDGhigh : call ignored" << G4endl;
249 return;
250 }
251
252 for ( G4String geometry : parallelGeometryNames ) AddParallelGeometry( PDGlow, PDGhigh, geometry, includeAntiParticle );
253}
254
255void G4GenericBiasingPhysics::AddParallelGeometryAllCharged( const G4String& parallelGeometryName , G4bool includeShortLived )
256{
257 G4bool isKnown = false;
258 for ( G4String geometry : fParallelGeometriesForCharged )
259 {
260 if ( geometry == parallelGeometryName )
261 {
262 isKnown = true;
263 break;
264 }
265 }
266 if ( !isKnown )
267 {
268 fParallelGeometriesForCharged .push_back( parallelGeometryName );
269 fAllChargedParallelGeometriesISL.push_back( includeShortLived );
270 }
271}
272
273void G4GenericBiasingPhysics::AddParallelGeometryAllCharged( const std::vector< G4String >& parallelGeometryNames, G4bool includeShortLived )
274{
275 for ( G4String geometry : parallelGeometryNames ) AddParallelGeometryAllCharged( geometry, includeShortLived );
276}
277
278void G4GenericBiasingPhysics::AddParallelGeometryAllNeutral( const G4String& parallelGeometryName , G4bool includeShortLived )
279{
280 G4bool isKnown = false;
281 for ( G4String geometry : fParallelGeometriesForNeutral )
282 {
283 if ( geometry == parallelGeometryName )
284 {
285 isKnown = true;
286 break;
287 }
288 }
289 if ( !isKnown )
290 {
291 fParallelGeometriesForNeutral .push_back( parallelGeometryName );
292 fAllNeutralParallelGeometriesISL.push_back( includeShortLived );
293 }
294}
295
296void G4GenericBiasingPhysics::AddParallelGeometryAllNeutral( const std::vector< G4String >& parallelGeometryNames, G4bool includeShortLived )
297{
298 for ( G4String geometry : parallelGeometryNames ) AddParallelGeometryAllNeutral( geometry, includeShortLived );
299}
300
301
302
303//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
304
307
308//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
309
311{
312
313 // -- bias setup per individual particle name:
315 particleIterator->reset();
316
317 while( (*particleIterator)() )
318 {
319 G4ParticleDefinition* particle = particleIterator->value();
320 G4String particleName = particle->GetParticleName();
321 G4ProcessManager* pmanager = particle->GetProcessManager();
322
323 // -- include non physics process interface for biasing:
324 if ( std::find(fNonPhysBiasedParticles.begin(),
325 fNonPhysBiasedParticles.end(),
326 particleName ) != fNonPhysBiasedParticles.end() )
327 {
329 }
330
331 // -- wrap biased physics processes, all processes or only user selected:
332 std::vector< G4String >::const_iterator particleIt =
333 std::find(fBiasedParticles.begin(),
334 fBiasedParticles.end(),
335 particleName );
336 if ( particleIt == fBiasedParticles.end() ) continue;
337
338 std::vector < G4String >& biasedProcesses = fBiasedProcesses [ particleIt - fBiasedParticles.begin() ];
339 G4bool biasAll = fBiasAllProcesses[ particleIt - fBiasedParticles.begin() ];
340
341 if ( biasAll )
342 {
343 G4ProcessVector* vprocess = pmanager->GetProcessList();
344 for (G4int ip = 0 ; ip < (G4int)vprocess->size() ; ++ip)
345 {
346 G4VProcess* process = (*vprocess)[ip];
347 biasedProcesses.push_back( process->GetProcessName() );
348 }
349 }
350
351 G4bool restartLoop(true);
352 while ( restartLoop )
353 {
354 for (std::size_t ip = 0 ; ip < biasedProcesses.size() ; ++ip)
355 {
356 G4bool activ = G4BiasingHelper::ActivatePhysicsBiasing(pmanager, biasedProcesses[ip] );
357 restartLoop = activ;
358 if ( restartLoop ) break;
359 }
360 }
361
362 }
363
364
365 // -- bias setup per group:
366 particleIterator->reset();
367
368 while( (*particleIterator)() )
369 {
370 G4ParticleDefinition* particle = particleIterator->value();
371 G4String particleName = particle->GetParticleName();
372 G4ProcessManager* pmanager = particle->GetProcessManager();
373
374 // -- exclude particles invidually specified by name:
375 if ( std::find( fNonPhysBiasedParticles.begin(),
376 fNonPhysBiasedParticles.end(),
377 particleName ) != fNonPhysBiasedParticles.end() ) continue;
378
379 if ( std::find( fBiasedParticles.begin(),
380 fBiasedParticles.end(),
381 particleName ) != fBiasedParticles.end() ) continue;
382
383
384 G4bool physBias(false), nonPhysBias(false);
385
386 auto PDG = particle->GetPDGEncoding();
387
388 // -- include particle if in right PDG range:
389 for ( std::size_t i = 0 ; i < fPhysBiasByPDGRangeLow.size() ; i++ )
390 if ( ( PDG >= fPhysBiasByPDGRangeLow[i] ) && ( PDG <= fPhysBiasByPDGRangeHigh[i] ) )
391 {
392 physBias = true;
393 break;
394 }
395 for ( std::size_t i = 0 ; i < fNonPhysBiasByPDGRangeLow.size() ; i++ )
396 if ( ( PDG >= fNonPhysBiasByPDGRangeLow[i] ) && ( PDG <= fNonPhysBiasByPDGRangeHigh[i] ) )
397 {
398 nonPhysBias = true;
399 break;
400 }
401
402 // -- if particle has not yet any biasing, include it on charge criteria:
403 if ( ( physBias == false ) && ( nonPhysBias == false ) )
404 {
405 if ( std::abs( particle->GetPDGCharge() ) > DBL_MIN )
406 {
407 if ( fPhysBiasAllCharged ) if ( fPhysBiasAllChargedISL || !particle->IsShortLived() ) physBias = true;
408 if ( fNonPhysBiasAllCharged ) if ( fNonPhysBiasAllChargedISL || !particle->IsShortLived() ) nonPhysBias = true;
409 }
410 else
411 {
412 if ( fPhysBiasAllNeutral ) if ( fPhysBiasAllNeutralISL || !particle->IsShortLived() ) physBias = true;
413 if ( fNonPhysBiasAllNeutral ) if ( fNonPhysBiasAllNeutralISL || !particle->IsShortLived() ) nonPhysBias = true;
414 }
415 }
416
417
418 if ( nonPhysBias ) G4BiasingHelper::ActivateNonPhysicsBiasing(pmanager);
419
420 if ( physBias )
421 {
422 std::vector < G4String > biasedProcesses;
423 G4ProcessVector* vprocess = pmanager->GetProcessList();
424 for (G4int ip = 0 ; ip < (G4int)vprocess->size() ; ++ip)
425 {
426 G4VProcess* process = (*vprocess)[ip];
427 biasedProcesses.push_back( process->GetProcessName() );
428 }
429
430 G4bool restartLoop(true);
431 while ( restartLoop )
432 {
433 for (std::size_t ip = 0 ; ip < biasedProcesses.size() ; ++ip)
434 {
435 G4bool activ = G4BiasingHelper::ActivatePhysicsBiasing(pmanager, biasedProcesses[ip] );
436 restartLoop = activ;
437 if ( restartLoop ) break;
438 }
439 }
440 }
441
442 }
443
444
445
446 // -- Associate parallel geometries:
447 AssociateParallelGeometries();
448
449
450 // -- tells what is done:
451 if ( fVerbose )
452 {
453 // -- print:
454 particleIterator->reset();
455
456 while( (*particleIterator)() )
457 {
458 G4ParticleDefinition* particle = particleIterator->value();
459 G4String particleName = particle->GetParticleName();
460 G4ProcessManager* pmanager = particle->GetProcessManager();
461
462 G4bool isBiased(false);
463 G4String processNames;
464 G4int icount(0);
465
466 G4ProcessVector* vprocess = pmanager->GetProcessList();
467 for (G4int ip = 0 ; ip < (G4int)vprocess->size() ; ++ip)
468 {
469 G4VProcess* process = (*vprocess)[ip];
470 G4BiasingProcessInterface* pb = dynamic_cast< G4BiasingProcessInterface* >(process);
471 if ( pb != nullptr )
472 {
473 isBiased = true;
474 if ( icount < 3 )
475 {
476 processNames += pb->GetProcessName();
477 processNames += " ";
478 }
479 else
480 {
481 processNames += "\n ";
482 processNames += pb->GetProcessName();
483 processNames += " ";
484 icount = 0;
485 }
486 icount++;
487 }
488 }
489 if ( isBiased )
490 {
491 if ( particle->IsShortLived() )
492 G4cout << std::setw(14) << particleName << " **** : " << processNames << G4endl;
493 else
494 G4cout << std::setw(18) << particleName << " : " << processNames << G4endl;
495 }
496 }
497 }
498}
499
500
501
502void G4GenericBiasingPhysics::AssociateParallelGeometries()
503{
504
505 // -- parallel geometries for individual particles:
507 particleIterator->reset();
508
509 while( (*particleIterator)() )
510 {
511 G4ParticleDefinition* particle = particleIterator->value();
512 G4String particleName = particle->GetParticleName();
513 G4ProcessManager* pmanager = particle->GetProcessManager();
514
515 G4bool requested = false;
516 for ( G4String requestedParticles : fParticlesWithParallelGeometries )
517 {
518 if ( requestedParticles == particleName )
519 {
520 requested = true;
521 break;
522 }
523 }
524 if ( requested )
525 {
526 // -- insert biasing process for handling parallel geometries:
527 G4ParallelGeometriesLimiterProcess* limiter = G4BiasingHelper::AddLimiterProcess(pmanager);
528
529 // -- attach the requested worlds to this process:
530 std::vector< G4String >& parallelWorlds = fParallelGeometriesForParticle[ particleName ];
531 for ( G4String world : parallelWorlds ) limiter->AddParallelWorld( world );
532 }
533
534 }
535
536
537 // -- parallel geometries for particles in PDG ranges:
538 G4int i = 0; // -- index for PDG range
539 for ( G4int PDGlow : fPDGlowParallelGeometries )
540 {
541 G4int PDGhigh = fPDGhighParallelGeometries[i];
542 auto & geometries = fPDGrangeParallelGeometries[i];
543
544 particleIterator->reset();
545
546 while( (*particleIterator)() )
547 {
548 G4ParticleDefinition* particle = particleIterator->value();
549 G4int particlePDG = particle->GetPDGEncoding();
550 G4ProcessManager* pmanager = particle->GetProcessManager();
551
552 if ( ( particlePDG >= PDGlow ) && ( particlePDG <= PDGhigh ) )
553 {
554 // -- ยงยง exclude particles from individual list ?
555 // -- insert biasing process for handling parallel geometries:
556 G4ParallelGeometriesLimiterProcess* limiter = G4BiasingHelper::AddLimiterProcess(pmanager);
557
558 // -- attached the requested worlds to this process:
559 for ( auto& geometry : geometries ) limiter->AddParallelWorld( geometry );
560 }
561 }
562 // -- increment index for next PDG range:
563 i++;
564 }
565
566
567 // -- parallel geometries for all neutral / charged particles:
568 particleIterator->reset();
569 G4bool islAllNeutral = false;
570 for(auto isln : fAllNeutralParallelGeometriesISL)
571 { islAllNeutral |= isln; }
572 G4bool islAllCharged = false;
573 for(auto islc : fAllChargedParallelGeometriesISL)
574 { islAllCharged |= islc; }
575
576 while((*particleIterator)())
577 {
578 G4ParticleDefinition* particle = particleIterator->value();
579 G4ProcessManager* pmanager = particle->GetProcessManager();
580 if(particle->GetPDGCharge() == 0.)
581 {
582 // Neutral particle
583 if(particle->IsShortLived() && !islAllNeutral) continue;
584 G4ParallelGeometriesLimiterProcess* limiter = G4BiasingHelper::AddLimiterProcess(pmanager);
585 G4int j = 0;
586 for(G4String wNameN : fParallelGeometriesForCharged)
587 {
588 if(!(particle->IsShortLived()) || fAllNeutralParallelGeometriesISL[j])
589 { limiter->AddParallelWorld(wNameN); }
590 j++;
591 }
592 }
593 else
594 {
595 // charged
596 if(particle->IsShortLived() && !islAllCharged) continue;
597 G4ParallelGeometriesLimiterProcess* limiter = G4BiasingHelper::AddLimiterProcess(pmanager);
598 G4int j = 0;
599 for(G4String wNameC : fParallelGeometriesForCharged)
600 {
601 if(!(particle->IsShortLived()) || fAllChargedParallelGeometriesISL[j])
602 { limiter->AddParallelWorld(wNameC); }
603 j++;
604 }
605 }
606 }
607
608}
std::vector< G4InuclElementaryParticle >::iterator particleIterator
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
static G4bool ActivatePhysicsBiasing(G4ProcessManager *pmanager, const G4String &physicsProcessToBias, const G4String &wrappedName="")
static void ActivateNonPhysicsBiasing(G4ProcessManager *pmanager, const G4String &nonPhysicsProcessName="")
static G4ParallelGeometriesLimiterProcess * AddLimiterProcess(G4ProcessManager *pmanager, const G4String &processName="biasLimiter")
void BiasAllNeutral(G4bool includeShortLived=false)
void NonPhysicsBiasAllNeutral(G4bool includeShortLived=false)
G4GenericBiasingPhysics(const G4String &name="BiasingP")
void BiasAddPDGRange(G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle=true)
void AddParallelGeometry(const G4String &particleName, const G4String &parallelGeometryName)
void NonPhysicsBiasAddPDGRange(G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle=true)
void PhysicsBias(const G4String &particleName)
void PhysicsBiasAddPDGRange(G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle=true)
void AddParallelGeometryAllNeutral(const G4String &parallelGeometryName, G4bool includeShortLived=false)
void NonPhysicsBias(const G4String &particleName)
void AddParallelGeometryAllCharged(const G4String &parallelGeometryName, G4bool includeShortLived=false)
void PhysicsBiasAllCharged(G4bool includeShortLived=false)
void Bias(const G4String &particleName)
void BiasAllCharged(G4bool includeShortLived=false)
void PhysicsBiasAllNeutral(G4bool includeShortLived=false)
void NonPhysicsBiasAllCharged(G4bool includeShortLived=false)
void AddParallelWorld(const G4String &parallelWorldName)
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleName() const
G4ProcessVector * GetProcessList() const
std::size_t size() const
G4VPhysicsConstructor(const G4String &="")
G4ParticleTable::G4PTblDicIterator * GetParticleIterator() const
const G4String & GetProcessName() const
#define DBL_MIN
Definition templates.hh:54