CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/SimG4Core/Physics/src/G4ProcessTypeEnumerator.cc

Go to the documentation of this file.
00001 #include "SimG4Core/Physics/interface/G4ProcessTypeEnumerator.h"
00002 #include "SimG4Core/Physics/interface/ProcessTypeEnumerator.h"
00003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00004 #include "G4VProcess.hh"
00005 
00006 #include <iostream>
00007 
00008 //#define MYDEB
00009 
00010 G4ProcessTypeEnumerator::G4ProcessTypeEnumerator(){
00011   mapProcesses["Undefined"] = "Undefined";
00012   mapProcesses["Unknown"] = "Unknown";
00013   //
00014   mapProcesses["Primary"] = "Primary";
00015   // nuclear stuff
00016   mapProcesses["HadronCapture"]  = "Hadronic";
00017   mapProcesses["AntiNeutronInelastic"] = "Hadronic";
00018   mapProcesses["PositronNuclear"] = "Hadronic";
00019   mapProcesses["ElectroNuclear"] = "Hadronic";
00020   mapProcesses["AntiProtonAnnihilationAtRest"] = "Hadronic";
00021   mapProcesses["AntiProtonInelastic"] = "Hadronic";
00022   mapProcesses["ProtonInelastic"] = "Hadronic";
00023   mapProcesses["PhotonInelastic"] = "Hadronic";
00024   mapProcesses["DeuteronInelastic"] = "Hadronic";
00025   mapProcesses["KaonMinusAbsorption"] = "Hadronic";
00026   mapProcesses["KaonMinusInelastic"] = "Hadronic";
00027   mapProcesses["KaonPlusInelastic"] = "Hadronic";
00028   mapProcesses["KaonZeroLInelastic"] = "Hadronic";
00029   mapProcesses["KaonZeroSInelastic"] = "Hadronic";
00030   mapProcesses["LCapture"] = "Hadronic";
00031   mapProcesses["LElastic"] = "Hadronic";
00032   mapProcesses["hElastic"] = "Hadronic";
00033   mapProcesses["LambdaInelastic"] = "Hadronic";
00034   mapProcesses["NeutronInelastic"] = "Hadronic";
00035   mapProcesses["CHIPSNuclearAbsorptionAtRest"] = "Hadronic";
00036   mapProcesses["PionMinusAbsorptionAtRest"] = "Hadronic";
00037   mapProcesses["PionMinusInelastic"] = "Hadronic";
00038   mapProcesses["PionPlusInelastic"] = "Hadronic";
00039   mapProcesses["SigmaMinusInelastic"] = "Hadronic";
00040   mapProcesses["AntiSigmaMinusInelastic"] = "Hadronic";
00041   mapProcesses["AntiSigmaPlusInelastic"] = "Hadronic";
00042   mapProcesses["AntiLambdaInelastic"] = "Hadronic";
00043   mapProcesses["TritonInelastic"] = "Hadronic"; 
00044   mapProcesses["XiMinusInelastic"] = "Hadronic";
00045   mapProcesses["XiPlusInelastic"] = "Hadronic";
00046   mapProcesses["AntiXiZeroInelastic"] = "Hadronic";
00047   mapProcesses["SigmaPlusInelastic"] = "Hadronic";
00048   mapProcesses["XiZeroInelastic"] = "Hadronic";
00049   mapProcesses["AntiXiMinusInelastic"] = "Hadronic";
00050   mapProcesses["AlphaInelastic"] = "Hadronic";
00051   mapProcesses["FullModelHadronicProcess"] = "Hadronic";
00052   mapProcesses["hInelastic"] = "Hadronic";
00053   mapProcesses["dInelastic"] = "Hadronic";
00054   mapProcesses["tInelastic"] = "Hadronic";
00055   mapProcesses["nCapture"] = "Hadronic";
00056   mapProcesses["alphaInelastic"] = "Hadronic";
00057   mapProcesses["CHIPSElasticScattering"] = "Hadronic";
00058   mapProcesses["MixedProtonInelasticProcess"] = "Hadronic";
00059 
00060   // for GFlash Hadron process
00061   mapProcesses["WrappedPionMinusInelastic"] = "Hadronic";
00062   mapProcesses["WrappedPionPlusInelastic"] = "Hadronic";
00063 
00064   // ionizations
00065   mapProcesses["eIoni"] = "EIoni";
00066   mapProcesses["hIoni"] = "HIoni";
00067   mapProcesses["ionIoni"] = "HIoni";
00068   mapProcesses["muIoni"] = "MuIoni";
00069   // Annihilation
00070   mapProcesses["annihil"] = "Annihilation";
00071   // MuBrem
00072   mapProcesses["muBrems"] = "MuBrem";
00073   // MuNucl
00074   mapProcesses["muMinusCaptureAtRest"] = "MuNucl";
00075   mapProcesses["MuonMinusCaptureAtRest"] = "MuNucl";
00076   mapProcesses["MuonPlusCaptureAtRest"] = "MuNucl";
00077   // Conversions
00078   mapProcesses["conv"] = "Conversions";
00079   // Brems
00080   mapProcesses["eBrem"] = "EBrem";
00081   // Decay
00082   mapProcesses["Decay"] = "Decay";
00083   // PairProd
00084   mapProcesses["muPairProd"] = "MuPairProd";
00085   // Photon
00086   mapProcesses["phot"] = "Photon";
00087   // Sync
00088   mapProcesses["SynchrotronRadiation"] = "SynchrotronRadiation";
00089   // Compton
00090   mapProcesses["compt"] = "Compton";
00091   // hbrem etc;
00092   mapProcesses["hBrems"] = "hBrems";
00093   mapProcesses["hPairProd"] = "hPairProd";
00094   //
00095   map2Process["Undefined"] = -1;
00096   map2Process["Unknown"] = 0;
00097   map2Process["Primary"] = 100;
00098   //Hadronic
00099   map2Process["HadronCapture"]  = 1;
00100   map2Process["AntiNeutronInelastic"] = 2;
00101   map2Process["PositronNuclear"] = 3;
00102   map2Process["ElectroNuclear"] = 4;
00103   map2Process["AntiProtonAnnihilationAtRest"] = 5;
00104   map2Process["AntiProtonInelastic"] = 6;
00105   map2Process["ProtonInelastic"] = 7;
00106   map2Process["PhotonInelastic"] = 8;
00107   map2Process["DeuteronInelastic"] = 9;
00108   map2Process["KaonMinusAbsorption"] = 10;
00109   map2Process["KaonMinusInelastic"] = 11;
00110   map2Process["KaonPlusInelastic"] = 12;
00111   map2Process["KaonZeroLInelastic"] = 13;
00112   map2Process["KaonZeroSInelastic"] = 14;
00113   map2Process["LCapture"] = 15;
00114   map2Process["LElastic"] = 16;
00115   map2Process["hElastic"] = 17;
00116   map2Process["LambdaInelastic"] = 18;
00117   map2Process["NeutronInelastic"] = 19;
00118   map2Process["CHIPSNuclearAbsorptionAtRest"] = 20;
00119   map2Process["PionMinusAbsorptionAtRest"] = 21;
00120   map2Process["PionMinusInelastic"] = 22;
00121   map2Process["PionPlusInelastic"] = 23;
00122   map2Process["SigmaMinusInelastic"] = 24;
00123   map2Process["AntiSigmaMinusInelastic"] = 25;
00124   map2Process["AntiSigmaPlusInelastic"] = 26;
00125   map2Process["AntiLambdaInelastic"] = 27;
00126   map2Process["TritonInelastic"] = 28;
00127   map2Process["XiMinusInelastic"] = 29;
00128   map2Process["XiPlusInelastic"] = 30;
00129   map2Process["AntiXiZeroInelastic"] = 31;
00130   map2Process["SigmaPlusInelastic"] = 32;
00131   map2Process["XiZeroInelastic"] = 33;
00132   map2Process["AntiXiMinusInelastic"] = 34;
00133   map2Process["FullModelHadronicProcess"] = 35;
00134   map2Process["hInelastic"] = 36;
00135   map2Process["dInelastic"] = 37;
00136   map2Process["tInelastic"] = 38;
00137   map2Process["alphaInelastic"] = 39;
00138   map2Process["nCapture"] = 40;
00139   map2Process["CHIPSElasticScattering"] = 17;
00140   map2Process["MixedProtonInelasticProcess"] = 7;
00141 
00142   // for GFlash hadron process
00143   map2Process["WrappedPionMinusInelastic"] = 68;
00144   map2Process["WrappedPionPlusInelastic"] = 69;
00145 
00146   // Decay
00147   map2Process["Decay"] = 50;
00148   // EM
00149   map2Process["eIoni"] = 51;
00150   map2Process["hIoni"] = 52;
00151   map2Process["ionIoni"] = 53;
00152   map2Process["muIoni"] = 54;
00153   map2Process["annihil"] = 55;
00154   map2Process["muBrems"] = 56;
00155   map2Process["muMinusCaptureAtRest"] = 57;
00156   map2Process["MuonMinusCaptureAtRest"] = 58;
00157   map2Process["MuonPlusCaptureAtRest"] = 59;
00158   map2Process["conv"] = 60;
00159   map2Process["eBrem"] = 61;
00160   map2Process["muPairProd"] = 62;
00161   map2Process["phot"] = 63;
00162   map2Process["SynchrotronRadiation"] = 64;
00163   map2Process["compt"] = 65;
00164   map2Process["hBrems"] = 66;
00165   map2Process["hPairProd"] = 67;
00166   //
00167   buildReverseMap();
00168   //
00169   theProcessTypeEnumerator = new ProcessTypeEnumerator;
00170 }
00171 
00172 G4ProcessTypeEnumerator::~G4ProcessTypeEnumerator(){
00173   delete theProcessTypeEnumerator;
00174   mapProcesses.clear();
00175   reverseMapProcesses.clear();
00176   map2Process.clear();
00177   reverseMap2Process.clear();
00178 }
00179 
00180 
00181 unsigned int G4ProcessTypeEnumerator::processId(const G4VProcess* process){
00182   if (process == 0) {
00183     //
00184     // it is primary!
00185     //
00186     std::string temp = "Primary";
00187 #ifdef MYDEB
00188     LogDebug("Physics") <<"G4ProcessTypeEnumerator : Primary process, returning "
00189                         << theProcessTypeEnumerator->processId(temp);
00190 #endif
00191     return theProcessTypeEnumerator->processId(temp);
00192   } else {
00193     std::string temp = process->GetProcessName();
00194 #ifdef MYDEB
00195     LogDebug("Physics") <<"G4ProcessTypeEnumerator : G4Process "<<temp
00196                         <<" mapped to "<< processCMSName(temp)<<"; returning "
00197                         <<theProcessTypeEnumerator->processId(processCMSName(temp));
00198 #endif
00199     return theProcessTypeEnumerator->processId(processCMSName(temp));
00200   }
00201 }
00202 
00203 int G4ProcessTypeEnumerator::processIdLong(const G4VProcess* process) {
00204   std::string temp;
00205   if (process == 0) temp = "Primary";
00206   else              temp = process->GetProcessName();
00207   std::map<std::string,int>::const_iterator it = map2Process.find(temp);
00208   if (it != map2Process.end()) return it->second;
00209   else                         return map2Process["Undefined"];
00210 }
00211 
00212 std::string G4ProcessTypeEnumerator::processCMSName(std::string in){
00213   if (mapProcesses[in] == ""){
00214     //    throw MantisException("G4ProcessTypeEnumerator: unknown G4 process "+in);
00215     LogDebug("Physics")<<" NOT FOUND G4ProcessTypeEnumerator: "<<in;
00216     return "Unknown";
00217   }
00218   return mapProcesses[in];
00219 }
00220 
00221 std::vector<std::string> G4ProcessTypeEnumerator::processG4Name(std::string in){
00222   if (reverseMapProcesses[in].size() ==0)
00223     //    throw MantisException("G4ProcessTypeEnumerator: unknown CMS process "+in);
00224     ;
00225   return reverseMapProcesses[in];
00226 }
00227 
00228 std::string G4ProcessTypeEnumerator::processG4Name(int in) {
00229   std::map<int,std::string>::const_iterator it = reverseMap2Process.find(in);
00230   if (it != reverseMap2Process.end()) return it->second;
00231   else                                return "Undefined";
00232 }
00233 
00234 unsigned int G4ProcessTypeEnumerator::numberOfKnownCMSProcesses(){
00235   return reverseMapProcesses.size();
00236 }
00237 
00238 unsigned int G4ProcessTypeEnumerator::numberOfKnownG4Processes(){
00239   return mapProcesses.size();
00240 }
00241 
00242 void G4ProcessTypeEnumerator::buildReverseMap(){
00243   for (MapType::const_iterator it = mapProcesses.begin();  
00244        it != mapProcesses.end(); it++)
00245     (reverseMapProcesses[(*it).second]).push_back((*it).first);
00246   for (std::map<std::string,int>::const_iterator it = map2Process.begin();  
00247        it != map2Process.end(); it++) 
00248     reverseMap2Process[(*it).second] = (*it).first;
00249 }