diff --git a/km3buu/geometry.py b/km3buu/geometry.py index 42378c3b4d6457f2f0530fa009a08186c1db1131..c1126c414ad6ce4a698db1c8cd32a9c6aa0bb568 100644 --- a/km3buu/geometry.py +++ b/km3buu/geometry.py @@ -37,13 +37,13 @@ class DetectorVolume(ABC): pass @abstractmethod - def header_entry(self): + def header_entries(self): """ Returns the header information for the detector volume geometry Returns ------- - tuple (header_key, header_information) + dict {header_key: header_information} """ pass @@ -102,10 +102,15 @@ class CanVolume(DetectorVolume): pos_z = np.random.uniform(self._zmin, self._zmax) return (pos_x, pos_y, pos_z) - def header_entry(self): - key = "can" - value = "{} {} {}".format(self._zmin, self._zmax, self._radius) - return key, value + def header_entries(self, nevents=0): + retdct = dict() + key = "genvol" + value = "{} {} {} {} {}".format(self._zmin, self._zmax, self._radius, + self._volume, nevents) + retdct[key] = value + key = "fixedcan" + value = "0 0 {} {} {}".format(self._zmin, self._zmax, self._radius) + return retdct class SphericalVolume(DetectorVolume): @@ -140,9 +145,14 @@ class SphericalVolume(DetectorVolume): pos = (pos_x, pos_y, pos_z) return tuple(np.add(self._coord_origin, pos)) - def header_entry(self): + def header_entries(self, nevents=0): + retdct = dict() key = "sphere" value = "radius: {} center_x: {} center_y: {} center_z: {}".format( self._radius, self._coord_origin[0], self._coord_origin[1], self._coord_origin[2]) - return key, value + retdct[key] = value + key = "genvol" + value = "0 0 {} {} {}".format(self._radius, self._volume, nevents) + retdct[key] = value + return retdct diff --git a/km3buu/output.py b/km3buu/output.py index 21395df73116602f909652e8e6d9d060ac270bbb..d36b089abf5f93f0597455e2a86d99106f85da42 100644 --- a/km3buu/output.py +++ b/km3buu/output.py @@ -176,7 +176,8 @@ EMPTY_KM3NET_HEADER_DICT = { "norma": "0 0", "tgen": "0", "simul": "", - "primary": "0" + "primary": "0", + "genvol": "0 0 0 0 0" } PARTICLE_MC_STATUS = { @@ -707,12 +708,12 @@ def write_detector_file(gibuu_output, global_generation_weight = gibuu_output.global_generation_weight(4 * np.pi) mean_xsec_func = gibuu_output.mean_xsec - head = ROOT.Head() header_dct = EMPTY_KM3NET_HEADER_DICT.copy() header_dct["target"] = element.name - key, value = geometry.header_entry() - header_dct[key] = value + for k,v in geometry.header_entries(gibuu_output._generated_events // + no_files).items(): + header_dct[k] = v header_dct["coord_origin"] = "{} {} {}".format(*geometry.coord_origin) header_dct["flux"] = "{:d} 0 0".format(nu_type) header_dct["cut_nu"] = "{:.2f} {:.2f} -1 1".format(gibuu_output.energy_min, @@ -740,6 +741,7 @@ def write_detector_file(gibuu_output, tree.Branch("Evt", evt, 32000, 4) mc_trk_id = 0 + head = ROOT.Head() for k, v in header_dct.items(): head.set_line(k, v) head.Write("Head") @@ -831,6 +833,7 @@ def write_detector_file(gibuu_output, tree.Fill() outfile.Write() outfile.Close() + del head del outfile del evt del tree