Source code for elphick.geomet.utils.amenability

from typing import List
import pandas as pd
from itertools import tee


[docs] def amenability_index(df_recovery: pd.DataFrame, col_target: str, col_mass_recovery: str): """Calculate the Amenability Index Implementation of the Amenability Index as presented in the paper titled APPLICATIONS OF INDIVIDUAL PARTICLE PYKNOMETRY by G. Elphick and Dr. T.F. Mason at the DMS POWDERS’ 10th FERROSILICON CONFERENCE. The amenability Index for a particular gangue analyte is the complement of the relative recovery to the target analyte across the full sample. It is process / operating point independent, hence characterises the ore, not the process. Args: df_recovery: DataFrame containing the ideal incremental recovery of a fractionated sample. col_target: The column name of the target analyte col_mass_recovery: The column name of the mass_recovery (yield) column Returns: A pd.Series containing the Amenability Indices for the gangue analytes """ cols: List[str] = [col for col in df_recovery.columns if col not in [col_mass_recovery]] area_target = area_trapezoid(xs=df_recovery[col_mass_recovery], ys=df_recovery[col_target]) results: List = [] for analyte in cols: area = area_trapezoid(xs=df_recovery[col_mass_recovery], ys=df_recovery[analyte]) results.append(1 - (area / area_target)) return pd.Series(results, index=cols, name='amenability_index')
[docs] def pairwise(iterable): """s -> (s0,s1), (s1,s2), (s2, s3), ... For use in py39, after which itertools.pairwise can be used """ a, b = tee(iterable) next(b, None) return zip(a, b)
[docs] def area_trapezoid(xs, ys): area = 0 for (ax, ay), (bx, by) in pairwise(zip(xs, ys)): h = bx - ax area += h * (ay + by) / 2 return area