diff --git a/Processes/Sibyll/CMakeLists.txt b/Processes/Sibyll/CMakeLists.txt index 31d204714dba4aa72301e97ab3f5402e1abdeb73..880ed76d5ed5c2da19b6228b39680984309f1147 100644 --- a/Processes/Sibyll/CMakeLists.txt +++ b/Processes/Sibyll/CMakeLists.txt @@ -1,11 +1,11 @@ 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" diff --git a/Processes/Sibyll/code_generator.py b/Processes/Sibyll/code_generator.py index 388668e1de0d5b04c8b5fa920308d20ab9982d39..e1cfcbfaf84e4d04aff4ed35b324daacf1fc66c1 100755 --- a/Processes/Sibyll/code_generator.py +++ b/Processes/Sibyll/code_generator.py @@ -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)