Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PhysicsListHelper.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// G4PhysicsListHelper implementation
27//
28// Author: H.Kurashige, 29 April 2011
29// --------------------------------------------------------------------
30
31#include <fstream>
32#include <iomanip>
33
36#include "G4ParticleTable.hh"
37#include "G4ProcessManager.hh"
38#include "globals.hh"
39#include "G4ios.hh"
40
42#include "G4RunManagerKernel.hh"
43#include "G4ScoringManager.hh"
44#include "G4Transportation.hh"
45
46#include "G4ProcessManager.hh"
47
48#include "G4ProcessType.hh"
50#include "G4DecayProcessType.hh"
51#include "G4EmProcessSubType.hh"
53#include "G4OpProcessSubType.hh"
55
56
57G4ThreadLocal G4PhysicsListHelper* G4PhysicsListHelper::pPLHelper = nullptr;
58
59// --------------------------------------------------------------------
60G4PhysicsListHelper::G4PhysicsListHelper()
61{
62 // pointer to the particle table
63 theParticleTable = G4ParticleTable::GetParticleTable();
64 aParticleIterator = theParticleTable->GetIterator();
65
66 ReadOrdingParameterTable();
67
68#ifdef G4VERBOSE
69 if(verboseLevel > 1)
70 {
72 }
73#endif
74}
75
76// --------------------------------------------------------------------
77G4PhysicsListHelper::~G4PhysicsListHelper()
78{
79 if(theTable != nullptr)
80 {
81 theTable->clear();
82 delete theTable;
83 theTable = nullptr;
84 sizeOfTable = 0;
85 }
86}
87
88// --------------------------------------------------------------------
90{
91 if(pPLHelper == nullptr)
92 {
94 pPLHelper = inst.Instance();
95 }
96 return pPLHelper;
97}
98
99// --------------------------------------------------------------------
101{
102 G4bool isElectron = false;
103 G4bool isPositron = false;
104 G4bool isGamma = false;
105 G4bool isProton = false;
106 G4bool isGenericIon = false;
107 G4bool isAnyIon = false;
108 G4bool isAnyChargedBaryon = false;
109 G4bool isEmProc = false;
110
111 // loop over all particles in G4ParticleTable
112 aParticleIterator->reset();
113 while((*aParticleIterator)())
114 {
115 G4ParticleDefinition* particle = aParticleIterator->value();
116 G4String name = particle->GetParticleName();
117 // check if any EM process exists
118 if(!isEmProc)
119 {
120 G4ProcessVector* list = particle->GetProcessManager()->GetProcessList();
121 for(G4int idx = 0; idx < (G4int)list->size(); ++idx)
122 {
123 isEmProc = ((*list)[idx])->GetProcessType() == fElectromagnetic;
124 if(isEmProc)
125 break;
126 }
127 }
128
129 if(name == "e-")
130 isElectron = true;
131 else if(name == "e+")
132 isPositron = true;
133 else if(name == "gamma")
134 isGamma = true;
135 else if(name == "GenericIon")
136 isGenericIon = true;
137 else if(name == "proton")
138 isProton = true;
139 else if(particle->GetParticleType() == "nucleus")
140 isAnyIon = true;
141 else if(particle->GetParticleType() == "baryon")
142 {
143 if(particle->GetPDGCharge() != 0.0)
144 isAnyChargedBaryon = true;
145 }
146 }
147
148 if(!isEmProc)
149 return;
150
151 // RULE 1
152 // e+, e- and gamma should exist
153 // if one of them exist
154 G4bool isEmBasic = isElectron || isPositron || isGamma;
155 G4bool isMissingEmBasic = !isElectron || !isPositron || !isGamma;
156 if(isEmBasic && isMissingEmBasic)
157 {
158 G4String missingName = "";
159 if(!isElectron)
160 missingName += "e- ";
161 if(!isPositron)
162 missingName += "e+ ";
163 if(!isGamma)
164 missingName += "gamma ";
165
166#ifdef G4VERBOSE
167 if(verboseLevel > 0)
168 {
169 G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName
170 << " do not exist " << G4endl;
171 G4cout << " These particle are necessary for basic EM processes"
172 << G4endl;
173 }
174#endif
175 G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0101",
176 FatalException, "Missing EM basic particle");
177 }
178
179 // RULE 2
180 // proton should exist
181 // if any other charged baryon exist
182 if(!isProton && isAnyChargedBaryon)
183 {
184 G4String missingName = "proton ";
185
186#ifdef G4VERBOSE
187 if(verboseLevel > 0)
188 {
189 G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName
190 << " does not exist " << G4endl;
191 G4cout << " Proton is necessary for EM baryon processes" << G4endl;
192 }
193#endif
194 missingName += " should be created ";
195 G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0102",
196 FatalException, "Missing Proton");
197 }
198
199 // RULE 3
200 // GenericIonn should exist
201 // if any other ion exist
202 if(!isGenericIon && isAnyIon)
203 {
204 G4String missingName = "GenericIon ";
205
206#ifdef G4VERBOSE
207 if(verboseLevel > 0)
208 {
209 G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName
210 << " does not exist " << G4endl;
211 G4cout << " GenericIon should be created if any ion is necessary"
212 << G4endl;
213 }
214#endif
215 G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0103",
216 FatalException, "Missing GenericIon");
217 }
218}
219
220// --------------------------------------------------------------------
222{
223 G4int verboseLevelTransport = 0;
224
225#ifdef G4VERBOSE
226 if(verboseLevel > 2)
227 {
228 G4cout << "G4PhysicsListHelper::AddTransportation() " << G4endl;
229 }
230#endif
231
232 G4int nParaWorld =
234
235 if(nParaWorld > 0 || useCoupledTransportation ||
237 {
238 auto coupledTransport = new G4CoupledTransportation(verboseLevelTransport);
239 if(theLooperThresholds == 0)
240 coupledTransport->SetLowLooperThresholds();
241 if(theLooperThresholds == 2)
242 coupledTransport->SetHighLooperThresholds();
243 theTransportationProcess = coupledTransport;
244
245 if(verboseLevel > 0)
246 {
247 G4cout << "--- G4CoupledTransportation is used " << G4endl;
248 }
249 }
250 else
251 {
252 auto simpleTransport = new G4Transportation(verboseLevelTransport);
253 if(theLooperThresholds == 0)
254 simpleTransport->SetLowLooperThresholds();
255 if(theLooperThresholds == 2)
256 simpleTransport->SetHighLooperThresholds();
257 theTransportationProcess = simpleTransport;
258 }
259
260 // loop over all particles in G4ParticleTable
261 aParticleIterator->reset();
262 while((*aParticleIterator)())
263 {
264 G4ParticleDefinition* particle = aParticleIterator->value();
265 G4ProcessManager* pmanager = particle->GetProcessManager();
266 // Add transportation process for all particles
267 if(pmanager == 0)
268 {
269 // Error !! no process manager
270#ifdef G4VERBOSE
271 if(verboseLevel > 0)
272 {
273 G4cout << "G4PhysicsListHelper::AddTransportation "
274 << " : No Process Manager for " << particle->GetParticleName()
275 << G4endl;
276 }
277#endif
278 G4Exception("G4PhysicsListHelper::AddTransportation", "Run0104",
279 FatalException, "No process manager");
280 continue;
281 }
282 // Molecule use different type transportation
283 if(particle->GetParticleType() == "Molecule")
284 continue;
285
286 // add transportation with ordering = ( -1, "first", "first" )
287 pmanager->AddProcess(theTransportationProcess);
288 pmanager->SetProcessOrderingToFirst(theTransportationProcess, idxAlongStep);
289 pmanager->SetProcessOrderingToFirst(theTransportationProcess, idxPostStep);
290 }
291}
292
293// --------------------------------------------------------------------
294void G4PhysicsListHelper::ReadOrdingParameterTable()
295{
296 G4bool readInFile = false;
297 std::ifstream fIn;
298
299 if(std::getenv("G4ORDPARAMTABLE"))
300 {
301 ordParamFileName = std::getenv("G4ORDPARAMTABLE");
302#ifdef G4VERBOSE
303 if(verboseLevel > 1)
304 {
305 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable :"
306 << ordParamFileName << " is assigned to Ordering Parameter Table "
307 << G4endl;
308 }
309#endif
310 // open input file //
311 fIn.open(ordParamFileName, std::ios::in);
312 // check if the file has been opened successfully
313 if(!fIn)
314 {
315#ifdef G4VERBOSE
316 if(verboseLevel > 0)
317 {
318 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable "
319 << " Can not open file " << ordParamFileName << G4endl;
320 }
321#endif
322 G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable", "Run0105",
323 JustWarning, "Fail to open ordering parameter table ");
324 }
325 else
326 {
327 readInFile = true;
328 }
329 }
330
331 // create OrdParamTable
332 if(theTable != nullptr)
333 {
334 theTable->clear();
335 delete theTable;
336 theTable = nullptr;
337 sizeOfTable = 0;
338 }
339 theTable = new G4OrdParamTable();
340 sizeOfTable = 0;
341
342 if(readInFile)
343 {
344 // read in the file and fill the table
345 while(!fIn.eof())
346 {
348 G4int flag;
349 fIn >> tmp.processTypeName >> tmp.processType >> tmp.processSubType >>
350 tmp.ordering[0] >> tmp.ordering[1] >> tmp.ordering[2] >> flag;
351 tmp.isDuplicable = (flag != 0);
352 theTable->push_back(tmp);
353 ++sizeOfTable;
354 }
355 fIn.close();
356 }
357 else
358 {
359 ReadInDefaultOrderingParameter();
360 }
361
362 if(sizeOfTable == 0)
363 {
364#ifdef G4VERBOSE
365 if(verboseLevel > 0)
366 {
367 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable "
368 << " Empty file " << ordParamFileName << G4endl;
369 }
370#endif
371 G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable", "Run0106",
372 JustWarning, "The ordering parameter table is empty ");
373 delete theTable;
374 theTable = nullptr;
375 }
376 return;
377}
378
379// --------------------------------------------------------------------
381{
382 if(theTable == nullptr)
383 {
384#ifdef G4VERBOSE
385 if(verboseLevel > 0)
386 {
387 G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable "
388 << " No ordering parameter table : " << ordParamFileName
389 << G4endl;
390 }
391#endif
392 return;
393 }
394 G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable : "
395 << ordParamFileName << G4endl;
396 G4cout << " TypeName "
397 << " ProcessType"
398 << " SubType"
399 << " AtRest"
400 << " AlongStep"
401 << " PostStep"
402 << " Duplicable" << G4endl;
403 for(G4int i = 0; i < sizeOfTable; ++i)
404 {
405 G4PhysicsListOrderingParameter* tmp = &(theTable->at(i));
406 if((subType >= 0) && (subType != tmp->processSubType))
407 continue;
408 G4cout << std::setw(18) << tmp->processTypeName << std::setw(15)
409 << tmp->processType << std::setw(15) << tmp->processSubType
410 << std::setw(15) << tmp->ordering[0] << std::setw(15)
411 << tmp->ordering[1] << std::setw(15) << tmp->ordering[2];
412 if(tmp->isDuplicable)
413 {
414 G4cout << " true";
415 }
416 else
417 {
418 G4cout << " false";
419 }
420 G4cout << G4endl;
421 }
422}
423
424// --------------------------------------------------------------------
427{
429
430 if(theTable == nullptr)
431 {
432#ifdef G4VERBOSE
433 if(verboseLevel > 0)
434 {
435 G4cout << "G4PhysicsListHelper::GetOrderingParameter : "
436 << " No ordering parameter table : " << ordParamFileName
437 << G4endl;
438 }
439#endif
440 return value;
441 }
442
443 for(G4int i = 0; i < sizeOfTable; ++i)
444 {
445 G4PhysicsListOrderingParameter* tmp = &(theTable->at(i));
446 if(subType == tmp->processSubType)
447 {
448 value.processTypeName = tmp->processTypeName;
449 value.processType = tmp->processType;
450 value.processSubType = tmp->processSubType;
451 value.ordering[0] = tmp->ordering[0];
452 value.ordering[1] = tmp->ordering[1];
453 value.ordering[2] = tmp->ordering[2];
454 value.isDuplicable = tmp->isDuplicable;
455 }
456 }
457 return value;
458}
459
460// --------------------------------------------------------------------
462 G4ParticleDefinition* particle)
463{
464 if(theTable == nullptr)
465 {
466#ifdef G4VERBOSE
467 if(verboseLevel > 0)
468 {
469 G4cout << "G4PhysicsListHelper::RegisterProcess :"
470 << " No ordering parameter table : " << ordParamFileName
471 << G4endl;
472 }
473#endif
474 G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0107",
475 FatalException, "No Ordering Parameter Table");
476 return false;
477 }
478
479 const G4String pName = process->GetProcessName();
480 const G4int pType = process->GetProcessType();
481 const G4int pSubType = process->GetProcessSubType();
482
483#ifdef G4VERBOSE
484 if(verboseLevel > 2)
485 {
486 G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName
487 << " Process Type = " << pType << " SubType = " << pSubType << " to "
488 << particle->GetParticleName() << G4endl;
489 }
490#endif
491
492 // Check Process Type/SubType
493 if((pType < 1) || (pSubType < 1))
494 {
495#ifdef G4VERBOSE
496 if(verboseLevel > 0)
497 {
498 G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " for "
499 << particle->GetParticleName()
500 << " has illegal Process Type = " << pType
501 << " SubType = " << pSubType << G4endl;
502 }
503#endif
504 G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0108",
505 FatalException, "No Matching process Type/SubType");
506 return false;
507 }
508
509 G4bool isFound = false;
510 G4int ord[3];
511 G4bool duplicable = false;
512 for(G4int i = 0; i < sizeOfTable; ++i)
513 {
514 G4PhysicsListOrderingParameter* tmp = &(theTable->at(i));
515 if((tmp->processType == pType) && (tmp->processSubType == pSubType))
516 {
517 ord[0] = tmp->ordering[0];
518 ord[1] = tmp->ordering[1];
519 ord[2] = tmp->ordering[2];
520 duplicable = tmp->isDuplicable;
521 isFound = true;
522 break;
523 }
524 }
525 if(!isFound)
526 {
527#ifdef G4VERBOSE
528 if(verboseLevel > 0)
529 {
530 G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " for "
531 << particle->GetParticleName() << " with type/subtype =" << pType
532 << "/" << pSubType
533 << " is not registered in OrdingParameterTable " << G4endl;
534 }
535#endif
536 G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0109",
537 FatalException, "No Matching process Type/SubType");
538 return false;
539 }
540
541 // Check Process Manager
542 G4ProcessManager* pManager = particle->GetProcessManager();
543 if(pManager == nullptr)
544 {
545 // Error !! no process manager
546#ifdef G4VERBOSE
547 if(verboseLevel > 0)
548 {
549 G4cout << "G4PhysicsListHelper::RegisterProcess "
550 << " : No Process Manager for " << particle->GetParticleName()
551 << G4endl;
552 }
553#endif
554 G4Exception("G4PhysicsListHelper::RegisterProcess ", "Riun0110",
555 FatalException, "No process manager");
556 return false;
557 }
558
559 // Check Duplication
560 if(!duplicable)
561 {
562 G4bool duplicated = false;
563 G4ProcessVector* pList = pManager->GetProcessList();
564 for(G4int idx = 0; idx < (G4int)pList->size(); ++idx)
565 {
566 const G4VProcess* p = (*pList)[idx];
567 if((p->GetProcessType() == pType) && (p->GetProcessSubType() == pSubType))
568 {
569 duplicated = true;
570#ifdef G4VERBOSE
571 if(verboseLevel > 0)
572 {
573 G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " for "
574 << particle->GetParticleName()
575 << " with type/subtype =" << pType << "/" << pSubType
576 << " is has same subType as " << p->GetProcessName()
577 << " for " << particle->GetParticleName() << G4endl;
578 G4cout << "It will not be added !!" << G4endl;
579 }
580#endif
581 G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0111",
582 JustWarning, "Duplication of processes");
583 }
584 }
585 if(duplicated)
586 return false;
587 }
588
589 // Add Process
590 G4int code = pManager->AddProcess(process);
591 if(code < 0)
592 return false;
593
594 // Set Ordering Parameter
595 for(G4int idx = 0; idx < 3; ++idx)
596 {
598 static_cast<G4ProcessVectorDoItIndex>(idx);
599 if(ord[idx] < 0)
600 {
601 // Do Nothing because NO DOIT
602 }
603 else if(ord[idx] == 0)
604 {
605 pManager->SetProcessOrderingToFirst(process, idxOrd);
606 }
607 else if(ord[idx] < 9999)
608 {
609 pManager->SetProcessOrdering(process, idxOrd, ord[idx]);
610 }
611 else
612 {
613 pManager->SetProcessOrderingToLast(process, idxOrd);
614 }
615 }
616#ifdef G4VERBOSE
617 if(verboseLevel > 1)
618 {
619 G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " for "
620 << particle->GetParticleName() << " with type/subtype =" << pType
621 << "/" << pSubType
622 << " is successfully registered with ordering parameters " << ord[0]
623 << ":" << ord[1] << ":" << ord[2] << G4endl;
624 }
625#endif
626 return true;
627}
628
629// --------------------------------------------------------------------
630void G4PhysicsListHelper::ReadInDefaultOrderingParameter()
631{
633
634 // NOTE: please use enum values, rather than numerical values,
635 // for both the processType and processSubType below.
636
637 tmp.processTypeName = "Transportation";
638 tmp.processType = fTransportation;
639 tmp.processSubType = TRANSPORTATION;
640 tmp.ordering[0] = -1;
641 tmp.ordering[1] = 0;
642 tmp.ordering[2] = 0;
643 tmp.isDuplicable = false;
644 theTable->push_back(tmp);
645 sizeOfTable += 1;
646
647 tmp.processTypeName = "CoupleTrans";
648 tmp.processType = fTransportation;
649 tmp.processSubType = COUPLED_TRANSPORTATION;
650 tmp.ordering[0] = -1;
651 tmp.ordering[1] = 0;
652 tmp.ordering[2] = 0;
653 tmp.isDuplicable = false;
654 theTable->push_back(tmp);
655 sizeOfTable += 1;
656
657 tmp.processTypeName = "CoulombScat";
658 tmp.processType = fElectromagnetic;
659 tmp.processSubType = fCoulombScattering;
660 tmp.ordering[0] = -1;
661 tmp.ordering[1] = -1;
662 tmp.ordering[2] = 1000;
663 tmp.isDuplicable = false;
664 theTable->push_back(tmp);
665 sizeOfTable += 1;
666
667 tmp.processTypeName = "Ionisation";
668 tmp.processType = fElectromagnetic;
669 tmp.processSubType = fIonisation;
670 tmp.ordering[0] = -1;
671 tmp.ordering[1] = 2;
672 tmp.ordering[2] = 2;
673 tmp.isDuplicable = false;
674 theTable->push_back(tmp);
675 sizeOfTable += 1;
676
677 tmp.processTypeName = "Brems";
678 tmp.processType = fElectromagnetic;
679 tmp.processSubType = fBremsstrahlung;
680 tmp.ordering[0] = -1;
681 tmp.ordering[1] = -1;
682 tmp.ordering[2] = 3;
683 tmp.isDuplicable = false;
684 theTable->push_back(tmp);
685 sizeOfTable += 1;
686
687 tmp.processTypeName = "PairProdCharged";
688 tmp.processType = fElectromagnetic;
689 tmp.processSubType = fPairProdByCharged;
690 tmp.ordering[0] = -1;
691 tmp.ordering[1] = -1;
692 tmp.ordering[2] = 4;
693 tmp.isDuplicable = false;
694 theTable->push_back(tmp);
695 sizeOfTable += 1;
696
697 tmp.processTypeName = "Annih";
698 tmp.processType = fElectromagnetic;
699 tmp.processSubType = fAnnihilation;
700 tmp.ordering[0] = 5;
701 tmp.ordering[1] = -1;
702 tmp.ordering[2] = 5;
703 tmp.isDuplicable = false;
704 theTable->push_back(tmp);
705 sizeOfTable += 1;
706
707 tmp.processTypeName = "AnnihToMuMu";
708 tmp.processType = fElectromagnetic;
709 tmp.processSubType = fAnnihilationToMuMu;
710 tmp.ordering[0] = -1;
711 tmp.ordering[1] = -1;
712 tmp.ordering[2] = 6;
713 tmp.isDuplicable = false;
714 theTable->push_back(tmp);
715 sizeOfTable += 1;
716
717 tmp.processTypeName = "AnnihToTauTau";
718 tmp.processType = fElectromagnetic;
719 tmp.processSubType = fAnnihilationToTauTau;
720 tmp.ordering[0] = -1;
721 tmp.ordering[1] = -1;
722 tmp.ordering[2] = 7;
723 tmp.isDuplicable = false;
724 theTable->push_back(tmp);
725 sizeOfTable += 1;
726
727 tmp.processTypeName = "AnnihToHad";
728 tmp.processType = fElectromagnetic;
729 tmp.processSubType = fAnnihilationToHadrons;
730 tmp.ordering[0] = -1;
731 tmp.ordering[1] = -1;
732 tmp.ordering[2] = 8;
733 tmp.isDuplicable = false;
734 theTable->push_back(tmp);
735 sizeOfTable += 1;
736
737 tmp.processTypeName = "NuclearStopping";
738 tmp.processType = fElectromagnetic;
739 tmp.processSubType = fNuclearStopping;
740 tmp.ordering[0] = -1;
741 tmp.ordering[1] = 9;
742 tmp.ordering[2] = -1;
743 tmp.isDuplicable = false;
744 theTable->push_back(tmp);
745 sizeOfTable += 1;
746
747 tmp.processTypeName = "ElectronGeneral";
748 tmp.processType = fElectromagnetic;
749 tmp.processSubType = fElectronGeneralProcess;
750 tmp.ordering[0] = -1;
751 tmp.ordering[1] = 1;
752 tmp.ordering[2] = 1;
753 tmp.isDuplicable = false;
754 theTable->push_back(tmp);
755 sizeOfTable += 1;
756
757 tmp.processTypeName = "Msc";
758 tmp.processType = fElectromagnetic;
759 tmp.processSubType = fMultipleScattering;
760 tmp.ordering[0] = -1;
761 tmp.ordering[1] = 1;
762 tmp.ordering[2] = -1;
763 tmp.isDuplicable = false;
764 theTable->push_back(tmp);
765 sizeOfTable += 1;
766
767 tmp.processTypeName = "Rayleigh";
768 tmp.processType = fElectromagnetic;
769 tmp.processSubType = fRayleigh;
770 tmp.ordering[0] = -1;
771 tmp.ordering[1] = -1;
772 tmp.ordering[2] = 1000;
773 tmp.isDuplicable = false;
774 theTable->push_back(tmp);
775 sizeOfTable += 1;
776
777 tmp.processTypeName = "PhotoElectric";
778 tmp.processType = fElectromagnetic;
779 tmp.processSubType = fPhotoElectricEffect;
780 tmp.ordering[0] = -1;
781 tmp.ordering[1] = -1;
782 tmp.ordering[2] = 1000;
783 tmp.isDuplicable = false;
784 theTable->push_back(tmp);
785 sizeOfTable += 1;
786
787 tmp.processTypeName = "Compton";
788 tmp.processType = fElectromagnetic;
789 tmp.processSubType = fComptonScattering;
790 tmp.ordering[0] = -1;
791 tmp.ordering[1] = -1;
792 tmp.ordering[2] = 1000;
793 tmp.isDuplicable = false;
794 theTable->push_back(tmp);
795 sizeOfTable += 1;
796
797 tmp.processTypeName = "Conv";
798 tmp.processType = fElectromagnetic;
799 tmp.processSubType = fGammaConversion;
800 tmp.ordering[0] = -1;
801 tmp.ordering[1] = -1;
802 tmp.ordering[2] = 1000;
803 tmp.isDuplicable = false;
804 theTable->push_back(tmp);
805 sizeOfTable += 1;
806
807 tmp.processTypeName = "ConvToMuMu";
808 tmp.processType = fElectromagnetic;
809 tmp.processSubType = fGammaConversionToMuMu;
810 tmp.ordering[0] = -1;
811 tmp.ordering[1] = -1;
812 tmp.ordering[2] = 1000;
813 tmp.isDuplicable = false;
814 theTable->push_back(tmp);
815 sizeOfTable += 1;
816
817 tmp.processTypeName = "GammaGeneral";
818 tmp.processType = fElectromagnetic;
819 tmp.processSubType = fGammaGeneralProcess;
820 tmp.ordering[0] = -1;
821 tmp.ordering[1] = -1;
822 tmp.ordering[2] = 1000;
823 tmp.isDuplicable = false;
824 theTable->push_back(tmp);
825 sizeOfTable += 1;
826
827 tmp.processTypeName = "PositronGeneral";
828 tmp.processType = fElectromagnetic;
829 tmp.processSubType = fPositronGeneralProcess;
830 tmp.ordering[0] = 1;
831 tmp.ordering[1] = 1;
832 tmp.ordering[2] = 1;
833 tmp.isDuplicable = false;
834 theTable->push_back(tmp);
835 sizeOfTable += 1;
836
837 tmp.processTypeName = "MuPairByMuon";
838 tmp.processType = fElectromagnetic;
839 tmp.processSubType = fMuonPairProdByCharged;
840 tmp.ordering[0] = -1;
841 tmp.ordering[1] = -1;
842 tmp.ordering[2] = 10;
843 tmp.isDuplicable = false;
844 theTable->push_back(tmp);
845 sizeOfTable += 1;
846
847 tmp.processTypeName = "Cerenkov";
848 tmp.processType = fElectromagnetic;
849 tmp.processSubType = fCerenkov;
850 tmp.ordering[0] = -1;
851 tmp.ordering[1] = -1;
852 tmp.ordering[2] = 1000;
853 tmp.isDuplicable = false;
854 theTable->push_back(tmp);
855 sizeOfTable += 1;
856
857 tmp.processTypeName = "Scintillation";
858 tmp.processType = fElectromagnetic;
859 tmp.processSubType = fScintillation;
860 tmp.ordering[0] = 9999;
861 tmp.ordering[1] = -1;
862 tmp.ordering[2] = 9999;
863 tmp.isDuplicable = false;
864 theTable->push_back(tmp);
865 sizeOfTable += 1;
866
867 tmp.processTypeName = "SynchRad";
868 tmp.processType = fElectromagnetic;
869 tmp.processSubType = fSynchrotronRadiation;
870 tmp.ordering[0] = -1;
871 tmp.ordering[1] = -1;
872 tmp.ordering[2] = 1000;
873 tmp.isDuplicable = false;
874 theTable->push_back(tmp);
875 sizeOfTable += 1;
876
877 tmp.processTypeName = "TransRad";
878 tmp.processType = fElectromagnetic;
879 tmp.processSubType = fTransitionRadiation;
880 tmp.ordering[0] = -1;
881 tmp.ordering[1] = -1;
882 tmp.ordering[2] = 1000;
883 tmp.isDuplicable = false;
884 theTable->push_back(tmp);
885 sizeOfTable += 1;
886
887 tmp.processTypeName = "SurfaceRefl";
888 tmp.processType = fElectromagnetic;
889 tmp.processSubType = fSurfaceReflection;
890 tmp.ordering[0] = -1;
891 tmp.ordering[1] = -1;
892 tmp.ordering[2] = 1000;
893 tmp.isDuplicable = false;
894 theTable->push_back(tmp);
895 sizeOfTable += 1;
896
897 tmp.processTypeName = "OpAbsorb";
898 tmp.processType = fOptical;
899 tmp.processSubType = fOpAbsorption;
900 tmp.ordering[0] = -1;
901 tmp.ordering[1] = -1;
902 tmp.ordering[2] = 1000;
903 tmp.isDuplicable = false;
904 theTable->push_back(tmp);
905 sizeOfTable += 1;
906
907 tmp.processTypeName = "OpBoundary";
908 tmp.processType = fOptical;
909 tmp.processSubType = fOpBoundary;
910 tmp.ordering[0] = -1;
911 tmp.ordering[1] = -1;
912 tmp.ordering[2] = 1000;
913 tmp.isDuplicable = false;
914 theTable->push_back(tmp);
915 sizeOfTable += 1;
916
917 tmp.processTypeName = "OpRayleigh";
918 tmp.processType = fOptical;
919 tmp.processSubType = fOpRayleigh;
920 tmp.ordering[0] = -1;
921 tmp.ordering[1] = -1;
922 tmp.ordering[2] = 1000;
923 tmp.isDuplicable = false;
924 theTable->push_back(tmp);
925 sizeOfTable += 1;
926
927 tmp.processTypeName = "OpWLS";
928 tmp.processType = fOptical;
929 tmp.processSubType = fOpWLS;
930 tmp.ordering[0] = -1;
931 tmp.ordering[1] = -1;
932 tmp.ordering[2] = 1000;
933 tmp.isDuplicable = false;
934 theTable->push_back(tmp);
935 sizeOfTable += 1;
936
937 tmp.processTypeName = "OpMieHG";
938 tmp.processType = fOptical;
939 tmp.processSubType = fOpMieHG;
940 tmp.ordering[0] = -1;
941 tmp.ordering[1] = -1;
942 tmp.ordering[2] = 1000;
943 tmp.isDuplicable = false;
944 theTable->push_back(tmp);
945 sizeOfTable += 1;
946
947 tmp.processTypeName = "OpWLS2";
948 tmp.processType = fOptical;
949 tmp.processSubType = fOpWLS2;
950 tmp.ordering[0] = -1;
951 tmp.ordering[1] = -1;
952 tmp.ordering[2] = 1000;
953 tmp.isDuplicable = false;
954 theTable->push_back(tmp);
955 sizeOfTable += 1;
956
957 tmp.processTypeName = "DNAElastic";
958 tmp.processType = fElectromagnetic;
959 tmp.processSubType = fLowEnergyElastic;
960 tmp.ordering[0] = -1;
961 tmp.ordering[1] = -1;
962 tmp.ordering[2] = 1000;
963 tmp.isDuplicable = false;
964 theTable->push_back(tmp);
965 sizeOfTable += 1;
966
967 tmp.processTypeName = "DNAExcit";
968 tmp.processType = fElectromagnetic;
969 tmp.processSubType = fLowEnergyExcitation;
970 tmp.ordering[0] = -1;
971 tmp.ordering[1] = -1;
972 tmp.ordering[2] = 1000;
973 tmp.isDuplicable = false;
974 theTable->push_back(tmp);
975 sizeOfTable += 1;
976
977 tmp.processTypeName = "DNAIonisation";
978 tmp.processType = fElectromagnetic;
979 tmp.processSubType = fLowEnergyIonisation;
980 tmp.ordering[0] = -1;
981 tmp.ordering[1] = -1;
982 tmp.ordering[2] = 1000;
983 tmp.isDuplicable = false;
984 theTable->push_back(tmp);
985 sizeOfTable += 1;
986
987 tmp.processTypeName = "DNAVibExcit";
988 tmp.processType = fElectromagnetic;
989 tmp.processSubType = fLowEnergyVibrationalExcitation;
990 tmp.ordering[0] = -1;
991 tmp.ordering[1] = -1;
992 tmp.ordering[2] = 1000;
993 tmp.isDuplicable = false;
994 theTable->push_back(tmp);
995 sizeOfTable += 1;
996
997 tmp.processTypeName = "DNAAttachment";
998 tmp.processType = fElectromagnetic;
999 tmp.processSubType = fLowEnergyAttachment;
1000 tmp.ordering[0] = -1;
1001 tmp.ordering[1] = -1;
1002 tmp.ordering[2] = 1000;
1003 tmp.isDuplicable = false;
1004 theTable->push_back(tmp);
1005 sizeOfTable += 1;
1006
1007 tmp.processTypeName = "DNAChargeDec";
1008 tmp.processType = fElectromagnetic;
1009 tmp.processSubType = fLowEnergyChargeDecrease;
1010 tmp.ordering[0] = -1;
1011 tmp.ordering[1] = -1;
1012 tmp.ordering[2] = 1000;
1013 tmp.isDuplicable = false;
1014 theTable->push_back(tmp);
1015 sizeOfTable += 1;
1016
1017 tmp.processTypeName = "DNAChargeInc";
1018 tmp.processType = fElectromagnetic;
1019 tmp.processSubType = fLowEnergyChargeIncrease;
1020 tmp.ordering[0] = -1;
1021 tmp.ordering[1] = -1;
1022 tmp.ordering[2] = 1000;
1023 tmp.isDuplicable = false;
1024 theTable->push_back(tmp);
1025 sizeOfTable += 1;
1026
1027 tmp.processTypeName = "DNAElecSolv";
1028 tmp.processType = fElectromagnetic;
1029 tmp.processSubType = fLowEnergyElectronSolvation;
1030 tmp.ordering[0] = -1;
1031 tmp.ordering[1] = -1;
1032 tmp.ordering[2] = 1000;
1033 tmp.isDuplicable = false;
1034 theTable->push_back(tmp);
1035 sizeOfTable += 1;
1036
1037 tmp.processTypeName = "DNAMolecDecay";
1038 tmp.processType = fDecay;
1039 tmp.processSubType = fLowEnergyMolecularDecay;
1040 tmp.ordering[0] = 1000;
1041 tmp.ordering[1] = -1;
1042 tmp.ordering[2] = -1;
1043 tmp.isDuplicable = false;
1044 theTable->push_back(tmp);
1045 sizeOfTable += 1;
1046
1047 tmp.processTypeName = "ITTransport";
1048 tmp.processType = fTransportation;
1049 tmp.processSubType = fLowEnergyTransportation;
1050 tmp.ordering[0] = -1;
1051 tmp.ordering[1] = 0;
1052 tmp.ordering[2] = 0;
1053 tmp.isDuplicable = false;
1054 theTable->push_back(tmp);
1055 sizeOfTable += 1;
1056
1057 tmp.processTypeName = "DNABrownTrans";
1058 tmp.processType = fTransportation;
1059 tmp.processSubType = fLowEnergyBrownianTransportation;
1060 tmp.ordering[0] = -1;
1061 tmp.ordering[1] = 0;
1062 tmp.ordering[2] = 0;
1063 tmp.isDuplicable = false;
1064 theTable->push_back(tmp);
1065 sizeOfTable += 1;
1066
1067 tmp.processTypeName = "DNADoubleIoni";
1068 tmp.processType = fElectromagnetic;
1069 tmp.processSubType = fLowEnergyDoubleIonisation;
1070 tmp.ordering[0] = -1;
1071 tmp.ordering[1] = -1;
1072 tmp.ordering[2] = 1000;
1073 tmp.isDuplicable = false;
1074 theTable->push_back(tmp);
1075 sizeOfTable += 1;
1076
1077 tmp.processTypeName = "DNADoubleCap";
1078 tmp.processType = fElectromagnetic;
1079 tmp.processSubType = fLowEnergyDoubleCap;
1080 tmp.ordering[0] = -1;
1081 tmp.ordering[1] = -1;
1082 tmp.ordering[2] = 1000;
1083 tmp.isDuplicable = false;
1084 theTable->push_back(tmp);
1085 sizeOfTable += 1;
1086
1087 tmp.processTypeName = "DNAIoniTransfer";
1088 tmp.processType = fElectromagnetic;
1089 tmp.processSubType = fLowEnergyIoniTransfer;
1090 tmp.ordering[0] = -1;
1091 tmp.ordering[1] = -1;
1092 tmp.ordering[2] = 1000;
1093 tmp.isDuplicable = false;
1094 theTable->push_back(tmp);
1095 sizeOfTable += 1;
1096
1097 tmp.processTypeName = "DNAStaticMol";
1098 tmp.processType = fUserDefined;
1099 tmp.processSubType = fLowEnergyStaticMol;
1100 tmp.ordering[0] = -1;
1101 tmp.ordering[1] = -1;
1102 tmp.ordering[2] = 1000;
1103 tmp.isDuplicable = false;
1104 theTable->push_back(tmp);
1105 sizeOfTable +=1;
1106
1107 tmp.processTypeName = "DNAScavenger";
1108 tmp.processType = fUserDefined;
1109 tmp.processSubType = fLowEnergyScavenger;
1110 tmp.ordering[0] = -1;
1111 tmp.ordering[1] = -1;
1112 tmp.ordering[2] = 1000;
1113 tmp.isDuplicable = false;
1114 theTable->push_back(tmp);
1115 sizeOfTable += 1;
1116
1117 tmp.processTypeName = "HadElastic";
1118 tmp.processType = fHadronic;
1119 tmp.processSubType = fHadronElastic;
1120 tmp.ordering[0] = -1;
1121 tmp.ordering[1] = -1;
1122 tmp.ordering[2] = 1000;
1123 tmp.isDuplicable = false;
1124 theTable->push_back(tmp);
1125 sizeOfTable += 1;
1126
1127 tmp.processTypeName = "NeutronGeneral";
1128 tmp.processType = fHadronic;
1129 tmp.processSubType = fNeutronGeneral;
1130 tmp.ordering[0] = -1;
1131 tmp.ordering[1] = -1;
1132 tmp.ordering[2] = 1000;
1133 tmp.isDuplicable = false;
1134 theTable->push_back(tmp);
1135 sizeOfTable += 1;
1136
1137 tmp.processTypeName = "HadInelastic";
1138 tmp.processType = fHadronic;
1139 tmp.processSubType = fHadronInelastic;
1140 tmp.ordering[0] = -1;
1141 tmp.ordering[1] = -1;
1142 tmp.ordering[2] = 1000;
1143 tmp.isDuplicable = false;
1144 theTable->push_back(tmp);
1145 sizeOfTable += 1;
1146
1147 tmp.processTypeName = "HadCapture";
1148 tmp.processType = fHadronic;
1149 tmp.processSubType = fCapture;
1150 tmp.ordering[0] = -1;
1151 tmp.ordering[1] = -1;
1152 tmp.ordering[2] = 1000;
1153 tmp.isDuplicable = false;
1154 theTable->push_back(tmp);
1155 sizeOfTable += 1;
1156
1157 tmp.processTypeName = "MuAtomCapture";
1158 tmp.processType = fHadronic;
1159 tmp.processSubType = fMuAtomicCapture;
1160 tmp.ordering[0] = -1;
1161 tmp.ordering[1] = -1;
1162 tmp.ordering[2] = 1000;
1163 tmp.isDuplicable = false;
1164 theTable->push_back(tmp);
1165 sizeOfTable += 1;
1166
1167 tmp.processTypeName = "HadFission";
1168 tmp.processType = fHadronic;
1169 tmp.processSubType = fFission;
1170 tmp.ordering[0] = -1;
1171 tmp.ordering[1] = -1;
1172 tmp.ordering[2] = 1000;
1173 tmp.isDuplicable = false;
1174 theTable->push_back(tmp);
1175 sizeOfTable += 1;
1176
1177 tmp.processTypeName = "HadAtRest";
1178 tmp.processType = fHadronic;
1179 tmp.processSubType = fHadronAtRest;
1180 tmp.ordering[0] = 1000;
1181 tmp.ordering[1] = -1;
1182 tmp.ordering[2] = -1;
1183 tmp.isDuplicable = false;
1184 theTable->push_back(tmp);
1185 sizeOfTable += 1;
1186
1187 tmp.processTypeName = "HadCEX";
1188 tmp.processType = fHadronic;
1189 tmp.processSubType = fChargeExchange;
1190 tmp.ordering[0] = -1;
1191 tmp.ordering[1] = -1;
1192 tmp.ordering[2] = 1000;
1193 tmp.isDuplicable = false;
1194 theTable->push_back(tmp);
1195 sizeOfTable += 1;
1196
1197 tmp.processTypeName = "Decay";
1198 tmp.processType = fDecay;
1199 tmp.processSubType = DECAY;
1200 tmp.ordering[0] = 1000;
1201 tmp.ordering[1] = -1;
1202 tmp.ordering[2] = 1000;
1203 tmp.isDuplicable = false;
1204 theTable->push_back(tmp);
1205 sizeOfTable += 1;
1206
1207 tmp.processTypeName = "DecayWSpin";
1208 tmp.processType = fDecay;
1209 tmp.processSubType = DECAY_WithSpin;
1210 tmp.ordering[0] = 1000;
1211 tmp.ordering[1] = -1;
1212 tmp.ordering[2] = 1000;
1213 tmp.isDuplicable = false;
1214 theTable->push_back(tmp);
1215 sizeOfTable += 1;
1216
1217 tmp.processTypeName = "DecayPiSpin";
1218 tmp.processType = fDecay;
1219 tmp.processSubType = DECAY_PionMakeSpin;
1220 tmp.ordering[0] = 1000;
1221 tmp.ordering[1] = -1;
1222 tmp.ordering[2] = 1000;
1223 tmp.isDuplicable = false;
1224 theTable->push_back(tmp);
1225 sizeOfTable += 1;
1226
1227 tmp.processTypeName = "DecayRadio";
1228 tmp.processType = fDecay;
1229 tmp.processSubType = DECAY_Radioactive;
1230 tmp.ordering[0] = 1000;
1231 tmp.ordering[1] = -1;
1232 tmp.ordering[2] = 1000;
1233 tmp.isDuplicable = false;
1234 theTable->push_back(tmp);
1235 sizeOfTable += 1;
1236
1237 tmp.processTypeName = "DecayUnKnown";
1238 tmp.processType = fDecay;
1239 tmp.processSubType = DECAY_Unknown;
1240 tmp.ordering[0] = -1;
1241 tmp.ordering[1] = -1;
1242 tmp.ordering[2] = 1000;
1243 tmp.isDuplicable = false;
1244 theTable->push_back(tmp);
1245 sizeOfTable += 1;
1246
1247 tmp.processTypeName = "DecayMuAtom";
1248 tmp.processType = fDecay;
1249 tmp.processSubType = DECAY_MuAtom;
1250 tmp.ordering[0] = 1000;
1251 tmp.ordering[1] = -1;
1252 tmp.ordering[2] = 1000;
1253 tmp.isDuplicable = false;
1254 theTable->push_back(tmp);
1255 sizeOfTable += 1;
1256
1257 tmp.processTypeName = "DecayExt";
1258 tmp.processType = fDecay;
1259 tmp.processSubType = DECAY_External;
1260 tmp.ordering[0] = 1000;
1261 tmp.ordering[1] = -1;
1262 tmp.ordering[2] = 1000;
1263 tmp.isDuplicable = false;
1264 theTable->push_back(tmp);
1265 sizeOfTable += 1;
1266
1267 tmp.processTypeName = "StepLimiter";
1268 tmp.processType = fGeneral;
1269 tmp.processSubType = STEP_LIMITER;
1270 tmp.ordering[0] = -1;
1271 tmp.ordering[1] = -1;
1272 tmp.ordering[2] = 1000;
1273 tmp.isDuplicable = false;
1274 theTable->push_back(tmp);
1275 sizeOfTable += 1;
1276
1277 tmp.processTypeName = "UsrSepcCuts";
1278 tmp.processType = fGeneral;
1279 tmp.processSubType = USER_SPECIAL_CUTS;
1280 tmp.ordering[0] = -1;
1281 tmp.ordering[1] = -1;
1282 tmp.ordering[2] = 1000;
1283 tmp.isDuplicable = false;
1284 theTable->push_back(tmp);
1285 sizeOfTable += 1;
1286
1287 tmp.processTypeName = "NeutronKiller";
1288 tmp.processType = fGeneral;
1289 tmp.processSubType = NEUTRON_KILLER;
1290 tmp.ordering[0] = -1;
1291 tmp.ordering[1] = -1;
1292 tmp.ordering[2] = 1000;
1293 tmp.isDuplicable = false;
1294 theTable->push_back(tmp);
1295 sizeOfTable += 1;
1296
1297 tmp.processTypeName = "ParallelWorld";
1298 tmp.processType = fParallel;
1299 tmp.processSubType = PARALLEL_WORLD_PROCESS;
1300 tmp.ordering[0] = 9900;
1301 tmp.ordering[1] = 1;
1302 tmp.ordering[2] = 9900;
1303 tmp.isDuplicable = true;
1304 theTable->push_back(tmp);
1305 sizeOfTable += 1;
1306}
@ DECAY_WithSpin
@ DECAY_Unknown
@ DECAY_External
@ DECAY_MuAtom
@ DECAY_PionMakeSpin
@ DECAY_Radioactive
@ fGammaConversionToMuMu
@ fAnnihilationToHadrons
@ fBremsstrahlung
@ fCoulombScattering
@ fAnnihilationToTauTau
@ fGammaGeneralProcess
@ fGammaConversion
@ fRayleigh
@ fPositronGeneralProcess
@ fIonisation
@ fPairProdByCharged
@ fSynchrotronRadiation
@ fCerenkov
@ fAnnihilationToMuMu
@ fScintillation
@ fNuclearStopping
@ fComptonScattering
@ fTransitionRadiation
@ fMuonPairProdByCharged
@ fElectronGeneralProcess
@ fAnnihilation
@ fSurfaceReflection
@ fMultipleScattering
@ fPhotoElectricEffect
@ JustWarning
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
@ fNeutronGeneral
@ fChargeExchange
@ fHadronAtRest
@ fMuAtomicCapture
@ fHadronElastic
@ fHadronInelastic
@ fLowEnergyBrownianTransportation
@ fLowEnergyDoubleIonisation
@ fLowEnergyChargeIncrease
@ fLowEnergyMolecularDecay
@ fLowEnergyVibrationalExcitation
@ fLowEnergyElectronSolvation
@ fLowEnergyTransportation
@ fLowEnergyChargeDecrease
@ fOpRayleigh
@ fOpMieHG
@ fOpAbsorption
@ fOpWLS
@ fOpBoundary
@ fOpWLS2
G4ProcessVectorDoItIndex
@ idxPostStep
@ idxAlongStep
@ fOptical
@ fParallel
@ fGeneral
@ fDecay
@ fElectromagnetic
@ fHadronic
@ fUserDefined
@ fTransportation
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleType() const
G4double GetPDGCharge() const
const G4String & GetParticleName() const
void reset(G4bool ifSkipIon=true)
G4PTblDicIterator * GetIterator() const
static G4ParticleTable * GetParticleTable()
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4PhysicsListHelper * GetPhysicsListHelper()
void DumpOrdingParameterTable(G4int subType=-1) const
G4PhysicsListOrderingParameter GetOrdingParameter(G4int subType) const
void SetProcessOrdering(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt, G4int ordDoIt=ordDefault)
G4ProcessVector * GetProcessList() const
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
void SetProcessOrderingToLast(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
void SetProcessOrderingToFirst(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
std::size_t size() const
static G4RunManagerKernel * GetRunManagerKernel()
G4int GetNumberOfParallelWorld() const
static G4ScoringManager * GetScoringManagerIfExist()
G4ProcessType GetProcessType() const
Definition: G4VProcess.hh:392
G4int GetProcessSubType() const
Definition: G4VProcess.hh:404
const G4String & GetProcessName() const
Definition: G4VProcess.hh:386
Definition: inftrees.h:24
#define G4ThreadLocal
Definition: tls.hh:77