feat(grid-fit): move parallelization to Spectrum model

- save intermediate results more often
This commit is contained in:
2026-01-29 11:28:31 +03:00
parent c9e66de47d
commit c0bd75ff6c

View File

@@ -110,7 +110,6 @@ private class GridArgs : CliktCommand() {
@UnstableKMathAPI
override fun run() {
val postfix = if (postfix != null) "-$postfix" else ""
val fitParamsBase: Map<Symbol, Double> = mapOf(
@@ -123,7 +122,7 @@ private class GridArgs : CliktCommand() {
rearWall to rwall
)
val spectrumModel: NBkgSpectrum = SterileNeutrinoSpectrumRWall(
val spectrumModel: NBkgSpectrum = SterileNeutrinoSpectrumRWallMP(
wallFunc = wallFunc, transmission = NumassTransmission(
trapFunc = { ei, ef, _ ->
val delta = ei - ef
@@ -160,55 +159,61 @@ private class GridArgs : CliktCommand() {
val chi2Matrix = mutableMapOf<Pair<Double, Double>, Double?>()
withContext(Dispatchers.Default) {
coroutineScope {
mGrid.forEach { m ->
u2Grid.forEach { u2Val ->
launch {
val taskId = "${m.toInt()}_${String.format("%.0e", u2Val)}"
val fitParams = fitParamsBase.toMutableMap()
fitParams[NumassBeta.msterile2] = (m * 1000.0).pow(2)
fitParams[NumassBeta.u2] = u2Val
val logMessages = mutableListOf<String>()
val dumpLogger = Loggable { tag, block ->
val msg = "[$tag] ${block()}"
logMessages += msg
println("[$taskId] $msg")
}
val fit = fitNumassSpectrumRWall(
spectrumModel, data, fitVars, fitParams, dumpLogger
)
chi2Matrix[Pair(m, u2Val)] = fit.chiSquaredOrNull
if (!noReports) {
val mStr = String.format("%04.1f", m)
val u2Str = String.format("%9.2e", u2Val).replace(".", "_")
val reportFileName = "${mStr}-${u2Str}.html"
val reportPath = reportsDir.resolve(reportFileName)
reportPage(
spectrum,
postfix,
data,
spectrumModel,
fitParams,
fit,
dataForView,
dataPath,
this@GridArgs,
logMessages
).makeFile(path = reportPath, show = false)
}
}
}
}
mGrid.forEach { m ->
u2Grid.forEach { u2 ->
chi2Matrix[Pair(m, u2)] = null
}
}
saveChi2GridToTsv(spectrum, postfix, mGrid, u2Grid, chi2Matrix)
var current = 0
val total = mGrid.size * u2Grid.size
for (m in mGrid) {
for (u2Val in u2Grid) {
current++
val taskId = "${m.toInt()}_${String.format("%.0e", u2Val)}"
val fitParams = fitParamsBase.toMutableMap()
fitParams[NumassBeta.msterile2] = (m * 1000.0).pow(2)
fitParams[NumassBeta.u2] = u2Val
val logMessages = mutableListOf<String>()
val dumpLogger = Loggable { tag, block ->
val msg = "[$tag] ${block()}"
logMessages += msg
println("$current/$total [$taskId] $msg")
}
val fit = fitNumassSpectrumRWall(
spectrumModel, data, fitVars, fitParams, dumpLogger
)
chi2Matrix[Pair(m, u2Val)] = fit.chiSquaredOrNull
if (!noReports) {
val mStr = String.format("%04.1f", m)
val u2Str = String.format("%9.2e", u2Val).replace(".", "_")
val reportFileName = "${mStr}-${u2Str}.html"
val reportPath = reportsDir.resolve(reportFileName)
reportPage(
spectrum,
postfix,
data,
spectrumModel,
fitParams,
fit,
dataForView,
dataPath,
this@GridArgs,
logMessages
).makeFile(path = reportPath, show = false)
}
saveChi2GridToTsv(spectrum, postfix, mGrid, u2Grid, chi2Matrix)
}
}
}
}
}