internal static List <Point> DoBiasCorrection(string observedFile,
string baselineFile, string futureFile, TextFormat infmt)
{
//get input data
List <Point> observed = GetInputData(observedFile, infmt);
List <Point> baseline = GetInputData(baselineFile, infmt);
List <Point> future = GetInputData(futureFile, infmt);
if (observed.Count == 0 || baseline.Count == 0 || future.Count == 0)
{
Console.WriteLine("error parsing input file(s)");
return(new List <Point> {
});
}
//get monthly data
List <Point> observedMonthly = DataToMonthly(observed);
List <Point> baselineMonthly = DataToMonthly(baseline);
List <Point> futureMonthly = DataToMonthly(future);
if (observedMonthly.Count == 0 || baselineMonthly.Count == 0 ||
futureMonthly.Count == 0)
{
Console.WriteLine("error parsing input file(s) to monthly");
return(new List <Point> {
});
}
//truncate inputs to water year data
Utils.TruncateToWYs(observedMonthly);
Utils.TruncateToWYs(baselineMonthly);
Utils.TruncateToWYs(futureMonthly);
Utils.TruncateToWYs(future);
//truncate baseline to observed record for proper quantile lookup
Utils.TruncateToObs(observedMonthly, ref baselineMonthly);
//do monthly bias correction
List <Point> biasedMonthly = DoMonthlyBiasCorrection(observedMonthly,
baselineMonthly, futureMonthly);
List <Point> biasedFinal = DoAnnualBiasCorrection(observedMonthly,
baselineMonthly, futureMonthly, biasedMonthly);
//do daily adjustments
if (Utils.IsDataDaily(future))
{
List <Point> biasedDaily = AdjDailyToMonthly(future, biasedFinal);
AdjMonthlyBoundary(biasedDaily);
biasedFinal = AdjDailyToMonthly(biasedDaily, biasedFinal);
}
return(biasedFinal);
}