diff --git a/km3buu/jobcard.py b/km3buu/jobcard.py index 7467fcf45016f78f3caf850eb7c4eab28500f648..210390e90c9338d1dea1e2c05362542afeeb058d 100644 --- a/km3buu/jobcard.py +++ b/km3buu/jobcard.py @@ -16,18 +16,73 @@ INPUT_PATH = "/opt/buuinput2019/" class Jobcard(object): + """ + A object to manage GiBUU jobcard properties and format them + + Parameters + ---------- + input_path: str + The input path pointing to the GiBUU lookup data which should be used + """ def __init__(self, input_path=INPUT_PATH): self.input_path = input_path - self._groups = { - "input": {"path_to_input": input_path} - } + self._groups = {} + # Default [input] + self.add_property("input", "path_to_input", input_path) + self.add_property("input", "numTimeSteps", 0) + self.add_property("input", "numEnsembles", 100000) + self.add_property("input", "delta_T", 0.2) + self.add_property("input", "num_runs_SameEnergy", 1) + # Default [target] + self.add_property("target", "Z", 1) + self.add_property("target", "A", 1) + + def set_target(self, Z, A): + """ + Set the interaction target nucleus + + Parameters + ---------- + A: int + Number of nucleons in the nucleus + Z: int + Number of protons in the nucleus + """ + self.add_property("target", "Z", Z) + self.add_property("target", "A", A) + + @property + def timesteps(self): + """ + input/numTimeSteps property + """ + return self._groups["input"]["numTimeSteps"] - def add_property(self, group, name, value) + @timesteps.setter + def timesteps(self, timesteps): + self._groups["input"]["numTimeSteps"] = timesteps + + def add_property(self, group, name, value): + """ Add a property to the jobcard + + Parameters + ---------- + group: str + The parameter group where the property is incorporated + name: str + The property name + value: + The property value + """ + if not group in self._groups.keys(): + self._groups[group] = {} self._groups[group][name] = value def __str__(self): retval = "" for group, attrs in self._groups.items(): + if len(self._groups[group]) == 0: + continue retval += "&%s\n" % group for attr, value in attrs.items(): if type(value) is str: @@ -36,11 +91,21 @@ class Jobcard(object): retval += "\t%s = .%s.\n" % (attr, value) else: retval += "\t%s = %s\n" % (attr, value) - retval += "/\n" + retval += "/\n\n" return retval - class NeutrinoJobcard(Jobcard): + """ + Jobcard object for neutrino interactions + + Parameters + ---------- + input_path: str + The input path pointing to the GiBUU lookup data which should be used + """ def __init__(self, input_path=INPUT_PATH): super(NeutrinoJobcard, self).__init__(input_path) + ## Default [input] + self.add_property("input", "eventtype", 5) + self.add_property("input", "localEnsemble", True)