Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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