pub struct TofEvent {Show 29 fields
pub status: EventStatus,
pub version: ProtocolVersion,
pub quality: EventQuality,
pub trigger_sources: u16,
pub n_trigger_paddles: u8,
pub event_id: u32,
pub run_id: u16,
pub timestamp32: u32,
pub timestamp16: u16,
pub drs_dead_lost_hits: u16,
pub dsi_j_mask: u32,
pub channel_mask: Vec<u16>,
pub mtb_link_mask: u64,
pub hits: Vec<TofHit>,
pub mt_trigger_sources: u16,
pub mt_tiu_gps16: u16,
pub mt_tiu_gps32: u32,
pub mt_timestamp: u32,
pub mt_tiu_timestamp: u32,
pub n_hits_umb: u8,
pub n_hits_cbe: u8,
pub n_hits_cor: u8,
pub tot_edep_umb: f32,
pub tot_edep_cbe: f32,
pub tot_edep_cor: f32,
pub paddles_set: bool,
pub rb_events: Vec<RBEvent>,
pub creation_time: Instant,
pub write_to_disk: bool,
}
Expand description
Main event class for the TOF. This will be sent over telemetry and be written to disk
CHANGELOG: v0.11 (gondola-core): Merges TofEvent, TofEventSummary and MasterTriggerEvent all into a single TofEvent, based on former TofEventSummary. The new TofEvent has the ability to cary RBEvents and thus mimick the “old” TofEvent We are using the version flag to indicate:
- ProtocolVersion::Unknown - The “old” TofEventSummary. (now “TofEvent”). No extra variables for the GCU, no RBEvents
- ProtocolVersion::V1 - The version crafted for Antarctica ’24/’25 containing a bunch of summary variables for the GCU (e.g. nhits(umbrella)). This version will add these variables to the bytestream and also if ProtocolVersion::V1 is read out from the bytestream, the variables are expected to be in it. This is to keep compatibility with the gcu
- ProtocolVersion::V2 - v0.11 (gondola-core) version of TofEvent(Summary). This version will not write out GCU variables and does not expect them to be in the bytestream. If desired, this version can read/write RBEvents.
Fields§
§status: EventStatus
§version: ProtocolVersion
The version of this event. Prior to tof-dataclasses v0.11,
the default was ProtocolVersion::Unknown
.
Then for the Antarctic campaign we added more variables,
so that the gcu doesn’t have to compute them. These variables
will be included in the bytestream for ProtocolVersion::V1
.
However, we don’t want to write them to disk in the new (gondola-core > v0.11)
verion, so we will use ProtocolVersionV2 for the version to be
written to disk. ProtocolVersionV2 can (but not must) have RBEvents
quality: EventQuality
§trigger_sources: u16
§n_trigger_paddles: u8
the number of triggered paddles coming from the MTB directly. This might NOT be the same as the number of hits!
event_id: u32
§run_id: u16
§timestamp32: u32
§timestamp16: u16
§drs_dead_lost_hits: u16
scalar number of hits missed in this event due to DRS on the RB being busy
dsi_j_mask: u32
§channel_mask: Vec<u16>
§mtb_link_mask: u64
§hits: Vec<TofHit>
§mt_trigger_sources: u16
§mt_tiu_gps16: u16
§mt_tiu_gps32: u32
§mt_timestamp: u32
§mt_tiu_timestamp: u32
§n_hits_umb: u8
§n_hits_cbe: u8
§n_hits_cor: u8
§tot_edep_umb: f32
§tot_edep_cbe: f32
§tot_edep_cor: f32
§paddles_set: bool
§rb_events: Vec<RBEvent>
§creation_time: Instant
Start time for a time to wait for incoming RBEvents
write_to_disk: bool
Implementations§
Source§impl TofEvent
impl TofEvent
pub fn new() -> Self
Sourcepub fn strip_rbevents(&mut self)
pub fn strip_rbevents(&mut self)
Remove any RBEvents from the event
pub fn age(&self) -> u64
Sourcepub fn is_complete(&self) -> bool
pub fn is_complete(&self) -> bool
Simple check if the event contains as much RBEvents as expected from the provided boards masks by the MTB
Sourcepub fn get_lost_hits(&self) -> u16
pub fn get_lost_hits(&self) -> u16
The number of hits we did not get becaue of the DRS busy
Sourcepub fn prepare_for_gcu(&mut self, strip_rbevents: bool)
pub fn prepare_for_gcu(&mut self, strip_rbevents: bool)
Calculate extra variables for the GCU, set the protocol version to V1 and strip the waveforms if desired
§Arguments:
- strip_rbevents : remove the rbevents from the TofEvent so they won’t bother the poor gcu
Sourcepub fn decode_depr_tofevent_size_header(mask: &u32) -> (usize, usize)
pub fn decode_depr_tofevent_size_header(mask: &u32) -> (usize, usize)
Ensure compatibility with older data, which contained a different type of TofEvent
Sourcepub fn set_timing_offsets(&mut self, offsets: &HashMap<u8, f32>)
pub fn set_timing_offsets(&mut self, offsets: &HashMap<u8, f32>)
Sourcepub fn lightspeed_cleaning(&mut self, t_err: f32) -> (Vec<u8>, Vec<f32>)
pub fn lightspeed_cleaning(&mut self, t_err: f32) -> (Vec<u8>, Vec<f32>)
Remove hits from the hitseries which can not be caused by the same particle, which means that for these two specific hits beta with respect to the first hit in the event is larger than one That this works, first hits need to be “normalized” by calling normalize_hit_times
§Return:
- removed paddle ids, twindows
Sourcepub fn remove_non_causal_hits(&mut self) -> Vec<u8> ⓘ
pub fn remove_non_causal_hits(&mut self) -> Vec<u8> ⓘ
Non causal hits have hit times in ends A and be which are not compatible with the speed of light in the paddle, that is, the hit gets registered too early. If we look at a plot of the reconstructed position, these hits would correspond to positions outside of the paddle.
#Returns: A vector of paddle ids with removed hits
pub fn normalize_hit_times(&mut self)
pub fn set_paddles(&mut self, paddles: &HashMap<u8, TofPaddle>)
Sourcepub fn get_pointcloud(&self) -> Option<Vec<(f32, f32, f32, f32, f32)>>
pub fn get_pointcloud(&self) -> Option<Vec<(f32, f32, f32, f32, f32)>>
Get the pointcloud of this event, sorted by time
§Returns
(f32, f32, f32, f32, f32) : (x,y,z,t,edep)
Sourcepub fn get_missing_paddles_hg(&self, pid_map: &DsiJChPidMapping) -> Vec<u8> ⓘ
pub fn get_missing_paddles_hg(&self, pid_map: &DsiJChPidMapping) -> Vec<u8> ⓘ
Compare the MasterTriggerEvent::trigger_hits with the actual hits to determine from which paddles we should have received HG hits (from waveforms) but we did not get them
WARNING: The current implementation of this is rather slow and not fit for production use FIXME - rewrite as a closure
Sourcepub fn get_triggered_paddles(&self, pid_map: &DsiJChPidMapping) -> Vec<u8> ⓘ
pub fn get_triggered_paddles(&self, pid_map: &DsiJChPidMapping) -> Vec<u8> ⓘ
Get the triggered paddle ids
Warning, this might be a bit slow
Sourcepub fn get_rb_link_ids(&self) -> Vec<u8> ⓘ
pub fn get_rb_link_ids(&self) -> Vec<u8> ⓘ
Get the RB link IDs according to the mask
Sourcepub fn get_trigger_hits(&self) -> Vec<(u8, u8, (u8, u8), LTBThreshold)>
pub fn get_trigger_hits(&self) -> Vec<(u8, u8, (u8, u8), LTBThreshold)>
Get the combination of triggered DSI/J/CH on the MTB which formed the trigger. This does not include further hits which fall into the integration window. For those, se rb_link_mask
The returned values follow the TOF convention to start with 1, so that we can use them to look up LTB ids in the db.
§Returns
Vec<(hit)> where hit is (DSI, J, CH)
Sourcepub fn get_trigger_sources(&self) -> Vec<TriggerType>
pub fn get_trigger_sources(&self) -> Vec<TriggerType>
Get the trigger sources from trigger source byte
pub fn get_timestamp48(&self) -> u64
Sourcepub fn get_edep_umbrella(&self) -> f32
pub fn get_edep_umbrella(&self) -> f32
Ttotal energy depostion in the TOF - Umbrella
Utilizes Philip’s formula based on peak height
Sourcepub fn get_edep_cube(&self) -> f32
pub fn get_edep_cube(&self) -> f32
Ttotal energy depostion in the TOF - Umbrella
Utilizes Philip’s formula based on peak height
Sourcepub fn get_edep_cortina(&self) -> f32
pub fn get_edep_cortina(&self) -> f32
Ttotal energy depostion in the Cortina
Utilizes Philip’s formula based on peak height
Sourcepub fn get_edep(&self) -> f32
pub fn get_edep(&self) -> f32
Ttotal energy depostion in the complete TOF
Utilizes Philip’s formula based on peak height
pub fn get_nhits_umb(&self) -> usize
pub fn get_nhits_cbe(&self) -> usize
pub fn get_nhits_cor(&self) -> usize
pub fn get_nhits(&self) -> usize
Sourcepub fn has_any_mangling(&self) -> bool
pub fn has_any_mangling(&self) -> bool
Check if th eassociated RBEvents have any of their mangling stati set
Sourcepub fn get_waveforms(&self) -> Vec<RBWaveform>
pub fn get_waveforms(&self) -> Vec<RBWaveform>
Get all waveforms of all RBEvents in this event ISSUE - Performance, Memory FIXME - reimplement this things where this returns only a reference
Trait Implementations§
Source§impl Serialization for TofEvent
impl Serialization for TofEvent
Source§fn from_bytestream_alt(
stream: &Vec<u8>,
pos: &mut usize,
) -> Result<Self, SerializationError>
fn from_bytestream_alt( stream: &Vec<u8>, pos: &mut usize, ) -> Result<Self, SerializationError>
Allows to get TofEvent from a packet of the deprecate packet type TofEventDeprecated. This packet type was formerly known as TofEvent This will dismiss all the waveforms and RBEvents
Source§fn from_bytestream(
stream: &Vec<u8>,
pos: &mut usize,
) -> Result<Self, SerializationError>
fn from_bytestream( stream: &Vec<u8>, pos: &mut usize, ) -> Result<Self, SerializationError>
Source§const SIZE: usize = 0usize
const SIZE: usize = 0usize
Source§fn verify_fixed(
stream: &Vec<u8>,
pos: &mut usize,
) -> Result<(), SerializationError>
fn verify_fixed( stream: &Vec<u8>, pos: &mut usize, ) -> Result<(), SerializationError>
Source§impl TofPackable for TofEvent
impl TofPackable for TofEvent
const TOF_PACKET_TYPE: TofPacketType = TofPacketType::TofEvent
const TOF_PACKET_TYPE_ALT: TofPacketType = TofPacketType::TofEventDeprecated
Source§fn pack(&self) -> TofPacketwhere
Self: Serialization,
fn pack(&self) -> TofPacketwhere
Self: Serialization,
impl StructuralPartialEq for TofEvent
Auto Trait Implementations§
impl Freeze for TofEvent
impl RefUnwindSafe for TofEvent
impl Send for TofEvent
impl Sync for TofEvent
impl Unpin for TofEvent
impl UnwindSafe for TofEvent
Blanket Implementations§
Source§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
Source§fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
DISTINCT
modifier for aggregate functions Read moreSource§fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
ALL
modifier for aggregate functions Read moreSource§fn aggregate_filter<P>(self, f: P) -> Self::Output
fn aggregate_filter<P>(self, f: P) -> Self::Output
Source§fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoSql for T
impl<T> IntoSql for T
Source§fn into_sql<T>(self) -> Self::Expression
fn into_sql<T>(self) -> Self::Expression
self
to an expression for Diesel’s query builder. Read moreSource§fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
&self
to an expression for Diesel’s query builder. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.