Skip to content

Commit

Permalink
Compute deconvolution parameters in FlashCamExtractor only as needed
Browse files Browse the repository at this point in the history
  • Loading branch information
maxnoe committed Apr 25, 2024
1 parent d3121f7 commit e6d7c47
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 9 deletions.
1 change: 1 addition & 0 deletions docs/changes/2545.optimization.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Compute deconvolution parameters in FlashCamExtractor only as needed.
21 changes: 12 additions & 9 deletions src/ctapipe/image/extractor.py
Original file line number Diff line number Diff line change
Expand Up @@ -1616,14 +1616,18 @@ def __init__(self, subarray, **kwargs):
tel_id: telescope.camera.readout.sampling_rate.to_value("GHz")
for tel_id, telescope in subarray.tel.items()
}
self._deconvolution_parameters = {}

def time_profile_pdf_gen(std_dev: float):
if std_dev == 0:
return None
return scipy.stats.norm(0.0, std_dev).pdf
def _get_deconvolution_parameters(self, tel_id):
if tel_id not in self._deconvolution_parameters:
tel = self.subarray.tel[tel_id]

self.deconvolution_pars = {
tel_id: deconvolution_parameters(
def time_profile_pdf_gen(std_dev: float):
if std_dev == 0:
return None
return scipy.stats.norm(0.0, std_dev).pdf

self._deconvolution_parameters[tel_id] = deconvolution_parameters(
tel.camera,
self.upsampling.tel[tel_id],
self.window_width.tel[tel_id],
Expand All @@ -1632,8 +1636,7 @@ def time_profile_pdf_gen(std_dev: float):
self.leading_edge_rel_descend_limit.tel[tel_id],
time_profile_pdf_gen(self.effective_time_profile_std.tel[tel_id]),
)
for tel_id, tel in subarray.tel.items()
}
return self._deconvolution_parameters[tel_id]

@staticmethod
def clip(x, lo=0.0, hi=np.inf):
Expand All @@ -1650,7 +1653,7 @@ def __call__(
leading_edge_timing = self.leading_edge_timing.tel[tel_id]
leading_edge_rel_descend_limit = self.leading_edge_rel_descend_limit.tel[tel_id]

pole_zeros, gains, shifts, pz2ds = self.deconvolution_pars[tel_id]
pole_zeros, gains, shifts, pz2ds = self._get_deconvolution_parameters(tel_id)
pz, gain, shift, pz2d = pole_zeros[0], gains[0], shifts[0], pz2ds[0]

t_waveforms = deconvolve(waveforms, 0.0, upsampling, pz)
Expand Down

0 comments on commit e6d7c47

Please sign in to comment.