= NERC-ARF settings for Py6S = A complete explanation of the parameters used on the Py6S model can be found here: https://py6s.readthedocs.org/en/latest/params.html [[BR]] Please note that most of the parameter are bound to the area of study and are defined separately if a exhaustive analysis of the spectra is needed. NERC-ARF have chosen the simplest Py6S predefined parameters to plot vegetation spectra for any flight. The output will differ considerably form the recorded spectra by the sensor but will have the usable features to compare our data and give us a useful tool to spot problems during the processing of hyperspectral level1b files across all areas worldwide covered by NERC-ARF. [[BR]] [[BR]] '''This section of the wiki will set an overview of those parameters used at ARSF. The Py6S model is essentially defined by the set of:[[BR]]''' 0. s = Py6S.SixS() (This only creates the object) [[BR]] 1. s.ground_reflectance = Py6S.GroundReflectance.HomogeneousLambertian(Py6S.GroundReflectance.GreenVegetation) [[BR]] 2. s.atmos_profile = Py6S.AtmosProfile.PredefinedType(Py6S.AtmosProfile.MidlatitudeSummer) [[BR]] 3. s.aeroprofile = Py6S.AeroProfile.PredefinedType(Py6S.AeroProfile.Continental) [[BR]] 4. s.geometry = Py6S.Geometry.User() [[BR]] 5. s.geometry.from_time_and_location(lat, lon, flight_time, view_z, view_a) [[BR]] 6. atmos_corr = Py6S.AtmosCorr.NoAtmosCorr() [[BR]] 7. s.altitudes.set_sensor_custom_altitude(plane_altitude) [[BR]] 8. py6s_wv, py6s_output = Py6S.SixSHelpers.Wavelengths.run_wavelengths(s, wavelengths_array, output_name='apparent_radiance', verbose=False, n=PY6S_NUM_CORES) [[BR]] === 1. Py6S.GroundReflectance.HomogeneousLambertian(Py6S.GroundReflectance.GreenVegetation)=== Provides parameterisation for heterogeneous Lambertian (ie. uniform BRDF) surfaces. The ground reflectance is the predefined vegetation type unless a ground reflectance file is giving as input. If a given file is given as input, will replace that parameter for the reflectance values at the given wavelengths recorded on the file. === 2. s.atmos_profile = Py6S.AtmosProfile.PredefinedType(Py6S.AtmosProfile.MidlatitudeSummer) === The script has been selected to run with MidlatitudeSummer on the AtmosProfile parameter. Different parameters predefined types of AtmosProfile are: ||MidlatitudeSummer ||MidlatitudeWinter ||NoGaseousAbsorption|| ||PredefinedType ||RadiosondeProfile ||SubarcticSummer|| ||SubarcticWinter ||Tropical ||USStandard1962|| ||UserWaterAndOzone || - ||-|| Since this script is running without an atmospheric correction, the AtmosProfile parameter impact is not noticiable. However, future versions will try to improve the most suitable one depending on the position and the julian day. === 3. s.aeroprofile = Py6S.AeroProfile.PredefinedType(Py6S.AeroProfile.Continental) === The AeroProfile has been set as Predefined Continental having in mind that is the most adequate for the higher amount of flights flown by ARSF. ||AerosolDistribution ||BiomassBurning ||Continental|| ||Desert ||JungePowerLawDistribution ||Maritime|| ||ModifiedGammaDistribution ||MultimodalLogNormalDistribution ||NoAerosols|| ||PredefinedType ||Stratospheric ||SunPhotometerDistribution|| ||Urban ||User ||UserProfile|| In this case, future versions will consider to implement some of those parameters (Desert and Maritime) as input for specific flights. Most of those parameters, such as Stratospheric, does not fit ARSF needs and will not need to be included. === 4. s.geometry = Py6S.Geometry.User() === Stores parameters for a user-defined geometry for 6S. This will allow us to enter our required values on the next line (See Section 5). === 5. s.geometry.from_time_and_location(lat, lon, flight_time, view_z, view_a) === Sets the user geometry to the one given by the flightline. Calculates the possition of the sun and its angles with the sensor and the pixel having as input: -lat -> latitude of the pixel.[[BR]] -lon -> longitude of the pixel.[[BR]] -flight_time -> date.[[BR]] -view_z -> Viewing zenith angle.[[BR]] -view_a -> Viewing azimuth angle. (Measured at pixel, from North direction towards the sensor at the plane) === 6. s.atmos_corr = Py6S.AtmosCorr.NoAtmosCorr() === No atmospheric correction is accounted for while running the Py6S model. === 7. s.altitudes.set_sensor_custom_altitude(plane_altitude) === Set altitude at-sensor radiance, which is equivalent to the plane altitude. === 8. py6s_wv, py6s_output = Py6S.SixSHelpers.Wavelengths.run_wavelengths(s, wavelengths_array, output_name='apparent_radiance', verbose=False, n=PY6S_NUM_CORES) === The wavelengths_array is an array containing all wavelengths recorded by Fenix sensor. The Py6S model is only run for those wavelengths and the output is the expected radiance without atmospheric correction measured at-sensor (plane height). Please note units are (`nW/cm^2) / sr/nm`)