INDEPENDENT ANALYTIC-LIMIT AUDIT OF THE LOCAL PHOTOMETER WRAPPER
Date: 2026-10-21

Scope
  Actual local Julia execution of photometer_model.jl using CloudScat 1.2.1.
  Julia 1.13.2, two threads, CLOUDSCAT_DEBUG_REDUCTION=1.
  No acceleration or upstream source changes were made by this audit.
  The upstream source repository had an empty git status --short after tests.
  Wrapper SHA256 recorded after execution:
  AD24A17F2F23D23E93CE69BCA7AA1513B2429D93489C0FC47630CC1CB4E03DAA

EXECUTED CHECKS: ALL PASSED

Each case launched 1,000 photons, source altitude 16 km, observer altitude
550 km, 60 degree full circular FOV, 2 microsecond histogram bins and
12 millisecond excess-delay record. Numerical comparisons used relative
tolerance 1e-11 (absolute tolerance 1e-30 for the zero case).

1. On-axis vacuum: beta=0, ray=false.
   Measured integrated fluence: 2.790664462467856e-13 m^-2/source photon.
   Analytic 1/(4*pi*Z^2):      2.790664462467831e-13 m^-2/source photon.

2. Off-axis vacuum at 20 degrees: beta=0, ray=false.
   Fixed vertical gap Z=534 km; source x=Z*tan(20 degrees).
   Measured integrated fluence: 2.3156081596613737e-13 m^-2/source photon.
   Analytic cos(theta)^3/(4*pi*Z^2):
                               2.3156081596613495e-13 m^-2/source photon.
   The helper's returned direct fluence also matched this analytic value.

3. Off-axis vacuum at 40 degrees, outside the 30 degree half-angle.
   Measured and analytic accepted fluence: exactly zero.
   The helper's returned direct fluence was also zero.

4. Purely absorbing cloud: beta=0.001 m^-1, ray=false, albedo=0.
   Source16 km; cloud12-18 km; overlying optical depth=2.
   Measured integrated fluence: 3.776753654464343e-14 m^-2/source photon.
   Analytic exp(-2)/(4*pi*Z^2): 3.776753654464334e-14 m^-2/source photon.
   Exactly one time bin was positive: no spurious scattered tail.
   This checks the current-collision single-scattering-albedo correction.

An initial test invocation caught a missing LinearAlgebra import after the
distance calculation was updated. The owner corrected the import; all
results above come from the subsequent successful invocation.

INDEPENDENT DEFAULT-ATMOSPHERE NUMERICAL BASELINE

Computed separately from the Bodhaine/Peck expressions and constants in
the source, rather than from CloudScat output. This is the code's default
exponential atmosphere, not a measured atmospheric profile.
  Wavelength: 337.1 nm.
  Rayleigh cross-section: 3.432786682063988e-30 m^2.
  Ground density: 2.6867811e25 m^-3; scale height: 7,200 m.
  Ground Rayleigh rate: 9.223146377701232e-5 m^-1.

  Source km   Vacuum m^-2/source photon   Rayleigh tau   Direct transmission
  15          2.7802418218516085e-13      0.0826858941   0.9206402803
  16          2.7906644624678310e-13      0.0719635781   0.9305647881
  18          2.8116863427111363e-13      0.0545099010   0.9469491331

REMAINING SCIENTIFIC LIMITS

- These analytic limits verify normalization, projected area, circular FOV
  rejection and the absorbing-collision correction. They do not validate
  a realistic anvil or establish Monte Carlo convergence of a science grid.
- The cloud phase function is Henyey-Greenstein with Mie-derived g, albedo
  and extinction efficiency, not the full angular Mie scattering matrix.
- Stock sampling is undefined for exactly g=0; that limit is not used here.
- The default lower domain boundary just below12 km removes possible
  return scattering from lower atmosphere. A finite lateral domain also
  truncates the molecular-scattering halo. Boundary convergence should be
  checked for clear and cloud-top cases before making quantitative claims.
- If domainbottom is lowered, params.zmin and the Rayleigh majorant must
  be changed consistently. The current wrapper supports this together.
- Fluence is integrated only through the recorded excess-delay window.
  Compare a longer record before describing it as an all-time fluence.
- A cloud-top source has zero overlying cloud depth but can receive a
  delayed contribution from the cloud beneath it. Its total response is
  therefore not specified by overlying optical depth alone.
- Source pulse shape, electronics response, sampling and photon statistics
  must still be applied before a rise-time classification claim is tested.
