Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions CHECLabPy/core/io/simtel.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def __init__(self, path, max_events=None):
)
self.seeker = EventSeeker(reader)

first_event = self.seeker[0]
first_event = self.seeker.get_event_index(0)
tels = list(first_event.r0.tels_with_data)
self.tel = tels[0]
shape = first_event.r0.tel[self.tel].waveform.shape
Expand All @@ -62,7 +62,7 @@ def __init__(self, path, max_events=None):
self.mapping = get_clp_mapping_from_tc_mapping(tc_mapping)
n_rows = self.mapping.metadata['n_rows']
n_columns = self.mapping.metadata['n_columns']
camera_geom = first_event.inst.subarray.tel[tels[0]].camera
camera_geom = reader.subarray.tel[tels[0]].camera.geometry
engineering_frame = EngineeringCameraFrame(n_mirrors=2)
engineering_geom = camera_geom.transform_to(engineering_frame)
pix_x = engineering_geom.pix_x.value
Expand All @@ -84,7 +84,7 @@ def __init__(self, path, max_events=None):
def _build_waveform(self, event):
self._fill_event_containers(event)
samples = event.r1.tel[self.tel].waveform[self.pixel_order]
mc_true = event.mc.tel[self.tel].photo_electron_image[self.pixel_order]
mc_true = event.mc.tel[self.tel].true_image[self.pixel_order]
waveform = SimtelWaveform(
samples,
iev=self._iev,
Expand All @@ -95,7 +95,7 @@ def _build_waveform(self, event):
return waveform

def _get_event(self, iev):
event = self.seeker[iev]
event = self.seeker.get_event_index(iev)
return self._build_waveform(event)

def __iter__(self):
Expand All @@ -119,8 +119,8 @@ def is_compatible(path):

def _fill_event_containers(self, event):
self._iev = event.count
self._t_cpu = pd.to_datetime(event.trig.gps_time.value, unit='s')
self.run_id = event.r0.obs_id
self._t_cpu = pd.to_datetime(event.trigger.tel[self.tel].time.value, unit='s')
self.run_id = event.index.obs_id

self.mc = dict(
iev=self._iev,
Expand Down
19 changes: 18 additions & 1 deletion CHECLabPy/utils/mapping.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import warnings
import numpy as np
from ctapipe.instrument import SubarrayDescription, TelescopeDescription, \
CameraDescription, CameraReadout, OpticsDescription
from astropy import units as u


def get_clp_mapping_from_tc_mapping(tc_mapping):
Expand Down Expand Up @@ -169,11 +172,25 @@ def get_ctapipe_camera_geometry(mapping):
pix_area=None,
pix_type='rectangular',
frame=EngineeringCameraFrame(n_mirrors=2),
sampling_rate=u.Quantity(1, u.GHz),
)
return camera


def get_ctapipe_subarray(mapping):
tel_id = 0
geom = get_ctapipe_camera_geometry(mapping)
camera = CameraDescription("CHEC", geom, CameraReadout.from_name("CHEC"))
optics = OpticsDescription.from_name("SST-ASTRI")
subarray = SubarrayDescription(
"test array",
tel_positions={tel_id: np.zeros(3) * u.m},
tel_descriptions={
tel_id: TelescopeDescription("SST-ASTRI_CHEC", "SST", optics, camera)
},
)
return subarray, tel_id


def get_row_column(pix_x, pix_y):
"""
Get the row and column of rectangular pixels of a camera that are
Expand Down
12 changes: 7 additions & 5 deletions CHECLabPy/waveform_reducers/ctapipe_integrators.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from CHECLabPy.core.reducer import WaveformReducer, column
from CHECLabPy.utils.mapping import get_ctapipe_camera_geometry
from CHECLabPy.utils.mapping import get_ctapipe_subarray
import numpy as np


class CtapipeLocalPeakIntegrator(WaveformReducer):
Expand Down Expand Up @@ -69,20 +70,21 @@ def __init__(self, n_pixels, n_samples, mapping=None, **kwargs):
.format(self.__class__.__name__, self.columns))
raise ImportError(msg)

camera = get_ctapipe_camera_geometry(mapping)

subarray, self._tel_id = get_ctapipe_subarray(mapping)
n_pixels = subarray.tel[self._tel_id].camera.geometry.n_pixels
self.channel = np.zeros(n_pixels, dtype=int)
self.window_size = self.kwargs.get("window_size", 6)
self.window_shift = self.kwargs.get("window_shift", 3)
self.integrator = NeighborPeakWindowSum(
window_shift=self.window_shift,
window_width=self.window_size,
lwt=0,
subarray=subarray,
)
self.integrator.neighbors = camera.neighbor_matrix_where

def _prepare(self, waveforms):
super()._prepare(waveforms)
charge, pulse_time = self.integrator(waveforms)
charge, pulse_time = self.integrator(waveforms, self._tel_id, self.channel)

self.t = pulse_time
self.charge = charge
Expand Down