laddu_core/kinematics/
rest_frame.rs1use serde::{Deserialize, Serialize};
2
3use super::support::checked_boost_vector;
4use crate::{
5 vectors::{Vec3, Vec4},
6 LadduResult,
7};
8
9#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
15pub struct RestFrame {
16 parent: Vec4,
17 boost: Vec3,
18}
19
20impl RestFrame {
21 pub fn new(parent: Vec4) -> LadduResult<Self> {
23 let boost = checked_boost_vector(-parent.beta(), "parent")?;
24 Ok(Self { parent, boost })
25 }
26
27 pub const fn parent(self) -> Vec4 {
29 self.parent
30 }
31
32 pub const fn boost(self) -> Vec3 {
34 self.boost
35 }
36
37 pub fn transform(self, momentum: Vec4) -> Vec4 {
39 momentum.boost(&self.boost)
40 }
41
42 pub fn momentum(self, momentum: Vec4) -> Vec3 {
44 self.transform(momentum).vec3()
45 }
46}