IAP GITLAB

Skip to content
Snippets Groups Projects
Commit 989f9ef2 authored by ralfulrich's avatar ralfulrich
Browse files

fix dependency

parent d6148eba
No related branches found
No related tags found
No related merge requests found
add_custom_command (
OUTPUT ${PROJECT_BINARY_DIR}/Processes/Sibyll/Generated.inc
COMMAND ${PROJECT_SOURCE_DIR}/Processes/Sibyll/code_generator.py
${PROJECT_BINARY_DIR}/Framework/Particles/pythia_db.pkl
${PROJECT_BINARY_DIR}/Framework/Particles/particle_db.pkl
${PROJECT_SOURCE_DIR}/Processes/Sibyll/sibyll_codes.dat
DEPENDS code_generator.py
sibyll_codes.dat
${PROJECT_BINARY_DIR}/Framework/Particles/pythia_db.pkl
${PROJECT_BINARY_DIR}/Framework/Particles/particle_db.pkl
WORKING_DIRECTORY
${PROJECT_BINARY_DIR}/Processes/Sibyll/
COMMENT "Generate conversion tables for particle codes SIBYLL <-> CORSIKA"
......
......@@ -13,16 +13,16 @@ import pickle, sys, itertools
# loads the pickled pythia_db (which is an OrderedDict)
def load_pythiadb(filename):
# loads the pickled particle_db (which is an OrderedDict)
def load_particledb(filename):
with open(filename, "rb") as f:
pythia_db = pickle.load(f)
return pythia_db
particle_db = pickle.load(f)
return particle_db
#
def read_sibyll_codes(filename, pythia_db):
def read_sibyll_codes(filename, particle_db):
with open(filename) as f:
for line in f:
line = line.strip()
......@@ -30,19 +30,19 @@ def read_sibyll_codes(filename, pythia_db):
continue
identifier, sib_code, canInteractFlag, xsType = line.split()
try:
pythia_db[identifier]["sibyll_code"] = int(sib_code)
pythia_db[identifier]["sibyll_canInteract"] = int(canInteractFlag)
pythia_db[identifier]["sibyll_xsType"] = int(xsType)
particle_db[identifier]["sibyll_code"] = int(sib_code)
particle_db[identifier]["sibyll_canInteract"] = int(canInteractFlag)
particle_db[identifier]["sibyll_xsType"] = int(xsType)
except KeyError as e:
raise Exception("Identifier '{:s}' not found in pythia_db".format(identifier))
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(pythia_db):
def generate_sibyll_enum(particle_db):
output = "enum class SibyllCode : int8_t {\n"
for identifier, pData in pythia_db.items():
for identifier, pData in particle_db.items():
if pData.get('sibyll_code') != None:
output += " {:s} = {:d},\n".format(identifier, pData['sibyll_code'])
output += "};\n"
......@@ -51,9 +51,9 @@ def generate_sibyll_enum(pythia_db):
# generates the look-up table to convert corsika codes to sibyll codes
def generate_corsika2sibyll(pythia_db):
string = "std::array<SibyllCodeIntType, {:d}> constexpr corsika2sibyll = {{\n".format(len(pythia_db))
for identifier, pData in pythia_db.items():
def generate_corsika2sibyll(particle_db):
string = "std::array<SibyllCodeIntType, {: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)")
string += "};\n"
......@@ -62,9 +62,9 @@ def generate_corsika2sibyll(pythia_db):
# generates the look-up table to convert corsika codes to sibyll codes
def generate_corsika2sibyll_xsType(pythia_db):
string = "std::array<int, {:d}> constexpr corsika2sibyllXStype = {{\n".format(len(pythia_db))
for identifier, pData in pythia_db.items():
def generate_corsika2sibyll_xsType(particle_db):
string = "std::array<int, {:d}> constexpr corsika2sibyllXStype = {{\n".format(len(particle_db))
for identifier, pData in particle_db.items():
sibCodeXS = pData.get("sibyll_xsType", -1)
string += " {:d}, // {:s}\n".format(sibCodeXS, identifier if sibCodeXS else identifier + " (not implemented in SIBYLL)")
string += "};\n"
......@@ -72,18 +72,18 @@ def generate_corsika2sibyll_xsType(pythia_db):
# generates the look-up table to convert sibyll codes to corsika codes
def generate_sibyll2corsika(pythia_db) :
def generate_sibyll2corsika(particle_db) :
string = ""
minID = 0
for identifier, pData in pythia_db.items() :
for identifier, pData in particle_db.items() :
if 'sibyll_code' in pData:
minID = min(minID, pData['sibyll_code'])
string += "SibyllCodeIntType constexpr minSibyll = {:d};\n\n".format(minID)
pDict = {}
for identifier, pData in pythia_db.items() :
for identifier, pData in particle_db.items() :
if 'sibyll_code' in pData:
sib_code = pData['sibyll_code'] - minID
pDict[sib_code] = identifier
......@@ -104,13 +104,13 @@ def generate_sibyll2corsika(pythia_db) :
# generates the bitset for the flag whether Sibyll knows the particle
def generate_known_particle(pythia_db):
num_particles = len(pythia_db)
def generate_known_particle(particle_db):
num_particles = len(particle_db)
num_bytes = num_particles // 32 + 1
string = "Bitset2::bitset2<{:d}> constexpr isKnown{{ std::array<uint32_t, {:d}>{{{{\n".format(num_particles, num_bytes)
numeric = 0
for identifier, pData in reversed(pythia_db.items()):
for identifier, pData in reversed(particle_db.items()):
handledBySibyll = int("sibyll_code" in pData) & 0x1
numeric = (numeric << 1) | handledBySibyll
......@@ -125,14 +125,14 @@ def generate_known_particle(pythia_db):
# generates the bitset for the flag whether Sibyll can use particle as projectile
def generate_interacting_particle(pythia_db):
num_particles = len(pythia_db)
def generate_interacting_particle(particle_db):
num_particles = len(particle_db)
num_bytes = num_particles // 32 + 1
string = "Bitset2::bitset2<{:d}> constexpr canInteract{{ std::array<uint32_t, {:d}>{{{{\n".format(num_particles, num_bytes)
#string = "std::array<bool, {:d}> constexpr corsika2sibyll = {{\n".format(num_particles)
numeric = 0
for identifier, pData in reversed(pythia_db.items()):
for identifier, pData in reversed(particle_db.items()):
can = 0
if 'sibyll_canInteract' in pData:
if pData['sibyll_canInteract'] > 0:
......@@ -151,19 +151,19 @@ def generate_interacting_particle(pythia_db):
if __name__ == "__main__":
if len(sys.argv) != 3:
print("usage: {:s} <pythia_db.pkl> <sibyll_codes.dat>".format(sys.argv[0]), file=sys.stderr)
print("usage: {:s} <particle_db.pkl> <sibyll_codes.dat>".format(sys.argv[0]), file=sys.stderr)
sys.exit(1)
print("code_generator.py for SIBYLL")
pythia_db = load_pythiadb(sys.argv[1])
read_sibyll_codes(sys.argv[2], pythia_db)
particle_db = load_particledb(sys.argv[1])
read_sibyll_codes(sys.argv[2], particle_db)
with open("Generated.inc", "w") as f:
print("// this file is automatically generated\n// edit at your own risk!\n", file=f)
print(generate_sibyll_enum(pythia_db), file=f)
print(generate_corsika2sibyll(pythia_db), file=f)
print(generate_known_particle(pythia_db), file=f)
print(generate_sibyll2corsika(pythia_db), file=f)
print(generate_interacting_particle(pythia_db), file=f)
print(generate_corsika2sibyll_xsType(pythia_db), file=f)
print(generate_sibyll_enum(particle_db), file=f)
print(generate_corsika2sibyll(particle_db), file=f)
print(generate_known_particle(particle_db), file=f)
print(generate_sibyll2corsika(particle_db), file=f)
print(generate_interacting_particle(particle_db), file=f)
print(generate_corsika2sibyll_xsType(particle_db), file=f)
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