#!/bin/usr/python3
import argparse
import pandas as pd
import numpy as np

###############################################################################
# Applies bias-correcting based on training table
###############################################################################

parser = argparse.ArgumentParser()
parser.add_argument('train', help='Observational data for reference')
parser.add_argument('sim', help='Historical simulation for training')
parser.add_argument('out', help='Output file')
args = parser.parse_args()

hdr = ['Year', 'Month', 'Day', 'Flow']
train_tbl = args.train
sim_file = args.sim
out_file = args.out
# ----------------------------------------------------------------------------
# Read training table and simulation
tdf = pd.read_csv(train_tbl, sep="[-, /\t]*", engine='python').reset_index()
sim = pd.read_csv(sim_file, sep="[-, /\t]*", engine='python', header=None)
sim.columns = hdr

# Bin current simulation according to table and apply corresponding factor
temp = pd.DataFrame()
temp['bin'] = np.digitize(sim['Flow'], tdf['Floor'], right=True)
temp['Factor'] = temp['bin'].apply(lambda x: tdf.at[x-1,'Ratio'])
sim['Flow'] = sim['Flow'] * temp['Factor']

# Write to file
sim.to_csv(out_file, index=False, header=False)

