Geant4 9.6.0
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//
27// $Id$
28//
29//
30// ------------------------------------------------------------
31// GEANT 4 class header file
32//
33// ------------------------------------------------------------
34// History
35// first version 29 Apr 2011 by H.Kurashige
36// ------------------------------------------------------------
37
38#include "globals.hh"
41#include "G4ProcessManager.hh"
42#include "G4ParticleTable.hh"
43
44#include "G4ios.hh"
45#include <iomanip>
46#include <fstream>
47
48////////////////////////////////////////////////////////
49G4PhysicsListHelper* G4PhysicsListHelper::pPLHelper = 0;
50
51////////////////////////////////////////////////////////
52G4PhysicsListHelper::G4PhysicsListHelper()
53 : useCoupledTransportation(false),
54 theTransportationProcess(0),
55 verboseLevel(1),
56 theTable(0),
57 sizeOfTable(0),
58 ordParamFileName("")
59{
60 // pointer to the particle table
61 theParticleTable = G4ParticleTable::GetParticleTable();
62 theParticleIterator = theParticleTable->GetIterator();
63
64 ReadOrdingParameterTable();
65
66#ifdef G4VERBOSE
67 if (verboseLevel >1){
68 DumpOrdingParameterTable();
69 }
70#endif
71}
72
73////////////////////////////////////////////////////////
74G4PhysicsListHelper::~G4PhysicsListHelper()
75{
76 if (theTable !=0) {
77 theTable->clear();
78 delete theTable;
79 theTable=0;
80 sizeOfTable=0;
81 }
82 if (theTransportationProcess!=0) {
83 delete theTransportationProcess;
84 theTransportationProcess=0;
85 }
86}
87
88////////////////////////////////////////////////////////
90{
91 static G4PhysicsListHelper thePLHelper;
92 if (pPLHelper == 0) pPLHelper = &thePLHelper;
93 return pPLHelper;
94}
95
96////////////////////////////////////////////////////////
98{
99 bool isElectron = false;
100 bool isPositron = false;
101 bool isGamma = false;
102 bool isProton = false;
103 bool isGenericIon = false;
104 bool isAnyIon = false;
105 bool isAnyChargedBaryon = false;
106 bool isEmProc = false;
107
108 // loop over all particles in G4ParticleTable
109 theParticleIterator->reset();
110 while( (*theParticleIterator)() ){
111 G4ParticleDefinition* particle = theParticleIterator->value();
112 G4String name = particle->GetParticleName();
113 // check if any EM process exists
114 if (!isEmProc) {
115 G4ProcessVector* list = particle->GetProcessManager()->GetProcessList();
116 for (int idx=0; idx<list->size(); idx++){
117 isEmProc = ((*list)[idx])->GetProcessType() == fElectromagnetic;
118 if (isEmProc) break;
119 }
120 }
121
122 if ( name == "e-") isElectron = true;
123 else if ( name == "e+") isPositron = true;
124 else if ( name == "gamma") isGamma = true;
125 else if ( name == "GenericIon") isGenericIon = true;
126 else if ( name == "proton") isProton = true;
127 else if ( particle->GetParticleType() == "nucleus") isAnyIon = true;
128 else if ( particle->GetParticleType() == "baryon") {
129 if ( particle->GetPDGCharge() != 0.0 ) isAnyChargedBaryon = true;
130 }
131 }
132
133 if (!isEmProc) return;
134
135 // RULE 1
136 // e+, e- and gamma should exist
137 // if one of them exist
138 bool isEmBasic = isElectron || isPositron || isGamma;
139 bool isMissingEmBasic = !isElectron || !isPositron || !isGamma;
140 if (isEmBasic && isMissingEmBasic) {
141 G4String missingName="";
142 if (!isElectron) missingName += "e- ";
143 if (!isPositron) missingName += "e+ ";
144 if (!isGamma) missingName += "gamma ";
145
146#ifdef G4VERBOSE
147 if (verboseLevel >0){
148 G4cout << "G4PhysicsListHelper::CheckParticleList: "
149 << missingName << " do not exist " << G4endl;
150 G4cout << " These particle are necessary for basic EM processes"
151 << G4endl;
152 }
153#endif
154 G4Exception("G4PhysicsListHelper::CheckParticleList",
155 "Run0101", FatalException,
156 "Missing EM basic particle");
157 }
158
159 // RULE 2
160 // proton should exist
161 // if any other charged baryon exist
162 if (!isProton && isAnyChargedBaryon) {
163 G4String missingName="proton ";
164
165#ifdef G4VERBOSE
166 if (verboseLevel >0){
167 G4cout << "G4PhysicsListHelper::CheckParticleList: "
168 << missingName << " does not exist "<< G4endl;
169 G4cout << " Proton is necessary for EM baryon processes" << G4endl;
170 }
171#endif
172 missingName += " should be created ";
173 G4Exception("G4PhysicsListHelper::CheckParticleList",
174 "Run0102", FatalException,
175 "Missing Proton");
176 }
177
178 // RULE 3
179 // GenericIonn should exist
180 // if any other ion exist
181 if (!isGenericIon && isAnyIon) {
182 G4String missingName="GenericIon ";
183
184#ifdef G4VERBOSE
185 if (verboseLevel >0){
186 G4cout << "G4PhysicsListHelper::CheckParticleList: "
187 << missingName << " does not exist "<< G4endl;
188 G4cout << " GenericIon should be created if any ion is necessary" << G4endl;
189 }
190#endif
191 G4Exception("G4PhysicsListHelper::CheckParticleList",
192 "Run0103", FatalException,
193 "Missing GenericIon");
194 }
195
196}
197
198
199////////////////////////////////////////////////////////
200#include "G4Transportation.hh"
202#include "G4RunManagerKernel.hh"
203#include "G4ScoringManager.hh"
204
206{
207 G4int verboseLevelTransport = 0;
208
209#ifdef G4VERBOSE
210 if (verboseLevel >2){
211 G4cout << "G4PhysicsListHelper::AddTransportation() "<< G4endl;
212 }
213#endif
214
215 G4int nParaWorld =
217
218 if ( nParaWorld>0 ||
219 useCoupledTransportation ||
221#ifdef G4VERBOSE
222 if (verboseLevel >0) {
223 G4cout << " G4PhysicsListHelper::AddTransportation()"
224 << "--- G4CoupledTransportation is used "
225 << G4endl;
226 }
227#endif
228 theTransportationProcess = new G4CoupledTransportation(verboseLevelTransport);
229 } else {
230 theTransportationProcess = new G4Transportation(verboseLevelTransport);
231 }
232
233 // loop over all particles in G4ParticleTable
234 theParticleIterator->reset();
235 while( (*theParticleIterator)() ){
236 G4ParticleDefinition* particle = theParticleIterator->value();
237 G4ProcessManager* pmanager = particle->GetProcessManager();
238 // Add transportation process for all particles
239 if ( pmanager == 0) {
240 // Error !! no process manager
241#ifdef G4VERBOSE
242 if (verboseLevel>0){
243 G4cout << "G4PhysicsListHelper::AddTransportation "
244 <<" : No Process Manager for "
245 << particle->GetParticleName() << G4endl;
246 }
247#endif
248 G4Exception("G4PhysicsListHelper::AddTransportation",
249 "Run0104", FatalException,
250 "No process manager");
251 continue;
252 }
253 // add transportation with ordering = ( -1, "first", "first" )
254 pmanager ->AddProcess(theTransportationProcess);
255 pmanager ->SetProcessOrderingToFirst(theTransportationProcess, idxAlongStep);
256 pmanager ->SetProcessOrderingToFirst(theTransportationProcess, idxPostStep);
257 }
258}
259
260////////////////////////////////////////////////////////
261#include "G4ProcessManager.hh"
262
263void G4PhysicsListHelper::ReadOrdingParameterTable()
264{
265 G4bool readInFile = false;
266 std::ifstream fIn;
267
268 if( getenv("G4ORDPARAMTABLE") ){
269 ordParamFileName = getenv("G4ORDPARAMTABLE");
270#ifdef G4VERBOSE
271 if (verboseLevel >1){
272 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable :"
273 << ordParamFileName << " is assigned to Ordering Parameter Table "
274 << G4endl;
275 }
276#endif
277 // open input file //
278 fIn.open(ordParamFileName, std::ios::in);
279 // check if the file has been opened successfully
280 if (!fIn) {
281#ifdef G4VERBOSE
282 if (verboseLevel >0) {
283 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable "
284 << " Can not open file " << ordParamFileName << G4endl;
285 }
286#endif
287 G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable",
288 "Run0105", JustWarning,
289 "Fail to open ordering paramter table ");
290 } else {
291 readInFile = true;
292 }
293 }
294
295
296 // create OrdParamTable
297 if (theTable !=0) {
298 theTable->clear();
299 delete theTable;
300 theTable=0;
301 sizeOfTable=0;
302 }
303 theTable = new G4OrdParamTable();
304 sizeOfTable=0;
305
306 if (readInFile){
307 // read in the file and fill the table
308 while(!fIn.eof()) {
310 G4int flag;
311 fIn >> tmp.processTypeName >> tmp.processType >> tmp.processSubType
312 >> tmp.ordering[0] >> tmp.ordering[1] >> tmp.ordering[2] >> flag;
313 tmp.isDuplicable = (flag!=0);
314 theTable->push_back(tmp);
315 sizeOfTable +=1;
316 }
317 fIn.close();
318 } else {
319 ReadInDefaultOrderingParameter();
320 }
321
322 if (sizeOfTable==0){
323#ifdef G4VERBOSE
324 if (verboseLevel >0) {
325 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable "
326 << " Empty file " << ordParamFileName << G4endl;
327 }
328#endif
329 G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable",
330 "Run0106", JustWarning,
331 "The ordering parameter table is empty ");
332 delete theTable;
333 theTable=0;
334 sizeOfTable=0;
335 }
336 return;
337}
338
339////////////////////////////////////////////////////////
341{
342 if (theTable==0) {
343#ifdef G4VERBOSE
344 if (verboseLevel >0) {
345 G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable "
346 << " No ordering parameter table : " << ordParamFileName
347 << G4endl;
348 }
349#endif
350 return;
351 }
352 G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable : "
353 << ordParamFileName << G4endl;
354 G4cout << " TypeName "
355 << " ProcessType" << " SubType"
356 << " AtRest" << " AlongStep" << " PostStep"
357 << " Duplicable" << G4endl;
358 for (int i=0; i<sizeOfTable ; i++){
359 G4PhysicsListOrderingParameter* tmp=&(theTable->at(i));
360 if ((subType>=0) && (subType!=tmp->processSubType)) continue;
361 G4cout << std::setw(18) << tmp->processTypeName
362 << std::setw(15) << tmp->processType
363 << std::setw(15) << tmp->processSubType
364 << std::setw(15) << tmp->ordering[0]
365 << std::setw(15) << tmp->ordering[1]
366 << std::setw(15) << tmp->ordering[2];
367 if (tmp->isDuplicable) {
368 G4cout << " true";
369 } else {
370 G4cout << " false";
371 }
372 G4cout <<G4endl;
373 }
374}
375
376////////////////////////////////////////////////////////
378{
380
381 if (theTable==0) {
382#ifdef G4VERBOSE
383 if (verboseLevel >0) {
384 G4cout << "G4PhysicsListHelper::GetOrderingParameter : "
385 << " No ordering parameter table : " << ordParamFileName
386 << G4endl;
387 }
388#endif
389 return value;
390 }
391
392 for (int i=0; i<sizeOfTable ; i++){
393 G4PhysicsListOrderingParameter* tmp=&(theTable->at(i));
394 if (subType == tmp->processSubType){
395 value.processTypeName = tmp->processTypeName;
396 value.processType = tmp->processType;
397 value.processSubType = tmp->processSubType;
398 value.ordering[0] = tmp->ordering[0];
399 value.ordering[1] = tmp->ordering[1];
400 value.ordering[2] = tmp->ordering[2];
401 value.isDuplicable = tmp->isDuplicable;
402 }
403 }
404 return value;
405}
406
407////////////////////////////////////////////////////////
409 G4ParticleDefinition* particle)
410{
411 if (theTable==0) {
412#ifdef G4VERBOSE
413 if (verboseLevel >0) {
414 G4cout << "G4PhysicsListHelper::RegisterProcess :"
415 << " No ordering parameter table : " << ordParamFileName
416 << G4endl;
417 }
418#endif
419 G4Exception("G4PhysicsListHelper::RegisterPorcess",
420 "Run0107", FatalException,
421 "No Ordering Parameter Table");
422 return false;
423 }
424
425 const G4String pName = process->GetProcessName();
426 const G4int pType = process->GetProcessType();
427 const G4int pSubType = process->GetProcessSubType();
428
429#ifdef G4VERBOSE
430 if (verboseLevel >2) {
431 G4cout << "G4PhysicsListHelper::RegisterProcess :"
432 << pName << " Process Type = " << pType
433 << " SubType = "<< pSubType
434 << " to " << particle->GetParticleName()
435 << G4endl;
436 }
437#endif
438
439 // Check Process Type/SubType
440 if ((pType <1)||(pSubType<1)) {
441#ifdef G4VERBOSE
442 if (verboseLevel >0) {
443 G4cout << "G4PhysicsListHelper::RegisterProcess :"
444 << pName << " for " << particle->GetParticleName()
445 << " has illegal Process Type = " << pType
446 << " SubType = "<< pSubType << G4endl;
447 }
448#endif
449 G4Exception("G4PhysicsListHelper::RegisterPorcess",
450 "Run0108", FatalException,
451 "No Matching process Type/SubType");
452 return false;
453 }
454
455 G4bool isFound = false;
456 G4int ord[3];
457 G4bool duplicable = false;
458 for (int i=0; i<sizeOfTable ; i++){
459 G4PhysicsListOrderingParameter* tmp=&(theTable->at(i));
460 if ((tmp->processType==pType)&&(tmp->processSubType==pSubType)){
461 ord[0] = tmp->ordering[0];
462 ord[1] = tmp->ordering[1];
463 ord[2] = tmp->ordering[2];
464 duplicable = tmp->isDuplicable;
465 isFound = true;
466 break;
467 }
468 }
469 if (!isFound) {
470#ifdef G4VERBOSE
471 if (verboseLevel >0) {
472 G4cout << "G4PhysicsListHelper::RegisterProcess :"
473 << pName << " for " << particle->GetParticleName()
474 << " with type/subtype ="
475 << pType << "/" << pSubType
476 << " is not reigstered in OrdingParameterTable "
477 << G4endl;
478 }
479#endif
480 G4Exception("G4PhysicsListHelper::RegisterPorcess",
481 "Run0109", FatalException,
482 "No Matching process Type/SubType");
483 return false;
484 }
485
486 // Check Process Manager
487 G4ProcessManager* pManager = particle->GetProcessManager();
488 if ( pManager == 0) {
489 // Error !! no process manager
490#ifdef G4VERBOSE
491 if (verboseLevel>0){
492 G4cout << "G4PhysicsListHelper::RegisterProcess "
493 <<" : No Process Manager for "
494 << particle->GetParticleName() << G4endl;
495 }
496#endif
497 G4Exception("G4PhysicsListHelper::RegisterProcess ",
498 "Riun0110", FatalException,
499 "No process manager");
500 return false;
501 }
502
503 // Check Duplication
504 if (!duplicable){
505 G4bool duplicated = false;
506 G4ProcessVector* pList = pManager->GetProcessList();
507 for (G4int idx=0; idx<pList->size(); idx++) {
508 const G4VProcess* p = (*pList)[idx];
509 if ((p->GetProcessType()== pType) &&
510 (p->GetProcessSubType()== pSubType)){
511 duplicated = true;
512#ifdef G4VERBOSE
513 if (verboseLevel >0) {
514 G4cout << "G4PhysicsListHelper::RegisterProcess :"
515 << pName << " for " << particle->GetParticleName()
516 << " with type/subtype ="
517 << pType << "/" << pSubType
518 << " is has same subType as "
519 << p->GetProcessName()
520 << " for " << particle->GetParticleName()
521 << G4endl;
522 G4cout << "It will not be added !!" << G4endl;
523 }
524#endif
525 G4Exception("G4PhysicsListHelper::RegisterPorcess",
526 "Run0111", JustWarning,
527 "Duplication of processes");
528 }
529 }
530 if (duplicated) return false;
531 }
532
533 // Add Process
534 G4int code = pManager ->AddProcess(process);
535 if (code <0) return false;
536
537 // Set Ordering Parameter
538 for(G4int idx=0; idx<3; idx++){
539 G4ProcessVectorDoItIndex idxOrd = static_cast<G4ProcessVectorDoItIndex>(idx);
540 if (ord[idx]<0) {
541 // Do Nothing because NO DOIT
542 } else if (ord[idx]==0) {
543 pManager->SetProcessOrderingToFirst( process, idxOrd );
544 } else if (ord[idx]<9999) {
545 pManager->SetProcessOrdering( process, idxOrd , ord[idx]);
546 } else {
547 pManager->SetProcessOrderingToLast( process, idxOrd );
548 }
549 }
550#ifdef G4VERBOSE
551 if (verboseLevel >1) {
552 G4cout << "G4PhysicsListHelper::RegisterProcess :"
553 << pName << " for " << particle->GetParticleName()
554 << " with type/subtype ="
555 << pType << "/" << pSubType
556 << " is sucessfully registered with ordering parameters "
557 << ord[0] << ":" << ord[1] << ":" << ord[2]
558 << G4endl;
559 }
560#endif
561 return true;
562}
563
564void G4PhysicsListHelper::ReadInDefaultOrderingParameter()
565{
566
568
569 tmp.processTypeName = "Transportation";
570 tmp.processType = 1;
571 tmp.processSubType = 91;
572 tmp.ordering[0] = -1;
573 tmp.ordering[1] = 0;
574 tmp.ordering[2] = 0;
575 tmp.isDuplicable = false;
576 theTable->push_back(tmp);
577 sizeOfTable +=1;
578
579 tmp.processTypeName = "CoupleTrans";
580 tmp.processType = 1;
581 tmp.processSubType = 92;
582 tmp.ordering[0] = -1;
583 tmp.ordering[1] = 0;
584 tmp.ordering[2] = 0;
585 tmp.isDuplicable = false;
586 theTable->push_back(tmp);
587 sizeOfTable +=1;
588
589 tmp.processTypeName = "CoulombScat";
590 tmp.processType = 2;
591 tmp.processSubType = 1;
592 tmp.ordering[0] = -1;
593 tmp.ordering[1] = -1;
594 tmp.ordering[2] = 1000;
595 tmp.isDuplicable = false;
596 theTable->push_back(tmp);
597 sizeOfTable +=1;
598
599 tmp.processTypeName = "Ionisation";
600 tmp.processType = 2;
601 tmp.processSubType = 2;
602 tmp.ordering[0] = -1;
603 tmp.ordering[1] = 2;
604 tmp.ordering[2] = 2;
605 tmp.isDuplicable = false;
606 theTable->push_back(tmp);
607 sizeOfTable +=1;
608
609 tmp.processTypeName = "Brems";
610 tmp.processType = 2;
611 tmp.processSubType = 3;
612 tmp.ordering[0] = -1;
613 tmp.ordering[1] = -1;
614 tmp.ordering[2] = 3;
615 tmp.isDuplicable = false;
616 theTable->push_back(tmp);
617 sizeOfTable +=1;
618
619 tmp.processTypeName = "PairProdCharged";
620 tmp.processType = 2;
621 tmp.processSubType = 4;
622 tmp.ordering[0] = -1;
623 tmp.ordering[1] = -1;
624 tmp.ordering[2] = 4;
625 tmp.isDuplicable = false;
626 theTable->push_back(tmp);
627 sizeOfTable +=1;
628
629 tmp.processTypeName = "Annih";
630 tmp.processType = 2;
631 tmp.processSubType = 5;
632 tmp.ordering[0] = 5;
633 tmp.ordering[1] = -1;
634 tmp.ordering[2] = 5;
635 tmp.isDuplicable = false;
636 theTable->push_back(tmp);
637 sizeOfTable +=1;
638
639 tmp.processTypeName = "AnnihToMuMu";
640 tmp.processType = 2;
641 tmp.processSubType = 6;
642 tmp.ordering[0] = 6;
643 tmp.ordering[1] = -1;
644 tmp.ordering[2] = 6;
645 tmp.isDuplicable = false;
646 theTable->push_back(tmp);
647 sizeOfTable +=1;
648
649 tmp.processTypeName = "AnnihToHad";
650 tmp.processType = 2;
651 tmp.processSubType = 7;
652 tmp.ordering[0] = 7;
653 tmp.ordering[1] = -1;
654 tmp.ordering[2] = 7;
655 tmp.isDuplicable = false;
656 theTable->push_back(tmp);
657 sizeOfTable +=1;
658
659 tmp.processTypeName = "NuclearStopp";
660 tmp.processType = 2;
661 tmp.processSubType = 8;
662 tmp.ordering[0] = -1;
663 tmp.ordering[1] = 8;
664 tmp.ordering[2] = -1;
665 tmp.isDuplicable = false;
666 theTable->push_back(tmp);
667 sizeOfTable +=1;
668
669 tmp.processTypeName = "Msc";
670 tmp.processType = 2;
671 tmp.processSubType = 10;
672 tmp.ordering[0] = -1;
673 tmp.ordering[1] = 1;
674 tmp.ordering[2] = 1;
675 tmp.isDuplicable = false;
676 theTable->push_back(tmp);
677 sizeOfTable +=1;
678
679 tmp.processTypeName = "Rayleigh";
680 tmp.processType = 2;
681 tmp.processSubType = 11;
682 tmp.ordering[0] = -1;
683 tmp.ordering[1] = -1;
684 tmp.ordering[2] = 1000;
685 tmp.isDuplicable = false;
686 theTable->push_back(tmp);
687 sizeOfTable +=1;
688
689 tmp.processTypeName = "PhotoElectric";
690 tmp.processType = 2;
691 tmp.processSubType = 12;
692 tmp.ordering[0] = -1;
693 tmp.ordering[1] = -1;
694 tmp.ordering[2] = 1000;
695 tmp.isDuplicable = false;
696 theTable->push_back(tmp);
697 sizeOfTable +=1;
698
699 tmp.processTypeName = "Compton";
700 tmp.processType = 2;
701 tmp.processSubType = 13;
702 tmp.ordering[0] = -1;
703 tmp.ordering[1] = -1;
704 tmp.ordering[2] = 1000;
705 tmp.isDuplicable = false;
706 theTable->push_back(tmp);
707 sizeOfTable +=1;
708
709 tmp.processTypeName = "Conv";
710 tmp.processType = 2;
711 tmp.processSubType = 14;
712 tmp.ordering[0] = -1;
713 tmp.ordering[1] = -1;
714 tmp.ordering[2] = 1000;
715 tmp.isDuplicable = false;
716 theTable->push_back(tmp);
717 sizeOfTable +=1;
718
719 tmp.processTypeName = "ConvToMuMu";
720 tmp.processType = 2;
721 tmp.processSubType = 15;
722 tmp.ordering[0] = -1;
723 tmp.ordering[1] = -1;
724 tmp.ordering[2] = 1000;
725 tmp.isDuplicable = false;
726 theTable->push_back(tmp);
727 sizeOfTable +=1;
728
729 tmp.processTypeName = "Cerenkov";
730 tmp.processType = 2;
731 tmp.processSubType = 21;
732 tmp.ordering[0] = -1;
733 tmp.ordering[1] = -1;
734 tmp.ordering[2] = 1000;
735 tmp.isDuplicable = false;
736 theTable->push_back(tmp);
737 sizeOfTable +=1;
738
739 tmp.processTypeName = "Scintillation";
740 tmp.processType = 2;
741 tmp.processSubType = 22;
742 tmp.ordering[0] = 9999;
743 tmp.ordering[1] = -1;
744 tmp.ordering[2] = 9999;
745 tmp.isDuplicable = false;
746 theTable->push_back(tmp);
747 sizeOfTable +=1;
748
749 tmp.processTypeName = "SynchRad";
750 tmp.processType = 2;
751 tmp.processSubType = 23;
752 tmp.ordering[0] = -1;
753 tmp.ordering[1] = -1;
754 tmp.ordering[2] = 1000;
755 tmp.isDuplicable = false;
756 theTable->push_back(tmp);
757 sizeOfTable +=1;
758
759 tmp.processTypeName = "TransRad";
760 tmp.processType = 2;
761 tmp.processSubType = 24;
762 tmp.ordering[0] = -1;
763 tmp.ordering[1] = -1;
764 tmp.ordering[2] = 1000;
765 tmp.isDuplicable = false;
766 theTable->push_back(tmp);
767 sizeOfTable +=1;
768
769 tmp.processTypeName = "OpAbsorb";
770 tmp.processType = 3;
771 tmp.processSubType = 31;
772 tmp.ordering[0] = -1;
773 tmp.ordering[1] = -1;
774 tmp.ordering[2] = 1000;
775 tmp.isDuplicable = false;
776 theTable->push_back(tmp);
777 sizeOfTable +=1;
778
779 tmp.processTypeName = "OpBoundary";
780 tmp.processType = 3;
781 tmp.processSubType = 32;
782 tmp.ordering[0] = -1;
783 tmp.ordering[1] = -1;
784 tmp.ordering[2] = 1000;
785 tmp.isDuplicable = false;
786 theTable->push_back(tmp);
787 sizeOfTable +=1;
788
789 tmp.processTypeName = "OpRayleigh";
790 tmp.processType = 3;
791 tmp.processSubType = 33;
792 tmp.ordering[0] = -1;
793 tmp.ordering[1] = -1;
794 tmp.ordering[2] = 1000;
795 tmp.isDuplicable = false;
796 theTable->push_back(tmp);
797 sizeOfTable +=1;
798
799 tmp.processTypeName = "OpWLS";
800 tmp.processType = 3;
801 tmp.processSubType = 34;
802 tmp.ordering[0] = -1;
803 tmp.ordering[1] = -1;
804 tmp.ordering[2] = 1000;
805 tmp.isDuplicable = false;
806 theTable->push_back(tmp);
807 sizeOfTable +=1;
808
809 tmp.processTypeName = "OpMieHG";
810 tmp.processType = 3;
811 tmp.processSubType = 35;
812 tmp.ordering[0] = -1;
813 tmp.ordering[1] = -1;
814 tmp.ordering[2] = 1000;
815 tmp.isDuplicable = false;
816 theTable->push_back(tmp);
817 sizeOfTable +=1;
818
819 tmp.processTypeName = "DNAElastic";
820 tmp.processType = 2;
821 tmp.processSubType = 51;
822 tmp.ordering[0] = -1;
823 tmp.ordering[1] = -1;
824 tmp.ordering[2] = 1000;
825 tmp.isDuplicable = false;
826 theTable->push_back(tmp);
827 sizeOfTable +=1;
828
829 tmp.processTypeName = "DNAExcit";
830 tmp.processType = 2;
831 tmp.processSubType = 52;
832 tmp.ordering[0] = -1;
833 tmp.ordering[1] = -1;
834 tmp.ordering[2] = 1000;
835 tmp.isDuplicable = false;
836 theTable->push_back(tmp);
837 sizeOfTable +=1;
838
839 tmp.processTypeName = "DNAIonisation";
840 tmp.processType = 2;
841 tmp.processSubType = 53;
842 tmp.ordering[0] = -1;
843 tmp.ordering[1] = -1;
844 tmp.ordering[2] = 1000;
845 tmp.isDuplicable = false;
846 theTable->push_back(tmp);
847 sizeOfTable +=1;
848
849 tmp.processTypeName = "DNAVibExcit";
850 tmp.processType = 2;
851 tmp.processSubType = 54;
852 tmp.ordering[0] = -1;
853 tmp.ordering[1] = -1;
854 tmp.ordering[2] = 1000;
855 tmp.isDuplicable = false;
856 theTable->push_back(tmp);
857 sizeOfTable +=1;
858
859 tmp.processTypeName = "DNAAttachment";
860 tmp.processType = 2;
861 tmp.processSubType = 55;
862 tmp.ordering[0] = -1;
863 tmp.ordering[1] = -1;
864 tmp.ordering[2] = 1000;
865 tmp.isDuplicable = false;
866 theTable->push_back(tmp);
867 sizeOfTable +=1;
868
869 tmp.processTypeName = "DNAChargeDec";
870 tmp.processType = 2;
871 tmp.processSubType = 56;
872 tmp.ordering[0] = -1;
873 tmp.ordering[1] = -1;
874 tmp.ordering[2] = 1000;
875 tmp.isDuplicable = false;
876 theTable->push_back(tmp);
877 sizeOfTable +=1;
878
879 tmp.processTypeName = "DNAChargeInc";
880 tmp.processType = 2;
881 tmp.processSubType = 57;
882 tmp.ordering[0] = -1;
883 tmp.ordering[1] = -1;
884 tmp.ordering[2] = 1000;
885 tmp.isDuplicable = false;
886 theTable->push_back(tmp);
887 sizeOfTable +=1;
888
889 tmp.processTypeName = "DNAElectronSolvatation";
890 tmp.processType = 2;
891 tmp.processSubType = 58;
892 tmp.ordering[0] = -1;
893 tmp.ordering[1] = -1;
894 tmp.ordering[2] = 1000;
895 tmp.isDuplicable = false;
896 theTable->push_back(tmp);
897 sizeOfTable +=1;
898
899 tmp.processTypeName = "DNAMolecularDecay";
900 tmp.processType = 6;
901 tmp.processSubType = 59;
902 tmp.ordering[0] = 1000;
903 tmp.ordering[1] = -1;
904 tmp.ordering[2] = -1;
905 tmp.isDuplicable = false;
906 theTable->push_back(tmp);
907 sizeOfTable +=1;
908
909 tmp.processTypeName = "ITTransportation";
910 tmp.processType = 1;
911 tmp.processSubType = 60;
912 tmp.ordering[0] = -1;
913 tmp.ordering[1] = 0;
914 tmp.ordering[2] = 0;
915 tmp.isDuplicable = false;
916 theTable->push_back(tmp);
917 sizeOfTable +=1;
918
919 tmp.processTypeName = "DNABrownianTransportation";
920 tmp.processType = 1;
921 tmp.processSubType = 61;
922 tmp.ordering[0] = -1;
923 tmp.ordering[1] = -1;
924 tmp.ordering[2] = -1;
925 tmp.isDuplicable = false;
926 theTable->push_back(tmp);
927 sizeOfTable +=1;
928
929 tmp.processTypeName = "DNADoubleIonisation";
930 tmp.processType = 2;
931 tmp.processSubType = 62;
932 tmp.ordering[0] = -1;
933 tmp.ordering[1] = -1;
934 tmp.ordering[2] = 1000;
935 tmp.isDuplicable = false;
936 theTable->push_back(tmp);
937 sizeOfTable +=1;
938
939 tmp.processTypeName = "DNADoubleCapture";
940 tmp.processType = 2;
941 tmp.processSubType = 63;
942 tmp.ordering[0] = -1;
943 tmp.ordering[1] = -1;
944 tmp.ordering[2] = 1000;
945 tmp.isDuplicable = false;
946 theTable->push_back(tmp);
947 sizeOfTable +=1;
948
949 tmp.processTypeName = "DNAIonisingTransfer";
950 tmp.processType = 2;
951 tmp.processSubType = 64;
952 tmp.ordering[0] = -1;
953 tmp.ordering[1] = -1;
954 tmp.ordering[2] = 1000;
955 tmp.isDuplicable = false;
956 theTable->push_back(tmp);
957 sizeOfTable +=1;
958
959 tmp.processTypeName = "HadElastic";
960 tmp.processType = 4;
961 tmp.processSubType = 111;
962 tmp.ordering[0] = -1;
963 tmp.ordering[1] = -1;
964 tmp.ordering[2] = 1000;
965 tmp.isDuplicable = false;
966 theTable->push_back(tmp);
967 sizeOfTable +=1;
968
969 tmp.processTypeName = "HadInElastic";
970 tmp.processType = 4;
971 tmp.processSubType = 121;
972 tmp.ordering[0] = -1;
973 tmp.ordering[1] = -1;
974 tmp.ordering[2] = 1000;
975 tmp.isDuplicable = false;
976 theTable->push_back(tmp);
977 sizeOfTable +=1;
978
979 tmp.processTypeName = "HadCapture";
980 tmp.processType = 4;
981 tmp.processSubType = 131;
982 tmp.ordering[0] = -1;
983 tmp.ordering[1] = -1;
984 tmp.ordering[2] = 1000;
985 tmp.isDuplicable = false;
986 theTable->push_back(tmp);
987 sizeOfTable +=1;
988
989 tmp.processTypeName = "HadFission";
990 tmp.processType = 4;
991 tmp.processSubType = 141;
992 tmp.ordering[0] = -1;
993 tmp.ordering[1] = -1;
994 tmp.ordering[2] = 1000;
995 tmp.isDuplicable = false;
996 theTable->push_back(tmp);
997 sizeOfTable +=1;
998
999 tmp.processTypeName = "HadAtRest";
1000 tmp.processType = 4;
1001 tmp.processSubType = 151;
1002 tmp.ordering[0] = 1000;
1003 tmp.ordering[1] = -1;
1004 tmp.ordering[2] = -1;
1005 tmp.isDuplicable = false;
1006 theTable->push_back(tmp);
1007 sizeOfTable +=1;
1008
1009 tmp.processTypeName = "HadCEX";
1010 tmp.processType = 4;
1011 tmp.processSubType = 161;
1012 tmp.ordering[0] = -1;
1013 tmp.ordering[1] = -1;
1014 tmp.ordering[2] = 1000;
1015 tmp.isDuplicable = false;
1016 theTable->push_back(tmp);
1017 sizeOfTable +=1;
1018
1019 tmp.processTypeName = "Decay";
1020 tmp.processType = 6;
1021 tmp.processSubType = 201;
1022 tmp.ordering[0] = 1000;
1023 tmp.ordering[1] = -1;
1024 tmp.ordering[2] = 1000;
1025 tmp.isDuplicable = false;
1026 theTable->push_back(tmp);
1027 sizeOfTable +=1;
1028
1029 tmp.processTypeName = "DecayWSpin";
1030 tmp.processType = 6;
1031 tmp.processSubType = 202;
1032 tmp.ordering[0] = 1000;
1033 tmp.ordering[1] = -1;
1034 tmp.ordering[2] = 1000;
1035 tmp.isDuplicable = false;
1036 theTable->push_back(tmp);
1037 sizeOfTable +=1;
1038
1039 tmp.processTypeName = "DecayPiSpin";
1040 tmp.processType = 6;
1041 tmp.processSubType = 203;
1042 tmp.ordering[0] = 1000;
1043 tmp.ordering[1] = -1;
1044 tmp.ordering[2] = 1000;
1045 tmp.isDuplicable = false;
1046 theTable->push_back(tmp);
1047 sizeOfTable +=1;
1048
1049 tmp.processTypeName = "DecayRadio";
1050 tmp.processType = 6;
1051 tmp.processSubType = 210;
1052 tmp.ordering[0] = 1000;
1053 tmp.ordering[1] = -1;
1054 tmp.ordering[2] = 1000;
1055 tmp.isDuplicable = false;
1056 theTable->push_back(tmp);
1057 sizeOfTable +=1;
1058
1059 tmp.processTypeName = "DecayUnKnown";
1060 tmp.processType = 6;
1061 tmp.processSubType = 211;
1062 tmp.ordering[0] = 1000;
1063 tmp.ordering[1] = -1;
1064 tmp.ordering[2] = 1000;
1065 tmp.isDuplicable = false;
1066 theTable->push_back(tmp);
1067 sizeOfTable +=1;
1068
1069 tmp.processTypeName = "DecayExt";
1070 tmp.processType = 6;
1071 tmp.processSubType = 231;
1072 tmp.ordering[0] = 1000;
1073 tmp.ordering[1] = -1;
1074 tmp.ordering[2] = 1000;
1075 tmp.isDuplicable = false;
1076 theTable->push_back(tmp);
1077 sizeOfTable +=1;
1078
1079 tmp.processTypeName = "StepLimiter";
1080 tmp.processType = 7;
1081 tmp.processSubType = 401;
1082 tmp.ordering[0] = -1;
1083 tmp.ordering[1] = -1;
1084 tmp.ordering[2] = 1000;
1085 tmp.isDuplicable = false;
1086 theTable->push_back(tmp);
1087 sizeOfTable +=1;
1088
1089 tmp.processTypeName = "UsrSepcCuts";
1090 tmp.processType = 7;
1091 tmp.processSubType = 402;
1092 tmp.ordering[0] = -1;
1093 tmp.ordering[1] = -1;
1094 tmp.ordering[2] = 1000;
1095 tmp.isDuplicable = false;
1096 theTable->push_back(tmp);
1097 sizeOfTable +=1;
1098
1099 tmp.processTypeName = "NeutronKiller";
1100 tmp.processType = 7;
1101 tmp.processSubType = 403;
1102 tmp.ordering[0] = -1;
1103 tmp.ordering[1] = -1;
1104 tmp.ordering[2] = 1000;
1105 tmp.isDuplicable = false;
1106 theTable->push_back(tmp);
1107 sizeOfTable +=1;
1108}
1109
1110
@ JustWarning
@ FatalException
G4ProcessVectorDoItIndex
@ idxPostStep
@ idxAlongStep
@ fElectromagnetic
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleType() const
G4double GetPDGCharge() const
const G4String & GetParticleName() const
static G4ParticleTable * GetParticleTable()
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
void CheckParticleList() const
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)
G4int size() const
static G4RunManagerKernel * GetRunManagerKernel()
G4int GetNumberOfParallelWorld() const
static G4ScoringManager * GetScoringManagerIfExist()
G4ProcessType GetProcessType() const
Definition: G4VProcess.hh:385
G4int GetProcessSubType() const
Definition: G4VProcess.hh:397
const G4String & GetProcessName() const
Definition: G4VProcess.hh:379
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41