G4PhysicsListHelper.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 //
00027 // $Id$
00028 //
00029 // 
00030 // ------------------------------------------------------------
00031 //      GEANT 4 class header file 
00032 //
00033 // ------------------------------------------------------------
00034 //      History
00035 //       first version                   29 Apr 2011 by H.Kurashige
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   // pointer to the particle table
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   // loop over all particles in G4ParticleTable
00109   theParticleIterator->reset();
00110   while( (*theParticleIterator)() ){
00111     G4ParticleDefinition* particle = theParticleIterator->value();
00112     G4String name = particle->GetParticleName();
00113     // check if any EM process exists
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   // RULE 1
00136   //  e+, e- and gamma should exist 
00137   //   if one of them exist
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   // RULE 2
00160   //  proton should exist 
00161   //   if any other charged baryon  exist
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   // RULE 3
00179   //  GenericIonn should exist 
00180   //   if any other ion  exist
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   // loop over all particles in G4ParticleTable
00234   theParticleIterator->reset();
00235   while( (*theParticleIterator)() ){
00236     G4ParticleDefinition* particle = theParticleIterator->value();
00237     G4ProcessManager* pmanager = particle->GetProcessManager();
00238     // Add transportation process for all particles 
00239     if ( pmanager == 0) {
00240       // Error !! no process manager
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     // add transportation with ordering = ( -1, "first", "first" )
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     // open input file //
00278     fIn.open(ordParamFileName, std::ios::in);
00279     // check if the file has been opened successfully 
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   // create OrdParamTable   
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     // read in the file and fill the table 
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   // Check Process Type/SubType
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   // Check Process Manager
00487   G4ProcessManager* pManager = particle->GetProcessManager();
00488   if ( pManager == 0) {
00489       // Error !! no process manager
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   // Check Duplication
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   // Add Process
00534   G4int code = pManager ->AddProcess(process);
00535   if (code <0) return false;
00536 
00537   // Set Ordering Parameter
00538   for(G4int idx=0; idx<3; idx++){
00539     G4ProcessVectorDoItIndex idxOrd = static_cast<G4ProcessVectorDoItIndex>(idx);
00540     if (ord[idx]<0) {
00541       // Do Nothing because NO DOIT
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 

Generated on Mon May 27 17:49:19 2013 for Geant4 by  doxygen 1.4.7