/*
* Copyright 2010 Chad Retz
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.statmantis.stat.common;
import java.math.BigDecimal;
import org.statmantis.stat.AbstractStatistic;
import org.statmantis.stat.StatisticInfo;
import org.statmantis.stat.StatisticType;
/**
* This calculates Batting Average on Balls In Play (BABIP). See the Wikipedia reference
* <a href="http://en.wikipedia.org/wiki/Batting_average_on_balls_in_play">here</a>.
* This is a pitching and batting statistic. This is calculated as:
* <p>
* <math style="font-size: 200%">
* <mfrac>
* <mrow>
* <mi href="{@linkhref Hits}">H</mi>
* <mo>-</mo>
* <mi href="{@linkhref HomeRuns}">HR</mi>
* </mrow>
* <mrow>
* <mi href="{@linkhref AtBats}">AB</mi>
* <mo>-</mo>
* <mi href="{@linkhref Strikeouts}">K</mi>
* <mo>-</mo>
* <mi href="{@linkhref HomeRuns}">HR</mi>
* <mo>+</mo>
* <mi href="{@linkhref SacrificeFlies}">SF</mi>
* </mrow>
* </mfrac>
* </math>
*
* @author Chad Retz
*/
@StatisticInfo(
name = "Batting Average on Balls in Play",
abbreviations = "BABIP",
types = { StatisticType.BATTING, StatisticType.PITCHING },
dependencies = {
Hits.class,
HomeRuns.class,
AtBats.class,
Strikeouts.class,
SacrificeFlies.class
})
public class BattingAverageOnBallsInPlay extends AbstractStatistic<BigDecimal> {
@Override
public BigDecimal getCurrentValue() {
int atBats = getDependency(AtBats.class);
int strikeouts = getDependency(Strikeouts.class);
int homeRuns = getDependency(HomeRuns.class);
int sacrificeFlies = getDependency(SacrificeFlies.class);
int denom = atBats - strikeouts - homeRuns + sacrificeFlies;
if (denom == 0) {
return BigDecimal.ZERO;
}
int hits = getDependency(Hits.class);
return new BigDecimal(hits - homeRuns).divide(new BigDecimal(denom));
}
}