![]() |
![]() |
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 }