## Appendix A
### Modelling Tools and Code  
The forward modelling tools used in this project were developed in Python 3.6, and the input data processing and relationship between the modules and scripts to produce the figures are detailed below. Please note that due to a known issue with the \"matplotlib\" module, the figure scripts cannot run in the latest version of Python at the time of writing (11.3.3). The forward modelling and figure production for this study was conducted in a virtual environment running Python 3.6. The modules, scripts, and input files are available at ([[https://glihdata.gsfc.nasa.gov/files/FIREFLY/](https://glihdata.gsfc.nasa.gov/files/FIREFLY/)]([https://glihdata.gsfc.nasa.gov/files/FIREFLY/](https://glihdata.gsfc.nasa.gov/files/FIREFLY/))). Many of the tools could be adapted to evaluate the specifications of an instrument other than FIREFLY. The Instrument_Preparation.py script contains steps to build an instance of the instrument class (initialized from Instrument_Builder.py). Note that the script will create a python file in the local directory that will act as a module to call functions for instrument specifications. The steps for creating an instrument are annotated in detail in the script. For additional information, including assistance in adapting the tools for a different instrument, please contact the authors. In general, input data were processed in the appropriate bespoke software into a level 1 input for the Python model. Where additional standardization was needed (field headers, for example), a level 0 output from the software was created as an intermediary, then adapted into a level 1 input file. A python script for each source of input data (\"_Input_Preparation.py in the model files) ingested the level 1 inputs and converted them into amalgamated JavaScript Object Notation (JSON) files. These JSON files then acted as the baseline inputs called for the subsequent analyses and visualization. In other words, all of the modules, analyses, and figure scripts can be run using the provided JSON files. The JSON files can also be imported using the functions found in the Data_Loader.py module, if the save path is updated for the user's local environment. The prerequisite modules to install are \"json\", \"numpy\", \"matplotlib\", \"math\", \"shutil\", \"importlib\", and \"sys\". Below is an alphabetical list of the tools and modules available in the supplied code package, including a brief description for each:  
* Absorption_Feature_Peaks.py contains a function \"get_abs_feat\" to return a set of absorption features and their relative depths. Additionally, contains a function \"get_abs_feats_set\" to return a set of absorption features filtered by spectral region, spatial pixel, or maximum band offset between valleys and peaks. * Data_Loader.py contains a function \"load_instrument\" that creates an instance of the instrument class, and then uses the method to import a saved JSON file for an instrument into the instance. Additionally, contains a function \"load_data\" that loads specific JSON data files based on which other function calls it. There is a function \"load_\" for each major dataset that imports the JSON file for the dataset via the \"load_data\" function. * ENVI_File_Import.py contains a function \"envi_read\" that imports an ASCII file exported from ENVI as a Python dictionary. * Instrument_Builder.py contains the class \"Instrument\" to represent an instrument for SIF retrieval in analyses.