From ded03f5f1ca71690ea0cc4c00ae50b325b9addde Mon Sep 17 00:00:00 2001 From: pdeperio Date: Mon, 18 Dec 2017 20:47:56 -0600 Subject: [PATCH 1/3] Fix bugs in event indexing and PMT selection for S1 likelihood calculations --- hax/treemakers/posrec.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/hax/treemakers/posrec.py b/hax/treemakers/posrec.py index 4263096..127cb2c 100644 --- a/hax/treemakers/posrec.py +++ b/hax/treemakers/posrec.py @@ -175,10 +175,10 @@ def extract_data(self, event): self.nn_tensorflow, self.loaded_tfnn_model_json_name) - e = event.event_number + event_num = event.event_number try: - i = self.indices.index(e) + event_index = self.indices.index(event_num) except Exception: return event_data @@ -189,8 +189,8 @@ def extract_data(self, event): # Position reconstruction based on NN from TensorFlow s2apc = np.array(list(s2.area_per_channel)) s2apc_clean = [] - for i, s2_t in enumerate(s2apc): - if i not in self.list_bad_pmts and i < self.ntop_pmts: + for ipmt, s2_t in enumerate(s2apc): + if ipmt not in self.list_bad_pmts and ipmt < self.ntop_pmts: s2apc_clean.append(s2_t) s2apc_clean = np.asarray(s2apc_clean) s2apc_clean_norm = s2apc_clean / s2apc_clean.sum() @@ -218,7 +218,7 @@ def extract_data(self, event): size_top = s1.area * s1.area_fraction_top size_tot = s1.area - aft = self.s1_aft_map.get_value(self.x[i], self.y[i], self.z[i]) + aft = self.s1_aft_map.get_value(self.x[event_index], self.y[event_index], self.z[event_index]) event_data['s1_area_fraction_top_probability_hax'] = binom_test_pax(size_top, size_tot, aft) # Now do s1_pattern_fit @@ -232,38 +232,40 @@ def extract_data(self, event): confused_s1_channels.append(a) try: + + # Create PMT array of booleans for use in likelihood calculation + is_pmt_in = np.ones(len(self.tpc_channels), dtype=bool) # Default True + is_pmt_in[confused_s1_channels] = False # Ignore saturated channels + event_data['s1_pattern_fit_hax'] = self.pattern_fitter.compute_gof( - (self.x[i], self.y[i], self.z[i]), + (self.x[event_index], self.y[event_index], self.z[event_index]), apc[self.tpc_channels], - pmt_selection=np.setdiff1d(self.tpc_channels, - confused_s1_channels), + pmt_selection=is_pmt_in, statistic=self.statistic) event_data['s1_pattern_fit_hits_hax'] = self.pattern_fitter.compute_gof( - (self.x[i], self.y[i], self.z[i]), + (self.x[event_index], self.y[event_index], self.z[event_index]), hpc[self.tpc_channels], - pmt_selection=np.setdiff1d(self.tpc_channels, - confused_s1_channels), + pmt_selection=is_pmt_in, statistic=self.statistic) - pmts_bottom = np.setdiff1d(self.tpc_channels, confused_s1_channels) - pmts_bottom[self.pax_config['DEFAULT']['channels_top']] = 0 + # Switch to bottom PMTs only + is_pmt_in[self.pax_config['DEFAULT']['channels_top']] = False event_data['s1_pattern_fit_bottom_hax'] = self.pattern_fitter.compute_gof( - (self.x[i], self.y[i], self.z[i]), + (self.x[event_index], self.y[event_index], self.z[event_index]), apc[self.tpc_channels], - pmt_selection=pmts_bottom, + pmt_selection=is_pmt_in, statistic=self.statistic) event_data['s1_pattern_fit_bottom_hits_hax'] = self.pattern_fitter.compute_gof( - (self.x[i], self.y[i], self.z[i]), + (self.x[event_index], self.y[event_index], self.z[event_index]), hpc[self.tpc_channels], - pmt_selection=pmts_bottom, + pmt_selection=is_pmt_in, statistic=self.statistic) - except exceptions.CoordinateOutOfRangeException as E: + except exceptions.CoordinateOutOfRangeException as _: # pax does this too. happens when event out of TPC (usually z) - log.error(E) return event_data return event_data From 16fe89ae7ead6d6034ee818114a68060759ab7d8 Mon Sep 17 00:00:00 2001 From: Patrick de Perio Date: Mon, 18 Dec 2017 21:49:44 -0500 Subject: [PATCH 2/3] Increment version --- hax/treemakers/posrec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hax/treemakers/posrec.py b/hax/treemakers/posrec.py index 127cb2c..6f951b5 100644 --- a/hax/treemakers/posrec.py +++ b/hax/treemakers/posrec.py @@ -34,7 +34,7 @@ class PositionReconstruction(TreeMaker): - s1_area_upper_injection_fraction: s1 area fraction near Rn220 injection points (near PMT 131) - s1_area_lower_injection_fraction: s1 area fraction near Rn220 injection points (near PMT 243) """ - __version__ = '0.16' + __version__ = '0.2' extra_branches = ['peaks.area_per_channel[260]', 'peaks.hits_per_channel[260]', 'peaks.n_saturated_per_channel[260]', From 48544ed0747a147626926e52d07a6d678bf5ef76 Mon Sep 17 00:00:00 2001 From: Patrick de Perio Date: Mon, 18 Dec 2017 23:25:43 -0500 Subject: [PATCH 3/3] Fix version oops 0.2 is actually less than 0.16 --- hax/treemakers/posrec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hax/treemakers/posrec.py b/hax/treemakers/posrec.py index 6f951b5..4dd2ec4 100644 --- a/hax/treemakers/posrec.py +++ b/hax/treemakers/posrec.py @@ -34,7 +34,7 @@ class PositionReconstruction(TreeMaker): - s1_area_upper_injection_fraction: s1 area fraction near Rn220 injection points (near PMT 131) - s1_area_lower_injection_fraction: s1 area fraction near Rn220 injection points (near PMT 243) """ - __version__ = '0.2' + __version__ = '0.17' extra_branches = ['peaks.area_per_channel[260]', 'peaks.hits_per_channel[260]', 'peaks.n_saturated_per_channel[260]',