IAP GITLAB

Skip to content
Snippets Groups Projects
Commit b644b827 authored by Ralf M Ulrich's avatar Ralf M Ulrich
Browse files

also improved the unknown particle mapping for sibyll

parent 3e14b07b
No related branches found
No related tags found
1 merge request!186Resolve "particle list example"
Pipeline #1256 passed
......@@ -22,11 +22,23 @@ namespace corsika::process::sibyll {
enum class SibyllCode : int8_t;
using SibyllCodeIntType = std::underlying_type<SibyllCode>::type;
/**
These are the possible projectile for which Sibyll knows the cross section
*/
enum class SibyllXSClass : int8_t {
CannotInteract = 0,
Baryon = 1,
Pion = 2,
Kaon = 3,
};
using SibyllXSClassIntType = std::underlying_type<SibyllXSClass>::type;
#include <corsika/process/sibyll/Generated.inc>
SibyllCode constexpr ConvertToSibyll(corsika::particles::Code pCode) {
return static_cast<SibyllCode>(
corsika2sibyll[static_cast<corsika::particles::CodeIntType>(pCode)]);
return
corsika2sibyll[static_cast<corsika::particles::CodeIntType>(pCode)];
}
corsika::particles::Code constexpr ConvertFromSibyll(SibyllCode pCode) {
......@@ -45,7 +57,7 @@ namespace corsika::process::sibyll {
}
int constexpr GetSibyllXSCode(corsika::particles::Code pCode) {
return corsika2sibyllXStype[static_cast<corsika::particles::CodeIntType>(pCode)];
return static_cast<SibyllXSClassIntType>(corsika2sibyllXStype[static_cast<corsika::particles::CodeIntType>(pCode)]);
}
bool constexpr CanInteract(corsika::particles::Code pCode) {
......
......@@ -13,65 +13,83 @@ import pickle, sys, itertools
# loads the pickled particle_db (which is an OrderedDict)
def load_particledb(filename):
'''
loads the pickled particle_db (which is an OrderedDict)
'''
with open(filename, "rb") as f:
particle_db = pickle.load(f)
return particle_db
#
def read_sibyll_codes(filename, particle_db):
'''
reads to sibyll codes data file
For particls known to sibyll, add 'sibyll_code' and 'sibyll_xsType' to particle_db
'''
with open(filename) as f:
for line in f:
line = line.strip()
if line[0] == '#':
if len(line)==0 or line[0] == '#':
continue
identifier, sib_code, canInteractFlag, xsType = line.split()
try:
particle_db[identifier]["sibyll_code"] = int(sib_code)
particle_db[identifier]["sibyll_xsType"] = int(xsType)
particle_db[identifier]["sibyll_xsType"] = xsType
except KeyError as e:
raise Exception("Identifier '{:s}' not found in particle_db".format(identifier))
# generates the enum to access sibyll particles by readable names
def generate_sibyll_enum(particle_db):
'''
generates the enum to access sibyll particles by readable names
'''
output = "enum class SibyllCode : int8_t {\n"
for identifier, pData in particle_db.items():
if pData.get('sibyll_code') != None:
if 'sibyll_code' in pData:
output += " {:s} = {:d},\n".format(identifier, pData['sibyll_code'])
output += "};\n"
return output
# generates the look-up table to convert corsika codes to sibyll codes
def generate_corsika2sibyll(particle_db):
string = "std::array<SibyllCodeIntType, {:d}> constexpr corsika2sibyll = {{\n".format(len(particle_db))
'''
generates the look-up table to convert corsika codes to sibyll codes
'''
string = "std::array<SibyllCode, {:d}> constexpr corsika2sibyll = {{\n".format(len(particle_db))
for identifier, pData in particle_db.items():
sibCode = pData.get("sibyll_code", 0)
string += " {:d}, // {:s}\n".format(sibCode, identifier if sibCode else identifier + " (not implemented in SIBYLL)")
if 'sibyll_code' in pData:
string += " SibyllCode::{:s}, \n".format(identifier)
else:
string += " SibyllCode::Unknown, // {:s}\n".format(identifier + ' not implemented in SIBYLL')
string += "};\n"
return string
# generates the look-up table to convert corsika codes to sibyll codes
def generate_corsika2sibyll_xsType(particle_db):
string = "std::array<int, {:d}> constexpr corsika2sibyllXStype = {{\n".format(len(particle_db))
'''
generates the look-up table to convert corsika codes to sibyll codes
'''
string = "std::array<SibyllXSClass, {:d}> constexpr corsika2sibyllXStype = {{\n".format(len(particle_db))
for identifier, pData in particle_db.items():
sibCodeXS = pData.get("sibyll_xsType", 0)
string += " {:d}, // {:s}\n".format(sibCodeXS, identifier if sibCodeXS else identifier + " (not implemented in SIBYLL)")
if 'sibyll_xsType' in pData:
string += " SibyllXSClass::{:s}, // {:s}\n".format(pData['sibyll_xsType'], identifier)
else:
string += " SibyllXSClass::CannotInteract, // {:s}\n".format(identifier + ' not implemented in SIBYLL')
string += "};\n"
return string
# generates the look-up table to convert sibyll codes to corsika codes
def generate_sibyll2corsika(particle_db) :
'''
generates the look-up table to convert sibyll codes to corsika codes
'''
string = ""
minID = 0
......
# input file for particle conversion to/from SIBYLL
# the format of this file is: "corsika-identifier" "sibyll-id" "can-interact-in-sibyll" "cross-section-type"
Electron 3 0 0
Positron 2 0 0
NuE 15 0 0
NuEBar 16 0 0
MuMinus 5 0 0
MuPlus 4 0 0
NuMu 17 0 0
NuMuBar 18 0 0
TauMinus 91 0 0
TauPlus 90 0 0
NuTau 92 0 0
NuTauBar 93 0 0
Gamma 1 0 0
Pi0 6 1 2
# rho0 could interact but sibyll has no cross section/interaction length. was used for gamma had int
Rho0 27 0 0
K0Long 11 1 3
K0 21 0 3
K0Bar 22 0 3
PiPlus 7 1 2
PiMinus 8 1 2
RhoPlus 25 0 0
RhoMinus 26 0 0
Eta 23 0 0
EtaPrime 24 0 0
Pi1300Plus 62 0 0
Pi1300Minus 63 0 0
Pi1300_0 61 0 0
Omega 32 0 0
K0Short 12 1 3
KStar0 30 0 0
KStar0Bar 31 0 0
KPlus 9 1 3
KMinus 10 1 3
KStarPlus 28 0 0
KStarMinus 29 0 0
KStar0_1430_0 66 0 0
KStar0_1430_0Bar 67 0 0
KStar0_1430_Plus 64 0 0
KStar0_1430_MinusBar 65 0 0
DPlus 59 1 3
DMinus 60 1 3
DStarPlus 78 0 0
DStarMinus 79 0 0
D0 71 1 3
D0Bar 72 1 3
DStar0 80 0 0
DStar0Bar 81 0 0
DsPlus 74 1 3
DsMinus 75 1 3
DStarSPlus 76 0 0
DStarSMinus 77 0 0
EtaC 73 0 0
Neutron 14 1 1
AntiNeutron -14 1 1
Delta0 42 0 0
Delta0Bar -42 0 0
DeltaMinus 43 0 0
DeltaPlusBar -43 0 0
Proton 13 1 1
AntiProton -13 1 1
N1440Plus 51 0 0
N1440MinusBar -51 0 0
N1440_0 52 0 0
N1440_0Bar -52 0 0
N1710Plus 53 0 0
N1710MinusBar -53 0 0
N1710_0 54 0 0
N1710_0Bar -54 0 0
DeltaPlus 41 0 0
DeltaMinusBar -41 0 0
DeltaPlusPlus 40 0 0
DeltaMinusMinusBar -40 0 0
SigmaMinus 36 1 1
SigmaPlusBar -36 1 1
SigmaStarMinus 46 0 0
SigmaStarPlusBar -46 0 0
SigmaStarPlus 44 0 0
SigmaStarMinusBar -44 0 0
SigmaStar0 45 0 0
SigmaStar0Bar -45 0 0
Lambda0 39 1 1
Lambda0Bar -39 1 1
Sigma0 35 1 1
Sigma0Bar -35 1 1
SigmaPlus 34 1 1
SigmaMinusBar -34 1 1
XiMinus 38 1 1
XiPlusBar -38 1 1
Xi0 37 1 1
Xi0Bar -37 1 1
XiStarMinus 48 0 0
XiStarPlusBar -48 0 0
XiStar0 47 0 0
XiStar0Bar -47 0 0
OmegaMinus 49 0 0
OmegaPlusBar -49 0 0
SigmaC0 86 0 0
SigmaC0Bar -86 0 0
SigmaStarC0 96 0 0
SigmaStarC0Bar -96 0 0
LambdaCPlus 89 1 1
LambdaCMinusBar -89 1 1
XiC0 88 1 1
XiC0Bar -88 1 1
SigmaCPlus 85 0 0
SigmaCMinusBar -85 0 0
SigmaStarCPlus 95 0 0
SigmaStarCMinusBar -95 0 0
SigmaCPlusPlus 84 0 0
SigmaCMinusMinusBar -84 0 0
SigmaStarCPlusPlus 94 0 0
SigmaStarCMinusMinusBar -94 0 0
XiCPlus 87 1 1
XiCMinusBar -87 1 1
XiStarCPlus 97 0 0
XiStarCMinusBar -97 0 0
XiStarC0 98 0 0
XiStarC0Bar -98 0 0
OmegaC0 99 0 0
OmegaC0Bar -99 0 0
Jpsi 83 0 0
Phi 33 0 0
Unknown 0 0 0
# The unknown particle is to handle all particles that are not known to SIBYLL.
# It is important that sibyll-id does not overlap with any existing sibyll particle!
# Be careful
Unknown 0 0 CannotInteract
# Here is the list of particles known to sibyll
Electron 3 0 CannotInteract
Positron 2 0 CannotInteract
NuE 15 0 CannotInteract
NuEBar 16 0 CannotInteract
MuMinus 5 0 CannotInteract
MuPlus 4 0 CannotInteract
NuMu 17 0 CannotInteract
NuMuBar 18 0 CannotInteract
TauMinus 91 0 CannotInteract
TauPlus 90 0 CannotInteract
NuTau 92 0 CannotInteract
NuTauBar 93 0 CannotInteract
Gamma 1 0 CannotInteract
Pi0 6 1 Pion
# rho0 could interact but sibyll has no cross section/interaction length. was used for gamma had int
Rho0 27 0 CannotInteract
K0Long 11 1 Kaon
K0 21 0 Kaon
K0Bar 22 0 Kaon
PiPlus 7 1 Pion
PiMinus 8 1 Pion
RhoPlus 25 0 CannotInteract
RhoMinus 26 0 CannotInteract
Eta 23 0 CannotInteract
EtaPrime 24 0 CannotInteract
Pi1300Plus 62 0 CannotInteract
Pi1300Minus 63 0 CannotInteract
Pi1300_0 61 0 CannotInteract
Omega 32 0 CannotInteract
K0Short 12 1 Kaon
KStar0 30 0 CannotInteract
KStar0Bar 31 0 CannotInteract
KPlus 9 1 Kaon
KMinus 10 1 Kaon
KStarPlus 28 0 CannotInteract
KStarMinus 29 0 CannotInteract
KStar0_1430_0 66 0 CannotInteract
KStar0_1430_0Bar 67 0 CannotInteract
KStar0_1430_Plus 64 0 CannotInteract
KStar0_1430_MinusBar 65 0 CannotInteract
DPlus 59 1 Kaon
DMinus 60 1 Kaon
DStarPlus 78 0 CannotInteract
DStarMinus 79 0 CannotInteract
D0 71 1 Kaon
D0Bar 72 1 Kaon
DStar0 80 0 CannotInteract
DStar0Bar 81 0 CannotInteract
DsPlus 74 1 Kaon
DsMinus 75 1 Kaon
DStarSPlus 76 0 CannotInteract
DStarSMinus 77 0 CannotInteract
EtaC 73 0 CannotInteract
Neutron 14 1 Baryon
AntiNeutron -14 1 Baryon
Delta0 42 0 CannotInteract
Delta0Bar -42 0 CannotInteract
DeltaMinus 43 0 CannotInteract
DeltaPlusBar -43 0 CannotInteract
Proton 13 1 Baryon
AntiProton -13 1 Baryon
N1440Plus 51 0 CannotInteract
N1440MinusBar -51 0 CannotInteract
N1440_0 52 0 CannotInteract
N1440_0Bar -52 0 CannotInteract
N1710Plus 53 0 CannotInteract
N1710MinusBar -53 0 CannotInteract
N1710_0 54 0 CannotInteract
N1710_0Bar -54 0 CannotInteract
DeltaPlus 41 0 CannotInteract
DeltaMinusBar -41 0 CannotInteract
DeltaPlusPlus 40 0 CannotInteract
DeltaMinusMinusBar -40 0 CannotInteract
SigmaMinus 36 1 Baryon
SigmaPlusBar -36 1 Baryon
SigmaStarMinus 46 0 CannotInteract
SigmaStarPlusBar -46 0 CannotInteract
SigmaStarPlus 44 0 CannotInteract
SigmaStarMinusBar -44 0 CannotInteract
SigmaStar0 45 0 CannotInteract
SigmaStar0Bar -45 0 CannotInteract
Lambda0 39 1 Baryon
Lambda0Bar -39 1 Baryon
Sigma0 35 1 Baryon
Sigma0Bar -35 1 Baryon
SigmaPlus 34 1 Baryon
SigmaMinusBar -34 1 Baryon
XiMinus 38 1 Baryon
XiPlusBar -38 1 Baryon
Xi0 37 1 Baryon
Xi0Bar -37 1 Baryon
XiStarMinus 48 0 CannotInteract
XiStarPlusBar -48 0 CannotInteract
XiStar0 47 0 CannotInteract
XiStar0Bar -47 0 CannotInteract
OmegaMinus 49 0 CannotInteract
OmegaPlusBar -49 0 CannotInteract
SigmaC0 86 0 CannotInteract
SigmaC0Bar -86 0 CannotInteract
SigmaStarC0 96 0 CannotInteract
SigmaStarC0Bar -96 0 CannotInteract
LambdaCPlus 89 1 Baryon
LambdaCMinusBar -89 1 Baryon
XiC0 88 1 Baryon
XiC0Bar -88 1 Baryon
SigmaCPlus 85 0 CannotInteract
SigmaCMinusBar -85 0 CannotInteract
SigmaStarCPlus 95 0 CannotInteract
SigmaStarCMinusBar -95 0 CannotInteract
SigmaCPlusPlus 84 0 CannotInteract
SigmaCMinusMinusBar -84 0 CannotInteract
SigmaStarCPlusPlus 94 0 CannotInteract
SigmaStarCMinusMinusBar -94 0 CannotInteract
XiCPlus 87 1 Baryon
XiCMinusBar -87 1 Baryon
XiStarCPlus 97 0 CannotInteract
XiStarCMinusBar -97 0 CannotInteract
XiStarC0 98 0 CannotInteract
XiStarC0Bar -98 0 CannotInteract
OmegaC0 99 0 CannotInteract
OmegaC0Bar -99 0 CannotInteract
Jpsi 83 0 CannotInteract
Phi 33 0 CannotInteract
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment