Geant4 11.4.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#include <algorithm>
52
53// factory
55//
57
58//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
59
62 fPhysBiasAllCharged(false), fNonPhysBiasAllCharged(false),
63 fPhysBiasAllChargedISL(false), fNonPhysBiasAllChargedISL(false),
64 fPhysBiasAllNeutral(false), fNonPhysBiasAllNeutral(false),
65 fPhysBiasAllNeutralISL(false), fNonPhysBiasAllNeutralISL(false),
66 fVerbose(false)
67{;}
68
69//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
70
73
74
75//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
76
78{
79 fBiasedParticles.push_back(particleName);
80 fBiasedProcesses.emplace_back();
81 fBiasAllProcesses.push_back(true);
82}
83
84//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
85
86void G4GenericBiasingPhysics::PhysicsBias(const G4String& particleName, const std::vector< G4String >& processNames)
87{
88 fBiasedParticles.push_back(particleName);
89 fBiasedProcesses.push_back(processNames);
90 fBiasAllProcesses.push_back(false);
91}
92
93//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
94
96{
97 fNonPhysBiasedParticles.push_back(particleName);
98}
99
100//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
101
103{
104 PhysicsBias(particleName);
105 NonPhysicsBias(particleName);
106}
107
108//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
109
110void G4GenericBiasingPhysics::Bias(const G4String& particleName, const std::vector< G4String >& processNames)
111{
112 PhysicsBias(particleName, processNames);
113 NonPhysicsBias(particleName);
114}
115
116//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
117void G4GenericBiasingPhysics::PhysicsBiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle )
118{
119 if ( PDGlow > PDGhigh ) G4cout << " G4GenericBiasingPhysics::PhysicsBiasAddPDGRange(...) : PDGlow > PDGhigh, call ignored." << G4endl;
120 fPhysBiasByPDGRangeLow .push_back( PDGlow );
121 fPhysBiasByPDGRangeHigh.push_back( PDGhigh );
122 if ( includeAntiParticle )
123 {
124 fPhysBiasByPDGRangeLow .push_back( -PDGhigh );
125 fPhysBiasByPDGRangeHigh.push_back( -PDGlow );
126 }
127}
128
129//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
130void G4GenericBiasingPhysics::NonPhysicsBiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle )
131{
132 if ( PDGlow > PDGhigh ) {
133 G4cout << " G4GenericBiasingPhysics::NonPhysicsBiasAddPDGRange(...) : PDGlow > PDGhigh, call ignored." << G4endl;
134 return;
135 }
136 fNonPhysBiasByPDGRangeLow .push_back( PDGlow );
137 fNonPhysBiasByPDGRangeHigh.push_back( PDGhigh );
138 if ( includeAntiParticle )
139 {
140 fNonPhysBiasByPDGRangeLow .push_back( -PDGhigh );
141 fNonPhysBiasByPDGRangeHigh.push_back( -PDGlow );
142 }
143}
144
145
146//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
147void G4GenericBiasingPhysics::BiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle )
148{
149 if ( PDGlow > PDGhigh ) {
150 G4cout << " G4GenericBiasingPhysics::BiasAddPDGRange(...) : PDGlow > PDGhigh, call ignored." << G4endl;
151 return;
152 }
153 PhysicsBiasAddPDGRange ( PDGlow, PDGhigh, includeAntiParticle );
154 NonPhysicsBiasAddPDGRange( PDGlow, PDGhigh, includeAntiParticle );
155}
156
158{
159 fPhysBiasAllCharged = true;
160 fPhysBiasAllChargedISL = includeShortLived;
161}
163{
164 fNonPhysBiasAllCharged = true;
165 fNonPhysBiasAllChargedISL = includeShortLived;
166}
168{
169 fPhysBiasAllCharged = true;
170 fNonPhysBiasAllCharged = true;
171 fPhysBiasAllChargedISL = includeShortLived;
172 fNonPhysBiasAllChargedISL = includeShortLived;
173}
175{
176 fPhysBiasAllNeutral = true;
177 fPhysBiasAllNeutralISL = includeShortLived;
178}
180{
181 fNonPhysBiasAllNeutral = true;
182 fNonPhysBiasAllNeutralISL = includeShortLived;
183}
185{
186 fPhysBiasAllNeutral = true;
187 fNonPhysBiasAllNeutral = true;
188 fPhysBiasAllNeutralISL = includeShortLived;
189 fNonPhysBiasAllNeutralISL = includeShortLived;
190}
191
192
193void G4GenericBiasingPhysics::AddParallelGeometry( const G4String& particleName, const G4String& parallelGeometryName )
194{
195 // -- add particle, caring of possible duplication:
196 G4bool isKnown = false;
197 for ( G4String knownParticle : fParticlesWithParallelGeometries )
198 {
199 if ( knownParticle == particleName )
200 {
201 isKnown = true;
202 break;
203 }
204 }
205
206 // -- add the geometry, caring for possible duplication of this geometry, for this particle:
207 if ( !isKnown ) fParticlesWithParallelGeometries.push_back( particleName );
208 std::vector< G4String >& geometries = fParallelGeometriesForParticle[particleName];
209
210 isKnown = false;
211 for ( G4String knownGeometry : geometries )
212 {
213 if ( knownGeometry == parallelGeometryName )
214 {
215 isKnown = true;
216 break;
217 }
218 }
219 if ( !isKnown ) geometries.push_back( parallelGeometryName );
220
221}
222
223void G4GenericBiasingPhysics::AddParallelGeometry( const G4String& particleName, const std::vector< G4String >& parallelGeometryNames )
224{
225 for ( G4String geometry : parallelGeometryNames ) AddParallelGeometry( particleName, geometry );
226}
227
228void G4GenericBiasingPhysics::AddParallelGeometry( G4int PDGlow, G4int PDGhigh, const G4String& parallelGeometryName , G4bool includeAntiParticle )
229{
230 if ( PDGlow > PDGhigh )
231 {
232 G4cout << "G4GenericBiasingPhysics::AddParallelGeometry( G4int PDGlow, G4int PDGhigh, const G4String& parallelGeometryName , G4bool includeAntiParticle = true ), PDGlow > PDGhigh : call ignored" << G4endl;
233 return;
234 }
235
236 fPDGlowParallelGeometries .push_back( PDGlow );
237 fPDGhighParallelGeometries.push_back( PDGhigh );
238 G4int rangeIndex = G4int(fPDGlowParallelGeometries.size() - 1);
239 fPDGrangeParallelGeometries[rangeIndex].push_back( parallelGeometryName );
240
241 if ( includeAntiParticle )
242 {
243 fPDGlowParallelGeometries .push_back( -PDGhigh );
244 fPDGhighParallelGeometries.push_back( -PDGlow );
245 rangeIndex = G4int(fPDGlowParallelGeometries.size() - 1);
246 fPDGrangeParallelGeometries[rangeIndex].push_back( parallelGeometryName );
247 }
248
249}
250
251void G4GenericBiasingPhysics::AddParallelGeometry( G4int PDGlow, G4int PDGhigh, const std::vector< G4String >& parallelGeometryNames, G4bool includeAntiParticle )
252{
253 if ( PDGlow > PDGhigh )
254 {
255 G4cout << "G4GenericBiasingPhysics::AddParallelGeometry( G4int PDGlow, G4int PDGhigh, const std::vector< G4String >& parallelGeometryNames, G4bool includeAntiParticle = true ), PDGlow > PDGhigh : call ignored" << G4endl;
256 return;
257 }
258
259 for ( G4String geometry : parallelGeometryNames ) AddParallelGeometry( PDGlow, PDGhigh, geometry, includeAntiParticle );
260}
261
262void G4GenericBiasingPhysics::AddParallelGeometryAllCharged( const G4String& parallelGeometryName , G4bool includeShortLived )
263{
264 G4bool isKnown = false;
265 for ( G4String geometry : fParallelGeometriesForCharged )
266 {
267 if ( geometry == parallelGeometryName )
268 {
269 isKnown = true;
270 break;
271 }
272 }
273 if ( !isKnown )
274 {
275 fParallelGeometriesForCharged .push_back( parallelGeometryName );
276 fAllChargedParallelGeometriesISL.push_back( includeShortLived );
277 }
278}
279
280void G4GenericBiasingPhysics::AddParallelGeometryAllCharged( const std::vector< G4String >& parallelGeometryNames, G4bool includeShortLived )
281{
282 for ( G4String geometry : parallelGeometryNames ) AddParallelGeometryAllCharged( geometry, includeShortLived );
283}
284
285void G4GenericBiasingPhysics::AddParallelGeometryAllNeutral( const G4String& parallelGeometryName , G4bool includeShortLived )
286{
287 G4bool isKnown = false;
288 for ( G4String geometry : fParallelGeometriesForNeutral )
289 {
290 if ( geometry == parallelGeometryName )
291 {
292 isKnown = true;
293 break;
294 }
295 }
296 if ( !isKnown )
297 {
298 fParallelGeometriesForNeutral .push_back( parallelGeometryName );
299 fAllNeutralParallelGeometriesISL.push_back( includeShortLived );
300 }
301}
302
303void G4GenericBiasingPhysics::AddParallelGeometryAllNeutral( const std::vector< G4String >& parallelGeometryNames, G4bool includeShortLived )
304{
305 for ( G4String geometry : parallelGeometryNames ) AddParallelGeometryAllNeutral( geometry, includeShortLived );
306}
307
308
309
310//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
311
314
315//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
316
318{
319
320 // -- bias setup per individual particle name:
322 particleIterator->reset();
323
324 while( (*particleIterator)() )
325 {
326 G4ParticleDefinition* particle = particleIterator->value();
327 G4String particleName = particle->GetParticleName();
328 G4ProcessManager* pmanager = particle->GetProcessManager();
329
330 // -- include non physics process interface for biasing:
331 if ( std::find(fNonPhysBiasedParticles.begin(),
332 fNonPhysBiasedParticles.end(),
333 particleName ) != fNonPhysBiasedParticles.end() )
334 {
336 }
337
338 // -- wrap biased physics processes, all processes or only user selected:
339 std::vector< G4String >::const_iterator particleIt =
340 std::find(fBiasedParticles.begin(),
341 fBiasedParticles.end(),
342 particleName );
343 if ( particleIt == fBiasedParticles.end() ) continue;
344
345 std::vector < G4String >& biasedProcesses = fBiasedProcesses [ particleIt - fBiasedParticles.begin() ];
346 G4bool biasAll = fBiasAllProcesses[ particleIt - fBiasedParticles.begin() ];
347
348 if ( biasAll )
349 {
350 G4ProcessVector* vprocess = pmanager->GetProcessList();
351 for (G4int ip = 0 ; ip < (G4int)vprocess->size() ; ++ip)
352 {
353 G4VProcess* process = (*vprocess)[ip];
354 biasedProcesses.push_back( process->GetProcessName() );
355 }
356 }
357
358 G4bool restartLoop(true);
359 while ( restartLoop )
360 {
361 for (std::size_t ip = 0 ; ip < biasedProcesses.size() ; ++ip)
362 {
363 G4bool activ = G4BiasingHelper::ActivatePhysicsBiasing(pmanager, biasedProcesses[ip] );
364 restartLoop = activ;
365 if ( restartLoop ) break;
366 }
367 }
368
369 }
370
371
372 // -- bias setup per group:
373 particleIterator->reset();
374
375 while( (*particleIterator)() )
376 {
377 G4ParticleDefinition* particle = particleIterator->value();
378 G4String particleName = particle->GetParticleName();
379 G4ProcessManager* pmanager = particle->GetProcessManager();
380
381 // -- exclude particles invidually specified by name:
382 if ( std::find( fNonPhysBiasedParticles.begin(),
383 fNonPhysBiasedParticles.end(),
384 particleName ) != fNonPhysBiasedParticles.end() ) continue;
385
386 if ( std::find( fBiasedParticles.begin(),
387 fBiasedParticles.end(),
388 particleName ) != fBiasedParticles.end() ) continue;
389
390
391 G4bool physBias(false), nonPhysBias(false);
392
393 auto PDG = particle->GetPDGEncoding();
394
395 // -- include particle if in right PDG range:
396 for ( std::size_t i = 0 ; i < fPhysBiasByPDGRangeLow.size() ; i++ )
397 if ( ( PDG >= fPhysBiasByPDGRangeLow[i] ) && ( PDG <= fPhysBiasByPDGRangeHigh[i] ) )
398 {
399 physBias = true;
400 break;
401 }
402 for ( std::size_t i = 0 ; i < fNonPhysBiasByPDGRangeLow.size() ; i++ )
403 if ( ( PDG >= fNonPhysBiasByPDGRangeLow[i] ) && ( PDG <= fNonPhysBiasByPDGRangeHigh[i] ) )
404 {
405 nonPhysBias = true;
406 break;
407 }
408
409 // -- if particle has not yet any biasing, include it on charge criteria:
410 if ( ( physBias == false ) && ( nonPhysBias == false ) )
411 {
412 if ( std::abs( particle->GetPDGCharge() ) > DBL_MIN )
413 {
414 if ( fPhysBiasAllCharged ) if ( fPhysBiasAllChargedISL || !particle->IsShortLived() ) physBias = true;
415 if ( fNonPhysBiasAllCharged ) if ( fNonPhysBiasAllChargedISL || !particle->IsShortLived() ) nonPhysBias = true;
416 }
417 else
418 {
419 if ( fPhysBiasAllNeutral ) if ( fPhysBiasAllNeutralISL || !particle->IsShortLived() ) physBias = true;
420 if ( fNonPhysBiasAllNeutral ) if ( fNonPhysBiasAllNeutralISL || !particle->IsShortLived() ) nonPhysBias = true;
421 }
422 }
423
424
425 if ( nonPhysBias ) G4BiasingHelper::ActivateNonPhysicsBiasing(pmanager);
426
427 if ( physBias )
428 {
429 std::vector < G4String > biasedProcesses;
430 G4ProcessVector* vprocess = pmanager->GetProcessList();
431 for (G4int ip = 0 ; ip < (G4int)vprocess->size() ; ++ip)
432 {
433 G4VProcess* process = (*vprocess)[ip];
434 biasedProcesses.push_back( process->GetProcessName() );
435 }
436
437 G4bool restartLoop(true);
438 while ( restartLoop )
439 {
440 for (std::size_t ip = 0 ; ip < biasedProcesses.size() ; ++ip)
441 {
442 G4bool activ = G4BiasingHelper::ActivatePhysicsBiasing(pmanager, biasedProcesses[ip] );
443 restartLoop = activ;
444 if ( restartLoop ) break;
445 }
446 }
447 }
448
449 }
450
451
452
453 // -- Associate parallel geometries:
454 AssociateParallelGeometries();
455
456
457 // -- tells what is done:
458 if ( fVerbose )
459 {
460 // -- print:
461 particleIterator->reset();
462
463 while( (*particleIterator)() )
464 {
465 G4ParticleDefinition* particle = particleIterator->value();
466 G4String particleName = particle->GetParticleName();
467 G4ProcessManager* pmanager = particle->GetProcessManager();
468
469 G4bool isBiased(false);
470 G4String processNames;
471 G4int icount(0);
472
473 G4ProcessVector* vprocess = pmanager->GetProcessList();
474 for (G4int ip = 0 ; ip < (G4int)vprocess->size() ; ++ip)
475 {
476 G4VProcess* process = (*vprocess)[ip];
477 G4BiasingProcessInterface* pb = dynamic_cast< G4BiasingProcessInterface* >(process);
478 if ( pb != nullptr )
479 {
480 isBiased = true;
481 if ( icount < 3 )
482 {
483 processNames += pb->GetProcessName();
484 processNames += " ";
485 }
486 else
487 {
488 processNames += "\n ";
489 processNames += pb->GetProcessName();
490 processNames += " ";
491 icount = 0;
492 }
493 icount++;
494 }
495 }
496 if ( isBiased )
497 {
498 if ( particle->IsShortLived() )
499 G4cout << std::setw(14) << particleName << " **** : " << processNames << G4endl;
500 else
501 G4cout << std::setw(18) << particleName << " : " << processNames << G4endl;
502 }
503 }
504 }
505}
506
507
508
509void G4GenericBiasingPhysics::AssociateParallelGeometries()
510{
511
512 // -- parallel geometries for individual particles:
514 particleIterator->reset();
515
516 while( (*particleIterator)() )
517 {
518 G4ParticleDefinition* particle = particleIterator->value();
519 G4String particleName = particle->GetParticleName();
520 G4ProcessManager* pmanager = particle->GetProcessManager();
521
522 if ( std::find(fParticlesWithParallelGeometries.begin(),
523 fParticlesWithParallelGeometries.end(),
524 particleName) != fParticlesWithParallelGeometries.end() )
525 {
526 // -- insert biasing process for handling parallel geometries:
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 if ( !fParallelGeometriesForNeutral.empty() ) {
583 // Neutral particle
584 if(particle->IsShortLived() && !islAllNeutral) continue;
585 G4ParallelGeometriesLimiterProcess* limiter = G4BiasingHelper::AddLimiterProcess(pmanager);
586 G4int j = 0;
587 for(G4String& wNameN : fParallelGeometriesForNeutral)
588 {
589 if(!(particle->IsShortLived()) || fAllNeutralParallelGeometriesISL[j])
590 { limiter->AddParallelWorld(wNameN); }
591 j++;
592 }
593 }
594 }
595 else
596 {
597 if ( !fParallelGeometriesForCharged.empty() ) {
598 // charged
599 if(particle->IsShortLived() && !islAllCharged) continue;
600 G4ParallelGeometriesLimiterProcess* limiter = G4BiasingHelper::AddLimiterProcess(pmanager);
601 G4int j = 0;
602 for(G4String& wNameC : fParallelGeometriesForCharged)
603 {
604 if(!(particle->IsShortLived()) || fAllChargedParallelGeometriesISL[j])
605 { limiter->AddParallelWorld(wNameC); }
606 j++;
607 }
608 }
609 }
610 }
611
612}
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