#!/usr/bin/env python3
"""ASD LVE model demonstration. Not measured data or a full dynamics solver.
Requires Python 3. Run: python ASD_LVE_demo.py --beta 0.6 --csv model.csv
Scope: stated LVE transverse scale relation, and same-speed parallel charges
with transverse reference separation in the website's model.
"""
import argparse
import csv
import math

def response(beta):
    if not math.isfinite(beta) or not 0 <= beta < 1:
        raise ValueError("beta must satisfy 0 <= beta < 1")
    gamma = 1 / math.sqrt(1 - beta * beta)
    return gamma, 1 - beta * beta, beta * beta

def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--beta", type=float, default=0.6)
    parser.add_argument("--csv", help="Optional model-data output path")
    args = parser.parse_args()
    try:
        gamma, force_ratio, magnetic_fraction = response(args.beta)
    except ValueError as error:
        parser.error(str(error))
    print("MODEL DATA / NOT EXPERIMENTAL OBSERVATIONS")
    print(f"beta = {args.beta:.6f}")
    print(f"L_transverse_prime/L_transverse = gamma = {gamma:.9f}")
    print(f"F/F0 = {force_ratio:.9f}")
    print(f"Fm/F0 = {magnetic_fraction:.9f}")
    if args.csv:
        with open(args.csv, "w", newline="", encoding="utf-8") as file:
            writer = csv.writer(file)
            writer.writerow(["beta", "gamma", "force_ratio", "magnetic_fraction"])
            for i in range(96):
                beta = i / 100
                writer.writerow([beta, *response(beta)])
        print("Model CSV written to", args.csv)

if __name__ == "__main__":
    main()
