43 static int selfTest(
int argc = 0,
char **argv =
nullptr);
83 [[deprecated(
"Use setAtmosphericConditions() and parameter-free getSolarFlux() instead")]] [[nodiscard]]
float getSolarFlux(
float pressure_Pa,
float temperature_K,
float humidity_rel,
float turbidity)
const;
96 [[deprecated(
"Use setAtmosphericConditions() and parameter-free getSolarFluxPAR() instead")]] [[nodiscard]]
float getSolarFluxPAR(
float pressure_Pa,
float temperature_K,
float humidity_rel,
float turbidity)
const;
109 [[deprecated(
"Use setAtmosphericConditions() and parameter-free getSolarFluxNIR() instead")]] [[nodiscard]]
float getSolarFluxNIR(
float pressure_Pa,
float temperature_K,
float humidity_rel,
float turbidity)
const;
120 [[deprecated(
"Use setAtmosphericConditions() and parameter-free getDiffuseFraction() instead")]] [[nodiscard]]
float getDiffuseFraction(
float pressure_Pa,
float temperature_K,
float humidity_rel,
float turbidity)
const;
130 [[deprecated(
"Use setAtmosphericConditions() and parameter-free getAmbientLongwaveFlux() instead")]] [[nodiscard]]
float getAmbientLongwaveFlux(
float temperature_K,
float humidity_rel)
const;
169 void getAtmosphericConditions(
float &pressure_Pa,
float &temperature_K,
float &humidity_rel,
float &turbidity)
const;
281 [[nodiscard]]
bool pragueSkyModelNeedsUpdate(
float ground_albedo = 0.33f,
float sun_tolerance = 0.01f,
float turbidity_tolerance = 0.02f,
float albedo_tolerance = 0.05f)
const;
290 bool issolarpositionoverridden =
false;
293 std::string cloudcalibrationlabel;
296 std::unique_ptr<helios::PragueSkyModelInterface> prague_model;
297 bool prague_enabled =
false;
301 float cached_turbidity = -1.0f;
302 float cached_albedo = -1.0f;
307 void fitAngularParametersAtWavelength(
float wavelength,
float visibility_km,
float albedo,
const helios::vec3 &sun_dir,
float &L_zenith,
float &circ_str,
float &circ_width,
float &horiz_bright,
float &normalization);
309 [[nodiscard]]
float fitCircumsolarWidth(
float L1,
float L2,
float h1,
float h2,
float gamma1,
float gamma2)
const;
311 [[nodiscard]]
float computeAngularNormalization(
float circ_str,
float circ_width,
float horiz_bright)
const;
317 void GueymardSolarModel(
float pressure,
float temperature,
float humidity,
float turbidity,
float &Eb_PAR,
float &Eb_NIR,
float &fdiff)
const;
319 void applyCloudCalibration(
float &R_calc_Wm2,
float &fdiff_calc)
const;
321 static float turbidityResidualFunction(
float turbidity, std::vector<float> ¶meters,
const void *a_solarpositionmodel);
326 struct SpectralData {
327 std::vector<float> wavelengths_nm;
328 std::vector<float> toa_irradiance;
329 std::vector<float> h2o_coef;
330 std::vector<float> h2o_exp;
331 std::vector<float> o3_xsec;
332 std::vector<float> o2_coef;
335 void loadFromDirectory(
const std::string &data_path);
338 [[nodiscard]]
static float interpolate(
const std::vector<float> &x,
const std::vector<float> &y,
float x_val);
342 [[nodiscard]]
float calculateGeometricFactor(
int julian_day)
const;
345 void calculateRayleighTransmittance(
const std::vector<float> &wavelengths_um,
float mu0,
float pressure_ratio, std::vector<float> &tdir, std::vector<float> &tglb, std::vector<float> &tdif, std::vector<float> &atm_albedo)
const;
348 void calculateAerosolTransmittance(
const std::vector<float> &wavelengths_um,
float mu0,
float alpha,
float beta,
float w0,
float g, std::vector<float> &tdir, std::vector<float> &tglb, std::vector<float> &tdif,
349 std::vector<float> &atm_albedo)
const;
352 void calculateMixtureTransmittance(
const std::vector<float> &wavelengths_um,
float mu0,
float pressure_Pa,
float turbidity_beta,
float angstrom_alpha,
float aerosol_ssa,
float aerosol_g,
bool coupling, std::vector<float> &tglb,
353 std::vector<float> &tdir, std::vector<float> &tdif, std::vector<float> &atm_albedo)
const;
356 void calculateWaterVaporTransmittance(
const SpectralData &data,
float mu0,
float water_vapor_cm, std::vector<float> &transmittance)
const;
359 void calculateOzoneTransmittance(
const SpectralData &data,
float mu0,
float ozone_DU, std::vector<float> &transmittance)
const;
362 void calculateOxygenTransmittance(
const SpectralData &data,
float mu0, std::vector<float> &transmittance)
const;
365 void calculateSpectralIrradianceComponents(std::vector<helios::vec2> &global_spectrum, std::vector<helios::vec2> &direct_spectrum, std::vector<helios::vec2> &diffuse_spectrum,
float resolution_nm)
const;