pub const NC: u8 = 3;
pub const TR: f64 = 1.0 / 2.0;
pub const CA: f64 = NC as f64;
pub const CF: f64 = ((NC * NC - 1) as f64) / ((2 * NC) as f64);
pub const EU2: f64 = 4. / 9.;
pub const ED2: f64 = 1. / 9.;
pub const ZETA2: f64 = 1.6449340668482264;
pub const ZETA3: f64 = 1.2020569031595942;
pub const ZETA4: f64 = 1.082323233711138;
pub const ZETA5: f64 = 1.03692775514337;
pub const PID_NSP: u16 = 10101;
pub const PID_NSM: u16 = 10201;
pub const PID_NSV: u16 = 10200;
pub const PID_NSP_U: u16 = 10102;
pub const PID_NSP_D: u16 = 10103;
pub const PID_NSM_U: u16 = 10202;
pub const PID_NSM_D: u16 = 10203;
pub struct ChargeCombinations {
pub nf: u8,
}
impl ChargeCombinations {
pub fn nu(&self) -> u8 {
self.nf / 2
}
pub fn nd(&self) -> u8 {
self.nf - self.nu()
}
pub fn e2avg(&self) -> f64 {
(self.nu() as f64 * EU2 + self.nd() as f64 * ED2) / (self.nf as f64)
}
pub fn vu(&self) -> f64 {
self.nu() as f64 / (self.nf as f64)
}
pub fn vd(&self) -> f64 {
self.nd() as f64 / (self.nf as f64)
}
pub fn vue2m(&self) -> f64 {
self.vu() * (EU2 - ED2)
}
pub fn vde2m(&self) -> f64 {
self.vd() * (EU2 - ED2)
}
pub fn e2delta(&self) -> f64 {
self.vde2m() - self.vue2m() + self.e2avg()
}
}