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); //align baseline and observed records for proper quantile lookup Utils.AlignPeriods(observedMonthly, 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); }