use crate::config::parameters::G;
use std::f64::consts::PI;
pub fn rv_semi_amplitude(
planet_mass: f64,
star_mass: f64,
semi_major: f64,
eccentricity: f64,
inclination: f64,
) -> f64 {
let n = (G * (star_mass + planet_mass) / semi_major.powi(3)).sqrt();
planet_mass * n * semi_major * inclination.sin()
/ ((star_mass + planet_mass) * (1.0 - eccentricity * eccentricity).sqrt())
}
pub fn minimum_mass(rv_semi_amplitude: f64, star_mass: f64, period: f64, eccentricity: f64) -> f64 {
let factor = (period / (2.0 * PI * G)).cbrt()
* star_mass.powf(2.0 / 3.0)
* (1.0 - eccentricity * eccentricity).sqrt();
rv_semi_amplitude * factor
}
pub fn rossiter_mclaughlin_amplitude(
planet_radius: f64,
star_radius: f64,
v_sin_i: f64,
obliquity: f64,
) -> f64 {
let depth = (planet_radius / star_radius).powi(2);
depth * v_sin_i * obliquity.sin()
}
pub fn rv_jitter_from_activity(log_r_hk: f64) -> f64 {
10.0_f64.powf(0.8 * log_r_hk + 5.0)
}
pub fn astrometric_wobble(planet_mass: f64, star_mass: f64, semi_major: f64, distance: f64) -> f64 {
let theta = (planet_mass / star_mass) * (semi_major / distance);
theta * 206265.0 * 1e6
}
pub fn binary_star_rv_offset(companion_mass: f64, primary_mass: f64, separation: f64) -> f64 {
let v = (G * (primary_mass + companion_mass) / separation).sqrt();
companion_mass / (primary_mass + companion_mass) * v
}