## Appendix A
### Modelling Tools and Code
The class contains methods \"import_instrument\" to import the instrument from a saved JSON; \"export_instrument\" to export the instrument to a JSON, which is called on initialization of an instance of the class; \"normcdf\" to return a proportion from a normal cumulative distribution function for a given location of a normal distribution based on a given mean and standard deviation; \"convolve\" to sample high resolution reference spectra according to instrument specifications; \"simulate_spectra\" to simulate a set of spectra covering all the spatial pixels of the instrument; \"abs_feat\" to derive a set of absorption features from simulated spectra; \"get_band_wl\" to return the wavelength of a band in nanometers based on an input band number; and \"get_band_num\" to return a band number based on an input band wavelength. * Keys_As_Sorted_Floats.py contains the function \"get_key_floats\" that returns a list of band wavelengths as floats and a list of bands as strings based on an input set of dictionary keys. Additionally, contains the function \"get_key_ints\" that returns a list of band wavelengths as integers and a list of bands as strings based on an input set of dictionary keys. * SIF_Estimate.py contains the function \"integrate_SIF\" to return a range of wavelengths for an evaluation of SIF, an estimate of the absolute SIF in each of a list of input bands, and an estimate of the total SIF across all of the input bands. Additionally, contains the function \"get_sos_residual\" that takes an estimated SIF signal and an expected SIF signal and returns the sum of the squared residuals between the two. Additionally, contains the function \"estimate_sif\" that returns the values for SIF at as set of wavelengths, and the residual based on the best fit of an input set of SIF estimates to the SIF simulation key parameters (see Appendix A.2) as independent variables, and the sum of the squared residuals as the response variable. * SIF_Simulation.py contains the function \"simulate_SIF\" to provide a SIF signal derived according to Appendix A.2. Additionally, contains the function \"get_sif\" to provide a SIF estimate at a given wavelength based on a simulated SIF signal. * Spectral_Regions.py contains a function for each spectral region \"in_\" to test whether a given band is in the spectral region in question, returning a True or False. Additionally, contains a function \"all_regions\" that returns a dictionary with keys named for each spectral region, and values of True or False to indicate whether a given band is in the spectral region. * Wavelength_Band_Conversion.py contains the functions \"get_bands_from_wl\" and \"get_bands_from_nums\" that both return lists of band numbers and band wavelengths as floats, based on input lists of wavelengths and band numbers, respectively. Below is an alphabetical list of the scripts that conducted processing and analysis, including a brief description for each. The list excludes those scripts that prepared inputs (\"_Input_Preparation.py) and those that produced figures (Figure_*.py):  
* Absorption_Feature_Search.py executes a series of methods on an instance of the instrument class to establish a set of absorption features for each spatial pixel found in the simulated spectra. The saved JSON file for the instrument is then updated. * Shift_Squeeze_Test.py prints a count of flags based on analysis of an input ASCII file exported from ASCII. The flags are based on analysis of the absorption features in the trailing region of the oxygen A feature, and return a yellow flag when the apex of a feature is found \(\pm\) 1 band from the expected band, and a red flag when the apex is found \(\pm\) 2 bands from the expected band. * Simulate_Spectra.py executes a series of methods on an instance the instrument class to simulate spectra based on each spatial pixel. The saved JSON file for the instrument is then updated.