use serde::{Deserialize, Serialize};
use super::support::checked_boost_vector;
use crate::{
vectors::{Vec3, Vec4},
LadduResult,
};
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
pub struct RestFrame {
parent: Vec4,
boost: Vec3,
}
impl RestFrame {
pub fn new(parent: Vec4) -> LadduResult<Self> {
let boost = checked_boost_vector(-parent.beta(), "parent")?;
Ok(Self { parent, boost })
}
pub const fn parent(self) -> Vec4 {
self.parent
}
pub const fn boost(self) -> Vec3 {
self.boost
}
pub fn transform(self, momentum: Vec4) -> Vec4 {
momentum.boost(&self.boost)
}
pub fn momentum(self, momentum: Vec4) -> Vec3 {
self.transform(momentum).vec3()
}
}