gondola_core/events/
mc_tree.rs1use crate::prelude::*;
5
6#[derive(Debug, Clone, PartialEq)]
7#[cfg_attr(feature="pybindings", pyclass)]
8pub struct McTree {
9 pub tracks : Vec<McTrack>,
10 pub trackmap : HashMap<u32, Vec<McHit>>,
11 pub max_gen : usize,
12
13 }
40
41impl McTree {
42 pub fn new() -> Self {
43 Self {
44 tracks : Vec::<McTrack>::new(),
45 max_gen : 0,
46 trackmap : HashMap::<u32, Vec<McHit>>::new(),
47 }
48 }
49
50 pub fn get_daughters(&self) -> Vec<McTrack> {
51 let mut daughters = Vec::<McTrack>::new();
52 return daughters;
58 }
59
60 pub fn assemble(&mut self, hits : &mut Vec<McHit>) {
63 let mut trackmap = HashMap::<u32, Vec<McHit>>::new();
64 let mut nhits = hits.len();
65 while nhits > 0 {
66 let h = hits.pop().unwrap();
67 if trackmap.contains_key(&h.track_id) {
68 trackmap.get_mut(&h.track_id).unwrap().push(h);
69 } else {
70 trackmap.insert(h.track_id, vec![h]);
71 }
72 nhits -= 1;
73 }
74 let mut tm_keys = Vec::<u32>::new();
75 for k in trackmap.keys() {
76 tm_keys.push(*k);
77 }
78 for k in &tm_keys {
79 trackmap.get_mut(&k).unwrap().sort_by(|i,j| i.glob_time.total_cmp(&j.glob_time));
80 }
81 self.trackmap = trackmap;
82 }
83}
84
85impl fmt::Display for McTree {
86 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
87 let mut repr = String::from("<McTree");
88 for k in self.trackmap.keys() {
89 repr += &(format!("\n Track Id: {} -> NHits : {}",k, self.trackmap[k].len()));
90 }
91 repr += ">";
92 write!(f, "{}", repr)
93 }
94}
95
96#[cfg(feature="pybindings")]
97#[pymethods]
98impl McTree {
99}
100
101
102
103#[cfg(feature="pybindings")]
104pythonize!(McTree);