{
  "generated_utc": "2026-09-25T08:47:39.844161+00:00",
  "reproduction": "python scripts/validate_phenomt_precession.py --backend torch --case baseline high_mass_ratio --method msa numerical --sample-rate 2048 --output receipt.json",
  "versions": {
    "python": "3.12.7",
    "numpy": "2.5.2",
    "lalsimulation": "6.2.1",
    "torch": "2.13.0"
  },
  "dtype": "float64",
  "devices": {
    "torch": [
      "cpu"
    ]
  },
  "parameters": {
    "baseline": {
      "mass1": 40.0,
      "mass2": 15.0,
      "spin1": [
        0.2,
        0.1,
        0.3
      ],
      "spin2": [
        0.0,
        0.1,
        -0.2
      ],
      "distance_mpc": 100.0,
      "inclination": 0.8,
      "phic": 0.3,
      "f_lower_hz": 20.0,
      "f_ref_hz": 20.0
    },
    "high_mass_ratio": {
      "mass1": 60.0,
      "mass2": 6.0,
      "spin1": [
        0.2,
        0.1,
        0.8
      ],
      "spin2": [
        0.1,
        0.0,
        0.1
      ],
      "distance_mpc": 100.0,
      "inclination": 1.2,
      "phic": 0.1,
      "f_lower_hz": 20.0,
      "f_ref_hz": 20.0
    }
  },
  "metrics": {
    "relative_l2": "norm(actual-reference)/norm(reference); no alignment",
    "mismatch": "1-abs(vdot(actual,reference))/(norm(actual)*norm(reference)); unweighted, constant-phase maximization only, no time shift"
  },
  "results": [
    {
      "approximant": "IMRPhenomTP",
      "method": "msa",
      "backend": "torch",
      "case": "baseline",
      "sample_rate_hz": 2048,
      "precession_version": 22310,
      "final_spin_mod": 3,
      "samples": 2935,
      "epoch_seconds": -1.297896538,
      "relative_l2": 0.0037901075132514184,
      "mismatch": 7.182173519137969e-06,
      "inspiral": {
        "relative_l2": 0.0014911017505340447,
        "mismatch": 9.738981884277464e-07
      },
      "ringdown": {
        "relative_l2": 0.022918845054712294,
        "mismatch": 6.297379871122999e-06
      }
    },
    {
      "approximant": "IMRPhenomTPHM",
      "method": "msa",
      "backend": "torch",
      "case": "baseline",
      "sample_rate_hz": 2048,
      "precession_version": 22310,
      "final_spin_mod": 3,
      "samples": 2935,
      "epoch_seconds": -1.297896538,
      "relative_l2": 0.0038841953859526197,
      "mismatch": 7.542907061175441e-06,
      "inspiral": {
        "relative_l2": 0.0014343802096324916,
        "mismatch": 8.674017724086269e-07
      },
      "ringdown": {
        "relative_l2": 0.02330008657309737,
        "mismatch": 6.175068654745708e-06
      }
    },
    {
      "approximant": "IMRPhenomTP",
      "method": "numerical",
      "backend": "torch",
      "case": "baseline",
      "sample_rate_hz": 2048,
      "precession_version": 300,
      "final_spin_mod": 4,
      "samples": 2935,
      "epoch_seconds": -1.297896538,
      "relative_l2": 0.023374402304493197,
      "mismatch": 0.0002673527237437856,
      "inspiral": {
        "relative_l2": 0.023191271602454728,
        "mismatch": 0.00026209729848458707
      },
      "ringdown": {
        "relative_l2": 0.028902974060182732,
        "mismatch": 0.00014066903264986497
      }
    },
    {
      "approximant": "IMRPhenomTPHM",
      "method": "numerical",
      "backend": "torch",
      "case": "baseline",
      "sample_rate_hz": 2048,
      "precession_version": 300,
      "final_spin_mod": 4,
      "samples": 2935,
      "epoch_seconds": -1.297896538,
      "relative_l2": 0.023630134331524853,
      "mismatch": 0.0002740043528239866,
      "inspiral": {
        "relative_l2": 0.023355292761825498,
        "mismatch": 0.00026654271880299785
      },
      "ringdown": {
        "relative_l2": 0.03177876066954606,
        "mismatch": 0.00024277893208779489
      }
    },
    {
      "approximant": "IMRPhenomTP",
      "method": "msa",
      "backend": "torch",
      "case": "high_mass_ratio",
      "sample_rate_hz": 2048,
      "precession_version": 22310,
      "final_spin_mod": 3,
      "samples": 5718,
      "epoch_seconds": -2.629817046,
      "relative_l2": 0.020233315719308222,
      "mismatch": 0.0002002747794538351,
      "inspiral": {
        "relative_l2": 0.00959040489379112,
        "mismatch": 4.560981156820354e-05
      },
      "ringdown": {
        "relative_l2": 0.11720203323510042,
        "mismatch": 0.0006566871786815032
      }
    },
    {
      "approximant": "IMRPhenomTPHM",
      "method": "msa",
      "backend": "torch",
      "case": "high_mass_ratio",
      "sample_rate_hz": 2048,
      "precession_version": 22310,
      "final_spin_mod": 3,
      "samples": 5718,
      "epoch_seconds": -2.629817046,
      "relative_l2": 0.02251649649570515,
      "mismatch": 0.0002487196606787423,
      "inspiral": {
        "relative_l2": 0.01039887121239069,
        "mismatch": 5.37522913665045e-05
      },
      "ringdown": {
        "relative_l2": 0.1317992558586293,
        "mismatch": 0.0015622771074574882
      }
    },
    {
      "approximant": "IMRPhenomTP",
      "method": "numerical",
      "backend": "torch",
      "case": "high_mass_ratio",
      "sample_rate_hz": 2048,
      "precession_version": 300,
      "final_spin_mod": 4,
      "samples": 5718,
      "epoch_seconds": -2.629817046,
      "relative_l2": 0.30841788951919236,
      "mismatch": 0.047532525599846887,
      "inspiral": {
        "relative_l2": 0.30237064372024225,
        "mismatch": 0.04559413721887218
      },
      "ringdown": {
        "relative_l2": 0.49998591272843984,
        "mismatch": 0.09919198199894341
      }
    },
    {
      "approximant": "IMRPhenomTPHM",
      "method": "numerical",
      "backend": "torch",
      "case": "high_mass_ratio",
      "sample_rate_hz": 2048,
      "precession_version": 300,
      "final_spin_mod": 4,
      "samples": 5718,
      "epoch_seconds": -2.629817046,
      "relative_l2": 0.30710281742527357,
      "mismatch": 0.046995454745409004,
      "inspiral": {
        "relative_l2": 0.2984742664886122,
        "mismatch": 0.044413983047645544
      },
      "ringdown": {
        "relative_l2": 0.5112806089077764,
        "mismatch": 0.08032959822939045
      }
    }
  ]
}
