from __future__ import absolute_import, division, print_function
import NuRadioReco.framework.base_trace
import NuRadioReco.framework.channel
import NuRadioReco.framework.parameter_serialization
try:
import cPickle as pickle
except ImportError:
import pickle
import logging
logger = logging.getLogger('NuRadioReco.SimChannel')
[docs]class SimChannel(NuRadioReco.framework.channel.Channel):
"""
Object to store simulated channels.
This class is the same as the regular channel trace but has apart from the channel id (and possible group id) also
a shower and ray tracing solution id
"""
def __init__(self, channel_id, shower_id, ray_tracing_id, channel_group_id=None):
"""
Initializes SimChannel object
Parameters
----------
channel_id: int
id of channel
shower_id: int or None
the id of the corresponding shower object
ray_tracing_id: int or None
the id of the corresponding ray tracing solution
channel_group_id: int (default: None)
optionally, several channels can belong to a "channel group". Use case is to identify
the channels of a single dual or triple polarized antenna as common in air shower arrays.
"""
NuRadioReco.framework.channel.Channel.__init__(self, channel_id, channel_group_id=channel_group_id)
self._shower_id = shower_id
self._ray_tracing_id = ray_tracing_id
[docs] def get_shower_id(self):
return self._shower_id
[docs] def get_ray_tracing_solution_id(self):
return self._ray_tracing_id
[docs] def get_unique_identifier(self):
"""
returns a unique identifier consisting of the tuple channel_id, shower_id and ray_tracing_id
"""
return (self._id, self._shower_id, self._ray_tracing_id)
[docs] def serialize(self, save_trace):
channel_pkl = NuRadioReco.framework.channel.Channel.serialize(self, save_trace)
data = {'parameters': NuRadioReco.framework.parameter_serialization.serialize(self._parameters),
'shower_id': self.get_shower_id(),
'ray_tracing_id': self.get_ray_tracing_solution_id(),
'channel': channel_pkl}
return pickle.dumps(data, protocol=4)
[docs] def deserialize(self, data_pkl):
data = pickle.loads(data_pkl)
NuRadioReco.framework.channel.Channel.deserialize(self, data['channel'])
self._shower_id = data['shower_id']
self._ray_tracing_id = data['ray_tracing_id']