|
|
|
|
@ -41,7 +41,7 @@ class Calculator { |
|
|
|
|
/** |
|
|
|
|
* This function determines whether the standard deviation should be computed |
|
|
|
|
*/ |
|
|
|
|
fun shouldComputeStandardDeviation() : Boolean { |
|
|
|
|
fun shouldComputeStandardDeviation(): Boolean { |
|
|
|
|
this.displayedStats.forEach { stat -> |
|
|
|
|
return when (stat) { |
|
|
|
|
STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS -> true |
|
|
|
|
@ -86,10 +86,30 @@ class Calculator { |
|
|
|
|
return computedResults |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// fun compute(sessionGroup: SessionGroup, options: Options): ComputedResults { |
|
|
|
|
// |
|
|
|
|
// var sum: Double = 0.0 |
|
|
|
|
// val sessions: List<SessionInterface> = sessionGroup.sessions |
|
|
|
|
// val results: ComputedResults = ComputedResults(sessionGroup) |
|
|
|
|
// |
|
|
|
|
// sessions.forEach { s -> |
|
|
|
|
// sum += s.ratedNet |
|
|
|
|
// } |
|
|
|
|
// |
|
|
|
|
// results.addStats( |
|
|
|
|
// setOf( |
|
|
|
|
// ComputedStat(NETRESULT, sum) |
|
|
|
|
// ) |
|
|
|
|
// ) |
|
|
|
|
// |
|
|
|
|
// return results |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Computes stats for a SessionSet |
|
|
|
|
*/ |
|
|
|
|
fun compute(sessionGroup: SessionGroup, options: Options) : ComputedResults { |
|
|
|
|
fun compute(sessionGroup: SessionGroup, options: Options): ComputedResults { |
|
|
|
|
|
|
|
|
|
Timber.d(">>>> Start computing group ${sessionGroup.name}, ${sessionGroup.sessions.size} sessions") |
|
|
|
|
|
|
|
|
|
@ -102,7 +122,7 @@ class Calculator { |
|
|
|
|
var totalHands: Double = 0.0 |
|
|
|
|
var bbSum: Double = 0.0 |
|
|
|
|
var bbSessionCount: Int = 0 |
|
|
|
|
var winningSessionCount: Int = 0 |
|
|
|
|
var winningSessionCount: Int = 0 // sessions.filter { it.value >= 0.0 }.size |
|
|
|
|
var totalBuyin = 0.0 |
|
|
|
|
|
|
|
|
|
// Compute for each session |
|
|
|
|
@ -119,7 +139,8 @@ class Calculator { |
|
|
|
|
totalBuyin += s.buyin |
|
|
|
|
totalHands += s.estimatedHands |
|
|
|
|
|
|
|
|
|
if (options.evolutionValues == Options.EvolutionValues.STANDARD) { |
|
|
|
|
when (options.evolutionValues) { |
|
|
|
|
Options.EvolutionValues.STANDARD -> { |
|
|
|
|
|
|
|
|
|
results.addEvolutionValue(sum, NETRESULT) |
|
|
|
|
results.addEvolutionValue(sum / index, AVERAGE) |
|
|
|
|
@ -139,7 +160,7 @@ class Calculator { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Compute for each serie |
|
|
|
|
@ -147,7 +168,10 @@ class Calculator { |
|
|
|
|
var hourlyRate: Double = 0.0 |
|
|
|
|
var hourlyRateBB: Double = 0.0 |
|
|
|
|
|
|
|
|
|
var gIndex = 0; var gSum = 0.0; var gTotalHands = 0.0; var gBBSum = 0.0; |
|
|
|
|
var gIndex = 0; |
|
|
|
|
var gSum = 0.0; |
|
|
|
|
var gTotalHands = 0.0; |
|
|
|
|
var gBBSum = 0.0; |
|
|
|
|
sessionSets.forEach { sessionSet -> |
|
|
|
|
gIndex++ |
|
|
|
|
duration += sessionSet.hourlyDuration |
|
|
|
|
@ -158,7 +182,8 @@ class Calculator { |
|
|
|
|
hourlyRate = gSum / duration |
|
|
|
|
hourlyRateBB = gBBSum / duration |
|
|
|
|
|
|
|
|
|
if (options.evolutionValues == Options.EvolutionValues.DATED) { |
|
|
|
|
when (options.evolutionValues) { |
|
|
|
|
Options.EvolutionValues.DATED -> { |
|
|
|
|
results.addEvolutionValue(gSum, duration, NETRESULT) |
|
|
|
|
results.addEvolutionValue(gSum / duration, duration, HOURLY_RATE) |
|
|
|
|
results.addEvolutionValue(hourlyRate, duration, HOURLY_RATE) |
|
|
|
|
@ -166,7 +191,6 @@ class Calculator { |
|
|
|
|
results.addEvolutionValue(sessionSet.netDuration.toDouble(), duration, DURATION) |
|
|
|
|
results.addEvolutionValue(duration / gIndex, duration, AVERAGE_DURATION) |
|
|
|
|
results.addEvolutionValue(hourlyRateBB, duration, HOURLY_RATE_BB) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val netBB100 = Stat.netBBPer100Hands(gBBSum, gTotalHands) |
|
|
|
|
if (netBB100 != null) { |
|
|
|
|
@ -175,6 +199,9 @@ class Calculator { |
|
|
|
|
results.addEvolutionValue(0.0, duration, NET_BB_PER_100_HANDS) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var average = 0.0 |
|
|
|
|
if (sessions.size > 0) { |
|
|
|
|
@ -182,23 +209,28 @@ class Calculator { |
|
|
|
|
val winRatio = winningSessionCount.toDouble() / sessions.size.toDouble() |
|
|
|
|
val avgBuyin = totalBuyin / sessions.size |
|
|
|
|
|
|
|
|
|
results.addStats(setOf( |
|
|
|
|
results.addStats( |
|
|
|
|
setOf( |
|
|
|
|
ComputedStat(AVERAGE, average), |
|
|
|
|
ComputedStat(WIN_RATIO, winRatio), |
|
|
|
|
ComputedStat(AVERAGE_BUYIN, avgBuyin) |
|
|
|
|
)) |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (sessionSets.size > 0) { |
|
|
|
|
val avgDuration = duration / sessionSets.size |
|
|
|
|
results.addStats(setOf( |
|
|
|
|
results.addStats( |
|
|
|
|
setOf( |
|
|
|
|
ComputedStat(HOURLY_RATE, hourlyRate), |
|
|
|
|
ComputedStat(AVERAGE_DURATION, avgDuration) |
|
|
|
|
)) |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Create stats |
|
|
|
|
results.addStats(setOf( |
|
|
|
|
results.addStats( |
|
|
|
|
setOf( |
|
|
|
|
ComputedStat(NETRESULT, sum), |
|
|
|
|
ComputedStat(DURATION, duration), |
|
|
|
|
ComputedStat(NUMBER_OF_SETS, sessionSets.size.toDouble()), |
|
|
|
|
@ -207,7 +239,8 @@ class Calculator { |
|
|
|
|
ComputedStat(AVERAGE_NET_BB, bbSum / bbSessionCount), |
|
|
|
|
ComputedStat(HANDS_PLAYED, totalHands) |
|
|
|
|
|
|
|
|
|
)) |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
val roi = Stat.returnOnInvestment(sum, totalBuyin) |
|
|
|
|
val netBB100 = Stat.netBBPer100Hands(bbSum, totalHands) |
|
|
|
|
@ -241,11 +274,13 @@ class Calculator { |
|
|
|
|
} |
|
|
|
|
val hourlyStandardDeviation: Double = Math.sqrt(hourlyStdSum / sessionSets.size) |
|
|
|
|
|
|
|
|
|
results.addStats(setOf( |
|
|
|
|
results.addStats( |
|
|
|
|
setOf( |
|
|
|
|
ComputedStat(STANDARD_DEVIATION, standardDeviation), |
|
|
|
|
ComputedStat(STANDARD_DEVIATION_HOURLY, hourlyStandardDeviation), |
|
|
|
|
ComputedStat(STANDARD_DEVIATION_BB_PER_100_HANDS, standardDeviationBBper100Hands) |
|
|
|
|
)) |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return results |
|
|
|
|
|