Skip to main content

gluex_core/
detectors.rs

1#[derive(Copy, Clone, Default, Eq, PartialEq, Hash, Debug)]
2#[allow(non_camel_case_types)]
3pub enum DetectorSystem {
4    #[default]
5    NULL,
6    CDC,
7    FDC,
8    BCAL,
9    TOF,
10    CHERENKOV,
11    FCAL,
12    UPV,
13    TAGM,
14    START,
15    DIRC,
16    CCAL,
17    CCAL_REF,
18    ECAL,
19    ECAL_REF,
20    TAGH,
21    RF,
22    PS,
23    PSC,
24    FMWPC,
25    TPOL,
26    TAC,
27    TRD,
28    CTOF,
29    HELI,
30    ECAL_FCAL,
31}
32
33impl std::fmt::Display for DetectorSystem {
34    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35        write!(
36            f,
37            "{}",
38            match self {
39                Self::NULL => "NULL_DETECTOR",
40                Self::CDC => "CDC",
41                Self::FDC => "FDC",
42                Self::BCAL => "BCAL",
43                Self::TOF => "TOF",
44                Self::CHERENKOV => "Cherenkov",
45                Self::FCAL => "FCAL",
46                Self::UPV => "UPV",
47                Self::TAGM => "TAGM",
48                Self::START => "ST",
49                Self::DIRC => "DIRC",
50                Self::CCAL => "CCAL",
51                Self::CCAL_REF => "CCAL_REF",
52                Self::ECAL => "ECAL",
53                Self::ECAL_REF => "ECAL_REF",
54                Self::TAGH => "TAGH",
55                Self::RF => "RF",
56                Self::PS => "PS",
57                Self::PSC => "PSC",
58                Self::FMWPC => "FMWPC",
59                Self::TPOL => "TPOL",
60                Self::TAC => "TAC",
61                Self::TRD => "TRD",
62                Self::CTOF => "CTOF",
63                Self::HELI => "HELI",
64                Self::ECAL_FCAL => "ECAL+FCAL",
65            }
66        )
67    }
68}
69
70impl DetectorSystem {
71    #[allow(clippy::match_str_case_mismatch)]
72    pub fn from_string(s: &str) -> Self {
73        match s.to_uppercase().as_str() {
74            "CDC" => Self::CDC,
75            "FDC" => Self::FDC,
76            "BCAL" => Self::BCAL,
77            "TOF" => Self::TOF,
78            "Cherenkov" => Self::CHERENKOV,
79            "FCAL" => Self::FCAL,
80            "UPV" => Self::UPV,
81            "TAGM" => Self::TAGM,
82            "START" | "ST" | "SC" => Self::START,
83            "DIRC" => Self::DIRC,
84            "CCAL" => Self::CCAL,
85            "CCAL_REF" => Self::CCAL_REF,
86            "ECAL" => Self::ECAL,
87            "ECAL_REF" => Self::ECAL_REF,
88            "TAGH" => Self::TAGH,
89            "RF" => Self::RF,
90            "PS" => Self::PS,
91            "PSC" => Self::PSC,
92            "FMWPC" => Self::FMWPC,
93            "TPOL" => Self::TPOL,
94            "TAC" => Self::TAC,
95            "TRD" => Self::TRD,
96            "CTOF" => Self::CTOF,
97            "HELI" => Self::HELI,
98            "ECAL+FCAL" => Self::ECAL_FCAL,
99            _ => Self::NULL,
100        }
101    }
102}