Adds ITM ratio stat

blinds
Laurent 5 years ago
parent b05ba6f61d
commit 8139c9d8b3
  1. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 7
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/calculus/ComputableGroup.kt
  4. 15
      app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt
  6. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  7. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt
  8. 1
      app/src/main/res/values/strings.xml

@ -67,7 +67,7 @@ class PokerAnalyticsApplication : Application() {
Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}")
Timber.d("Realm path = ${Realm.getDefaultInstance().path}")
this.createFakeSessions()
// this.createFakeSessions()
}
Patcher.patchAll(this.applicationContext)

@ -284,6 +284,13 @@ class Calculator {
results.addStat(ROI, roi)
}
val shouldComputeITMRatio = options.stats.contains(TOURNAMENT_ITM_RATIO) || computableGroup.displayedStats?.contains(TOURNAMENT_ITM_RATIO) == true
if (shouldComputeITMRatio) {
val itmCount = computables.count { it.session?.result?.cashout ?: 0.0 > 0.0 } // should we add a property inside ComputableResult for better performance?
val itmRatio = itmCount.toDouble() / computables.size.toDouble()
results.addStat(TOURNAMENT_ITM_RATIO, itmRatio)
}
if (options.computeLocationsPlayed) {
results.addStat(LOCATIONS_PLAYED, computables.distinctBy { it.session?.location?.id }.size.toDouble())
}

@ -12,7 +12,7 @@ import net.pokeranalytics.android.model.realm.SessionSet
/**
* A sessionGroup of computable items identified by a name
*/
class ComputableGroup(var query: Query, var stats: List<Stat>? = null) {
class ComputableGroup(var query: Query, var displayedStats: List<Stat>? = null) {
/**
* A subgroup used to compute stat variation

@ -53,6 +53,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres
TOTAL_BUYIN(27),
RISK_OF_RUIN(28),
STANDARD_DEVIATION_BB(29),
TOURNAMENT_ITM_RATIO(30)
;
companion object : IntSearchable<Stat> {
@ -129,6 +130,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres
MAXIMUM_DURATION -> R.string.longest_session
DAYS_PLAYED -> R.string.days_played
TOTAL_BUYIN -> R.string.total_buyin
TOURNAMENT_ITM_RATIO -> R.string.itm_ratio
else -> throw PAIllegalStateException("Stat ${this.name} name required but undefined")
}
}
@ -161,7 +163,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres
HOURLY_DURATION, AVERAGE_HOURLY_DURATION, MAXIMUM_DURATION -> {
return TextFormat(value.formattedHourlyDuration())
} // red/green percentages
WIN_RATIO, ROI -> {
WIN_RATIO, ROI, TOURNAMENT_ITM_RATIO -> {
val color = if (value * 100 >= this.threshold) R.color.green else R.color.red
return TextFormat("${(value * 100).formatted}%", color)
}
@ -185,6 +187,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres
get() {
return when (this) {
RISK_OF_RUIN -> 5.0
TOURNAMENT_ITM_RATIO -> 10.0
WIN_RATIO -> 50.0
else -> 0.0
}
@ -205,7 +208,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres
STANDARD_DEVIATION_BB -> R.string.average_net_result_bb_
STANDARD_DEVIATION_HOURLY -> R.string.hour_rate_without_pauses
STANDARD_DEVIATION_BB_PER_100_HANDS -> R.string.net_result_bb_per_100_hands
WIN_RATIO, HOURLY_DURATION -> return this.localizedTitle(context)
WIN_RATIO, HOURLY_DURATION, TOURNAMENT_ITM_RATIO -> return this.localizedTitle(context)
else -> null
}
resId?.let {
@ -257,7 +260,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres
val legendHideRightValue: Boolean
get() {
return when (this) {
AVERAGE, NUMBER_OF_SETS, NUMBER_OF_GAMES, WIN_RATIO,
AVERAGE, NUMBER_OF_SETS, NUMBER_OF_GAMES, WIN_RATIO, TOURNAMENT_ITM_RATIO,
HOURLY_DURATION, AVERAGE_HOURLY_DURATION -> true
else -> false
}
@ -269,7 +272,8 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres
val graphSignificantIndividualValue: Boolean
get() {
return when (this) {
AVERAGE, WIN_RATIO, NUMBER_OF_SETS, NUMBER_OF_GAMES,
AVERAGE, WIN_RATIO, TOURNAMENT_ITM_RATIO,
NUMBER_OF_SETS, NUMBER_OF_GAMES,
STANDARD_DEVIATION, HOURLY_DURATION -> false
else -> true
}
@ -315,7 +319,8 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres
return when (this) {
NET_RESULT, NET_BB_PER_100_HANDS, HOURLY_RATE_BB,
AVERAGE_HOURLY_DURATION, HOURLY_DURATION,
NUMBER_OF_SETS, ROI, AVERAGE_BUYIN, WIN_RATIO,
NUMBER_OF_SETS, ROI, AVERAGE_BUYIN,
WIN_RATIO, TOURNAMENT_ITM_RATIO,
AVERAGE_NET_BB, NUMBER_OF_GAMES, AVERAGE -> true
else -> false
}

@ -4,7 +4,7 @@ import io.realm.RealmObject
import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.QueryCondition
open class ComputableResult() : RealmObject(), Filterable {
open class ComputableResult : RealmObject(), Filterable {
var ratedNet: Double = 0.0

@ -210,7 +210,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
Stat.NET_RESULT,
Stat.HOURLY_RATE,
Stat.ROI,
Stat.WIN_RATIO,
Stat.TOURNAMENT_ITM_RATIO,
Stat.NUMBER_OF_GAMES,
Stat.AVERAGE_BUYIN
)

@ -160,7 +160,7 @@ open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentab
report.results.forEach { result ->
val title = result.group.query.getName(requireContext()).capitalize()
rows.add(CustomizableRowRepresentable(title = title))
val statList = result.group.stats ?: report.options.stats
val statList = result.group.displayedStats ?: report.options.stats
statList.forEach { stat ->
rows.add(StatRow(stat, result.computedStat(stat), result.group.query.getName(requireContext())))
}

@ -811,5 +811,6 @@
<string name="posts">posts</string>
<string name="show_blog_tips">Show tips on front page</string>
<string name="blog_tips">App tips</string>
<string name="itm_ratio">ITM ratio</string>
</resources>

Loading…
Cancel
Save