{"openapi":"3.1.0","info":{"title":"Photonics Calculators API","version":"1.0.0","description":"Runs the site's calculators with your inputs. Each query parameter is the page's URL key in the page's unit, so a page URL's query works here too. Responses carry the model tier, the model's assumptions and the references the model was checked against. Free, no key; about 60 requests per minute per address."},"servers":[{"url":"https://photonicscalculators.com"}],"externalDocs":{"url":"https://photonicscalculators.com/about#verification"},"paths":{"/api/v1/fiber-optics/coupling-efficiency":{"get":{"operationId":"fiber_optics_coupling_efficiency","summary":"Fiber Coupling Efficiency Calculator","description":"Estimate Gaussian-beam-to-single-mode-fiber coupling efficiency from beam NA, mode field diameter, lateral offset and tilt. Model tier: Textbook approximation. Single-mode Gaussian overlap of a beam waist w₀ = λ/(π·NA) on the fibre face with the fibre mode (MFD/2), with offset and tilt. Paraxial (NA ≲ 0.3); not for multimode fibre or extended sources.","externalDocs":{"url":"https://photonicscalculators.com/fiber-optics/coupling-efficiency"},"parameters":[{"name":"sourceNa","in":"query","required":false,"description":"Beam divergence NA (1/e² half-angle).","schema":{"type":"number","minimum":0.02,"maximum":0.5,"default":0.22}},{"name":"mfd","in":"query","required":false,"description":"Fibre mode field diameter (µm).","schema":{"type":"number","minimum":2,"maximum":30,"default":10.4}},{"name":"lateralOffset","in":"query","required":false,"description":"Lateral offset (µm).","schema":{"type":"number","minimum":0,"maximum":20,"default":0}},{"name":"angularMisalign","in":"query","required":false,"description":"Angular misalignment (°).","schema":{"type":"number","minimum":0,"maximum":5,"default":0}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":400,"maximum":2000,"default":1550}},{"name":"mediumIndex","in":"query","required":false,"description":"Medium index n.","schema":{"type":"number","minimum":1,"maximum":1.5,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"total":{"$ref":"#/components/schemas/Quantity","description":"Total coupling efficiency (%)."},"lossDb":{"$ref":"#/components/schemas/Quantity","description":"Insertion loss (dB)."},"mismatch":{"$ref":"#/components/schemas/Quantity","description":"Mode-mismatch efficiency (%)."},"beamWaist":{"$ref":"#/components/schemas/Quantity","description":"Beam waist w₀ = λ/(π NA) (µm)."},"fiberModeRadius":{"$ref":"#/components/schemas/Quantity","description":"Fibre mode radius w (µm)."},"fiberModeNa":{"$ref":"#/components/schemas/Quantity","description":"Fibre mode NA λ/(πw)."},"offsetFactor":{"$ref":"#/components/schemas/Quantity","description":"Offset factor (%)."},"tiltFactor":{"$ref":"#/components/schemas/Quantity","description":"Tilt factor (%)."}},"required":["total","lossDb","mismatch","beamWaist","fiberModeRadius","fiberModeNa","offsetFactor","tiltFactor"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/imaging/airy-disk":{"get":{"operationId":"imaging_airy_disk","summary":"Airy Disk Size Calculator","description":"Calculate the Airy disk radius and Abbe diffraction limit from wavelength and numerical aperture. Model tier: Textbook approximation. Scalar Airy pattern of an aberration-free, uniformly filled circular pupil. Above NA ≈ 0.9 the vector focus differs: linear polarization widens it ≈ 30 % along the polarization at NA 1.4 (slightly narrower across), unpolarized or circular light ≈ 10–20 %; a Gaussian-filled pupil gives a wider, ringless spot.","externalDocs":{"url":"https://photonicscalculators.com/imaging/airy-disk"},"parameters":[{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":300,"maximum":2000,"default":550}},{"name":"na","in":"query","required":false,"description":"Numerical aperture.","schema":{"type":"number","minimum":0.1,"maximum":1.5,"default":0.95}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"airyRadius":{"$ref":"#/components/schemas/Quantity","description":"Airy radius (first dark ring) (µm)."},"airyDiameter":{"$ref":"#/components/schemas/Quantity","description":"Airy disk diameter (1 AU) (µm)."},"fwhm":{"$ref":"#/components/schemas/Quantity","description":"Intensity FWHM (nm)."},"abbeLimit":{"$ref":"#/components/schemas/Quantity","description":"Abbe limit λ/2NA (nm)."}},"required":["airyRadius","airyDiameter","fwhm","abbeLimit"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/laser-safety/mpe":{"get":{"operationId":"laser_safety_mpe","summary":"Maximum Permissible Exposure (MPE)","description":"Maximum permissible exposure of the eye at any wavelength from 180 nm to 1 mm and exposure time from 1 ns to 30 000 s, on the ICNIRP 2013 limits: radiant exposure, irradiance and the power through each aperture. Model tier: Exact. ICNIRP 2013 point-source eye limits (180 nm – 1 mm, 1 ns – 30 ks) and their apertures, for one exposure of duration t; the power fills the aperture (a beam under 1 mm (1/e) on the cornea below 0.35 s is held to its peak, ICNIRP Table 5 note c). Not modelled: pulse trains, extended sources, skin.","externalDocs":{"url":"https://photonicscalculators.com/laser-safety/mpe"},"parameters":[{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":180,"maximum":1000000,"default":532}},{"name":"exposure","in":"query","required":false,"description":"Exposure time t (s).","schema":{"type":"number","minimum":1e-9,"maximum":30000,"default":0.25}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"radiantExposure":{"$ref":"#/components/schemas/Quantity","description":"MPE, radiant exposure H (the lowest limit in force at t) (J/m²)."},"irradiance":{"$ref":"#/components/schemas/Quantity","description":"MPE, irradiance H/t for a constant exposure (W/m²)."},"aperture":{"$ref":"#/components/schemas/Quantity","description":"Averaging aperture of that limit (mm)."},"maxPowerNarrowBeam":{"$ref":"#/components/schemas/Quantity","description":"Largest power of a beam inside every aperture (mW)."}},"required":["radiantExposure","irradiance","aperture","maxPowerNarrowBeam"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/laser-safety/nohd":{"get":{"operationId":"laser_safety_nohd","summary":"Nominal Ocular Hazard Distance (NOHD)","description":"Nominal ocular hazard distance of a direct laser beam at any wavelength from 180 nm to 1 mm, on the ICNIRP 2013 eye limits, with linear or Gaussian beam spread. Model tier: Exact. ICNIRP 2013 eye limits (180 nm – 1 mm, one exposure up to t) for a Gaussian beam averaged over each limit's aperture (its peak if under 1 mm (1/e) on the cornea below 0.35 s, ICNIRP Table 5 note c), spreading as a + rφ or √(a² + (rφ)²). Not modelled: atmosphere, optical aids, pulse trains.","externalDocs":{"url":"https://photonicscalculators.com/laser-safety/nohd"},"parameters":[{"name":"beamDefinition","in":"query","required":false,"description":"Beam diameter definition: 1/e2 = 1/e² of peak (data sheets); 1/e = 1/e of peak (ANSI Z136.1, IEC 60825-1).","schema":{"type":"string","enum":["1/e2","1/e"],"default":"1/e2"}},{"name":"beamGrowth","in":"query","required":false,"description":"Beam growth with range r: linear = Linear a + rφ (ANSI Z136.1 / IEC TR 60825-14); gaussian = Gaussian √(a² + (rφ)²), waist at the aperture.","schema":{"type":"string","enum":["linear","gaussian"],"default":"linear"}},{"name":"power","in":"query","required":false,"description":"Power (mW).","schema":{"type":"number","minimum":0,"maximum":1000000000,"default":100}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":180,"maximum":1000000,"default":532}},{"name":"exposure","in":"query","required":false,"description":"Exposure time t (s).","schema":{"type":"number","minimum":1e-9,"maximum":30000,"default":0.25}},{"name":"beamDia","in":"query","required":false,"description":"Beam diameter at the aperture a (mm).","schema":{"type":"number","minimum":0.001,"maximum":10000,"default":2}},{"name":"divergence","in":"query","required":false,"description":"Full-angle divergence φ (mrad).","schema":{"type":"number","minimum":0,"maximum":1000,"default":1}},{"name":"safetyFactor","in":"query","required":false,"description":"Safety factor (divides every limit).","schema":{"type":"number","minimum":1,"maximum":1000000,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"nohd":{"$ref":"#/components/schemas/Quantity","description":"Nominal ocular hazard distance (0: within the limits at the aperture) (m)."},"diameterAtNohd":{"$ref":"#/components/schemas/Quantity","description":"1/e² beam diameter at the NOHD (the smallest within the governing limit) (mm)."},"rayleighRange":{"$ref":"#/components/schemas/Quantity","description":"a/φ: where a Gaussian beam is √2 wider than at the aperture (m)."}},"required":["nohd","diameterAtNohd","rayleighRange"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/laser-safety/od-requirements":{"get":{"operationId":"laser_safety_od_requirements","summary":"Optical Density from a Known Exposure Limit","description":"Optical density a filter needs to bring a Gaussian laser beam within an exposure limit you supply, with the beam averaged over the limit's aperture and an optional safety factor. Model tier: Exact. OD = log₁₀(E/E_limit) for an irradiance limit you supply; E is a round Gaussian beam averaged over the aperture you enter (7 mm by default). No wavelength, time or pulse logic is applied.","externalDocs":{"url":"https://photonicscalculators.com/laser-safety/od-requirements"},"parameters":[{"name":"beamDefinition","in":"query","required":false,"description":"Beam diameter definition: 1/e2 = 1/e² of peak (data sheets); 1/e = 1/e of peak (ANSI Z136.1, IEC 60825-1).","schema":{"type":"string","enum":["1/e2","1/e"],"default":"1/e2"}},{"name":"power","in":"query","required":false,"description":"Beam power (mW).","schema":{"type":"number","minimum":0,"maximum":1000000000,"default":500}},{"name":"beamDiameter","in":"query","required":false,"description":"Beam diameter (mm).","schema":{"type":"number","minimum":0,"maximum":10000,"default":2}},{"name":"validatedMpeIrradiance","in":"query","required":false,"description":"Exposure limit you supply, as an irradiance (W/cm²).","schema":{"type":"number","minimum":1e-12,"maximum":1000000000,"default":0.0025}},{"name":"aperture","in":"query","required":false,"description":"Averaging aperture of that limit (mm).","schema":{"type":"number","minimum":0.1,"maximum":1000,"default":7}},{"name":"safetyFactor","in":"query","required":false,"description":"Safety factor (divides every limit).","schema":{"type":"number","minimum":1,"maximum":1000000,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"irradiance":{"$ref":"#/components/schemas/Quantity","description":"Beam irradiance averaged over the aperture (W/cm²)."},"target":{"$ref":"#/components/schemas/Quantity","description":"Target irradiance: limit / safety factor (W/cm²)."},"od":{"$ref":"#/components/schemas/Quantity","description":"Required optical density log₁₀(E/target)."},"powerBehindFilter":{"$ref":"#/components/schemas/Quantity","description":"Beam power behind a filter of that OD (mW)."}},"required":["irradiance","target","od","powerBehindFilter"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/laser-safety/optical-density":{"get":{"operationId":"laser_safety_optical_density","summary":"Laser Eyewear Optical Density","description":"Optical density laser eyewear needs for a CW beam at any wavelength from 180 nm to 1 mm, on the ICNIRP 2013 eye limits, with the beam averaged over each limit's aperture and an optional safety factor. Model tier: Exact. ICNIRP 2013 eye limits (180 nm – 1 mm, exposures up to t) for a round Gaussian beam averaged over each limit's aperture (its peak if under 1 mm (1/e) on the cornea below 0.35 s, ICNIRP Table 5 note c); OD = log₁₀(P/P_max). Not modelled: pulses, EN 207 scale numbers, filter damage.","externalDocs":{"url":"https://photonicscalculators.com/laser-safety/optical-density"},"parameters":[{"name":"beamDefinition","in":"query","required":false,"description":"Beam diameter definition: 1/e2 = 1/e² of peak (data sheets); 1/e = 1/e of peak (ANSI Z136.1, IEC 60825-1).","schema":{"type":"string","enum":["1/e2","1/e"],"default":"1/e2"}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":180,"maximum":1000000,"default":532}},{"name":"power","in":"query","required":false,"description":"Beam power (mW).","schema":{"type":"number","minimum":0,"maximum":1000000000,"default":500}},{"name":"beamDiam","in":"query","required":false,"description":"Beam diameter (mm).","schema":{"type":"number","minimum":0.01,"maximum":10000,"default":3}},{"name":"exposure","in":"query","required":false,"description":"Exposure time t (s).","schema":{"type":"number","minimum":1e-9,"maximum":30000,"default":0.25}},{"name":"safetyFactor","in":"query","required":false,"description":"Safety factor (divides every limit).","schema":{"type":"number","minimum":1,"maximum":1000000,"default":10}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"od":{"$ref":"#/components/schemas/Quantity","description":"Required optical density (round up for eyewear)."},"maxPower":{"$ref":"#/components/schemas/Quantity","description":"Largest power within every limit, safety factor included (mW)."},"odWithoutSafetyFactor":{"$ref":"#/components/schemas/Quantity","description":"Optical density without the safety factor."}},"required":["od","maxPower","odWithoutSafetyFactor"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/polarization/stokes":{"get":{"operationId":"polarization_stokes","summary":"Stokes Parameters","description":"Analyze polarization state from Stokes vector components with Poincaré-sphere visualization. Model tier: Exact. DOP, DOLP, signed DOCP and the ellipse angles ψ = ½ atan2(U, Q), χ = ½ asin(V/I_p) of a physical Stokes vector, √(Q² + U² + V²) ≤ I. V > 0 is right-handed (Goldstein).","externalDocs":{"url":"https://photonicscalculators.com/polarization/stokes"},"parameters":[{"name":"I","in":"query","required":false,"description":"S₀ = I (intensity).","schema":{"type":"number","minimum":0.1,"maximum":2,"default":1}},{"name":"Q","in":"query","required":false,"description":"S₁ = Q.","schema":{"type":"number","minimum":-1,"maximum":1,"default":0.5}},{"name":"U","in":"query","required":false,"description":"S₂ = U.","schema":{"type":"number","minimum":-1,"maximum":1,"default":0.3}},{"name":"V","in":"query","required":false,"description":"S₃ = V (> 0 right-handed, Goldstein).","schema":{"type":"number","minimum":-1,"maximum":1,"default":0.2}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"dop":{"$ref":"#/components/schemas/Quantity","description":"Degree of polarization √(Q² + U² + V²)/I."},"dolp":{"$ref":"#/components/schemas/Quantity","description":"Degree of linear polarization √(Q² + U²)/I."},"docp":{"$ref":"#/components/schemas/Quantity","description":"Degree of circular polarization V/I (+ = right-handed)."},"psi":{"$ref":"#/components/schemas/Quantity","description":"Orientation angle ψ (°)."},"chi":{"$ref":"#/components/schemas/Quantity","description":"Ellipticity angle χ (°)."},"axisRatio":{"$ref":"#/components/schemas/Quantity","description":"Axis ratio b/a = |tan χ|."}},"required":["dop","dolp","docp","psi","chi","axisRatio"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/spectroscopy/blackbody":{"get":{"operationId":"spectroscopy_blackbody","summary":"Blackbody Radiation","description":"Planck's law spectral radiance, Wien peak wavelength, Stefan-Boltzmann radiant exitance and radiance, and the fraction of power in any wavelength band. Model tier: Exact. Exact Planck, Wien and Stefan–Boltzmann laws for an ideal blackbody (emissivity 1) radiating into vacuum, with CODATA constants; radiance is M/π. Real surfaces emit ε(λ) times these values.","externalDocs":{"url":"https://photonicscalculators.com/spectroscopy/blackbody"},"parameters":[{"name":"temperature","in":"query","required":false,"description":"Temperature (K).","schema":{"type":"number","minimum":100,"maximum":40000,"default":5778}},{"name":"bandFromNm","in":"query","required":false,"description":"Band from (nm).","schema":{"type":"number","minimum":1,"maximum":1000000,"default":380}},{"name":"bandToNm","in":"query","required":false,"description":"Band to (nm).","schema":{"type":"number","minimum":1,"maximum":1000000,"default":780}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"peakWavelength":{"$ref":"#/components/schemas/Quantity","description":"Peak wavelength (Wien) (nm)."},"peakSpectralRadiance":{"$ref":"#/components/schemas/Quantity","description":"Peak spectral radiance (W/(m²·sr·nm))."},"exitance":{"$ref":"#/components/schemas/Quantity","description":"Radiant exitance M = σT⁴ (W/m²)."},"radiance":{"$ref":"#/components/schemas/Quantity","description":"Radiance L = σT⁴/π (W/(m²·sr))."},"bandFraction":{"$ref":"#/components/schemas/Quantity","description":"Fraction of the exitance in the band (%)."}},"required":["peakWavelength","peakSpectralRadiance","exitance","radiance","bandFraction"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/spectroscopy/ftir-resolution":{"get":{"operationId":"spectroscopy_ftir_resolution","summary":"FTIR Resolution Calculator","description":"FTIR spectral resolution from maximum OPD, apodization (Norton–Beer, Happ–Genzel, Blackman–Harris) and scan parameters, with computed instrument line shapes. Model tier: Exact. Ideal interferometer: the instrument line shape is the cosine transform of the apodization over ±L, computed numerically; beam divergence and phase errors are not included.","externalDocs":{"url":"https://photonicscalculators.com/spectroscopy/ftir-resolution"},"parameters":[{"name":"apodization","in":"query","required":false,"description":"Apodization: boxcar = Boxcar (none); triangular = Triangular; happ-genzel = Happ–Genzel; nb-weak = Norton–Beer weak; nb-medium = Norton–Beer medium; nb-strong = Norton–Beer strong; bh3 = Blackman–Harris 3-term; bh4 = Blackman–Harris 4-term.","schema":{"type":"string","enum":["boxcar","triangular","happ-genzel","nb-weak","nb-medium","nb-strong","bh3","bh4"],"default":"boxcar"}},{"name":"maxOPD","in":"query","required":false,"description":"Maximum OPD L (cm).","schema":{"type":"number","minimum":0.001,"maximum":500,"default":1}},{"name":"spectralRange","in":"query","required":false,"description":"Highest wavenumber σ_max (Nyquist) (cm⁻¹).","schema":{"type":"number","minimum":100,"maximum":20000,"default":4000}},{"name":"mirrorVelocity","in":"query","required":false,"description":"Moving-mirror speed v (cm/s).","schema":{"type":"number","minimum":0.001,"maximum":10,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"nominalResolution":{"$ref":"#/components/schemas/Quantity","description":"Nominal resolution 1/L (cm⁻¹)."},"ilsFwhm":{"$ref":"#/components/schemas/Quantity","description":"Instrument line shape FWHM (apodized) (cm⁻¹)."},"fwhmRatio":{"$ref":"#/components/schemas/Quantity","description":"ILS FWHM relative to boxcar."},"sidelobe":{"$ref":"#/components/schemas/Quantity","description":"Largest ILS sidelobe, signed, relative to the peak (%)."},"points":{"$ref":"#/components/schemas/Quantity","description":"Points in a single-sided scan 2Lσ_max."},"sampleStep":{"$ref":"#/components/schemas/Quantity","description":"Sampling step Δx = 1/(2σ_max) (µm)."},"scanTime":{"$ref":"#/components/schemas/Quantity","description":"Scan time L/(2v) (s)."},"modulationFrequency":{"$ref":"#/components/schemas/Quantity","description":"Modulation frequency at σ_max, 2vσ_max (kHz)."}},"required":["nominalResolution","ilsFwhm","fwhmRatio","sidelobe","points","sampleStep","scanTime","modulationFrequency"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/spectroscopy/lambert-beer-law":{"get":{"operationId":"spectroscopy_lambert_beer_law","summary":"Lambert-Beer Law Calculator","description":"Beer-Lambert law A = ε·c·l: solve for absorbance, concentration or the molar absorption (extinction) coefficient, with transmittance, mass concentration and mass absorption coefficient; and the transmittance of a bulk sample from its absorption coefficient α and thickness. Model tier: Exact. Exact for monochromatic light and a dilute solution of non-interacting absorbers; concentration and ε are A = ε·c·l solved for each, and a = ε/M. The bulk sample uses the Napierian α: T = e^(−α·d), A = α·d/ln 10, without surface reflections. Not modelled: scattering, fluorescence and stray light; absorbers interact above about 10 mM and absorbance reads low above A ≈ 2.","externalDocs":{"url":"https://photonicscalculators.com/spectroscopy/lambert-beer-law"},"parameters":[{"name":"solve","in":"query","required":false,"description":"Solve for: A = Absorbance A from ε, c, l; c = Concentration c from A, ε, l; eps = Molar absorption coefficient ε from A, c, l.","schema":{"type":"string","enum":["A","c","eps"],"default":"A"}},{"name":"concentration","in":"query","required":false,"description":"Concentration c (input unless solving for c) (mol/L).","schema":{"type":"number","minimum":0,"maximum":10,"default":0.00001}},{"name":"pathLength","in":"query","required":false,"description":"Path length l (cm).","schema":{"type":"number","minimum":0.1,"maximum":10,"default":1}},{"name":"extinctionCoeff","in":"query","required":false,"description":"Molar absorption coefficient ε (input unless solving for ε) (L·mol⁻¹·cm⁻¹).","schema":{"type":"number","minimum":0,"maximum":400000,"default":50000}},{"name":"absorbance","in":"query","required":false,"description":"Absorbance A (input when solving for c or ε).","schema":{"type":"number","minimum":0,"maximum":6,"default":0.5}},{"name":"molarMass","in":"query","required":false,"description":"Molar mass M (g/mol).","schema":{"type":"number","minimum":1,"maximum":1000000,"default":500}},{"name":"alpha","in":"query","required":false,"description":"Bulk slab: Napierian absorption coefficient α (cm⁻¹).","schema":{"type":"number","minimum":0,"maximum":100000,"default":1}},{"name":"thickness","in":"query","required":false,"description":"Bulk slab: thickness d (mm).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":10}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"absorbance":{"$ref":"#/components/schemas/Quantity","description":"Absorbance A."},"transmittance":{"$ref":"#/components/schemas/Quantity","description":"Transmittance T = 10^−A (%)."},"concentration":{"$ref":"#/components/schemas/Quantity","description":"Concentration c (mol/L)."},"extinctionCoeff":{"$ref":"#/components/schemas/Quantity","description":"Molar absorption coefficient ε (L·mol⁻¹·cm⁻¹)."},"massConcentration":{"$ref":"#/components/schemas/Quantity","description":"Mass concentration ρ = c M (mg/L)."},"massAbsorptionCoeff":{"$ref":"#/components/schemas/Quantity","description":"Mass absorption coefficient a = ε/M (L·g⁻¹·cm⁻¹)."},"slabTransmittance":{"$ref":"#/components/schemas/Quantity","description":"Bulk slab: internal transmittance e^(−αd) (%)."},"slabAbsorbance":{"$ref":"#/components/schemas/Quantity","description":"Bulk slab: decadic absorbance αd/ln 10."},"slabLossDb":{"$ref":"#/components/schemas/Quantity","description":"Bulk slab: absorption loss (dB)."}},"required":["absorbance","transmittance","concentration","extinctionCoeff","massConcentration","massAbsorptionCoeff","slabTransmittance","slabAbsorbance","slabLossDb"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/thin-film/single-ar":{"get":{"operationId":"thin_film_single_ar","summary":"Single Layer AR Coating","description":"Quarter-wave antireflection coating design with Snell's law and explicit s/p polarization handling at oblique incidence. Model tier: Exact. One lossless layer with constant indices, a quarter wave at the chosen angle; s and p by tilted admittances. Not modelled: dispersion, absorption, the substrate's back surface, thickness errors.","externalDocs":{"url":"https://photonicscalculators.com/thin-film/single-ar"},"parameters":[{"name":"nIncident","in":"query","required":false,"description":"Incident medium index.","schema":{"type":"number","minimum":1,"maximum":1.6,"default":1}},{"name":"nFilm","in":"query","required":false,"description":"Film index.","schema":{"type":"number","minimum":1.1,"maximum":2.4,"default":1.38}},{"name":"nSubstrate","in":"query","required":false,"description":"Substrate index.","schema":{"type":"number","minimum":1.3,"maximum":2.4,"default":1.52}},{"name":"designWavelength","in":"query","required":false,"description":"Design wavelength (nm).","schema":{"type":"number","minimum":350,"maximum":1100,"default":550}},{"name":"angle","in":"query","required":false,"description":"Incidence angle (°).","schema":{"type":"number","minimum":0,"maximum":75,"default":0}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"optimalNFilm":{"$ref":"#/components/schemas/Quantity","description":"Optimal film index √(n₀ n_s) at normal incidence."},"quarterWaveThickness":{"$ref":"#/components/schemas/Quantity","description":"Quarter-wave thickness λ₀/(4 n₁ cos θ₁) (nm)."},"reflectance":{"$ref":"#/components/schemas/Quantity","description":"Reflectance at the design wavelength (unpolarized) (%)."},"filmAngle":{"$ref":"#/components/schemas/Quantity","description":"Angle in the film θ₁ (°)."}},"required":["optimalNFilm","quarterWaveThickness","reflectance","filmAngle"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/wave-optics/gaussian-beam":{"get":{"operationId":"wave_optics_gaussian_beam","summary":"Gaussian Beam Propagation","description":"Rayleigh range, divergence, beam radius, wavefront curvature and Gouy phase of a Gaussian beam at any distance from its waist. Model tier: Textbook approximation. Paraxial TEM₀₀ beam with a 1/e² intensity radius, in air or vacuum: use the wavelength in the medium otherwise. Accurate while the divergence stays below about 0.1 rad.","externalDocs":{"url":"https://photonicscalculators.com/wave-optics/gaussian-beam"},"parameters":[{"name":"wavelength","in":"query","required":false,"description":"Wavelength λ (nm).","schema":{"type":"number","minimum":200,"maximum":11000,"default":1550}},{"name":"waist","in":"query","required":false,"description":"Beam waist radius w₀ (1/e²) (µm).","schema":{"type":"number","minimum":1,"maximum":10000,"default":10}},{"name":"z","in":"query","required":false,"description":"Distance from waist z (mm).","schema":{"type":"number","minimum":-1000000,"maximum":1000000,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"rayleighRange":{"$ref":"#/components/schemas/Quantity","description":"Rayleigh range z_R (mm)."},"divergence":{"$ref":"#/components/schemas/Quantity","description":"Far-field divergence θ (half angle) (mrad)."},"beamParameterProduct":{"$ref":"#/components/schemas/Quantity","description":"Beam parameter product w₀θ (mm·mrad)."},"confocalParameter":{"$ref":"#/components/schemas/Quantity","description":"Confocal parameter 2z_R (mm)."},"beamRadius":{"$ref":"#/components/schemas/Quantity","description":"Beam radius w(z) (µm)."},"wavefrontRadius":{"$ref":"#/components/schemas/Quantity","description":"Wavefront radius of curvature R(z) (mm)."},"gouyPhase":{"$ref":"#/components/schemas/Quantity","description":"Gouy phase ψ(z) (°)."}},"required":["rayleighRange","divergence","beamParameterProduct","confocalParameter","beamRadius","wavefrontRadius","gouyPhase"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/spectroscopy/cavity-ring-down":{"get":{"operationId":"spectroscopy_cavity_ring_down","summary":"Cavity Ring-Down Spectroscopy","description":"Model CRDS ring-down time, sensitivity, and finesse. Visualize exponential decay with and without sample absorption. Model tier: Exact. Exact decay envelope of a two-mirror cavity filled with the sample (single-mode excitation); the detection limit assumes the stated ring-down-time noise per decay and white-noise averaging.","externalDocs":{"url":"https://photonicscalculators.com/spectroscopy/cavity-ring-down"},"parameters":[{"name":"mirrorReflectivity","in":"query","required":false,"description":"Mirror reflectivity R (%).","schema":{"type":"number","minimum":50,"maximum":99.99999,"default":99.99}},{"name":"cavityLength","in":"query","required":false,"description":"Cavity length (cm).","schema":{"type":"number","minimum":1,"maximum":1000,"default":100}},{"name":"baseLoss","in":"query","required":false,"description":"Other round-trip loss (%).","schema":{"type":"number","minimum":0,"maximum":50,"default":0}},{"name":"sampleAbsorbance","in":"query","required":false,"description":"Sample absorbance per pass (base 10).","schema":{"type":"number","minimum":0,"maximum":1,"default":0.001}},{"name":"tauNoise","in":"query","required":false,"description":"Ring-down time noise Δτ/τ per decay (%).","schema":{"type":"number","minimum":0.001,"maximum":50,"default":1}},{"name":"repRate","in":"query","required":false,"description":"Decays averaged per second (Hz).","schema":{"type":"number","minimum":0.01,"maximum":1000000,"default":10}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"tau0":{"$ref":"#/components/schemas/Quantity","description":"Empty-cavity ring-down time τ₀ (µs)."},"effectivePath":{"$ref":"#/components/schemas/Quantity","description":"Effective path cτ₀ (km)."},"tau":{"$ref":"#/components/schemas/Quantity","description":"Ring-down time with sample τ (µs)."},"roundTripLoss":{"$ref":"#/components/schemas/Quantity","description":"Round-trip loss Λ with sample."},"alpha":{"$ref":"#/components/schemas/Quantity","description":"Sample absorption coefficient α (cm⁻¹)."},"alphaMin":{"$ref":"#/components/schemas/Quantity","description":"Minimum detectable α (cm⁻¹)."},"nea":{"$ref":"#/components/schemas/Quantity","description":"Noise-equivalent absorption, averaged (cm⁻¹ Hz⁻¹ᐟ²)."},"finesse":{"$ref":"#/components/schemas/Quantity","description":"Finesse ℱ."},"modeSpacing":{"$ref":"#/components/schemas/Quantity","description":"Mode spacing c/2L (MHz)."},"modeFwhm":{"$ref":"#/components/schemas/Quantity","description":"Mode FWHM 1/(2πτ) (kHz)."}},"required":["tau0","effectivePath","tau","roundTripLoss","alpha","alphaMin","nea","finesse","modeSpacing","modeFwhm"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/spectroscopy/spectral-line-broadening":{"get":{"operationId":"spectroscopy_spectral_line_broadening","summary":"Spectral Line Broadening","description":"Doppler, pressure and natural line widths and the exact Voigt profile, with the Olivero and pseudo-Voigt (TCH) approximations; or combine any Gaussian and Lorentzian widths. Model tier: Exact. Exact Voigt convolution (Faddeeva function, ≈ 1e-13) of a Maxwell-Doppler Gaussian and a Lorentzian from natural decay plus impact-approximation collisions, with γ entered at the gas temperature. Not modelled: Dicke narrowing, speed-dependent broadening, line mixing and pressure shifts.","externalDocs":{"url":"https://photonicscalculators.com/spectroscopy/spectral-line-broadening"},"parameters":[{"name":"mode","in":"query","required":false,"description":"Input mode: gas = From gas conditions; widths = From Gaussian and Lorentzian widths.","schema":{"type":"string","enum":["gas","widths"],"default":"gas"}},{"name":"centerWl","in":"query","required":false,"description":"Centre wavelength λ₀ (gas mode) (nm).","schema":{"type":"number","minimum":100,"maximum":100000,"default":500}},{"name":"temperature","in":"query","required":false,"description":"Temperature T (gas mode) (K).","schema":{"type":"number","minimum":1,"maximum":100000,"default":5000}},{"name":"molecularMass","in":"query","required":false,"description":"Atomic or molecular mass (gas mode) (u).","schema":{"type":"number","minimum":1,"maximum":1000,"default":20}},{"name":"pressure","in":"query","required":false,"description":"Pressure P (gas mode) (atm).","schema":{"type":"number","minimum":0,"maximum":100,"default":1}},{"name":"gammaCol","in":"query","required":false,"description":"Pressure-broadening coefficient γ, HWHM (gas mode) (cm⁻¹/atm).","schema":{"type":"number","minimum":0,"maximum":10,"default":0.1}},{"name":"naturalWidth","in":"query","required":false,"description":"Natural width, FWHM (gas mode) (cm⁻¹).","schema":{"type":"number","minimum":0,"maximum":10,"default":0.001}},{"name":"fwhmG","in":"query","required":false,"description":"Gaussian FWHM Δ_G (widths mode) (cm⁻¹).","schema":{"type":"number","minimum":0,"maximum":1000000,"default":0.5}},{"name":"fwhmL","in":"query","required":false,"description":"Lorentzian FWHM Δ_L (widths mode) (cm⁻¹).","schema":{"type":"number","minimum":0,"maximum":1000000,"default":0.3}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"gaussianFwhm":{"$ref":"#/components/schemas/Quantity","description":"Gaussian FWHM Δ_G (cm⁻¹)."},"lorentzianFwhm":{"$ref":"#/components/schemas/Quantity","description":"Lorentzian FWHM Δ_L (cm⁻¹)."},"voigtFwhm":{"$ref":"#/components/schemas/Quantity","description":"Voigt FWHM (exact) (cm⁻¹)."},"voigtOlivero":{"$ref":"#/components/schemas/Quantity","description":"Voigt FWHM, Olivero-Longbothum approximation (cm⁻¹)."},"tchFwhm":{"$ref":"#/components/schemas/Quantity","description":"Thompson-Cox-Hastings pseudo-Voigt FWHM (cm⁻¹)."},"tchEta":{"$ref":"#/components/schemas/Quantity","description":"TCH Lorentzian mixing η."}},"required":["gaussianFwhm","lorentzianFwhm","voigtFwhm","voigtOlivero","tchFwhm","tchEta"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/spectroscopy/fluorescence-lifetime":{"get":{"operationId":"spectroscopy_fluorescence_lifetime","summary":"Fluorescence Lifetime Calculator","description":"Model single and bi-exponential fluorescence decay curves. Calculate intensity-weighted average lifetimes. Model tier: Exact. Exact definitions of the fractional intensities and of the intensity- and amplitude-weighted averages of a multi-exponential decay. Φ = ⟨τ⟩_amp/τ_rad assumes one radiative rate for all components.","externalDocs":{"url":"https://photonicscalculators.com/spectroscopy/fluorescence-lifetime"},"parameters":[{"name":"model","in":"query","required":false,"description":"Decay model: single = Single exponential; bi = Bi-exponential.","schema":{"type":"string","enum":["single","bi"],"default":"single"}},{"name":"tau","in":"query","required":false,"description":"Lifetime τ (τ₁ in the bi-exponential model) (ns).","schema":{"type":"number","minimum":0.001,"maximum":1000000,"default":5}},{"name":"amplitude","in":"query","required":false,"description":"Amplitude I₀.","schema":{"type":"number","minimum":0.01,"maximum":1000000000000,"default":1}},{"name":"tau2","in":"query","required":false,"description":"τ₂ (bi-exponential only) (ns).","schema":{"type":"number","minimum":0.001,"maximum":1000000,"default":1}},{"name":"frac1","in":"query","required":false,"description":"Amplitude fraction α₁ (bi-exponential only).","schema":{"type":"number","minimum":0,"maximum":1,"default":0.7}},{"name":"tMax","in":"query","required":false,"description":"Time range of the chart (ns).","schema":{"type":"number","minimum":0.01,"maximum":1000000,"default":30}},{"name":"tauRad","in":"query","required":false,"description":"Radiative lifetime τ_rad (ns).","schema":{"type":"number","minimum":0.001,"maximum":1000000000,"default":10}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"tauIntensity":{"$ref":"#/components/schemas/Quantity","description":"Intensity-weighted lifetime ⟨τ⟩ (single: τ) (ns)."},"tauAmplitude":{"$ref":"#/components/schemas/Quantity","description":"Amplitude-weighted lifetime ⟨τ⟩ (ns)."},"f1":{"$ref":"#/components/schemas/Quantity","description":"Fractional intensity f₁ (%)."},"f2":{"$ref":"#/components/schemas/Quantity","description":"Fractional intensity f₂ (%)."},"decayRate":{"$ref":"#/components/schemas/Quantity","description":"Decay rate 1/τ (s⁻¹)."},"quantumYield":{"$ref":"#/components/schemas/Quantity","description":"Quantum yield Φ = ⟨τ⟩_amp/τ_rad."}},"required":["tauIntensity","tauAmplitude","f1","f2","decayRate","quantumYield"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/imaging/tirf":{"get":{"operationId":"imaging_tirf","summary":"TIRF Penetration Depth Calculator","description":"Evanescent intensity penetration depth, critical angle, objective angle limit and interface intensity for TIRF microscopy. Model tier: Exact. Plane-wave Fresnel optics at a single planar interface. Objective-type TIRF also carries scattered, non-evanescent light, so measured decays are often longer.","externalDocs":{"url":"https://photonicscalculators.com/imaging/tirf"},"parameters":[{"name":"na","in":"query","required":false,"description":"Objective NA.","schema":{"type":"number","minimum":0.1,"maximum":1.8,"default":1.49}},{"name":"n1","in":"query","required":false,"description":"n₁ (coverslip / immersion).","schema":{"type":"number","minimum":1,"maximum":2,"default":1.518}},{"name":"n2","in":"query","required":false,"description":"n₂ (sample medium).","schema":{"type":"number","minimum":1,"maximum":2,"default":1.33}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":300,"maximum":1500,"default":488}},{"name":"theta","in":"query","required":false,"description":"Incidence angle in the glass θ (°).","schema":{"type":"number","minimum":0,"maximum":89.9,"default":65}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"criticalAngle":{"$ref":"#/components/schemas/Quantity","description":"Critical angle θ_c (°)."},"maxAngle":{"$ref":"#/components/schemas/Quantity","description":"Objective's largest angle (°)."},"depth":{"$ref":"#/components/schemas/Quantity","description":"Intensity penetration depth d (nm)."},"fieldDecayLength":{"$ref":"#/components/schemas/Quantity","description":"Field decay length 2d (nm)."},"intensityAt100nm":{"$ref":"#/components/schemas/Quantity","description":"Intensity at 100 nm (%)."},"interfaceS":{"$ref":"#/components/schemas/Quantity","description":"Interface intensity, s-polarised (× incident)."},"interfaceP":{"$ref":"#/components/schemas/Quantity","description":"Interface intensity, p-polarised (× incident)."}},"required":["criticalAngle","maxAngle","depth","fieldDecayLength","intensityAt100nm","interfaceS","interfaceP"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/fiber-optics/dispersion-map":{"get":{"operationId":"fiber_optics_dispersion_map","summary":"Dispersion Map Calculator","description":"Design a dispersion map for a fiber link using SMF and DCF segments. Model tier: Textbook approximation. Linear D(λ) per segment: net dispersion L_s D_s + L_c D_c and residual slope L_s S_s + L_c S_c. Not modelled: dispersion curvature (strong in DCF), loss, nonlinearity, PMD.","externalDocs":{"url":"https://photonicscalculators.com/fiber-optics/dispersion-map"},"parameters":[{"name":"lengthSMF","in":"query","required":false,"description":"SMF length (km).","schema":{"type":"number","minimum":0,"maximum":500,"default":80}},{"name":"dispSMF","in":"query","required":false,"description":"SMF dispersion D (ps/(nm·km)).","schema":{"type":"number","minimum":-30,"maximum":30,"default":17}},{"name":"slopeSMF","in":"query","required":false,"description":"SMF dispersion slope S (ps/(nm²·km)).","schema":{"type":"number","minimum":-1,"maximum":1,"default":0.056}},{"name":"lengthDCF","in":"query","required":false,"description":"DCF length (km).","schema":{"type":"number","minimum":0,"maximum":100,"default":15}},{"name":"dcfDispersion","in":"query","required":false,"description":"DCF dispersion D (ps/(nm·km)).","schema":{"type":"number","minimum":-1000,"maximum":1000,"default":-100}},{"name":"dcfSlope","in":"query","required":false,"description":"DCF dispersion slope S (ps/(nm²·km)).","schema":{"type":"number","minimum":-20,"maximum":20,"default":-0.2}},{"name":"wavelength","in":"query","required":false,"description":"Reference wavelength (where D, S are given) (nm).","schema":{"type":"number","minimum":1530,"maximum":1629,"default":1550}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"netDispersion":{"$ref":"#/components/schemas/Quantity","description":"Net accumulated dispersion at the reference wavelength (ps/nm)."},"totalDispSMF":{"$ref":"#/components/schemas/Quantity","description":"SMF accumulated dispersion (ps/nm)."},"totalDispDCF":{"$ref":"#/components/schemas/Quantity","description":"DCF accumulated dispersion (ps/nm)."},"residualSlope":{"$ref":"#/components/schemas/Quantity","description":"Residual dispersion slope (ps/nm²)."}},"required":["netDispersion","totalDispSMF","totalDispDCF","residualSlope"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/imaging/low-coherence":{"get":{"operationId":"imaging_low_coherence","summary":"Low Coherence Interferometry","description":"Time-domain OCT: interferogram of a reflector, fringe visibility, axial resolution, Doppler carrier 2v/λ, scan times and the shot-noise SNR. Model tier: Textbook approximation. Michelson interferometer with a Gaussian source (Δλ ≪ λ₀), matched dispersion, a 50/50 coupler and a reference mirror at constant speed with no flyback. The SNR is the shot-noise limit with a strong reference arm; excess intensity noise is not included.","externalDocs":{"url":"https://photonicscalculators.com/imaging/low-coherence"},"parameters":[{"name":"wavelengthNm","in":"query","required":false,"description":"Centre wavelength λ₀ (nm).","schema":{"type":"number","minimum":600,"maximum":1600,"default":1300}},{"name":"bandwidthNm","in":"query","required":false,"description":"Bandwidth Δλ (FWHM) (nm).","schema":{"type":"number","minimum":5,"maximum":300,"default":80}},{"name":"refractiveIndex","in":"query","required":false,"description":"Group index of the sample n.","schema":{"type":"number","minimum":1,"maximum":1.8,"default":1.4}},{"name":"scanRangeMm","in":"query","required":false,"description":"Reference mirror travel (mm).","schema":{"type":"number","minimum":0.1,"maximum":10,"default":2}},{"name":"mirrorSpeedMmPerS","in":"query","required":false,"description":"Mirror speed v (mm/s).","schema":{"type":"number","minimum":1,"maximum":200,"default":50}},{"name":"numAScans","in":"query","required":false,"description":"A-scans per B-scan.","schema":{"type":"number","minimum":50,"maximum":2000,"default":500}},{"name":"referenceReflectivity","in":"query","required":false,"description":"Reference reflectivity R_r.","schema":{"type":"number","minimum":0.01,"maximum":1,"default":0.9}},{"name":"sampleReflectivity","in":"query","required":false,"description":"Sample reflectivity R_s.","schema":{"type":"number","minimum":0.000001,"maximum":1,"default":0.004}},{"name":"sourcePowerMw","in":"query","required":false,"description":"Source power P₀ (mW).","schema":{"type":"number","minimum":0.01,"maximum":100,"default":10}},{"name":"detectorResponsivity","in":"query","required":false,"description":"Detector responsivity ρ (A/W).","schema":{"type":"number","minimum":0.05,"maximum":1.2,"default":0.8}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"axialResolutionAir":{"$ref":"#/components/schemas/Quantity","description":"Axial resolution in air (µm)."},"axialResolutionSample":{"$ref":"#/components/schemas/Quantity","description":"Axial resolution in the sample (µm)."},"coherenceLength":{"$ref":"#/components/schemas/Quantity","description":"Coherence length l_c (path difference) (µm)."},"fringeVisibility":{"$ref":"#/components/schemas/Quantity","description":"Fringe visibility V."},"carrierFrequency":{"$ref":"#/components/schemas/Quantity","description":"Carrier (Doppler) frequency 2v/λ₀ (kHz)."},"signalBandwidth":{"$ref":"#/components/schemas/Quantity","description":"Signal bandwidth (FWHM) 2vΔλ/λ₀² (kHz)."},"depthRange":{"$ref":"#/components/schemas/Quantity","description":"Depth range in the sample (mm)."},"aScanTime":{"$ref":"#/components/schemas/Quantity","description":"A-scan time (one way) (ms)."},"bScanTime":{"$ref":"#/components/schemas/Quantity","description":"B-scan time (s)."},"snrDb":{"$ref":"#/components/schemas/Quantity","description":"Shot-noise SNR (dB)."}},"required":["axialResolutionAir","axialResolutionSample","coherenceLength","fringeVisibility","carrierFrequency","signalBandwidth","depthRange","aScanTime","bScanTime","snrDb"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/spectroscopy/infrared-spectroscopy":{"get":{"operationId":"spectroscopy_infrared_spectroscopy","summary":"Infrared (IR) Spectroscopy","description":"Vibration–rotation band of HCl or CO: anharmonic band origin, P and R branch lines, Boltzmann intensities at the instrument resolution, force constant and the isotope shift of H³⁷Cl or ¹³CO. Model tier: Textbook approximation. Anharmonic oscillator to (v + ½)⁴ plus vibrating rotor (B_v = B_e − α_e(v + ½), one distortion constant) with NIST constants (including ω_e y_e and ω_e z_e); relative line strengths from Hönl–London, Boltzmann and stimulated-emission factors, without Herman–Wallis factors, pressure broadening or absolute band strengths. With one D term, HCl is limited to 1200 K.","externalDocs":{"url":"https://photonicscalculators.com/spectroscopy/infrared-spectroscopy"},"parameters":[{"name":"molecule","in":"query","required":false,"description":"Molecule: hcl = H³⁵Cl (hydrogen chloride); co = ¹²C¹⁶O (carbon monoxide).","schema":{"type":"string","enum":["hcl","co"],"default":"hcl"}},{"name":"band","in":"query","required":false,"description":"Band (upper level v of v ← 0: 1 fundamental, 2 first overtone, 3 second overtone).","schema":{"type":"number","minimum":1,"maximum":3,"default":1}},{"name":"temperature","in":"query","required":false,"description":"Temperature (K).","schema":{"type":"number","minimum":10,"maximum":3000,"default":300}},{"name":"resolution","in":"query","required":false,"description":"Instrument resolution (FWHM) (cm⁻¹).","schema":{"type":"number","minimum":0.01,"maximum":20,"default":0.5}},{"name":"isotopes","in":"query","required":false,"description":"Show the minor isotopologue (1 yes, 0 no).","schema":{"type":"number","minimum":0,"maximum":1,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"bandOrigin":{"$ref":"#/components/schemas/Quantity","description":"Band origin ν₀ = G(v) − G(0) (cm⁻¹)."},"bandOriginWavelength":{"$ref":"#/components/schemas/Quantity","description":"Band origin wavelength (µm)."},"r0":{"$ref":"#/components/schemas/Quantity","description":"R(0) line (cm⁻¹)."},"p1":{"$ref":"#/components/schemas/Quantity","description":"P(1) line (cm⁻¹)."},"strongestRJ":{"$ref":"#/components/schemas/Quantity","description":"J″ of the strongest R line."},"strongestPJ":{"$ref":"#/components/schemas/Quantity","description":"J″ of the strongest P line."},"strongestRLine":{"$ref":"#/components/schemas/Quantity","description":"Strongest R line (cm⁻¹)."},"strongestPLine":{"$ref":"#/components/schemas/Quantity","description":"Strongest P line (cm⁻¹)."},"mostPopulatedJ":{"$ref":"#/components/schemas/Quantity","description":"Most populated J″."},"isotopeShift":{"$ref":"#/components/schemas/Quantity","description":"Isotope shift of ν₀ (minor − major) (cm⁻¹)."},"harmonicFrequency":{"$ref":"#/components/schemas/Quantity","description":"Harmonic frequency ω_e (cm⁻¹)."},"fundamental":{"$ref":"#/components/schemas/Quantity","description":"Fundamental G(1) − G(0) (anharmonic) (cm⁻¹)."},"forceConstant":{"$ref":"#/components/schemas/Quantity","description":"Force constant k = μ(2πcω_e)² (N/m)."},"anharmonicity":{"$ref":"#/components/schemas/Quantity","description":"Anharmonicity ω_e x_e (cm⁻¹)."},"morseDepth":{"$ref":"#/components/schemas/Quantity","description":"Morse well depth ω_e²/(4ω_e x_e) (rough) (eV)."},"B0":{"$ref":"#/components/schemas/Quantity","description":"Rotational constant B₀ (cm⁻¹)."},"Bv":{"$ref":"#/components/schemas/Quantity","description":"Rotational constant B_v of the upper level (cm⁻¹)."}},"required":["bandOrigin","bandOriginWavelength","r0","p1","strongestRJ","strongestPJ","strongestRLine","strongestPLine","mostPopulatedJ","isotopeShift","harmonicFrequency","fundamental","forceConstant","anharmonicity","morseDepth","B0","Bv"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/spectroscopy/sum-frequency-gen":{"get":{"operationId":"spectroscopy_sum_frequency_gen","summary":"Sum Frequency Generation Spectroscopy","description":"SFG vibrational spectrum of an interface: the SFG wavelength and |χ⁽²⁾|² of Lorentzian CH or OH resonances interfering with a non-resonant background of chosen amplitude and phase. Model tier: Textbook approximation. Standard SFG lineshape: Lorentzian resonances plus a constant non-resonant term, added as complex amplitudes before squaring. Fresnel factors, beam geometry and polarisation combination are folded into the amplitudes, which (with the widths) are illustrative; the band assignments are from the literature. The SFG wavelength is exact.","externalDocs":{"url":"https://photonicscalculators.com/spectroscopy/sum-frequency-gen"},"parameters":[{"name":"preset","in":"query","required":false,"description":"Interface (resonance set): ch = Alkyl chains, CH stretches (ssp; e.g. a thiol monolayer); water = Air/water, OH stretches (ssp).","schema":{"type":"string","enum":["ch","water"],"default":"ch"}},{"name":"visWavelength","in":"query","required":false,"description":"Visible wavelength λ_vis (vacuum) (nm).","schema":{"type":"number","minimum":300,"maximum":1100,"default":532}},{"name":"irMinCm","in":"query","required":false,"description":"IR from (cm⁻¹).","schema":{"type":"number","minimum":500,"maximum":5000,"default":2800}},{"name":"irMaxCm","in":"query","required":false,"description":"IR to (cm⁻¹).","schema":{"type":"number","minimum":500,"maximum":5000,"default":3050}},{"name":"nrAmplitude","in":"query","required":false,"description":"Non-resonant amplitude A_NR.","schema":{"type":"number","minimum":0,"maximum":10,"default":0.3}},{"name":"nrPhaseDeg","in":"query","required":false,"description":"Non-resonant phase φ (°).","schema":{"type":"number","minimum":-180,"maximum":180,"default":0}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"sfgWavelengthMin":{"$ref":"#/components/schemas/Quantity","description":"Shortest SFG wavelength (at the highest IR wavenumber) (nm)."},"sfgWavelengthMax":{"$ref":"#/components/schemas/Quantity","description":"Longest SFG wavelength (at the lowest IR wavenumber) (nm)."},"strongestPeak":{"$ref":"#/components/schemas/Quantity","description":"Strongest SFG peak (cm⁻¹)."},"strongestPeakIntensity":{"$ref":"#/components/schemas/Quantity","description":"|χ_eff|² at the strongest peak."},"strongestPeakWavelength":{"$ref":"#/components/schemas/Quantity","description":"SFG wavelength of the strongest peak (nm)."},"peakCount":{"$ref":"#/components/schemas/Quantity","description":"Apparent peaks in range."}},"required":["sfgWavelengthMin","sfgWavelengthMax","strongestPeak","strongestPeakIntensity","strongestPeakWavelength","peakCount"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/acquisition-tracking":{"get":{"operationId":"free_space_comms_acquisition_tracking","summary":"FSO Acquisition and Tracking","description":"Stare acquisition probability, raster scan lines and time over the 3σ uncertainty cone, beacon margin and the quadrant-detector tracking error for a free-space optical terminal. Model tier: Illustrative. Circular Gaussian pointing error; raster without turnaround, overlap or dwell; quadrant-cell NEA (3π/16)(λ/D)/SNR for a point source. A sizing estimate, not an acquisition-sequence simulation.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/acquisition-tracking"},"parameters":[{"name":"fov","in":"query","required":false,"description":"Receiver FOV, full angle (mrad).","schema":{"type":"number","minimum":0.001,"maximum":100,"default":1}},{"name":"uncertainty","in":"query","required":false,"description":"Pointing uncertainty, 3σ radius (mrad).","schema":{"type":"number","minimum":0.001,"maximum":100,"default":5}},{"name":"scanRate","in":"query","required":false,"description":"Scan rate (°/s).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":10}},{"name":"beaconPower","in":"query","required":false,"description":"Beacon power at the receiver (dBm).","schema":{"type":"number","minimum":-150,"maximum":50,"default":-30}},{"name":"rxSensitivity","in":"query","required":false,"description":"Receiver sensitivity (dBm).","schema":{"type":"number","minimum":-150,"maximum":50,"default":-40}},{"name":"detectorNoise","in":"query","required":false,"description":"Tracking noise NEP·√B (nW).","schema":{"type":"number","minimum":0.000001,"maximum":1000000000,"default":100}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":100,"maximum":20000,"default":1550}},{"name":"aperture","in":"query","required":false,"description":"Tracking aperture diameter (cm).","schema":{"type":"number","minimum":0.01,"maximum":1000,"default":10}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"stareProbability":{"$ref":"#/components/schemas/Quantity","description":"Stare acquisition probability (%)."},"squareCoverage":{"$ref":"#/components/schemas/Quantity","description":"Fraction of targets inside the 2U square (%)."},"scanLines":{"$ref":"#/components/schemas/Quantity","description":"Raster scan lines."},"scanTime":{"$ref":"#/components/schemas/Quantity","description":"Raster scan time (s)."},"beaconMargin":{"$ref":"#/components/schemas/Quantity","description":"Beacon margin over the receiver sensitivity (dB)."},"trackingSnr":{"$ref":"#/components/schemas/Quantity","description":"Tracking SNR (voltage), P_beacon / (NEP·√B)."},"nea":{"$ref":"#/components/schemas/Quantity","description":"Quadrant-detector NEA (rms per axis) (µrad)."},"diffractionAngle":{"$ref":"#/components/schemas/Quantity","description":"Diffraction angle λ/D (µrad)."}},"required":["stareProbability","squareCoverage","scanLines","scanTime","beaconMargin","trackingSnr","nea","diffractionAngle"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/adaptive-optics":{"get":{"operationId":"free_space_comms_adaptive_optics","summary":"Adaptive Optics for FSO","description":"Fried parameter r₀, Greenwood frequency, isoplanatic angle and Strehl ratio with and without adaptive optics for a free-space optical link. Model tier: Textbook approximation. One uniform turbulent layer with one wind speed; the actuators fill the pupil on a square grid and set the fitting error of a continuous-facesheet mirror; the servo residual is capped at the open-loop variance. Not modelled: wavefront-sensor noise, anisoplanatism and scintillation.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/adaptive-optics"},"parameters":[{"name":"c2n","in":"query","required":false,"description":"Cn² (m^(−2/3)).","schema":{"type":"number","minimum":1e-18,"maximum":1e-11,"default":1e-14}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":200,"maximum":20000,"default":1550}},{"name":"range","in":"query","required":false,"description":"Range (km).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":1}},{"name":"diameter","in":"query","required":false,"description":"Aperture diameter (cm).","schema":{"type":"number","minimum":0.1,"maximum":1000,"default":10}},{"name":"aoActuators","in":"query","required":false,"description":"DM actuators in the pupil.","schema":{"type":"number","minimum":10,"maximum":100000,"default":127}},{"name":"aoBandwidth","in":"query","required":false,"description":"AO closed-loop bandwidth f₃dB (Hz).","schema":{"type":"number","minimum":1,"maximum":100000,"default":500}},{"name":"windSpeed","in":"query","required":false,"description":"Wind speed (m/s).","schema":{"type":"number","minimum":0.1,"maximum":100,"default":10}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"friedParameter":{"$ref":"#/components/schemas/Quantity","description":"Fried parameter r₀ (cm)."},"diameterOverR0":{"$ref":"#/components/schemas/Quantity","description":"D/r₀."},"greenwoodFrequency":{"$ref":"#/components/schemas/Quantity","description":"Greenwood frequency f_G (Hz)."},"isoplanaticAngle":{"$ref":"#/components/schemas/Quantity","description":"Isoplanatic angle θ₀ (µrad)."},"actuatorPitch":{"$ref":"#/components/schemas/Quantity","description":"Actuator pitch d (mm)."},"phaseVarianceOpen":{"$ref":"#/components/schemas/Quantity","description":"Uncorrected phase variance (rad²)."},"phaseVarianceFitting":{"$ref":"#/components/schemas/Quantity","description":"DM fitting variance (rad²)."},"phaseVarianceServo":{"$ref":"#/components/schemas/Quantity","description":"Servo-lag variance (rad²)."},"phaseVarianceAo":{"$ref":"#/components/schemas/Quantity","description":"Residual variance with AO (rad²)."},"strehlNoAo":{"$ref":"#/components/schemas/Quantity","description":"Strehl ratio, no AO."},"strehlAo":{"$ref":"#/components/schemas/Quantity","description":"Strehl ratio, with AO."},"aoImprovement":{"$ref":"#/components/schemas/Quantity","description":"AO improvement (Strehl ratio) (×)."},"rytovVariance":{"$ref":"#/components/schemas/Quantity","description":"Rytov variance σ_R²."}},"required":["friedParameter","diameterOverR0","greenwoodFrequency","isoplanaticAngle","actuatorPitch","phaseVarianceOpen","phaseVarianceFitting","phaseVarianceServo","phaseVarianceAo","strehlNoAo","strehlAo","aoImprovement","rytovVariance"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/aperture-averaging":{"get":{"operationId":"free_space_comms_aperture_averaging","summary":"Aperture Averaging","description":"Weak-fluctuation aperture-averaging factor for plane and spherical waves (exact integrals for a hard circular or Gaussian aperture, and Andrews' fits), Rytov variance and the all-regime scintillation index versus receiver diameter. Model tier: Textbook approximation. Weak fluctuations, constant Cn²: exact Kolmogorov integrals for a hard circular aperture (plane wave) and a Gaussian aperture (plane and spherical); Andrews 1992 fits shown. All-regime σ_I² is an interpolation.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/aperture-averaging"},"parameters":[{"name":"aperture","in":"query","required":false,"description":"Aperture model: hard = Hard circular (a lens or telescope); gaussian = Gaussian (exp(−κ²D²/16) model).","schema":{"type":"string","enum":["hard","gaussian"],"default":"hard"}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":200,"maximum":20000,"default":1550}},{"name":"rxDiameter","in":"query","required":false,"description":"Receiver diameter (cm).","schema":{"type":"number","minimum":0,"maximum":100,"default":10}},{"name":"cn2","in":"query","required":false,"description":"Cn² (m^(−2/3)).","schema":{"type":"number","minimum":1e-18,"maximum":1e-11,"default":1e-15}},{"name":"distance","in":"query","required":false,"description":"Link distance (km).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"fresnelZone":{"$ref":"#/components/schemas/Quantity","description":"Fresnel zone √(L/k) (cm)."},"apertureParameter":{"$ref":"#/components/schemas/Quantity","description":"Aperture parameter d² = kD²/4L."},"factorHardPlane":{"$ref":"#/components/schemas/Quantity","description":"A, plane wave, hard aperture."},"factorGaussianPlane":{"$ref":"#/components/schemas/Quantity","description":"A, plane wave, Gaussian aperture."},"factorGaussianSpherical":{"$ref":"#/components/schemas/Quantity","description":"A, spherical wave, Gaussian aperture."},"factorAndrewsPlane":{"$ref":"#/components/schemas/Quantity","description":"A, plane wave, Andrews 1992 fit."},"factorAndrewsSpherical":{"$ref":"#/components/schemas/Quantity","description":"A, spherical wave, Andrews 1992 fit."},"rytovVariance":{"$ref":"#/components/schemas/Quantity","description":"Rytov variance σ_R² (plane)."},"rytovVarianceSpherical":{"$ref":"#/components/schemas/Quantity","description":"Rytov variance β₀² (spherical)."},"weakScintillationIndex":{"$ref":"#/components/schemas/Quantity","description":"Weak σ_I²(D) = A·σ_R² (selected aperture)."},"scintillationIndex":{"$ref":"#/components/schemas/Quantity","description":"All-regime σ_I²(D), plane wave."},"reductionDb":{"$ref":"#/components/schemas/Quantity","description":"Scintillation reduction 10·log10(1/A) (selected aperture) (dB)."}},"required":["fresnelZone","apertureParameter","factorHardPlane","factorGaussianPlane","factorGaussianSpherical","factorAndrewsPlane","factorAndrewsSpherical","rytovVariance","rytovVarianceSpherical","weakScintillationIndex","scintillationIndex","reductionDb"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/atmospheric-loss":{"get":{"operationId":"free_space_comms_atmospheric_loss","summary":"FSO Atmospheric Loss","description":"Visibility-based aerosol (Kim) and Rayleigh scattering: attenuation in dB/km, total path loss and transmittance of a free-space optical link. Model tier: Textbook approximation. Rayleigh scattering of standard sea-level air plus an empirical aerosol law scaled from the visibility, fitted up to 1.55 µm. Not modelled: molecular absorption bands, rain and snow, turbulence, geometric loss.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/atmospheric-loss"},"parameters":[{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":400,"maximum":2500,"default":1550}},{"name":"visibility","in":"query","required":false,"description":"Meteorological visibility (km).","schema":{"type":"number","minimum":0.01,"maximum":300,"default":23}},{"name":"linkLength","in":"query","required":false,"description":"Link length (km).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"attenuation":{"$ref":"#/components/schemas/Quantity","description":"Total attenuation α (dB/km)."},"rayleighAttenuation":{"$ref":"#/components/schemas/Quantity","description":"Rayleigh (molecular) attenuation (dB/km)."},"aerosolAttenuation":{"$ref":"#/components/schemas/Quantity","description":"Aerosol attenuation (Kim) (dB/km)."},"pathLoss":{"$ref":"#/components/schemas/Quantity","description":"Path loss (dB)."},"transmittance":{"$ref":"#/components/schemas/Quantity","description":"Transmittance (%)."},"kimExponent":{"$ref":"#/components/schemas/Quantity","description":"Kim exponent q."}},"required":["attenuation","rayleighAttenuation","aerosolAttenuation","pathLoss","transmittance","kimExponent"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/background-noise":{"get":{"operationId":"free_space_comms_background_noise","summary":"FSO Background Noise","description":"Background power, photon rate and photoelectrons per bit from clear sky, clouds or the Sun for a given field of view, aperture, filter passband and wavelength (850–1550 nm). Model tier: Textbook approximation. P = L·A·Ω·Δλ·T·η with Ω = π sin²(FOV/2). Sky and cloud radiances are typical daytime values at 850–1550 nm (real skies vary ≈ ×10; no night sky or Moon); the Sun is a 5772 K disc above the atmosphere (±20 %). Out-of-band light is fully blocked.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/background-noise"},"parameters":[{"name":"scene","in":"query","required":false,"description":"Background in the field of view: horizon = Clear sky near the horizon; elevation30 = Clear sky, 30° elevation; zenith = Clear sky, zenith; sunlitCloud = Sunlit cloud; overcast = Overcast cloud; sun = Sun disc in the field of view.","schema":{"type":"string","enum":["horizon","elevation30","zenith","sunlitCloud","overcast","sun"],"default":"horizon"}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":850,"maximum":1550,"default":1550}},{"name":"rxFOV","in":"query","required":false,"description":"Full field of view (mrad).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":1}},{"name":"rxBandwidth","in":"query","required":false,"description":"Filter passband Δλ (nm).","schema":{"type":"number","minimum":0.001,"maximum":100,"default":1}},{"name":"rxArea","in":"query","required":false,"description":"Aperture area (cm²).","schema":{"type":"number","minimum":0.001,"maximum":100000,"default":78.5}},{"name":"filterT","in":"query","required":false,"description":"Filter in-band transmission.","schema":{"type":"number","minimum":0,"maximum":1,"default":0.9}},{"name":"opticsEff","in":"query","required":false,"description":"Other optics efficiency η_opt.","schema":{"type":"number","minimum":0,"maximum":1,"default":0.8}},{"name":"qe","in":"query","required":false,"description":"Detector quantum efficiency.","schema":{"type":"number","minimum":0,"maximum":1,"default":0.8}},{"name":"bitRate","in":"query","required":false,"description":"Bit rate (Gb/s).","schema":{"type":"number","minimum":0.000001,"maximum":1000,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"radiance":{"$ref":"#/components/schemas/Quantity","description":"Spectral radiance L_λ (W m⁻² sr⁻¹ nm⁻¹)."},"solidAngle":{"$ref":"#/components/schemas/Quantity","description":"Solid angle used Ω (sr)."},"power":{"$ref":"#/components/schemas/Quantity","description":"Background power at the detector (W)."},"powerDbm":{"$ref":"#/components/schemas/Quantity","description":"Background power at the detector (dBm)."},"photonRate":{"$ref":"#/components/schemas/Quantity","description":"Photon rate at the detector (s⁻¹)."},"electronRate":{"$ref":"#/components/schemas/Quantity","description":"Photoelectron rate (s⁻¹)."},"photoelectronsPerBit":{"$ref":"#/components/schemas/Quantity","description":"Background photoelectrons per bit."}},"required":["radiance","solidAngle","power","powerDbm","photonRate","electronRate","photoelectronsPerBit"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/beam-wander":{"get":{"operationId":"free_space_comms_beam_wander","summary":"Beam Wander","description":"RMS turbulence-induced wander of a collimated Gaussian beam, its angular jitter and the mean on-axis loss versus Cn², path length and beam radius. Model tier: Textbook approximation. Weak fluctuations (σ_R² < 1, 2W₀ < r₀), collimated Gaussian beam, constant Cn², infinite outer scale: ⟨r_c²⟩ = 2.42 Cn²L³W₀^(−1/3)·F, where F (our derivation) keeps the beam's diffraction along the path: F = 0.98 at L = 1.2 z_R, 0.74 at 12 z_R. Mean on-axis loss 10 log(1 + 2⟨r_c²⟩/W²), W the diffracted beam radius.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/beam-wander"},"parameters":[{"name":"cn2","in":"query","required":false,"description":"Refractive-index structure constant Cn² (m⁻²ᐟ³).","schema":{"type":"number","minimum":1e-18,"maximum":1e-11,"default":1e-14}},{"name":"pathLength","in":"query","required":false,"description":"Path length (km).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":1}},{"name":"beamRadius","in":"query","required":false,"description":"Transmit beam radius W₀ (cm).","schema":{"type":"number","minimum":0.01,"maximum":100,"default":2}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":200,"maximum":20000,"default":1550}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"variance":{"$ref":"#/components/schemas/Quantity","description":"Wander variance ⟨r_c²⟩ (m²)."},"rmsWander":{"$ref":"#/components/schemas/Quantity","description":"RMS wander √⟨r_c²⟩ (cm)."},"angularWander":{"$ref":"#/components/schemas/Quantity","description":"Angular RMS wander (µrad)."},"beamRadiusAtRx":{"$ref":"#/components/schemas/Quantity","description":"Beam radius W(L) (cm)."},"lossDb":{"$ref":"#/components/schemas/Quantity","description":"Mean on-axis loss (dB)."},"rytovVariance":{"$ref":"#/components/schemas/Quantity","description":"Rytov variance σ_R² (plane wave)."},"friedParameter":{"$ref":"#/components/schemas/Quantity","description":"Fried parameter r₀ (plane wave) (cm)."},"diffractionFactor":{"$ref":"#/components/schemas/Quantity","description":"Diffraction factor F."}},"required":["variance","rmsWander","angularWander","beamRadiusAtRx","lossDb","rytovVariance","friedParameter","diffractionFactor"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/ber":{"get":{"operationId":"free_space_comms_ber","summary":"Photon-Counting BER (OOK and DPSK)","description":"Exact Poisson bit error rate of photon-counting OOK and DPSK receivers versus detected photons per bit and dark plus background counts. Model tier: Exact. Exact for an ideal photon-counting receiver: equiprobable bits, Poisson signal and noise counts. Not modelled: dead time, intersymbol interference, timing jitter or interferometer phase error.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/ber"},"parameters":[{"name":"photons","in":"query","required":false,"description":"Detected signal photons per bit (average).","schema":{"type":"number","minimum":0.1,"maximum":100000,"default":100}},{"name":"darkCount","in":"query","required":false,"description":"Dark plus background counts per bit slot (per detector).","schema":{"type":"number","minimum":0,"maximum":10000,"default":100}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"berOok":{"$ref":"#/components/schemas/Quantity","description":"BER, OOK."},"berDpsk":{"$ref":"#/components/schemas/Quantity","description":"BER, DPSK."},"pulsePhotons":{"$ref":"#/components/schemas/Quantity","description":"Photons per OOK 1 pulse."},"ookThreshold":{"$ref":"#/components/schemas/Quantity","description":"OOK decision threshold (ML): decide 1 at this many counts or more (counts)."},"requiredOok1e3":{"$ref":"#/components/schemas/Quantity","description":"OOK photons per bit for BER 1e-3."},"requiredOok1e6":{"$ref":"#/components/schemas/Quantity","description":"OOK photons per bit for BER 1e-6."},"requiredOok1e9":{"$ref":"#/components/schemas/Quantity","description":"OOK photons per bit for BER 1e-9."},"requiredDpsk1e3":{"$ref":"#/components/schemas/Quantity","description":"DPSK photons per bit for BER 1e-3."},"requiredDpsk1e6":{"$ref":"#/components/schemas/Quantity","description":"DPSK photons per bit for BER 1e-6."},"requiredDpsk1e9":{"$ref":"#/components/schemas/Quantity","description":"DPSK photons per bit for BER 1e-9."}},"required":["berOok","berDpsk","pulsePhotons","ookThreshold","requiredOok1e3","requiredOok1e6","requiredOok1e9","requiredDpsk1e3","requiredDpsk1e6","requiredDpsk1e9"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/bpsk-qpsk":{"get":{"operationId":"free_space_comms_bpsk_qpsk","summary":"BPSK and QPSK Error Rates","description":"Bit and symbol error rates of BPSK, Gray-coded QPSK and OQPSK versus Eb/N0, with spectral efficiency, bandwidth, and the shot-noise-limited coherent receive power and margin. Model tier: Textbook approximation. Exact error rates for ideal coherent detection in AWGN. Required power at the LO shot-noise limit, N₀ = hν/η (heterodyne) or hν/2η (homodyne BPSK); no thermal noise, LO RIN or ASE.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/bpsk-qpsk"},"parameters":[{"name":"modulation","in":"query","required":false,"description":"Modulation: BPSK = BPSK; QPSK = QPSK; OQPSK = OQPSK.","schema":{"type":"string","enum":["BPSK","QPSK","OQPSK"],"default":"BPSK"}},{"name":"receiver","in":"query","required":false,"description":"Coherent receiver (single-quadrature homodyne only helps BPSK): heterodyne = Heterodyne / intradyne (two quadratures); homodyne = Single-quadrature homodyne (BPSK only).","schema":{"type":"string","enum":["heterodyne","homodyne"],"default":"heterodyne"}},{"name":"ebn0dB","in":"query","required":false,"description":"Eb/N0 (dB).","schema":{"type":"number","minimum":-10,"maximum":30,"default":10}},{"name":"dataRate","in":"query","required":false,"description":"Data rate (Gbps).","schema":{"type":"number","minimum":0.000001,"maximum":10000,"default":1}},{"name":"rxPower","in":"query","required":false,"description":"Received power (dBm).","schema":{"type":"number","minimum":-100,"maximum":30,"default":-50}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":200,"maximum":20000,"default":1550}},{"name":"eta","in":"query","required":false,"description":"Photodiode quantum efficiency η.","schema":{"type":"number","minimum":0.01,"maximum":1,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"ber":{"$ref":"#/components/schemas/Quantity","description":"Bit error rate (BPSK, Gray QPSK, OQPSK)."},"ser":{"$ref":"#/components/schemas/Quantity","description":"Symbol error rate."},"spectralEfficiency":{"$ref":"#/components/schemas/Quantity","description":"Spectral efficiency (bit/s/Hz)."},"symbolRate":{"$ref":"#/components/schemas/Quantity","description":"Symbol rate (Gbaud)."},"bandwidth":{"$ref":"#/components/schemas/Quantity","description":"Required bandwidth (Nyquist) (GHz)."},"shotNoiseN0":{"$ref":"#/components/schemas/Quantity","description":"Shot-noise N₀ (dBm/Hz)."},"photonsPerBit":{"$ref":"#/components/schemas/Quantity","description":"Photons per bit at the required power."},"requiredPower":{"$ref":"#/components/schemas/Quantity","description":"Required received power (dBm)."},"ebn0AtRx":{"$ref":"#/components/schemas/Quantity","description":"Eb/N0 at the received power (dB)."},"berAtRx":{"$ref":"#/components/schemas/Quantity","description":"BER at that Eb/N0."},"margin":{"$ref":"#/components/schemas/Quantity","description":"Power margin (dB)."},"requiredEbN0For1e3":{"$ref":"#/components/schemas/Quantity","description":"Eb/N0 required for BER 1e-3 (dB)."},"requiredEbN0For1e5":{"$ref":"#/components/schemas/Quantity","description":"Eb/N0 required for BER 1e-5 (dB)."},"requiredEbN0For1e6":{"$ref":"#/components/schemas/Quantity","description":"Eb/N0 required for BER 1e-6 (dB)."},"requiredEbN0For1e9":{"$ref":"#/components/schemas/Quantity","description":"Eb/N0 required for BER 1e-9 (dB)."}},"required":["ber","ser","spectralEfficiency","symbolRate","bandwidth","shotNoiseN0","photonsPerBit","requiredPower","ebn0AtRx","berAtRx","margin","requiredEbN0For1e3","requiredEbN0For1e5","requiredEbN0For1e6","requiredEbN0For1e9"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/channel-capacity":{"get":{"operationId":"free_space_comms_channel_capacity","summary":"FSO Channel Capacity","description":"Shannon capacity and the net rate of OOK, BPSK, QPSK, 8-PSK and 16-QAM after hard-decision FEC, gated on their exact AWGN bit error rates, with the required SNR and the gap to Shannon. Model tier: Exact. Exact for coherent detection in complex AWGN: Gray mapping, Nyquist signalling (SNR = Es/N0). FEC is reduced to an input-BER limit. Direct-detection and photon-counting channels have other capacities.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/channel-capacity"},"parameters":[{"name":"modulation","in":"query","required":false,"description":"Modulation (Gray-coded, coherent): OOK = OOK; BPSK = BPSK; QPSK = QPSK; 8PSK = 8PSK; 16QAM = 16QAM.","schema":{"type":"string","enum":["OOK","BPSK","QPSK","8PSK","16QAM"],"default":"QPSK"}},{"name":"bandwidth","in":"query","required":false,"description":"Bandwidth B (GHz).","schema":{"type":"number","minimum":0.000001,"maximum":1000,"default":1}},{"name":"snrDB","in":"query","required":false,"description":"SNR = Es/N0 (dB).","schema":{"type":"number","minimum":-20,"maximum":40,"default":20}},{"name":"fecOverhead","in":"query","required":false,"description":"FEC overhead (%).","schema":{"type":"number","minimum":0,"maximum":100,"default":7}},{"name":"berLimit","in":"query","required":false,"description":"FEC input-BER limit.","schema":{"type":"number","minimum":1e-15,"maximum":0.2,"default":0.0038}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"capacity":{"$ref":"#/components/schemas/Quantity","description":"Shannon capacity (Gb/s)."},"shannonSpectralEfficiency":{"$ref":"#/components/schemas/Quantity","description":"Shannon spectral efficiency (b/s/Hz)."},"netRate":{"$ref":"#/components/schemas/Quantity","description":"Net rate of the modulation after FEC (0 if the uncoded BER exceeds the limit) (Gb/s)."},"uncodedBer":{"$ref":"#/components/schemas/Quantity","description":"Uncoded bit error rate."},"requiredSnr":{"$ref":"#/components/schemas/Quantity","description":"Required Es/N0 for the BER limit (dB)."},"gapToShannon":{"$ref":"#/components/schemas/Quantity","description":"Gap to Shannon at the same net spectral efficiency (dB)."},"shannonEbN0Limit":{"$ref":"#/components/schemas/Quantity","description":"Shannon Eb/N0 limit at the net spectral efficiency (dB)."},"minimumOverhead":{"$ref":"#/components/schemas/Quantity","description":"Smallest overhead of a hard-decision code at the BER limit (%)."}},"required":["capacity","shannonSpectralEfficiency","netRate","uncodedBer","requiredSnr","gapToShannon","shannonEbN0Limit","minimumOverhead"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/diversity-reception":{"get":{"operationId":"free_space_comms_diversity_reception","summary":"Diversity Reception","description":"Required fade margin and diversity gain of selection, equal-gain and maximal-ratio combining with N receivers, from the irradiance correlation at their separation in weak turbulence. Model tier: Textbook approximation. Weak fluctuations: log-normal receivers correlated by the plane-wave irradiance covariance at one separation d. SC, EGC and MRC outages are exact for that model (numerical convolution, < 0.001 dB).","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/diversity-reception"},"parameters":[{"name":"combiner","in":"query","required":false,"description":"Combiner: sc = Selection; egc = Equal-gain; mrc = Maximal-ratio.","schema":{"type":"string","enum":["sc","egc","mrc"],"default":"egc"}},{"name":"numRx","in":"query","required":false,"description":"Number of receivers N.","schema":{"type":"number","minimum":1,"maximum":8,"default":2}},{"name":"separation","in":"query","required":false,"description":"Receiver separation (cm).","schema":{"type":"number","minimum":0,"maximum":1000,"default":5}},{"name":"c2n","in":"query","required":false,"description":"Refractive-index structure constant Cn² (m⁻²ᐟ³).","schema":{"type":"number","minimum":1e-18,"maximum":1e-11,"default":1e-14}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":200,"maximum":20000,"default":1550}},{"name":"range","in":"query","required":false,"description":"Link distance (km).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":1}},{"name":"pOut","in":"query","required":false,"description":"Target outage probability P_out.","schema":{"type":"number","minimum":1e-12,"maximum":0.1,"default":0.000001}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"rytovVariance":{"$ref":"#/components/schemas/Quantity","description":"Rytov variance σ_R²."},"scintillationIndex":{"$ref":"#/components/schemas/Quantity","description":"Scintillation index σ_I² (point receiver)."},"irradianceCorrelation":{"$ref":"#/components/schemas/Quantity","description":"Irradiance correlation b_I at the separation."},"logIrradianceCorrelation":{"$ref":"#/components/schemas/Quantity","description":"Log-irradiance correlation ρ_ln."},"singleMargin":{"$ref":"#/components/schemas/Quantity","description":"Fade margin, single receiver (dB)."},"combinerMargin":{"$ref":"#/components/schemas/Quantity","description":"Fade margin, selected combiner with N receivers (dB)."},"diversityGain":{"$ref":"#/components/schemas/Quantity","description":"Diversity gain (single margin − combiner margin) (dB)."}},"required":["rytovVariance","scintillationIndex","irradianceCorrelation","logIrradianceCorrelation","singleMargin","combinerMargin","diversityGain"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/eye-safety-fso":{"get":{"operationId":"free_space_comms_eye_safety_fso","summary":"FSO Eye Safety","description":"NOHD, IEC 60825-1 laser class and exposure margin at a chosen distance for a free-space optical transmitter, on the ICNIRP 2013 eye limits with a diverging Gaussian beam. Model tier: Exact. ICNIRP 2013 eye limits for one CW exposure up to t; Gaussian beam averaged over each limit's aperture (its peak if under 1 mm (1/e) on the cornea below 0.35 s, ICNIRP Table 5 note c), growing as a + rφ; IEC 60825-1 class. Not modelled: atmosphere, optical aids, scintillation, pulsed modulation.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/eye-safety-fso"},"parameters":[{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":180,"maximum":1000000,"default":1550}},{"name":"txPower","in":"query","required":false,"description":"TX power (mW).","schema":{"type":"number","minimum":0,"maximum":10000000,"default":100}},{"name":"beamDia","in":"query","required":false,"description":"Beam diameter at the aperture (1/e²) (mm).","schema":{"type":"number","minimum":0,"maximum":1000,"default":10}},{"name":"beamDivergence","in":"query","required":false,"description":"Beam divergence (1/e² full angle) (mrad).","schema":{"type":"number","minimum":0,"maximum":1000,"default":0.5}},{"name":"exposureTime","in":"query","required":false,"description":"Exposure time (s).","schema":{"type":"number","minimum":1e-9,"maximum":30000,"default":10}},{"name":"distance","in":"query","required":false,"description":"Check distance (m).","schema":{"type":"number","minimum":0,"maximum":1000000,"default":2}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"nohd":{"$ref":"#/components/schemas/Quantity","description":"Nominal ocular hazard distance (0: within every limit at the aperture) (m)."},"margin":{"$ref":"#/components/schemas/Quantity","description":"Margin at the check distance: largest power within every limit ÷ TX power (below 1 exceeds a limit)."},"maxPowerAtDistance":{"$ref":"#/components/schemas/Quantity","description":"Largest power within every limit at the check distance (mW)."},"beamDiameterAtDistance":{"$ref":"#/components/schemas/Quantity","description":"1/e² beam diameter at the check distance (a + rφ) (mm)."}},"required":["nohd","margin","maxPowerAtDistance","beamDiameterAtDistance"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/fade-probability":{"get":{"operationId":"free_space_comms_fade_probability","summary":"FSO Fade Probability","description":"Gamma-gamma and log-normal fade probability versus fade threshold for an FSO link in turbulence, with aperture averaging and N uncorrelated receivers. Model tier: Textbook approximation. Gamma-gamma irradiance with α, β from the aperture-averaged plane-wave log variances (weak to strong turbulence); log-normal for comparison. P^N assumes N uncorrelated receivers with selection combining.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/fade-probability"},"parameters":[{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":200,"maximum":20000,"default":1550}},{"name":"cn2","in":"query","required":false,"description":"Refractive-index structure constant Cn² (m⁻²ᐟ³).","schema":{"type":"number","minimum":1e-18,"maximum":1e-11,"default":1e-15}},{"name":"distance","in":"query","required":false,"description":"Link distance (km).","schema":{"type":"number","minimum":0.001,"maximum":1000,"default":1}},{"name":"fadeThreshold","in":"query","required":false,"description":"Fade threshold below the mean (dB).","schema":{"type":"number","minimum":0,"maximum":40,"default":10}},{"name":"rxDiameter","in":"query","required":false,"description":"Receiver diameter (0 = point receiver) (cm).","schema":{"type":"number","minimum":0,"maximum":50,"default":0}},{"name":"numChannels","in":"query","required":false,"description":"Independent receivers N (selection combining).","schema":{"type":"number","minimum":1,"maximum":8,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"rytovVariance":{"$ref":"#/components/schemas/Quantity","description":"Rytov variance σ_R²."},"scintillationIndex":{"$ref":"#/components/schemas/Quantity","description":"Scintillation index σ_I²(D)."},"alpha":{"$ref":"#/components/schemas/Quantity","description":"Gamma-gamma α."},"beta":{"$ref":"#/components/schemas/Quantity","description":"Gamma-gamma β."},"fadeProbabilityGammaGamma":{"$ref":"#/components/schemas/Quantity","description":"P(fade deeper than the threshold), gamma-gamma."},"fadeProbabilityLognormal":{"$ref":"#/components/schemas/Quantity","description":"P(fade deeper than the threshold), log-normal."},"fadeProbabilityDiversity":{"$ref":"#/components/schemas/Quantity","description":"P^N for N uncorrelated receivers, selection combining."}},"required":["rytovVariance","scintillationIndex","alpha","beta","fadeProbabilityGammaGamma","fadeProbabilityLognormal","fadeProbabilityDiversity"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/v1/free-space-comms/fog-attenuation":{"get":{"operationId":"free_space_comms_fog_attenuation","summary":"Fog Attenuation","description":"Optical attenuation in fog from visibility with the Kim, Kruse or Al Naboulsi (advection, radiation fog) model: specific attenuation in dB/km, path loss and transmittance. Model tier: Textbook approximation. Empirical visibility laws: Kim or Kruse aerosol exponents, or Al Naboulsi's advection and radiation fog fits (690–1550 nm, V = 50–1000 m). They give a mean loss; measured fog loss scatters widely around it.","externalDocs":{"url":"https://photonicscalculators.com/free-space-comms/fog-attenuation"},"parameters":[{"name":"model","in":"query","required":false,"description":"Model: kim = Kim; kruse = Kruse; advection = Al Naboulsi, advection fog; radiation = Al Naboulsi, radiation fog.","schema":{"type":"string","enum":["kim","kruse","advection","radiation"],"default":"kim"}},{"name":"visibility","in":"query","required":false,"description":"Meteorological visibility V (km).","schema":{"type":"number","minimum":0.01,"maximum":100,"default":0.5}},{"name":"wavelength","in":"query","required":false,"description":"Wavelength (nm).","schema":{"type":"number","minimum":400,"maximum":2000,"default":1550}},{"name":"range","in":"query","required":false,"description":"Link range (km).","schema":{"type":"number","minimum":0.001,"maximum":50,"default":1}}],"responses":{"200":{"description":"Results at the given inputs; inputs left out take the page's defaults.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Result"},{"type":"object","properties":{"outputs":{"type":"object","properties":{"extinction":{"$ref":"#/components/schemas/Quantity","description":"Extinction σ (e-folds of power per length) (km⁻¹)."},"specificAttenuation":{"$ref":"#/components/schemas/Quantity","description":"Specific attenuation 10 log₁₀(e) σ (dB/km)."},"pathLoss":{"$ref":"#/components/schemas/Quantity","description":"Path loss over the range (dB)."},"transmittance":{"$ref":"#/components/schemas/Quantity","description":"Transmittance over the range (%)."},"exponentQ":{"$ref":"#/components/schemas/Quantity","description":"Size-distribution exponent q (Kim, Kruse only)."}},"required":["extinction","specificAttenuation","pathLoss","transmittance","exponentQ"]}}}]}}}},"400":{"$ref":"#/components/responses/BadInput"},"429":{"$ref":"#/components/responses/TooMany"}}}}},"components":{"schemas":{"Quantity":{"type":"object","required":["label","value","unit","siValue","siUnit"],"properties":{"label":{"type":"string"},"value":{"type":["number","null"],"description":"In `unit`, the page's unit. null: no result (see warnings)."},"unit":{"type":"string","description":"\"\" for a pure number."},"siValue":{"type":["number","null"]},"siUnit":{"type":"string"}}},"Choice":{"type":"object","required":["label","value"],"properties":{"label":{"type":"string"},"value":{"type":"string","description":"The chosen option's value."}}},"Result":{"type":"object","required":["calculator","pageUrl","inputs","outputs","warnings"],"properties":{"calculator":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"tier":{"type":["string","null"],"enum":["exact","textbook","illustrative",null]},"tierLabel":{"type":"string"},"tierDefinition":{"type":"string"},"modelNote":{"type":["string","null"]},"references":{"type":"array","items":{"type":"object","properties":{"citation":{"type":"string"},"url":{"type":"string"}}}},"knownIssue":{"type":"string","description":"An error found and not yet fixed."}}},"pageUrl":{"type":"string","description":"The page with these inputs."},"inputs":{"type":"object","additionalProperties":{"oneOf":[{"$ref":"#/components/schemas/Quantity"},{"$ref":"#/components/schemas/Choice"}]}},"outputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Quantity"}},"warnings":{"type":"array","items":{"type":"string"}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}},"responses":{"BadInput":{"description":"Unknown input, not a number, outside the page's range, or not one of the options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooMany":{"description":"Rate limit; try again in a minute.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}