Skip to content
Snippets Groups Projects
params_samir_class.py 2.98 KiB
Newer Older
#! /usr/bin/env python
#-*- coding: utf-8 -*-
"""
11-07-2023 adapted from modspa-parcel code
@author: jeremy auclair

Classes to load and store SAMIR parameters.
"""

from pandas import read_csv  # to read csv parameter files


class samir_parameters:
    """
    Load all parameters for multiples classes in one object. 
    
    The object has one
    attribute (`.table`) that contains a `pandas DataFrame` with all paramters (rows)
    for all classes (columns). 
    
    It also contains :
    - a `scale_factor` column (first column) that allows to convert all parameters to
    integer values for reduced memory usage
    
    - a `Default` column (second column) that contains default values to fill in 
    missing values
    
    Example of the parameter table:
    
    
    ```
                    scale_factor  Default   class1    class2    class3
    ClassName                                                                      
    ClassNumber                1     0.00     1.00     2.000     3.000
    FminNDVI                1000     0.20     0.20     0.100     0.100
    FmaxNDVI                1000     0.90     0.90     0.900     0.900
    FminFC                  1000     0.90     0.90     0.900     0.900
    FmaxFC                  1000     1.00     0.90     1.000     1.000
    Fslope                  1000     1.40     1.50     1.500     1.500
    Foffset                 1000    -0.10    -0.10    -0.100    -0.100
    Plateau                    1    70.00    70.00    70.000    70.000
    KminNDVI                1000     0.10     0.10     0.100     0.100
    KmaxNDVI                1000     0.90     0.90     0.900     0.900
    KminKcb                 1000     0.00     0.20     0.000     0.000
    KmaxKcb                 1000     0.98     1.00     1.100     1.100
    Kslope                  1000     1.60     1.60     1.600     1.600
    Koffset                 1000    -0.10    -0.10    -0.100    -0.100
    Zsoil                      1  2000.00  1600.00  1550.000  1550.000
    ...                      ...      ...      ...       ...       ...
    Kcmax                   1000     1.15     1.15      1.15      1.15
    Fc_stop                 1000     0.15     0.15      0.15      0.15
    Start_date_Irr             1     0.00     0.00      0.00      0.00
    p_trigger                  1     0.00     0.00      0.00      0.00
    ```
    
        
        # Index file for correct conversion to dictionnary
        csvFile.index = csvFile.iloc[:,0]
        csvFile.drop(columns = ['ClassName'], inplace = True)
        # Replace missing parameters by their default values
        csvFile[csvFile.columns[1:]] = csvFile[csvFile.columns[1:]].astype('float32')
        for col in csvFile.columns[2:]:
            mask = csvFile[col].isna()
            csvFile.loc[mask, col] = csvFile.loc[mask, 'Default']

        # Store dataframe in attribute table
        self.table = csvFile