1use crate::types::{NCTYPE, NFTYPE};
2use crate::R;
3
4#[derive(Clone, Debug)]
5pub struct FieldConfig {
7 pub nc: NCTYPE,
9 pub gluon: R,
11 pub quarks: Vec<(NFTYPE, R)>,
14 pub(crate) quarks_internal: Vec<QuarkInternal>,
16}
17
18impl FieldConfig {
19 pub fn new(nc: NCTYPE, gluon: R, quarks: Vec<(NFTYPE, R)>) -> Self {
20 let quarks_internal = quarks
21 .iter()
22 .map(|&(nf, mq)| QuarkInternal::new(nc, gluon, nf, mq))
23 .collect();
24 Self {
25 nc,
26 gluon,
27 quarks,
28 quarks_internal,
29 }
30 }
31}
32
33#[derive(Clone, Copy, Debug)]
34pub struct QuarkInternal {
35 pub nf: NFTYPE,
36 pub mq: R,
37 pub nf_div_nc: R,
38 pub mq_div_m_2: R,
39}
40
41impl QuarkInternal {
42 pub(crate) fn new(nc: NCTYPE, m: R, nf: NFTYPE, mq: R) -> Self {
43 let nf_div_nc = (nf as R) / (nc as R);
44 let mq_div_m = mq / m;
45 let mq_div_m_2 = mq_div_m * mq_div_m;
46 Self {
47 nf,
48 mq,
49 nf_div_nc,
50 mq_div_m_2,
51 }
52 }
53}