Added adjusted (filters out outliers) keypress and slider end times

This commit is contained in:
nise.moe 2024-02-16 06:35:51 +01:00
parent 58513bf3b1
commit e72945c93d
7 changed files with 67 additions and 3 deletions

View File

@ -275,6 +275,28 @@ open class Scores(
*/
val SLIDEREND_RELEASE_STANDARD_DEVIATION: TableField<ScoresRecord, Double?> = createField(DSL.name("sliderend_release_standard_deviation"), SQLDataType.DOUBLE, this, "")
/**
* The column <code>public.scores.keypresses_median_adjusted</code>.
*/
val KEYPRESSES_MEDIAN_ADJUSTED: TableField<ScoresRecord, Double?> = createField(DSL.name("keypresses_median_adjusted"), SQLDataType.DOUBLE, this, "")
/**
* The column
* <code>public.scores.keypresses_standard_deviation_adjusted</code>.
*/
val KEYPRESSES_STANDARD_DEVIATION_ADJUSTED: TableField<ScoresRecord, Double?> = createField(DSL.name("keypresses_standard_deviation_adjusted"), SQLDataType.DOUBLE, this, "")
/**
* The column <code>public.scores.sliderend_release_median_adjusted</code>.
*/
val SLIDEREND_RELEASE_MEDIAN_ADJUSTED: TableField<ScoresRecord, Double?> = createField(DSL.name("sliderend_release_median_adjusted"), SQLDataType.DOUBLE, this, "")
/**
* The column
* <code>public.scores.sliderend_release_standard_deviation_adjusted</code>.
*/
val SLIDEREND_RELEASE_STANDARD_DEVIATION_ADJUSTED: TableField<ScoresRecord, Double?> = createField(DSL.name("sliderend_release_standard_deviation_adjusted"), SQLDataType.DOUBLE, this, "")
private constructor(alias: Name, aliased: Table<ScoresRecord>?): this(alias, null, null, aliased, null)
private constructor(alias: Name, aliased: Table<ScoresRecord>?, parameters: Array<Field<*>?>?): this(alias, null, null, aliased, parameters)

View File

@ -185,6 +185,22 @@ open class ScoresRecord private constructor() : UpdatableRecordImpl<ScoresRecord
set(value): Unit = set(40, value)
get(): Double? = get(40) as Double?
open var keypressesMedianAdjusted: Double?
set(value): Unit = set(41, value)
get(): Double? = get(41) as Double?
open var keypressesStandardDeviationAdjusted: Double?
set(value): Unit = set(42, value)
get(): Double? = get(42) as Double?
open var sliderendReleaseMedianAdjusted: Double?
set(value): Unit = set(43, value)
get(): Double? = get(43) as Double?
open var sliderendReleaseStandardDeviationAdjusted: Double?
set(value): Unit = set(44, value)
get(): Double? = get(44) as Double?
// -------------------------------------------------------------------------
// Primary key information
// -------------------------------------------------------------------------
@ -194,7 +210,7 @@ open class ScoresRecord private constructor() : UpdatableRecordImpl<ScoresRecord
/**
* Create a detached, initialised ScoresRecord
*/
constructor(id: Int? = null, beatmapId: Int? = null, count_100: Int? = null, count_300: Int? = null, count_50: Int? = null, countMiss: Int? = null, date: LocalDateTime? = null, maxCombo: Int? = null, mods: Int? = null, perfect: Boolean? = null, pp: Double? = null, rank: String? = null, replayAvailable: Boolean? = null, replayId: Long? = null, score: Long? = null, userId: Long? = null, replay: ByteArray? = null, ur: Double? = null, frametime: Double? = null, edgeHits: Int? = null, snaps: Int? = null, isBanned: Boolean? = null, adjustedUr: Double? = null, meanError: Double? = null, errorVariance: Double? = null, errorStandardDeviation: Double? = null, minimumError: Double? = null, maximumError: Double? = null, errorRange: Double? = null, errorCoefficientOfVariation: Double? = null, errorKurtosis: Double? = null, errorSkewness: Double? = null, sentDiscordNotification: Boolean? = null, addedAt: OffsetDateTime? = null, version: Int? = null, keypressesTimes: Array<Double?>? = null, keypressesMedian: Double? = null, keypressesStandardDeviation: Double? = null, sliderendReleaseTimes: Array<Double?>? = null, sliderendReleaseMedian: Double? = null, sliderendReleaseStandardDeviation: Double? = null): this() {
constructor(id: Int? = null, beatmapId: Int? = null, count_100: Int? = null, count_300: Int? = null, count_50: Int? = null, countMiss: Int? = null, date: LocalDateTime? = null, maxCombo: Int? = null, mods: Int? = null, perfect: Boolean? = null, pp: Double? = null, rank: String? = null, replayAvailable: Boolean? = null, replayId: Long? = null, score: Long? = null, userId: Long? = null, replay: ByteArray? = null, ur: Double? = null, frametime: Double? = null, edgeHits: Int? = null, snaps: Int? = null, isBanned: Boolean? = null, adjustedUr: Double? = null, meanError: Double? = null, errorVariance: Double? = null, errorStandardDeviation: Double? = null, minimumError: Double? = null, maximumError: Double? = null, errorRange: Double? = null, errorCoefficientOfVariation: Double? = null, errorKurtosis: Double? = null, errorSkewness: Double? = null, sentDiscordNotification: Boolean? = null, addedAt: OffsetDateTime? = null, version: Int? = null, keypressesTimes: Array<Double?>? = null, keypressesMedian: Double? = null, keypressesStandardDeviation: Double? = null, sliderendReleaseTimes: Array<Double?>? = null, sliderendReleaseMedian: Double? = null, sliderendReleaseStandardDeviation: Double? = null, keypressesMedianAdjusted: Double? = null, keypressesStandardDeviationAdjusted: Double? = null, sliderendReleaseMedianAdjusted: Double? = null, sliderendReleaseStandardDeviationAdjusted: Double? = null): this() {
this.id = id
this.beatmapId = beatmapId
this.count_100 = count_100
@ -236,6 +252,10 @@ open class ScoresRecord private constructor() : UpdatableRecordImpl<ScoresRecord
this.sliderendReleaseTimes = sliderendReleaseTimes
this.sliderendReleaseMedian = sliderendReleaseMedian
this.sliderendReleaseStandardDeviation = sliderendReleaseStandardDeviation
this.keypressesMedianAdjusted = keypressesMedianAdjusted
this.keypressesStandardDeviationAdjusted = keypressesStandardDeviationAdjusted
this.sliderendReleaseMedianAdjusted = sliderendReleaseMedianAdjusted
this.sliderendReleaseStandardDeviationAdjusted = sliderendReleaseStandardDeviationAdjusted
resetChangedOnNotNull()
}
}

View File

@ -77,11 +77,15 @@ class CircleguardService {
val keypresses_times: List<Double>?,
val keypresses_median: Double?,
val keypresses_median_adjusted: Double?,
val keypresses_standard_deviation: Double?,
val keypresses_standard_deviation_adjusted: Double?,
val sliderend_release_times: List<Double>?,
val sliderend_release_median: Double?,
val sliderend_release_median_adjusted: Double?,
val sliderend_release_standard_deviation: Double?,
val sliderend_release_standard_deviation_adjusted: Double?,
val judgements: List<ScoreJudgement>
)

View File

@ -31,7 +31,7 @@ class FixOldScores(
@Value("\${OLD_SCORES_PAGE_SIZE:5000}")
private var pageSize: Int = 5000
val CURRENT_VERSION = 2
val CURRENT_VERSION = 3
private val logger = LoggerFactory.getLogger(javaClass)
@ -131,10 +131,14 @@ class FixOldScores(
.set(SCORES.EDGE_HITS, processedReplay.edge_hits)
.set(SCORES.KEYPRESSES_TIMES, processedReplay.keypresses_times?.toTypedArray())
.set(SCORES.KEYPRESSES_MEDIAN, processedReplay.keypresses_median)
.set(SCORES.KEYPRESSES_MEDIAN_ADJUSTED, processedReplay.keypresses_median_adjusted)
.set(SCORES.KEYPRESSES_STANDARD_DEVIATION, processedReplay.keypresses_standard_deviation)
.set(SCORES.KEYPRESSES_STANDARD_DEVIATION_ADJUSTED, processedReplay.keypresses_standard_deviation_adjusted)
.set(SCORES.SLIDEREND_RELEASE_TIMES, processedReplay.sliderend_release_times?.toTypedArray())
.set(SCORES.SLIDEREND_RELEASE_MEDIAN, processedReplay.sliderend_release_median)
.set(SCORES.SLIDEREND_RELEASE_MEDIAN_ADJUSTED, processedReplay.sliderend_release_median_adjusted)
.set(SCORES.SLIDEREND_RELEASE_STANDARD_DEVIATION, processedReplay.sliderend_release_standard_deviation)
.set(SCORES.SLIDEREND_RELEASE_STANDARD_DEVIATION_ADJUSTED, processedReplay.sliderend_release_standard_deviation_adjusted)
.where(SCORES.REPLAY_ID.eq(score.replayId))
.returningResult(SCORES.ID)
.fetchOne()?.getValue(SCORES.ID)

View File

@ -64,7 +64,7 @@ class ImportScores(
}
}
val CURRENT_VERSION = 2
val CURRENT_VERSION = 3
@Value("\${WEBHOOK_URL}")
private lateinit var webhookUrl: String

View File

@ -0,0 +1,5 @@
ALTER TABLE public.scores
ADD COLUMN keypresses_median_adjusted float8,
ADD COLUMN keypresses_standard_deviation_adjusted float8,
ADD COLUMN sliderend_release_median_adjusted float8,
ADD COLUMN sliderend_release_standard_deviation_adjusted float8;

View File

@ -10,6 +10,7 @@ import numpy as np
import scipy
from brparser import Replay, BeatmapOsu, Mod
from circleguard import Circleguard, ReplayString, Hit
from circleguard.utils import filter_outliers
from flask import Flask, request, jsonify, abort
from src.WriteStreamWrapper import WriteStreamWrapper
@ -60,11 +61,15 @@ class ReplayResponse:
keypresses_times: List[int]
keypresses_median: float
keypresses_median_adjusted: float
keypresses_standard_deviation: float
keypresses_standard_deviation_adjusted: float
sliderend_release_times: List[int]
sliderend_release_median: float
sliderend_release_median_adjusted: float
sliderend_release_standard_deviation: float
sliderend_release_standard_deviation_adjusted: float
judgements: List[Hit]
@ -174,11 +179,15 @@ def process_replay():
keypresses_times=kp,
keypresses_median=np.median(kp),
keypresses_median_adjusted=np.median(filter_outliers(kp)),
keypresses_standard_deviation=np.std(kp, ddof=1),
keypresses_standard_deviation_adjusted=np.std(filter_outliers(kp), ddof=1),
sliderend_release_times=se,
sliderend_release_median=np.median(se),
sliderend_release_median_adjusted=np.median(filter_outliers(se)),
sliderend_release_standard_deviation=np.std(se, ddof=1),
sliderend_release_standard_deviation_adjusted=np.std(filter_outliers(se), ddof=1),
judgements=judgements
)