use serde::{Deserialize, Serialize};
use super::Reaction;
use crate::{
quantum::Frame,
variables::{Angles, CosTheta, Phi},
LadduResult,
};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Production {
pub(super) reaction: Reaction,
pub(super) produced: String,
pub(super) recoil: String,
}
impl Production {
pub const fn reaction(&self) -> &Reaction {
&self.reaction
}
pub fn produced(&self) -> &str {
&self.produced
}
pub fn recoil(&self) -> &str {
&self.recoil
}
pub fn costheta(&self, frame: Frame) -> LadduResult<CosTheta> {
Ok(CosTheta::from_production(
self.reaction.clone(),
self.produced.clone(),
frame,
))
}
pub fn phi(&self, frame: Frame) -> LadduResult<Phi> {
Ok(Phi::from_production(
self.reaction.clone(),
self.produced.clone(),
frame,
))
}
pub fn angles(&self, frame: Frame) -> LadduResult<Angles> {
Ok(Angles::from_production(
self.reaction.clone(),
self.produced.clone(),
frame,
))
}
}