Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

UtilIstHEP.cxx

Go to the documentation of this file.
00001 
00002 //
00003 // UtilIstHEP
00004 //
00005 // Package: Util
00006 //
00007 // S. Kasahara 08/07
00008 //
00009 // Purpose: Utility methods and enumerated types for purposes of 
00010 //          interpreting IstHEP Codes used in the MINOS Monte Carlo.
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 // Definition of methods 
00024 // *********************
00025 
00026 //_____________________________________________________________________________
00027 const char* UtilIstHEP::AsString(ENeugenIstHEP neugenisthep) {
00028   //  Purpose:  Convert enumerated Neugen IstHEP code to a string.
00029   //  Return:  isthep string. If unknown, returns "Unknown".
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   }//end of switch
00056 
00057 }
00058 
00059 //_____________________________________________________________________________
00060 UtilIstHEP::EProdMethod UtilIstHEP::GetProdMethod(TMCProcess process) {
00061   // Purpose: Interpret a TMCProcess as an EProdMethod
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   // These only appeared in TMCProcess beginning with ROOT v5.17/06
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   // Purpose: Interpret a EProdMethod as a TMCProcess
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   // These only appeared in TMCProcess beginning with ROOT v5.17/06
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   // Purpose: Convert text string isthepname to an enumerated code.
00281   // 
00282   // Argument: isthepname string
00283   //
00284   // Return: returns -1 if no match
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   // Purpose: Convert production method status code to a string
00308 
00309   TMCProcess processcode = GetTMCProcess(prodmethod);
00310   return TMCProcessName[processcode];
00311   
00312 }
00313 
00314 //_____________________________________________________________________________
00315 const char* UtilIstHEP::AsString(Int_t isthep) {
00316   //  Purpose:  Convert isthep status code to a string.
00317   //
00318   //  Argument: isthep code.
00319   //
00320   //  Return:  isthep string. If unknown, returns "Unknown".
00321   //
00322   //  Notes: If isthep <  200 => Neugen IstHEP code
00323   //         If isthep >= kProdMethodOffset 
00324   //         && isthep <  kProdMethodOffset + kNProdMethod  
00325   //                          => EProdMethod production method code
00326   //         If isthep == 999 => "Info" 
00327   //         If isthep == kProdMethodOffset + kMDecay + 1000
00328   //                      => "Decay Parent" 
00329   //         Otherwise return "Unknown"
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     //MSG("Util",Msg::kWarning) 
00349     //  << "UtilIstHEP::AsString called with unknown isthep code " 
00350     //  << isthep << endl;
00351     return "Unknown";
00352   }
00353 
00354 }
00355 
00356 

Generated on Mon Feb 15 11:07:50 2010 for loon by  doxygen 1.3.9.1