liftof_lib/
thread_control.rsuse std::collections::HashMap;
use std::fmt;
#[cfg(feature = "database")]
use tof_dataclasses::database::ReadoutBoard;
use tof_dataclasses::status::TofDetectorStatus;
use tof_dataclasses::calibrations::RBCalibrations;
use crate::settings::LiftofSettings;
#[derive(Default, Debug)]
pub struct ThreadControl {
pub stop_flag : bool,
pub sigint_recvd : bool,
pub end_all_rb_threads : bool,
pub calibration_active : bool,
pub finished_calibrations : HashMap<u8,bool>,
pub calibrations : HashMap<u8, RBCalibrations>,
pub holdoff_mtb_thread : bool,
pub thread_cmd_dispatch_active : bool,
pub thread_data_sink_active : bool,
pub thread_runner_active : bool,
pub thread_event_bldr_active : bool,
pub thread_master_trg_active : bool,
pub thread_monitoring_active : bool,
pub thread_rbcomm_active : HashMap<u8, bool>,
pub thread_signal_hdlr_active : bool,
pub run_id : u32,
pub n_rbs : u32,
#[cfg(feature = "database")]
pub rb_list : Vec<ReadoutBoard>,
pub verification_active : bool,
pub detector_status : TofDetectorStatus,
pub write_data_to_disk : bool,
pub new_run_start_flag : bool,
pub reset_mtb_daq : bool,
pub liftof_settings : LiftofSettings,
}
impl ThreadControl {
pub fn new() -> Self {
Self {
stop_flag : false,
calibration_active : false,
finished_calibrations : HashMap::<u8,bool>::new(),
calibrations : HashMap::<u8, RBCalibrations>::new(),
sigint_recvd : false,
end_all_rb_threads : false,
holdoff_mtb_thread : false,
thread_cmd_dispatch_active : false,
thread_data_sink_active : false,
thread_runner_active : false,
thread_event_bldr_active : false,
thread_master_trg_active : false,
thread_monitoring_active : false,
thread_rbcomm_active : HashMap::<u8,bool>::new(),
thread_signal_hdlr_active : true,
run_id : 0,
n_rbs : 0,
#[cfg(feature = "database")]
rb_list : Vec::<ReadoutBoard>::new(),
verification_active : false,
detector_status : TofDetectorStatus::new(),
write_data_to_disk : false,
new_run_start_flag : false,
reset_mtb_daq : false,
liftof_settings : LiftofSettings::new(),
}
}
}
impl fmt::Display for ThreadControl {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut repr = String::from("<ThreadControl:");
repr += &(format!("\n Run ID : {}", self.run_id));
repr += &(format!("\n N RBs : {}", self.n_rbs));
repr += &(format!("\n wr to disk : {}", self.write_data_to_disk));
repr += "\n -- reported RB calibration activity:";
repr += &(format!("\n RB cali active : {}", self.calibration_active));
for k in self.finished_calibrations.keys() {
repr += &(format!("\n -- finished {} : {}", k, self.finished_calibrations.get(k).unwrap()));
}
repr += &(format!("\n -- verification run: {}", self.verification_active));
repr += "\n -- program status:";
repr += &(format!("\n stop flag : {}", self.stop_flag));
repr += "\n -- reported thread activity:";
repr += &(format!("\n holdoff mtb thr. : {}", self.holdoff_mtb_thread));
repr += &(format!("\n cmd dispatcher : {}", self.thread_cmd_dispatch_active));
repr += &(format!("\n runner : {}", self.thread_runner_active));
repr += &(format!("\n data sink : {}", self.thread_data_sink_active));
repr += &(format!("\n monitoring : {}", self.thread_monitoring_active));
repr += &(format!("\n evt builder : {}", self.thread_event_bldr_active));
repr += &(format!("\n master_trigger : {}", self.thread_master_trg_active));
if self.thread_rbcomm_active.len() > 0 {
repr += "\n -- active RB threads";
for k in self.thread_rbcomm_active.keys() {
repr += &(format!("\n -- -- {} : {}", k, self.thread_rbcomm_active.get(k).unwrap()));
}
}
repr += &(format!("\n master trig : {}>", self.thread_master_trg_active));
write!(f, "{}", repr)
}
}