private CalculatorStats ConvertOptionalParamsToNonNullable(TeamStats teamStats) { var calculatorStats = new CalculatorStats { Ab = teamStats.Ab ?? 0, H = teamStats.H ?? 0, X2b = teamStats.X2b ?? 0, X3b = teamStats.X3b ?? 0, Hr = teamStats.Hr ?? 0, Bb = teamStats.Bb ?? 0, So = teamStats.So ?? 0, Hbp = teamStats.Hbp ?? 0, Sf = teamStats.Sf ?? 0, Ibb = 0, Sh = 0 }; calculatorStats.Pa = CalulatePa(calculatorStats); calculatorStats.Singles = CalculateSingles(calculatorStats); calculatorStats.Obp = CalculateObp(calculatorStats); calculatorStats.Slg = CalculateSlg(calculatorStats); calculatorStats.KRate = CalculateKRate(calculatorStats); calculatorStats.BbRate = CalculateBbRate(calculatorStats); return(calculatorStats); }
//BB% - Walk Percentage (http://www.fangraphs.com/library/offense/rate-stats/) private double CalculateBbRate(CalculatorStats stats) { var numerator = (double)stats.Bb; var denominator = stats.Pa; double bbRate = SafeDivide.divideDouble(numerator, denominator); return(Math.Round(bbRate, 3)); }
//SLG - Slugging Percentage private double CalculateSlg(CalculatorStats stats) { var numerator = (double)stats.Singles + stats.X2b * 2 + stats.X3b * 3 + stats.Hr * 4; var denominator = stats.Ab; double slg = SafeDivide.divideDouble(numerator, denominator); return(Math.Round(slg, 3)); }
//OBP - On Base Percentage (http://www.fangraphs.com/library/offense/obp/) private double CalculateObp(CalculatorStats stats) { var numerator = (double)stats.H + stats.Bb + stats.Ibb; var denominator = stats.Ab; double obp = SafeDivide.divideDouble(numerator, denominator); return(Math.Round(obp, 3)); }
//ISO - Isolated Power (http://www.fangraphs.com/library/offense/iso/) private double CalculateIso(CalculatorStats stats) { var numerator = (double)stats.X2b + (2 * stats.X3b) + (3 * stats.Hr); var denominator = stats.Ab; double iso = SafeDivide.divideDouble(numerator, denominator); return(Math.Round(iso, 3)); }
//BABIP - Batting Average On Balls In Play (http://www.fangraphs.com/library/offense/babip/) private double CalculateBabip(CalculatorStats stats) { var numerator = (double)stats.H - stats.Hr; var denominator = stats.Ab - stats.So - stats.Hr + stats.Sf; double babip = SafeDivide.divideDouble(numerator, denominator); return(Math.Round(babip, 3)); }
private CalculatorStats ConvertOptionalParamsToNonNullable(BattingPostStats battingStats) { var calculatorStats = new CalculatorStats { Ab = battingStats.Ab ?? 0, H = battingStats.H ?? 0, X2b = battingStats.X2b ?? 0, X3b = battingStats.X3b ?? 0, Hr = battingStats.Hr ?? 0, Bb = battingStats.Bb ?? 0, So = battingStats.So ?? 0, Ibb = battingStats.Ibb ?? 0, Hbp = battingStats.Hbp ?? 0, Sh = battingStats.Sh ?? 0, Sf = battingStats.Sf ?? 0 }; calculatorStats.Pa = CalulatePa(calculatorStats); calculatorStats.Singles = CalculateSingles(calculatorStats); calculatorStats.Obp = CalculateObp(calculatorStats); calculatorStats.Slg = CalculateSlg(calculatorStats); calculatorStats.KRate = CalculateKRate(calculatorStats); calculatorStats.BbRate = CalculateBbRate(calculatorStats); return(calculatorStats); }
//OPS - On Base + Slugging (http://www.fangraphs.com/library/offense/ops/) private double CalculateOps(CalculatorStats stats) { return(Math.Round(stats.Obp + stats.Slg, 3)); }
//AVG - Batting Average private double CalculateAvg(CalculatorStats stats) { double avg = SafeDivide.divideDouble((double)stats.H, stats.Ab); return(Math.Round(avg, 3)); }
//S - Singles private int CalculateSingles(CalculatorStats stats) { return(stats.H - (stats.X2b + stats.X3b + stats.Hr)); }
//Pa - Plate Appearances private int CalulatePa(CalculatorStats stats) { return(stats.Ab + stats.Bb + stats.Hbp + stats.Sf + stats.Sh); }