00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "globals.hh"
00039 #include "G4PhysicsListHelper.hh"
00040 #include "G4ParticleDefinition.hh"
00041 #include "G4ProcessManager.hh"
00042 #include "G4ParticleTable.hh"
00043
00044 #include "G4ios.hh"
00045 #include <iomanip>
00046 #include <fstream>
00047
00049 G4PhysicsListHelper* G4PhysicsListHelper::pPLHelper = 0;
00050
00052 G4PhysicsListHelper::G4PhysicsListHelper()
00053 : useCoupledTransportation(false),
00054 theTransportationProcess(0),
00055 verboseLevel(1),
00056 theTable(0),
00057 sizeOfTable(0),
00058 ordParamFileName("")
00059 {
00060
00061 theParticleTable = G4ParticleTable::GetParticleTable();
00062 theParticleIterator = theParticleTable->GetIterator();
00063
00064 ReadOrdingParameterTable();
00065
00066 #ifdef G4VERBOSE
00067 if (verboseLevel >1){
00068 DumpOrdingParameterTable();
00069 }
00070 #endif
00071 }
00072
00074 G4PhysicsListHelper::~G4PhysicsListHelper()
00075 {
00076 if (theTable !=0) {
00077 theTable->clear();
00078 delete theTable;
00079 theTable=0;
00080 sizeOfTable=0;
00081 }
00082 if (theTransportationProcess!=0) {
00083 delete theTransportationProcess;
00084 theTransportationProcess=0;
00085 }
00086 }
00087
00089 G4PhysicsListHelper* G4PhysicsListHelper::GetPhysicsListHelper()
00090 {
00091 static G4PhysicsListHelper thePLHelper;
00092 if (pPLHelper == 0) pPLHelper = &thePLHelper;
00093 return pPLHelper;
00094 }
00095
00097 void G4PhysicsListHelper::CheckParticleList() const
00098 {
00099 bool isElectron = false;
00100 bool isPositron = false;
00101 bool isGamma = false;
00102 bool isProton = false;
00103 bool isGenericIon = false;
00104 bool isAnyIon = false;
00105 bool isAnyChargedBaryon = false;
00106 bool isEmProc = false;
00107
00108
00109 theParticleIterator->reset();
00110 while( (*theParticleIterator)() ){
00111 G4ParticleDefinition* particle = theParticleIterator->value();
00112 G4String name = particle->GetParticleName();
00113
00114 if (!isEmProc) {
00115 G4ProcessVector* list = particle->GetProcessManager()->GetProcessList();
00116 for (int idx=0; idx<list->size(); idx++){
00117 isEmProc = ((*list)[idx])->GetProcessType() == fElectromagnetic;
00118 if (isEmProc) break;
00119 }
00120 }
00121
00122 if ( name == "e-") isElectron = true;
00123 else if ( name == "e+") isPositron = true;
00124 else if ( name == "gamma") isGamma = true;
00125 else if ( name == "GenericIon") isGenericIon = true;
00126 else if ( name == "proton") isProton = true;
00127 else if ( particle->GetParticleType() == "nucleus") isAnyIon = true;
00128 else if ( particle->GetParticleType() == "baryon") {
00129 if ( particle->GetPDGCharge() != 0.0 ) isAnyChargedBaryon = true;
00130 }
00131 }
00132
00133 if (!isEmProc) return;
00134
00135
00136
00137
00138 bool isEmBasic = isElectron || isPositron || isGamma;
00139 bool isMissingEmBasic = !isElectron || !isPositron || !isGamma;
00140 if (isEmBasic && isMissingEmBasic) {
00141 G4String missingName="";
00142 if (!isElectron) missingName += "e- ";
00143 if (!isPositron) missingName += "e+ ";
00144 if (!isGamma) missingName += "gamma ";
00145
00146 #ifdef G4VERBOSE
00147 if (verboseLevel >0){
00148 G4cout << "G4PhysicsListHelper::CheckParticleList: "
00149 << missingName << " do not exist " << G4endl;
00150 G4cout << " These particle are necessary for basic EM processes"
00151 << G4endl;
00152 }
00153 #endif
00154 G4Exception("G4PhysicsListHelper::CheckParticleList",
00155 "Run0101", FatalException,
00156 "Missing EM basic particle");
00157 }
00158
00159
00160
00161
00162 if (!isProton && isAnyChargedBaryon) {
00163 G4String missingName="proton ";
00164
00165 #ifdef G4VERBOSE
00166 if (verboseLevel >0){
00167 G4cout << "G4PhysicsListHelper::CheckParticleList: "
00168 << missingName << " does not exist "<< G4endl;
00169 G4cout << " Proton is necessary for EM baryon processes" << G4endl;
00170 }
00171 #endif
00172 missingName += " should be created ";
00173 G4Exception("G4PhysicsListHelper::CheckParticleList",
00174 "Run0102", FatalException,
00175 "Missing Proton");
00176 }
00177
00178
00179
00180
00181 if (!isGenericIon && isAnyIon) {
00182 G4String missingName="GenericIon ";
00183
00184 #ifdef G4VERBOSE
00185 if (verboseLevel >0){
00186 G4cout << "G4PhysicsListHelper::CheckParticleList: "
00187 << missingName << " does not exist "<< G4endl;
00188 G4cout << " GenericIon should be created if any ion is necessary" << G4endl;
00189 }
00190 #endif
00191 G4Exception("G4PhysicsListHelper::CheckParticleList",
00192 "Run0103", FatalException,
00193 "Missing GenericIon");
00194 }
00195
00196 }
00197
00198
00200 #include "G4Transportation.hh"
00201 #include "G4CoupledTransportation.hh"
00202 #include "G4RunManagerKernel.hh"
00203 #include "G4ScoringManager.hh"
00204
00205 void G4PhysicsListHelper::AddTransportation()
00206 {
00207 G4int verboseLevelTransport = 0;
00208
00209 #ifdef G4VERBOSE
00210 if (verboseLevel >2){
00211 G4cout << "G4PhysicsListHelper::AddTransportation() "<< G4endl;
00212 }
00213 #endif
00214
00215 G4int nParaWorld =
00216 G4RunManagerKernel::GetRunManagerKernel()->GetNumberOfParallelWorld();
00217
00218 if ( nParaWorld>0 ||
00219 useCoupledTransportation ||
00220 G4ScoringManager::GetScoringManagerIfExist()) {
00221 #ifdef G4VERBOSE
00222 if (verboseLevel >0) {
00223 G4cout << " G4PhysicsListHelper::AddTransportation()"
00224 << "--- G4CoupledTransportation is used "
00225 << G4endl;
00226 }
00227 #endif
00228 theTransportationProcess = new G4CoupledTransportation(verboseLevelTransport);
00229 } else {
00230 theTransportationProcess = new G4Transportation(verboseLevelTransport);
00231 }
00232
00233
00234 theParticleIterator->reset();
00235 while( (*theParticleIterator)() ){
00236 G4ParticleDefinition* particle = theParticleIterator->value();
00237 G4ProcessManager* pmanager = particle->GetProcessManager();
00238
00239 if ( pmanager == 0) {
00240
00241 #ifdef G4VERBOSE
00242 if (verboseLevel>0){
00243 G4cout << "G4PhysicsListHelper::AddTransportation "
00244 <<" : No Process Manager for "
00245 << particle->GetParticleName() << G4endl;
00246 }
00247 #endif
00248 G4Exception("G4PhysicsListHelper::AddTransportation",
00249 "Run0104", FatalException,
00250 "No process manager");
00251 continue;
00252 }
00253
00254 pmanager ->AddProcess(theTransportationProcess);
00255 pmanager ->SetProcessOrderingToFirst(theTransportationProcess, idxAlongStep);
00256 pmanager ->SetProcessOrderingToFirst(theTransportationProcess, idxPostStep);
00257 }
00258 }
00259
00261 #include "G4ProcessManager.hh"
00262
00263 void G4PhysicsListHelper::ReadOrdingParameterTable()
00264 {
00265 G4bool readInFile = false;
00266 std::ifstream fIn;
00267
00268 if( getenv("G4ORDPARAMTABLE") ){
00269 ordParamFileName = getenv("G4ORDPARAMTABLE");
00270 #ifdef G4VERBOSE
00271 if (verboseLevel >1){
00272 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable :"
00273 << ordParamFileName << " is assigned to Ordering Parameter Table "
00274 << G4endl;
00275 }
00276 #endif
00277
00278 fIn.open(ordParamFileName, std::ios::in);
00279
00280 if (!fIn) {
00281 #ifdef G4VERBOSE
00282 if (verboseLevel >0) {
00283 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable "
00284 << " Can not open file " << ordParamFileName << G4endl;
00285 }
00286 #endif
00287 G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable",
00288 "Run0105", JustWarning,
00289 "Fail to open ordering paramter table ");
00290 } else {
00291 readInFile = true;
00292 }
00293 }
00294
00295
00296
00297 if (theTable !=0) {
00298 theTable->clear();
00299 delete theTable;
00300 theTable=0;
00301 sizeOfTable=0;
00302 }
00303 theTable = new G4OrdParamTable();
00304 sizeOfTable=0;
00305
00306 if (readInFile){
00307
00308 while(!fIn.eof()) {
00309 G4PhysicsListOrderingParameter tmp;
00310 G4int flag;
00311 fIn >> tmp.processTypeName >> tmp.processType >> tmp.processSubType
00312 >> tmp.ordering[0] >> tmp.ordering[1] >> tmp.ordering[2] >> flag;
00313 tmp.isDuplicable = (flag!=0);
00314 theTable->push_back(tmp);
00315 sizeOfTable +=1;
00316 }
00317 fIn.close();
00318 } else {
00319 ReadInDefaultOrderingParameter();
00320 }
00321
00322 if (sizeOfTable==0){
00323 #ifdef G4VERBOSE
00324 if (verboseLevel >0) {
00325 G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable "
00326 << " Empty file " << ordParamFileName << G4endl;
00327 }
00328 #endif
00329 G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable",
00330 "Run0106", JustWarning,
00331 "The ordering parameter table is empty ");
00332 delete theTable;
00333 theTable=0;
00334 sizeOfTable=0;
00335 }
00336 return;
00337 }
00338
00340 void G4PhysicsListHelper::DumpOrdingParameterTable(G4int subType) const
00341 {
00342 if (theTable==0) {
00343 #ifdef G4VERBOSE
00344 if (verboseLevel >0) {
00345 G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable "
00346 << " No ordering parameter table : " << ordParamFileName
00347 << G4endl;
00348 }
00349 #endif
00350 return;
00351 }
00352 G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable : "
00353 << ordParamFileName << G4endl;
00354 G4cout << " TypeName "
00355 << " ProcessType" << " SubType"
00356 << " AtRest" << " AlongStep" << " PostStep"
00357 << " Duplicable" << G4endl;
00358 for (int i=0; i<sizeOfTable ; i++){
00359 G4PhysicsListOrderingParameter* tmp=&(theTable->at(i));
00360 if ((subType>=0) && (subType!=tmp->processSubType)) continue;
00361 G4cout << std::setw(18) << tmp->processTypeName
00362 << std::setw(15) << tmp->processType
00363 << std::setw(15) << tmp->processSubType
00364 << std::setw(15) << tmp->ordering[0]
00365 << std::setw(15) << tmp->ordering[1]
00366 << std::setw(15) << tmp->ordering[2];
00367 if (tmp->isDuplicable) {
00368 G4cout << " true";
00369 } else {
00370 G4cout << " false";
00371 }
00372 G4cout <<G4endl;
00373 }
00374 }
00375
00377 G4PhysicsListOrderingParameter G4PhysicsListHelper::GetOrdingParameter(G4int subType) const
00378 {
00379 G4PhysicsListOrderingParameter value;
00380
00381 if (theTable==0) {
00382 #ifdef G4VERBOSE
00383 if (verboseLevel >0) {
00384 G4cout << "G4PhysicsListHelper::GetOrderingParameter : "
00385 << " No ordering parameter table : " << ordParamFileName
00386 << G4endl;
00387 }
00388 #endif
00389 return value;
00390 }
00391
00392 for (int i=0; i<sizeOfTable ; i++){
00393 G4PhysicsListOrderingParameter* tmp=&(theTable->at(i));
00394 if (subType == tmp->processSubType){
00395 value.processTypeName = tmp->processTypeName;
00396 value.processType = tmp->processType;
00397 value.processSubType = tmp->processSubType;
00398 value.ordering[0] = tmp->ordering[0];
00399 value.ordering[1] = tmp->ordering[1];
00400 value.ordering[2] = tmp->ordering[2];
00401 value.isDuplicable = tmp->isDuplicable;
00402 }
00403 }
00404 return value;
00405 }
00406
00408 G4bool G4PhysicsListHelper::RegisterProcess(G4VProcess* process,
00409 G4ParticleDefinition* particle)
00410 {
00411 if (theTable==0) {
00412 #ifdef G4VERBOSE
00413 if (verboseLevel >0) {
00414 G4cout << "G4PhysicsListHelper::RegisterProcess :"
00415 << " No ordering parameter table : " << ordParamFileName
00416 << G4endl;
00417 }
00418 #endif
00419 G4Exception("G4PhysicsListHelper::RegisterPorcess",
00420 "Run0107", FatalException,
00421 "No Ordering Parameter Table");
00422 return false;
00423 }
00424
00425 const G4String pName = process->GetProcessName();
00426 const G4int pType = process->GetProcessType();
00427 const G4int pSubType = process->GetProcessSubType();
00428
00429 #ifdef G4VERBOSE
00430 if (verboseLevel >2) {
00431 G4cout << "G4PhysicsListHelper::RegisterProcess :"
00432 << pName << " Process Type = " << pType
00433 << " SubType = "<< pSubType
00434 << " to " << particle->GetParticleName()
00435 << G4endl;
00436 }
00437 #endif
00438
00439
00440 if ((pType <1)||(pSubType<1)) {
00441 #ifdef G4VERBOSE
00442 if (verboseLevel >0) {
00443 G4cout << "G4PhysicsListHelper::RegisterProcess :"
00444 << pName << " for " << particle->GetParticleName()
00445 << " has illegal Process Type = " << pType
00446 << " SubType = "<< pSubType << G4endl;
00447 }
00448 #endif
00449 G4Exception("G4PhysicsListHelper::RegisterPorcess",
00450 "Run0108", FatalException,
00451 "No Matching process Type/SubType");
00452 return false;
00453 }
00454
00455 G4bool isFound = false;
00456 G4int ord[3];
00457 G4bool duplicable = false;
00458 for (int i=0; i<sizeOfTable ; i++){
00459 G4PhysicsListOrderingParameter* tmp=&(theTable->at(i));
00460 if ((tmp->processType==pType)&&(tmp->processSubType==pSubType)){
00461 ord[0] = tmp->ordering[0];
00462 ord[1] = tmp->ordering[1];
00463 ord[2] = tmp->ordering[2];
00464 duplicable = tmp->isDuplicable;
00465 isFound = true;
00466 break;
00467 }
00468 }
00469 if (!isFound) {
00470 #ifdef G4VERBOSE
00471 if (verboseLevel >0) {
00472 G4cout << "G4PhysicsListHelper::RegisterProcess :"
00473 << pName << " for " << particle->GetParticleName()
00474 << " with type/subtype ="
00475 << pType << "/" << pSubType
00476 << " is not reigstered in OrdingParameterTable "
00477 << G4endl;
00478 }
00479 #endif
00480 G4Exception("G4PhysicsListHelper::RegisterPorcess",
00481 "Run0109", FatalException,
00482 "No Matching process Type/SubType");
00483 return false;
00484 }
00485
00486
00487 G4ProcessManager* pManager = particle->GetProcessManager();
00488 if ( pManager == 0) {
00489
00490 #ifdef G4VERBOSE
00491 if (verboseLevel>0){
00492 G4cout << "G4PhysicsListHelper::RegisterProcess "
00493 <<" : No Process Manager for "
00494 << particle->GetParticleName() << G4endl;
00495 }
00496 #endif
00497 G4Exception("G4PhysicsListHelper::RegisterProcess ",
00498 "Riun0110", FatalException,
00499 "No process manager");
00500 return false;
00501 }
00502
00503
00504 if (!duplicable){
00505 G4bool duplicated = false;
00506 G4ProcessVector* pList = pManager->GetProcessList();
00507 for (G4int idx=0; idx<pList->size(); idx++) {
00508 const G4VProcess* p = (*pList)[idx];
00509 if ((p->GetProcessType()== pType) &&
00510 (p->GetProcessSubType()== pSubType)){
00511 duplicated = true;
00512 #ifdef G4VERBOSE
00513 if (verboseLevel >0) {
00514 G4cout << "G4PhysicsListHelper::RegisterProcess :"
00515 << pName << " for " << particle->GetParticleName()
00516 << " with type/subtype ="
00517 << pType << "/" << pSubType
00518 << " is has same subType as "
00519 << p->GetProcessName()
00520 << " for " << particle->GetParticleName()
00521 << G4endl;
00522 G4cout << "It will not be added !!" << G4endl;
00523 }
00524 #endif
00525 G4Exception("G4PhysicsListHelper::RegisterPorcess",
00526 "Run0111", JustWarning,
00527 "Duplication of processes");
00528 }
00529 }
00530 if (duplicated) return false;
00531 }
00532
00533
00534 G4int code = pManager ->AddProcess(process);
00535 if (code <0) return false;
00536
00537
00538 for(G4int idx=0; idx<3; idx++){
00539 G4ProcessVectorDoItIndex idxOrd = static_cast<G4ProcessVectorDoItIndex>(idx);
00540 if (ord[idx]<0) {
00541
00542 } else if (ord[idx]==0) {
00543 pManager->SetProcessOrderingToFirst( process, idxOrd );
00544 } else if (ord[idx]<9999) {
00545 pManager->SetProcessOrdering( process, idxOrd , ord[idx]);
00546 } else {
00547 pManager->SetProcessOrderingToLast( process, idxOrd );
00548 }
00549 }
00550 #ifdef G4VERBOSE
00551 if (verboseLevel >1) {
00552 G4cout << "G4PhysicsListHelper::RegisterProcess :"
00553 << pName << " for " << particle->GetParticleName()
00554 << " with type/subtype ="
00555 << pType << "/" << pSubType
00556 << " is sucessfully registered with ordering parameters "
00557 << ord[0] << ":" << ord[1] << ":" << ord[2]
00558 << G4endl;
00559 }
00560 #endif
00561 return true;
00562 }
00563
00564 void G4PhysicsListHelper::ReadInDefaultOrderingParameter()
00565 {
00566
00567 G4PhysicsListOrderingParameter tmp;
00568
00569 tmp.processTypeName = "Transportation";
00570 tmp.processType = 1;
00571 tmp.processSubType = 91;
00572 tmp.ordering[0] = -1;
00573 tmp.ordering[1] = 0;
00574 tmp.ordering[2] = 0;
00575 tmp.isDuplicable = false;
00576 theTable->push_back(tmp);
00577 sizeOfTable +=1;
00578
00579 tmp.processTypeName = "CoupleTrans";
00580 tmp.processType = 1;
00581 tmp.processSubType = 92;
00582 tmp.ordering[0] = -1;
00583 tmp.ordering[1] = 0;
00584 tmp.ordering[2] = 0;
00585 tmp.isDuplicable = false;
00586 theTable->push_back(tmp);
00587 sizeOfTable +=1;
00588
00589 tmp.processTypeName = "CoulombScat";
00590 tmp.processType = 2;
00591 tmp.processSubType = 1;
00592 tmp.ordering[0] = -1;
00593 tmp.ordering[1] = -1;
00594 tmp.ordering[2] = 1000;
00595 tmp.isDuplicable = false;
00596 theTable->push_back(tmp);
00597 sizeOfTable +=1;
00598
00599 tmp.processTypeName = "Ionisation";
00600 tmp.processType = 2;
00601 tmp.processSubType = 2;
00602 tmp.ordering[0] = -1;
00603 tmp.ordering[1] = 2;
00604 tmp.ordering[2] = 2;
00605 tmp.isDuplicable = false;
00606 theTable->push_back(tmp);
00607 sizeOfTable +=1;
00608
00609 tmp.processTypeName = "Brems";
00610 tmp.processType = 2;
00611 tmp.processSubType = 3;
00612 tmp.ordering[0] = -1;
00613 tmp.ordering[1] = -1;
00614 tmp.ordering[2] = 3;
00615 tmp.isDuplicable = false;
00616 theTable->push_back(tmp);
00617 sizeOfTable +=1;
00618
00619 tmp.processTypeName = "PairProdCharged";
00620 tmp.processType = 2;
00621 tmp.processSubType = 4;
00622 tmp.ordering[0] = -1;
00623 tmp.ordering[1] = -1;
00624 tmp.ordering[2] = 4;
00625 tmp.isDuplicable = false;
00626 theTable->push_back(tmp);
00627 sizeOfTable +=1;
00628
00629 tmp.processTypeName = "Annih";
00630 tmp.processType = 2;
00631 tmp.processSubType = 5;
00632 tmp.ordering[0] = 5;
00633 tmp.ordering[1] = -1;
00634 tmp.ordering[2] = 5;
00635 tmp.isDuplicable = false;
00636 theTable->push_back(tmp);
00637 sizeOfTable +=1;
00638
00639 tmp.processTypeName = "AnnihToMuMu";
00640 tmp.processType = 2;
00641 tmp.processSubType = 6;
00642 tmp.ordering[0] = 6;
00643 tmp.ordering[1] = -1;
00644 tmp.ordering[2] = 6;
00645 tmp.isDuplicable = false;
00646 theTable->push_back(tmp);
00647 sizeOfTable +=1;
00648
00649 tmp.processTypeName = "AnnihToHad";
00650 tmp.processType = 2;
00651 tmp.processSubType = 7;
00652 tmp.ordering[0] = 7;
00653 tmp.ordering[1] = -1;
00654 tmp.ordering[2] = 7;
00655 tmp.isDuplicable = false;
00656 theTable->push_back(tmp);
00657 sizeOfTable +=1;
00658
00659 tmp.processTypeName = "NuclearStopp";
00660 tmp.processType = 2;
00661 tmp.processSubType = 8;
00662 tmp.ordering[0] = -1;
00663 tmp.ordering[1] = 8;
00664 tmp.ordering[2] = -1;
00665 tmp.isDuplicable = false;
00666 theTable->push_back(tmp);
00667 sizeOfTable +=1;
00668
00669 tmp.processTypeName = "Msc";
00670 tmp.processType = 2;
00671 tmp.processSubType = 10;
00672 tmp.ordering[0] = -1;
00673 tmp.ordering[1] = 1;
00674 tmp.ordering[2] = 1;
00675 tmp.isDuplicable = false;
00676 theTable->push_back(tmp);
00677 sizeOfTable +=1;
00678
00679 tmp.processTypeName = "Rayleigh";
00680 tmp.processType = 2;
00681 tmp.processSubType = 11;
00682 tmp.ordering[0] = -1;
00683 tmp.ordering[1] = -1;
00684 tmp.ordering[2] = 1000;
00685 tmp.isDuplicable = false;
00686 theTable->push_back(tmp);
00687 sizeOfTable +=1;
00688
00689 tmp.processTypeName = "PhotoElectric";
00690 tmp.processType = 2;
00691 tmp.processSubType = 12;
00692 tmp.ordering[0] = -1;
00693 tmp.ordering[1] = -1;
00694 tmp.ordering[2] = 1000;
00695 tmp.isDuplicable = false;
00696 theTable->push_back(tmp);
00697 sizeOfTable +=1;
00698
00699 tmp.processTypeName = "Compton";
00700 tmp.processType = 2;
00701 tmp.processSubType = 13;
00702 tmp.ordering[0] = -1;
00703 tmp.ordering[1] = -1;
00704 tmp.ordering[2] = 1000;
00705 tmp.isDuplicable = false;
00706 theTable->push_back(tmp);
00707 sizeOfTable +=1;
00708
00709 tmp.processTypeName = "Conv";
00710 tmp.processType = 2;
00711 tmp.processSubType = 14;
00712 tmp.ordering[0] = -1;
00713 tmp.ordering[1] = -1;
00714 tmp.ordering[2] = 1000;
00715 tmp.isDuplicable = false;
00716 theTable->push_back(tmp);
00717 sizeOfTable +=1;
00718
00719 tmp.processTypeName = "ConvToMuMu";
00720 tmp.processType = 2;
00721 tmp.processSubType = 15;
00722 tmp.ordering[0] = -1;
00723 tmp.ordering[1] = -1;
00724 tmp.ordering[2] = 1000;
00725 tmp.isDuplicable = false;
00726 theTable->push_back(tmp);
00727 sizeOfTable +=1;
00728
00729 tmp.processTypeName = "Cerenkov";
00730 tmp.processType = 2;
00731 tmp.processSubType = 21;
00732 tmp.ordering[0] = -1;
00733 tmp.ordering[1] = -1;
00734 tmp.ordering[2] = 1000;
00735 tmp.isDuplicable = false;
00736 theTable->push_back(tmp);
00737 sizeOfTable +=1;
00738
00739 tmp.processTypeName = "Scintillation";
00740 tmp.processType = 2;
00741 tmp.processSubType = 22;
00742 tmp.ordering[0] = 9999;
00743 tmp.ordering[1] = -1;
00744 tmp.ordering[2] = 9999;
00745 tmp.isDuplicable = false;
00746 theTable->push_back(tmp);
00747 sizeOfTable +=1;
00748
00749 tmp.processTypeName = "SynchRad";
00750 tmp.processType = 2;
00751 tmp.processSubType = 23;
00752 tmp.ordering[0] = -1;
00753 tmp.ordering[1] = -1;
00754 tmp.ordering[2] = 1000;
00755 tmp.isDuplicable = false;
00756 theTable->push_back(tmp);
00757 sizeOfTable +=1;
00758
00759 tmp.processTypeName = "TransRad";
00760 tmp.processType = 2;
00761 tmp.processSubType = 24;
00762 tmp.ordering[0] = -1;
00763 tmp.ordering[1] = -1;
00764 tmp.ordering[2] = 1000;
00765 tmp.isDuplicable = false;
00766 theTable->push_back(tmp);
00767 sizeOfTable +=1;
00768
00769 tmp.processTypeName = "OpAbsorb";
00770 tmp.processType = 3;
00771 tmp.processSubType = 31;
00772 tmp.ordering[0] = -1;
00773 tmp.ordering[1] = -1;
00774 tmp.ordering[2] = 1000;
00775 tmp.isDuplicable = false;
00776 theTable->push_back(tmp);
00777 sizeOfTable +=1;
00778
00779 tmp.processTypeName = "OpBoundary";
00780 tmp.processType = 3;
00781 tmp.processSubType = 32;
00782 tmp.ordering[0] = -1;
00783 tmp.ordering[1] = -1;
00784 tmp.ordering[2] = 1000;
00785 tmp.isDuplicable = false;
00786 theTable->push_back(tmp);
00787 sizeOfTable +=1;
00788
00789 tmp.processTypeName = "OpRayleigh";
00790 tmp.processType = 3;
00791 tmp.processSubType = 33;
00792 tmp.ordering[0] = -1;
00793 tmp.ordering[1] = -1;
00794 tmp.ordering[2] = 1000;
00795 tmp.isDuplicable = false;
00796 theTable->push_back(tmp);
00797 sizeOfTable +=1;
00798
00799 tmp.processTypeName = "OpWLS";
00800 tmp.processType = 3;
00801 tmp.processSubType = 34;
00802 tmp.ordering[0] = -1;
00803 tmp.ordering[1] = -1;
00804 tmp.ordering[2] = 1000;
00805 tmp.isDuplicable = false;
00806 theTable->push_back(tmp);
00807 sizeOfTable +=1;
00808
00809 tmp.processTypeName = "OpMieHG";
00810 tmp.processType = 3;
00811 tmp.processSubType = 35;
00812 tmp.ordering[0] = -1;
00813 tmp.ordering[1] = -1;
00814 tmp.ordering[2] = 1000;
00815 tmp.isDuplicable = false;
00816 theTable->push_back(tmp);
00817 sizeOfTable +=1;
00818
00819 tmp.processTypeName = "DNAElastic";
00820 tmp.processType = 2;
00821 tmp.processSubType = 51;
00822 tmp.ordering[0] = -1;
00823 tmp.ordering[1] = -1;
00824 tmp.ordering[2] = 1000;
00825 tmp.isDuplicable = false;
00826 theTable->push_back(tmp);
00827 sizeOfTable +=1;
00828
00829 tmp.processTypeName = "DNAExcit";
00830 tmp.processType = 2;
00831 tmp.processSubType = 52;
00832 tmp.ordering[0] = -1;
00833 tmp.ordering[1] = -1;
00834 tmp.ordering[2] = 1000;
00835 tmp.isDuplicable = false;
00836 theTable->push_back(tmp);
00837 sizeOfTable +=1;
00838
00839 tmp.processTypeName = "DNAIonisation";
00840 tmp.processType = 2;
00841 tmp.processSubType = 53;
00842 tmp.ordering[0] = -1;
00843 tmp.ordering[1] = -1;
00844 tmp.ordering[2] = 1000;
00845 tmp.isDuplicable = false;
00846 theTable->push_back(tmp);
00847 sizeOfTable +=1;
00848
00849 tmp.processTypeName = "DNAVibExcit";
00850 tmp.processType = 2;
00851 tmp.processSubType = 54;
00852 tmp.ordering[0] = -1;
00853 tmp.ordering[1] = -1;
00854 tmp.ordering[2] = 1000;
00855 tmp.isDuplicable = false;
00856 theTable->push_back(tmp);
00857 sizeOfTable +=1;
00858
00859 tmp.processTypeName = "DNAAttachment";
00860 tmp.processType = 2;
00861 tmp.processSubType = 55;
00862 tmp.ordering[0] = -1;
00863 tmp.ordering[1] = -1;
00864 tmp.ordering[2] = 1000;
00865 tmp.isDuplicable = false;
00866 theTable->push_back(tmp);
00867 sizeOfTable +=1;
00868
00869 tmp.processTypeName = "DNAChargeDec";
00870 tmp.processType = 2;
00871 tmp.processSubType = 56;
00872 tmp.ordering[0] = -1;
00873 tmp.ordering[1] = -1;
00874 tmp.ordering[2] = 1000;
00875 tmp.isDuplicable = false;
00876 theTable->push_back(tmp);
00877 sizeOfTable +=1;
00878
00879 tmp.processTypeName = "DNAChargeInc";
00880 tmp.processType = 2;
00881 tmp.processSubType = 57;
00882 tmp.ordering[0] = -1;
00883 tmp.ordering[1] = -1;
00884 tmp.ordering[2] = 1000;
00885 tmp.isDuplicable = false;
00886 theTable->push_back(tmp);
00887 sizeOfTable +=1;
00888
00889 tmp.processTypeName = "DNAElectronSolvatation";
00890 tmp.processType = 2;
00891 tmp.processSubType = 58;
00892 tmp.ordering[0] = -1;
00893 tmp.ordering[1] = -1;
00894 tmp.ordering[2] = 1000;
00895 tmp.isDuplicable = false;
00896 theTable->push_back(tmp);
00897 sizeOfTable +=1;
00898
00899 tmp.processTypeName = "DNAMolecularDecay";
00900 tmp.processType = 6;
00901 tmp.processSubType = 59;
00902 tmp.ordering[0] = 1000;
00903 tmp.ordering[1] = -1;
00904 tmp.ordering[2] = -1;
00905 tmp.isDuplicable = false;
00906 theTable->push_back(tmp);
00907 sizeOfTable +=1;
00908
00909 tmp.processTypeName = "ITTransportation";
00910 tmp.processType = 1;
00911 tmp.processSubType = 60;
00912 tmp.ordering[0] = -1;
00913 tmp.ordering[1] = 0;
00914 tmp.ordering[2] = 0;
00915 tmp.isDuplicable = false;
00916 theTable->push_back(tmp);
00917 sizeOfTable +=1;
00918
00919 tmp.processTypeName = "DNABrownianTransportation";
00920 tmp.processType = 1;
00921 tmp.processSubType = 61;
00922 tmp.ordering[0] = -1;
00923 tmp.ordering[1] = -1;
00924 tmp.ordering[2] = -1;
00925 tmp.isDuplicable = false;
00926 theTable->push_back(tmp);
00927 sizeOfTable +=1;
00928
00929 tmp.processTypeName = "DNADoubleIonisation";
00930 tmp.processType = 2;
00931 tmp.processSubType = 62;
00932 tmp.ordering[0] = -1;
00933 tmp.ordering[1] = -1;
00934 tmp.ordering[2] = 1000;
00935 tmp.isDuplicable = false;
00936 theTable->push_back(tmp);
00937 sizeOfTable +=1;
00938
00939 tmp.processTypeName = "DNADoubleCapture";
00940 tmp.processType = 2;
00941 tmp.processSubType = 63;
00942 tmp.ordering[0] = -1;
00943 tmp.ordering[1] = -1;
00944 tmp.ordering[2] = 1000;
00945 tmp.isDuplicable = false;
00946 theTable->push_back(tmp);
00947 sizeOfTable +=1;
00948
00949 tmp.processTypeName = "DNAIonisingTransfer";
00950 tmp.processType = 2;
00951 tmp.processSubType = 64;
00952 tmp.ordering[0] = -1;
00953 tmp.ordering[1] = -1;
00954 tmp.ordering[2] = 1000;
00955 tmp.isDuplicable = false;
00956 theTable->push_back(tmp);
00957 sizeOfTable +=1;
00958
00959 tmp.processTypeName = "HadElastic";
00960 tmp.processType = 4;
00961 tmp.processSubType = 111;
00962 tmp.ordering[0] = -1;
00963 tmp.ordering[1] = -1;
00964 tmp.ordering[2] = 1000;
00965 tmp.isDuplicable = false;
00966 theTable->push_back(tmp);
00967 sizeOfTable +=1;
00968
00969 tmp.processTypeName = "HadInElastic";
00970 tmp.processType = 4;
00971 tmp.processSubType = 121;
00972 tmp.ordering[0] = -1;
00973 tmp.ordering[1] = -1;
00974 tmp.ordering[2] = 1000;
00975 tmp.isDuplicable = false;
00976 theTable->push_back(tmp);
00977 sizeOfTable +=1;
00978
00979 tmp.processTypeName = "HadCapture";
00980 tmp.processType = 4;
00981 tmp.processSubType = 131;
00982 tmp.ordering[0] = -1;
00983 tmp.ordering[1] = -1;
00984 tmp.ordering[2] = 1000;
00985 tmp.isDuplicable = false;
00986 theTable->push_back(tmp);
00987 sizeOfTable +=1;
00988
00989 tmp.processTypeName = "HadFission";
00990 tmp.processType = 4;
00991 tmp.processSubType = 141;
00992 tmp.ordering[0] = -1;
00993 tmp.ordering[1] = -1;
00994 tmp.ordering[2] = 1000;
00995 tmp.isDuplicable = false;
00996 theTable->push_back(tmp);
00997 sizeOfTable +=1;
00998
00999 tmp.processTypeName = "HadAtRest";
01000 tmp.processType = 4;
01001 tmp.processSubType = 151;
01002 tmp.ordering[0] = 1000;
01003 tmp.ordering[1] = -1;
01004 tmp.ordering[2] = -1;
01005 tmp.isDuplicable = false;
01006 theTable->push_back(tmp);
01007 sizeOfTable +=1;
01008
01009 tmp.processTypeName = "HadCEX";
01010 tmp.processType = 4;
01011 tmp.processSubType = 161;
01012 tmp.ordering[0] = -1;
01013 tmp.ordering[1] = -1;
01014 tmp.ordering[2] = 1000;
01015 tmp.isDuplicable = false;
01016 theTable->push_back(tmp);
01017 sizeOfTable +=1;
01018
01019 tmp.processTypeName = "Decay";
01020 tmp.processType = 6;
01021 tmp.processSubType = 201;
01022 tmp.ordering[0] = 1000;
01023 tmp.ordering[1] = -1;
01024 tmp.ordering[2] = 1000;
01025 tmp.isDuplicable = false;
01026 theTable->push_back(tmp);
01027 sizeOfTable +=1;
01028
01029 tmp.processTypeName = "DecayWSpin";
01030 tmp.processType = 6;
01031 tmp.processSubType = 202;
01032 tmp.ordering[0] = 1000;
01033 tmp.ordering[1] = -1;
01034 tmp.ordering[2] = 1000;
01035 tmp.isDuplicable = false;
01036 theTable->push_back(tmp);
01037 sizeOfTable +=1;
01038
01039 tmp.processTypeName = "DecayPiSpin";
01040 tmp.processType = 6;
01041 tmp.processSubType = 203;
01042 tmp.ordering[0] = 1000;
01043 tmp.ordering[1] = -1;
01044 tmp.ordering[2] = 1000;
01045 tmp.isDuplicable = false;
01046 theTable->push_back(tmp);
01047 sizeOfTable +=1;
01048
01049 tmp.processTypeName = "DecayRadio";
01050 tmp.processType = 6;
01051 tmp.processSubType = 210;
01052 tmp.ordering[0] = 1000;
01053 tmp.ordering[1] = -1;
01054 tmp.ordering[2] = 1000;
01055 tmp.isDuplicable = false;
01056 theTable->push_back(tmp);
01057 sizeOfTable +=1;
01058
01059 tmp.processTypeName = "DecayUnKnown";
01060 tmp.processType = 6;
01061 tmp.processSubType = 211;
01062 tmp.ordering[0] = 1000;
01063 tmp.ordering[1] = -1;
01064 tmp.ordering[2] = 1000;
01065 tmp.isDuplicable = false;
01066 theTable->push_back(tmp);
01067 sizeOfTable +=1;
01068
01069 tmp.processTypeName = "DecayExt";
01070 tmp.processType = 6;
01071 tmp.processSubType = 231;
01072 tmp.ordering[0] = 1000;
01073 tmp.ordering[1] = -1;
01074 tmp.ordering[2] = 1000;
01075 tmp.isDuplicable = false;
01076 theTable->push_back(tmp);
01077 sizeOfTable +=1;
01078
01079 tmp.processTypeName = "StepLimiter";
01080 tmp.processType = 7;
01081 tmp.processSubType = 401;
01082 tmp.ordering[0] = -1;
01083 tmp.ordering[1] = -1;
01084 tmp.ordering[2] = 1000;
01085 tmp.isDuplicable = false;
01086 theTable->push_back(tmp);
01087 sizeOfTable +=1;
01088
01089 tmp.processTypeName = "UsrSepcCuts";
01090 tmp.processType = 7;
01091 tmp.processSubType = 402;
01092 tmp.ordering[0] = -1;
01093 tmp.ordering[1] = -1;
01094 tmp.ordering[2] = 1000;
01095 tmp.isDuplicable = false;
01096 theTable->push_back(tmp);
01097 sizeOfTable +=1;
01098
01099 tmp.processTypeName = "NeutronKiller";
01100 tmp.processType = 7;
01101 tmp.processSubType = 403;
01102 tmp.ordering[0] = -1;
01103 tmp.ordering[1] = -1;
01104 tmp.ordering[2] = 1000;
01105 tmp.isDuplicable = false;
01106 theTable->push_back(tmp);
01107 sizeOfTable +=1;
01108 }
01109
01110