gondola_core/events/
tracker_daq_event.rs1use crate::prelude::*;
5
6#[derive(Debug, Clone, PartialEq)]
11#[cfg_attr(feature="pybindings", pyclass)]
12pub struct TrackerDAQEvent {
13 pub layer : u8,
14 pub flags1 : u8,
15 pub event_id : u32,
16 pub event_time16 : u16,
17 pub event_time32 : u32,
18 pub hits : Vec<TrackerHit>
19}
20
21impl TrackerDAQEvent {
22 pub fn new() -> Self {
23 Self {
24 layer : u8::MAX,
25 flags1 : u8::MAX,
26 event_id : u32::MAX,
27 event_time16 : u16::MAX,
28 event_time32 : u32::MAX,
29 hits : Vec::<TrackerHit>::new()
30 }
31 }
32
33 pub fn get_event_time(&self) -> u64 {
34 ((self.event_time16 as u64) << 32) | self.event_time32 as u64
36 }
37}
38
39impl fmt::Display for TrackerDAQEvent {
40 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
41 let mut repr = String::from("<TrackerDAQEvent:");
42 repr += &(format!("\n Layer : {}" ,self.layer));
43 repr += &(format!("\n Flags1 : {}" ,self.flags1));
44 repr += &(format!("\n Event ID : {}" ,self.event_id));
45 repr += &(format!("\n Event Time : {}" ,self.get_event_time()));
46 if self.hits.len() > 0 {
47 repr += "\n -- hits:";
48 for h in &self.hits {
49 repr += &(format!("\n {}", h));
50 }
51 } else {
52 repr += "\n -- no hits!";
53 }
54 write!(f, "{}", repr)
55 }
56}
57
58
59#[cfg(feature="random")]
88impl FromRandom for TrackerDAQEvent {
89
90 fn from_random() -> Self {
91 let mut ev = Self::new();
92 let mut rng = rand::rng();
93 ev.layer = rng.random_range(0..10) + 128;
94 ev.flags1 = rng.random::<u8>();
95 ev.event_id = rng.random::<u32>();
96 ev.event_time16 = rng.random::<u16>();
97 ev.event_time32 = rng.random::<u32>();
98 ev.hits = Vec::<TrackerHit>::new();
99 let n_hits : u8 = rng.random_range(0..25);
100 for _ in 0..n_hits {
102 let mut h = TrackerHit::from_random();
103 h.layer = ev.layer - 128;
105 ev.hits.push(h);
106 }
107 ev
108 }
109}
110
111
112#[cfg(feature="pybindings")]
113#[pymethods]
114impl TrackerDAQEvent {
115
116 #[getter]
117 fn get_layer(&self) -> u8 {
118 self.layer
119 }
120
121 #[getter]
122 fn get_flags1(&self) -> u8 {
123 self.flags1
124 }
125
126 #[getter]
127 fn get_event_id(&self) -> u32 {
128 self.event_id
129 }
130
131 #[getter]
132 fn get_hits(&self) -> Vec<TrackerHit> {
133 self.hits.clone()
134 }
135
136 #[getter]
137 #[pyo3(name="event_time")]
138 fn get_event_time_py(&self) -> u64 {
139 self.get_event_time()
140 }
141}
142
143#[cfg(feature="pybindings")]
144pythonize!(TrackerDAQEvent);
145