use std::collections::{BTreeMap, HashMap};
use particle_id::ParticleID;
use petgraph::prelude::DiGraph;
#[derive(Clone, Debug, Default)]
pub struct Event {
pub id: Option<i32>,
pub sample_info: SampleInfo,
pub weights: Vec<WeightInfo>,
pub scales: Scales,
pub alpha_s: Option<f64>,
pub alpha: Option<f64>,
pub process_id: Option<i32>,
pub particles: Vec<Particle>,
pub info: String,
pub attr: HashMap<String, String>,
pub mpi: Option<i32>,
pub random_states: Vec<i32>,
pub heavy_ion_info: Option<HeavyIonInfo>,
pub topology: DiGraph<Vertex, usize>,
pub reweights: Vec<Reweight>,
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct SampleInfo {
pub generators: Vec<String>,
pub nevents: Option<usize>,
pub beam: [Beam; 2],
pub pdf: [Option<i32>; 2],
pub cross_sections: Vec<CrossSection>,
pub process_ids: Vec<i32>,
pub weight_type: Option<i32>,
pub info: String,
pub attr: HashMap<String, String>,
}
#[derive(Clone, Debug, Default, PartialEq, PartialOrd)]
pub struct WeightInfo {
pub weight: Option<f64>,
pub name: Option<String>,
pub mu_r_factor: Option<f64>,
pub mu_f_factor: Option<f64>,
pub pdf: Option<i32>,
pub pdf2: Option<i32>,
}
#[derive(Clone, Debug, Default, PartialEq, PartialOrd)]
pub struct Scales {
pub mu_r: Option<f64>,
pub mu_f: Option<f64>,
pub mu_ps: Option<f64>,
}
#[derive(Clone, Debug, Default, PartialEq, PartialOrd)]
pub struct Particle {
pub id: Option<ParticleID>,
pub p: Option<[f64; 4]>,
pub m: Option<f64>,
pub status: Option<Status>,
pub spin: Option<f64>,
pub col: Option<[i32; 2]>,
pub flows: BTreeMap<i32, i32>,
pub lifetime: Option<f64>,
pub theta: Option<f64>,
pub phi: Option<f64>,
}
#[derive(Copy, Clone, Debug, Default, PartialEq, PartialOrd)]
pub struct Beam {
pub id: Option<ParticleID>,
pub energy: Option<f64>,
}
#[derive(Clone, Debug, Default, PartialEq, PartialOrd)]
pub struct CrossSection {
pub mean: f64,
pub err: Option<f64>,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
pub enum Status {
Incoming,
Outgoing,
IntermediateSpacelike,
IntermediateResonance,
IntermediateDoc,
IncomingBeam,
Unknown(i32),
}
#[derive(Clone, Debug, Default, PartialEq, PartialOrd)]
pub struct Vertex {
pub status: Option<i32>,
pub x: Option<f64>,
pub y: Option<f64>,
pub z: Option<f64>,
pub t: Option<f64>,
pub weights: Vec<f64>,
}
#[derive(Debug, PartialEq, PartialOrd, Default, Copy, Clone)]
pub struct HeavyIonInfo {
pub ncoll_hard: Option<i32>,
pub npart_proj: Option<i32>,
pub npart_targ: Option<i32>,
pub ncoll: Option<i32>,
pub spectator_neutrons: Option<i32>,
pub spectator_protons: Option<i32>,
pub n_nwounded_collisions: Option<i32>,
pub nwounded_n_collisions: Option<i32>,
pub nwounded_nwounded_collisions: Option<i32>,
pub impact_parameter: Option<f64>,
pub event_plane_angle: Option<f64>,
pub eccentricity: Option<f64>,
pub sigma_inel_nn: Option<f64>,
}
#[derive(Clone, Debug, PartialEq, PartialOrd)]
pub struct Reweight {
pub channel: u32,
pub x1: f64,
pub x2: f64,
pub log_coeff: Vec<f64>,
}