Converts raw market signals to gamma-corrected relativistic signals.
Converts raw market signals to gamma-corrected relativistic signals.Stateless. All signals in a batch share the same beta / m_eff frame. Thread-safe: process() and process_one() are const and noexcept.
auto beta = BetaVelocity::make(0.6).value();
auto m_eff = EffectiveMass::make(1.0).value();
std::array<RawSignal,2> raw{{{100.0},{-50.0}}};
RelativisticSignalProcessor proc;
auto out = proc.process(raw, beta, m_eff);
#pragma once
#include <cmath>
#include <optional>
#include <span>
#include <vector>
class BetaVelocity {
public:
[[nodiscard]] static std::optional<BetaVelocity>
[[nodiscard]]
double value() const noexcept {
return value_; }
private:
explicit BetaVelocity(double v) noexcept : value_{v} {}
double value_{0.0};
};
class LorentzFactor {
public:
[[nodiscard]]
double value() const noexcept {
return value_; }
private:
friend std::optional<LorentzFactor>
double value_{1.0};
};
class EffectiveMass {
public:
[[nodiscard]] static std::optional<EffectiveMass>
[[nodiscard]] static std::optional<EffectiveMass>
from_adv(
double adv,
double adv_baseline)
noexcept;
[[nodiscard]]
double value() const noexcept {
return value_; }
private:
explicit EffectiveMass(double v) noexcept : value_{v} {}
double value_{1.0};
};
struct RawSignal {
};
struct RelativisticSignal {
};
[[nodiscard]] std::optional<LorentzFactor>
[[nodiscard]] std::optional<std::pair<double, LorentzFactor>>
BetaVelocity beta,
EffectiveMass m_eff) noexcept;
[[nodiscard]] std::optional<BetaVelocity>
[[nodiscard]] std::optional<double>
class RelativisticSignalProcessor {
public:
[[nodiscard]] std::optional<std::vector<RelativisticSignal>>
process(std::span<const RawSignal> signals,
BetaVelocity beta,
EffectiveMass m_eff) const noexcept;
[[nodiscard]] std::optional<RelativisticSignal>
BetaVelocity beta,
EffectiveMass m_eff) const noexcept;
};
}
double value() const noexcept
Returns the raw β value.
static std::optional< BetaVelocity > make(double value) noexcept
Validate and construct a BetaVelocity.
static std::optional< EffectiveMass > from_adv(double adv, double adv_baseline) noexcept
Construct from raw ADV and a baseline ADV.
static std::optional< EffectiveMass > make(double value) noexcept
Validate and construct an EffectiveMass.
double value() const noexcept
Returns the raw m_eff value.
LorentzFactor() noexcept
Default-constructs to the Newtonian identity γ = 1.
friend std::optional< LorentzFactor > lorentz_gamma(BetaVelocity beta) noexcept
Compute Lorentz factor γ = 1/√(1−β²).
double value() const noexcept
Returns the raw γ value.
std::optional< RelativisticSignal > process_one(RawSignal signal, BetaVelocity beta, EffectiveMass m_eff) const noexcept
Process a single raw signal (convenience wrapper).
std::optional< std::vector< RelativisticSignal > > process(std::span< const RawSignal > signals, BetaVelocity beta, EffectiveMass m_eff) const noexcept
Process a batch of raw signals.
RelativisticSignalProcessor() noexcept=default
std::optional< double > inverse_transform(double dilated_value, BetaVelocity beta) noexcept
Recover the proper (un-dilated) value: proper = dilated / γ.
std::optional< std::pair< double, LorentzFactor > > apply_momentum_correction(double raw_signal, BetaVelocity beta, EffectiveMass m_eff) noexcept
Apply relativistic momentum correction: p_rel = γ · m_eff · raw.
std::optional< BetaVelocity > compose_velocities(BetaVelocity beta1, BetaVelocity beta2) noexcept
Relativistic velocity composition: β_result = (β₁+β₂)/(1+β₁β₂).
std::optional< LorentzFactor > lorentz_gamma(BetaVelocity beta) noexcept
Compute Lorentz factor γ = 1/√(1−β²).
constexpr double BETA_MAX_SAFE
double adjusted_value
γ · m_eff · raw_value
LorentzFactor gamma
Lorentz factor applied during correction.
Internal factory helper for constructing LorentzFactor objects from pre-computed gamma scalars (frien...