Source code for HErmes.icecube_goodies.conversions

"""
Unit conversions and such
"""

from builtins import object
from numpy import vectorize,int32
#from icecube import icetray,dataclasses,NewNuFlux
####################################################


#FIXME: boilerplate this here, because it is not possible
# to load two versions of icerec simultaniously
# This should go into icerec!

[docs]class ParticleType(object): """ Namespace for icecube particle type codes """ unknown = 0 Gamma = 1 EPlus = 2 EMinus = 3 MuPlus = 5 MuMinus = 6 Pi0 = 7 PiPlus = 8 PiMinus = 9 K0_Long = 10 KPlus = 11 KMinus = 12 Neutron = 13 PPlus = 14 PMinus = 15 K0_Short = 16 NuE = 66 NuEBar = 67 NuMu = 68 NuMuBar = 69 TauPlus = 131 TauMinus = 132 NuTau = 133 NuTauBar = 134 He4Nucleus = 402 Li7Nucleus = 703 Be9Nucleus = 904 B11Nucleus = 1105 C12Nucleus = 1206 N14Nucleus = 1407 O16Nucleus = 1608 F19Nucleus = 1909 Ne20Nucleus = 2010 Na23Nucleus = 2311 Mg24Nucleus = 2412 Al26Nucleus = 2613 Al27Nucleus = 2713 Si28Nucleus = 2814 P31Nucleus = 3115 S32Nucleus = 3216 Cl35Nucleus = 3517 Ar36Nucleus = 3618 Ar37Nucleus = 3718 Ar38Nucleus = 3818 Ar39Nucleus = 3918 Ar40Nucleus = 4018 Ar41Nucleus = 4118 Ar42Nucleus = 4118 K39Nucleus = 3919 Ca40Nucleus = 4020 Sc45Nucleus = 4521 Ti48Nucleus = 4822 V51Nucleus = 5123 Cr52Nucleus = 5224 Mn55Nucleus = 5525 Fe56Nucleus = 5626
#######################################################
[docs]class PDGCode(object): """ Namespace for PDG conform particle type codes """ unknown = 0 Gamma = 22 EPlus = -11 EMinus = 11 MuPlus = -13 MuMinus = 13 Pi0 = 111 PiPlus = 211 PiMinus = -211 K0_Long = 130 KPlus = 321 KMinus = -321 Neutron = 2112 PPlus = 2212 PMinus = -2212 K0_Short = 310 Eta = 221 Lambda = 3122 SigmaPlus = 3222 Sigma0 = 3212 SigmaMinus = 3112 Xi0 = 3322 XiMinus = 3312 OmegaMinus = 3334 NeutronBar = -2112 LambdaBar = -3122 SigmaMinusBar = -3222 Sigma0Bar = -3212 SigmaPlusBar = -3112 Xi0Bar = -3322 XiPlusBar = -3312 OmegaPlusBar = -3334 DPlus = 411 DMinus = -411 D0 = 421 D0Bar = -421 DsPlus = 431 DsMinusBar = -431 LambdacPlus = 4122 WPlus = 24 WMinus = -24 Z0 = 23 NuE = 12 NuEBar = -12 NuMu = 14 NuMuBar = -14 TauPlus = -15 TauMinus = 15 NuTau = 16 NuTauBar = -16 He3Nucleus = 1000020030 He4Nucleus = 1000020040 Li6Nucleus = 1000030060 Li7Nucleus = 1000030070 Be9Nucleus = 1000040090 B10Nucleus = 1000050100 B11Nucleus = 1000050110 C12Nucleus = 1000060120 C13Nucleus = 1000060130 N14Nucleus = 1000070140 N15Nucleus = 1000070150 O16Nucleus = 1000080160 O17Nucleus = 1000080170 O18Nucleus = 1000080180 F19Nucleus = 1000090190 Ne20Nucleus = 1000100200 Ne21Nucleus = 1000100210 Ne22Nucleus = 1000100220 Na23Nucleus = 1000110230 Mg24Nucleus = 1000120240 Mg25Nucleus = 1000120250 Mg26Nucleus = 1000120260 Al26Nucleus = 1000130260 Al27Nucleus = 1000130270 Si28Nucleus = 1000140280 Si29Nucleus = 1000140290 Si30Nucleus = 1000140300 Si31Nucleus = 1000140310 Si32Nucleus = 1000140320 P31Nucleus = 1000150310 P32Nucleus = 1000150320 P33Nucleus = 1000150330 S32Nucleus = 1000160320 S33Nucleus = 1000160330 S34Nucleus = 1000160340 S35Nucleus = 1000160350 S36Nucleus = 1000160360 Cl35Nucleus = 1000170350 Cl36Nucleus = 1000170360 Cl37Nucleus = 1000170370 Ar36Nucleus = 1000180360 Ar37Nucleus = 1000180370 Ar38Nucleus = 1000180380 Ar39Nucleus = 1000180390 Ar40Nucleus = 1000180400 Ar41Nucleus = 1000180410 Ar42Nucleus = 1000180420 K39Nucleus = 1000190390 K40Nucleus = 1000190400 K41Nucleus = 1000190410 Ca40Nucleus = 1000200400 Ca41Nucleus = 1000200410 Ca42Nucleus = 1000200420 Ca43Nucleus = 1000200430 Ca44Nucleus = 1000200440 Ca45Nucleus = 1000200450 Ca46Nucleus = 1000200460 Ca47Nucleus = 1000200470 Ca48Nucleus = 1000200480 Sc44Nucleus = 1000210440 Sc45Nucleus = 1000210450 Sc46Nucleus = 1000210460 Sc47Nucleus = 1000210470 Sc48Nucleus = 1000210480 Ti44Nucleus = 1000220440 Ti45Nucleus = 1000220450 Ti46Nucleus = 1000220460 Ti47Nucleus = 1000220470 Ti48Nucleus = 1000220480 Ti49Nucleus = 1000220490 Ti50Nucleus = 1000220500 V48Nucleus = 1000230480 V49Nucleus = 1000230490 V50Nucleus = 1000230500 V51Nucleus = 1000230510 Cr50Nucleus = 1000240500 Cr51Nucleus = 1000240510 Cr52Nucleus = 1000240520 Cr53Nucleus = 1000240530 Cr54Nucleus = 1000240540 Mn52Nucleus = 1000250520 Mn53Nucleus = 1000250530 Mn54Nucleus = 1000250540 Mn55Nucleus = 1000250550 Fe54Nucleus = 1000260540 Fe55Nucleus = 1000260550 Fe56Nucleus = 1000260560 Fe57Nucleus = 1000260570 Fe58Nucleus = 1000260580
############################################################# ptype = ParticleType() pdgtype = PDGCode() # wrap these to dicts #ptype_to_pdg = dict([(ptype.__getattribute__(x),pdgtype.__getattribute__(x))\ # for x in dir(ParticleType)\ # if not x.startswith('_') and x in dir(PDGCode)]) ptype_to_pdg = {ptype.__getattribute__(x) : pdgtype.__getattribute__(x)\ for x in dir(ParticleType)\ if not x.startswith('_') and x in dir(PDGCode)} #pdg_to_ptype = dict([(pdgtype.__getattribute__(x),ptype.__getattribute__(x))\ # for x in dir(PDGCode)\ # if not x.startswith('_') and x in dir(ParticleType)]) pdg_to_ptype = {pdgtype.__getattribute__(x) : ptype.__getattribute__(x)\ for x in dir(PDGCode)\ if not x.startswith('_') and x in dir(ParticleType)}
[docs]def IsPDGEncoded(pid,neutrino=False): """ Check if the particle has already a pdg compatible pid Args: id (int): Partilce Id Keyword Args: neutrino (bool): as nue is H in PDG, set true if you know already that ihe particle might be a neutrino Returns (bool): True if PDG compatible """ for i in pid.values: if i in list(pdg_to_ptype.keys()): if i == 14 and neutrino: return True elif i == 14 and not neutrino: return False else: return True return False
##############################
[docs]def ConvertPrimaryToPDG(pid): """ Convert a primary id in an i3 file to the new values given by the pdg """ def _convert(pid): if pid in ptype_to_pdg: return int32(ptype_to_pdg[pid]) else: return int32(pid) return vectorize(_convert)(pid)
###############################
[docs]def ConvertPrimaryFromPDG(pid): """ Convert a primary id in an i3 file to the new values given by the pdg """ def _convert(pid): if pid in pdg_to_ptype: return int32(pdg_to_ptype[pid]) else: return int32(pid) return vectorize(_convert)(pid)