00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #include <cassert>
00014
00015 #include <TString.h>
00016 #include <TMCProcess.h>
00017
00018 #include "Util/UtilIstHEP.h"
00019 #include "MessageService/MsgService.h"
00020
00021 CVSID("$Id: UtilIstHEP.cxx,v 1.7 2009/02/28 21:46:17 gmieg Exp $");
00022
00023
00024
00025
00026
00027 const char* UtilIstHEP::AsString(ENeugenIstHEP neugenisthep) {
00028
00029
00030
00031 switch ( neugenisthep ) {
00032
00033 case kNInitial:
00034 return "Initial";
00035 case kNFinal:
00036 return "Final";
00037 case kNIntermediate:
00038 return "Intermediate";
00039 case kNDecayed:
00040 return "Decayed";
00041 case kNTarget:
00042 return "Target";
00043 case kNDIS:
00044 return "DIS";
00045 case kNRes:
00046 return "Res";
00047 case kNRescatter:
00048 return "Rescatter";
00049 default:
00050 MSG("Util",Msg::kWarning)
00051 << "UtilIstHEP::AsString called with unknown ENeugenIstHEP "
00052 << (Int_t)neugenisthep << endl;
00053 return "Unknown";
00054
00055 }
00056
00057 }
00058
00059
00060 UtilIstHEP::EProdMethod UtilIstHEP::GetProdMethod(TMCProcess process) {
00061
00062
00063 switch (process) {
00064
00065 case kPPrimary:
00066 return kMPrimary;
00067 case kPMultipleScattering:
00068 return kMMultipleScattering;
00069 case kPEnergyLoss:
00070 return kMEnergyLoss;
00071 case kPMagneticFieldL:
00072 return kMMagneticFieldL;
00073 case kPDecay:
00074 return kMDecay;
00075 case kPPair:
00076 return kMPair;
00077 case kPCompton:
00078 return kMCompton;
00079 case kPPhotoelectric:
00080 return kMPhotoelectric;
00081 case kPBrem:
00082 return kMBrem;
00083 case kPDeltaRay:
00084 return kMDeltaRay;
00085 case kPAnnihilation:
00086 return kMAnnihilation;
00087 case kPHadronic:
00088 return kMHadronic;
00089 case kPEvaporation:
00090 return kMEvaporation;
00091 case kPNuclearFission:
00092 return kMNuclearFission;
00093 case kPNuclearAbsorption:
00094 return kMNuclearAbsorption;
00095 case kPPbarAnnihilation:
00096 return kMPbarAnnihilation;
00097 case kPNCapture:
00098 return kMNCapture;
00099 case kPHElastic:
00100 return kMHElastic;
00101 case kPHInhelastic:
00102 return kMHInhelastic;
00103 case kPMuonNuclear:
00104 return kMMuonNuclear;
00105 case kPTOFlimit:
00106 return kMTOFlimit;
00107 case kPPhotoFission:
00108 return kMPhotoFission;
00109 case kPRayleigh:
00110 return kMRayleigh;
00111 case kPNull:
00112 return kMNull;
00113 case kPStop:
00114 return kMStop;
00115 case kPLightAbsorption:
00116 return kMLightAbsorption;
00117 case kPLightDetection:
00118 return kMLightDetection;
00119 case kPLightScattering:
00120 return kMLightScattering;
00121 case kStepMax:
00122 return kMStepMax;
00123 case kPCerenkov:
00124 return kMCerenkov;
00125 case kPFeedBackPhoton:
00126 return kMFeedBackPhoton;
00127 case kPLightReflection:
00128 return kMLightReflection;
00129 case kPLightRefraction:
00130 return kMLightRefraction;
00131 case kPSynchrotron:
00132 return kMSynchrotron;
00133 case kPTransportation:
00134 return kMTransportation;
00135 case kPNoProcess:
00136 return kMNoProcess;
00137 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,17,06)
00138
00139 case kPAnnihilationRest:
00140 return kMAnnihilationRest;
00141 case kPAnnihilationFlight:
00142 return kMAnnihilationFlight;
00143 case kPNbarAnnihilation:
00144 return kMNbarAnnihilation;
00145 case kPHIElastic:
00146 return kMHIElastic;
00147 case kPHCElastic:
00148 return kMHCElastic;
00149 case kPPhotonInhelastic:
00150 return kMPhotonInhelastic;
00151 case kPElectronNuclear:
00152 return kMElectronNuclear;
00153 case kPPositronNuclear:
00154 return kMPositronNuclear;
00155 case kPScintillation:
00156 return kMScintillation;
00157 #endif
00158 default:
00159 MSG("Util",Msg::kError) << "UtilIstHEP::GetProdMethod for TMCProcess "
00160 << process << "/" << TMCProcessName[process]
00161 << " failed!\nUpdate UtilIstHEP to include "
00162 << "missing process. Abort." << endl;
00163 abort();
00164 }
00165
00166 }
00167
00168
00169 TMCProcess UtilIstHEP::GetTMCProcess(EProdMethod prodmethod) {
00170
00171
00172 switch (prodmethod) {
00173
00174 case kMPrimary:
00175 return kPPrimary;
00176 case kMMultipleScattering:
00177 return kPMultipleScattering;
00178 case kMEnergyLoss:
00179 return kPEnergyLoss;
00180 case kMMagneticFieldL:
00181 return kPMagneticFieldL;
00182 case kMDecay:
00183 return kPDecay;
00184 case kMPair:
00185 return kPPair;
00186 case kMCompton:
00187 return kPCompton;
00188 case kMPhotoelectric:
00189 return kPPhotoelectric;
00190 case kMBrem:
00191 return kPBrem;
00192 case kMDeltaRay:
00193 return kPDeltaRay;
00194 case kMAnnihilation:
00195 return kPAnnihilation;
00196 case kMHadronic:
00197 return kPHadronic;
00198 case kMEvaporation:
00199 return kPEvaporation;
00200 case kMNuclearFission:
00201 return kPNuclearFission;
00202 case kMNuclearAbsorption:
00203 return kPNuclearAbsorption;
00204 case kMPbarAnnihilation:
00205 return kPPbarAnnihilation;
00206 case kMNCapture:
00207 return kPNCapture;
00208 case kMHElastic:
00209 return kPHElastic;
00210 case kMHInhelastic:
00211 return kPHInhelastic;
00212 case kMMuonNuclear:
00213 return kPMuonNuclear;
00214 case kMTOFlimit:
00215 return kPTOFlimit;
00216 case kMPhotoFission:
00217 return kPPhotoFission;
00218 case kMRayleigh:
00219 return kPRayleigh;
00220 case kMNull:
00221 return kPNull;
00222 case kMStop:
00223 return kPStop;
00224 case kMLightAbsorption:
00225 return kPLightAbsorption;
00226 case kMLightDetection:
00227 return kPLightDetection;
00228 case kMLightScattering:
00229 return kPLightScattering;
00230 case kMStepMax:
00231 return kStepMax;
00232 case kMCerenkov:
00233 return kPCerenkov;
00234 case kMFeedBackPhoton:
00235 return kPFeedBackPhoton;
00236 case kMLightReflection:
00237 return kPLightReflection;
00238 case kMLightRefraction:
00239 return kPLightRefraction;
00240 case kMSynchrotron:
00241 return kPSynchrotron;
00242 case kMTransportation:
00243 return kPTransportation;
00244 case kMNoProcess:
00245 return kPNoProcess;
00246 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,17,06)
00247
00248 case kMAnnihilationRest:
00249 return kPAnnihilationRest;
00250 case kMAnnihilationFlight:
00251 return kPAnnihilationFlight;
00252 case kMNbarAnnihilation:
00253 return kPNbarAnnihilation;
00254 case kMHIElastic:
00255 return kPHIElastic;
00256 case kMHCElastic:
00257 return kPHCElastic;
00258 case kMPhotonInhelastic:
00259 return kPPhotonInhelastic;
00260 case kMElectronNuclear:
00261 return kPElectronNuclear;
00262 case kMPositronNuclear:
00263 return kPPositronNuclear;
00264 case kMScintillation:
00265 return kPScintillation;
00266 #endif
00267 default:
00268 MSG("Util",Msg::kError) << "UtilIstHEP::GetTMCProcess for EProdMethod "
00269 << prodmethod
00270 << " failed!\nUpdate UtilIstHEP to include "
00271 << "missing production method. Abort." << endl;
00272 abort();
00273 }
00274
00275 }
00276
00277
00278
00279 Int_t UtilIstHEP::GetNeugenIstHEP(const char* isthepname) {
00280
00281
00282
00283
00284
00285
00286
00287 TString tmpstr(isthepname);
00288 tmpstr.ToLower();
00289 if ( strcmp(tmpstr.Data(),"initial") == 0 ) return UtilIstHEP::kNInitial;
00290 else if ( strcmp(tmpstr.Data(),"final") == 0 ) return UtilIstHEP::kNFinal;
00291 else if ( strcmp(tmpstr.Data(),"intermediate") == 0 )
00292 return UtilIstHEP::kNIntermediate;
00293 else if ( strcmp(tmpstr.Data(),"decayed") == 0 )
00294 return UtilIstHEP::kNDecayed;
00295 else if ( strcmp(tmpstr.Data(),"target") == 0 ) return UtilIstHEP::kNTarget;
00296 else if ( strcmp(tmpstr.Data(),"dis") == 0 ) return UtilIstHEP::kNDIS;
00297 else if ( strcmp(tmpstr.Data(),"res") == 0 ) return UtilIstHEP::kNRes;
00298 else if ( strcmp(tmpstr.Data(),"rescatter") == 0 )
00299 return UtilIstHEP::kNRescatter;
00300
00301 return -1;
00302
00303 }
00304
00305
00306 const char* UtilIstHEP::AsString(EProdMethod prodmethod) {
00307
00308
00309 TMCProcess processcode = GetTMCProcess(prodmethod);
00310 return TMCProcessName[processcode];
00311
00312 }
00313
00314
00315 const char* UtilIstHEP::AsString(Int_t isthep) {
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332 if ( isthep < 200 ) {
00333 ENeugenIstHEP neugenisthep = (ENeugenIstHEP)isthep;
00334 return AsString(neugenisthep);
00335 }
00336 else if ( isthep >= kProdMethodOffset
00337 && isthep < kProdMethodOffset + kNProdMethod ) {
00338 EProdMethod prodmethod = (EProdMethod)(isthep-kProdMethodOffset);
00339 return AsString(prodmethod);
00340 }
00341 else if ( isthep == 999 ) {
00342 return "Info";
00343 }
00344 else if ( isthep == (kProdMethodOffset + kMDecay + 1000) ) {
00345 return "Decay Parent";
00346 }
00347 else {
00348
00349
00350
00351 return "Unknown";
00352 }
00353
00354 }
00355
00356