[enh] refactor + remove deprecated scripts

This commit is contained in:
2025-03-11 13:27:45 +03:00
parent e60bcfc013
commit ebd3ab57b8
25 changed files with 350 additions and 952 deletions

View File

@@ -1,6 +1,6 @@
package ru.inr.mass.scripts
val TABLE_X = arrayOf<Double>(
private val TABLE_X = arrayOf<Double>(
3000.0, 3100.0, 3200.0, 3300.0, 3400.0, 3500.0, 3600.0, 3700.0, 3800.0, 3900.0, 4000.0, 4100.0, 4200.0,
4210.0, 4400.0, 4500.0, 4600.0, 4700.0, 4800.0, 4900.0, 5000.0, 5100.0, 5200.0, 5300.0, 5400.0, 5500.0,
5600.0, 5700.0, 5800.0, 5850.0, 5900.0, 5950.0, 6000.0, 6050.0, 6100.0, 6150.0, 6200.0, 6250.0, 6300.0,
@@ -8,7 +8,7 @@ val TABLE_X = arrayOf<Double>(
7000.0, 7050.0, 7100.0, 7150.0, 7200.0, 7250.0, 7300.0, 7350.0, 7400.0, 7450.0, 7500.0, 7550.0, 7600.0,
7650.0, 7700.0, 7750.0, 7800.0)
val tableY = arrayOf<Double>(
private val TABLE_Y = arrayOf<Double>(
1.00013864040375, 0.99311101436615, 0.990257203578949, 0.994479060173035, 0.992072880268097, 0.990162968635559,
0.989075183868408, 0.99011492729187, 0.983498156070709, 0.991690993309021, 0.985046207904816, 0.983466565608978,
0.981356799602509, 0.984025597572327, 0.981970727443695, 0.977014005184174, 0.973981201648712, 0.97092479467392,
@@ -23,9 +23,6 @@ val tableY = arrayOf<Double>(
0.328158438205719, 0.312913507223129, 0.298821419477463)
fun adiab2024(e: Double, u: Double): Double {
// return 1.0
val delta = e - u - 200;
if (delta < 3000) {
@@ -40,9 +37,9 @@ fun adiab2024(e: Double, u: Double): Double {
}
val x1 = TABLE_X[idx]
val y1 = tableY[idx]
val y1 = TABLE_Y[idx]
val x2 = TABLE_X[idx+1]
val y2 = tableY[idx+1]
val y2 = TABLE_Y[idx+1]
val k = (y2 - y1)/(x2 - x1)
val b = y2 - k * x2

View File

@@ -24,8 +24,8 @@ data class FitParams(
@Serializable
data class FitCustomParams(
val spectrum: String = "/home/chernov/data/2024_11/Trit-4_4_5_6_for fit 11+.tsv",
val full: String = "/home/chernov/data/2024_11/Trit-4_4_5_6_for fit.tsv",
val spectrum: String = "TABLE_SLICE.tsv",
val full: String = "TABLE_FULL.tsv",
val postfix: String = "sample",
val fitParams: FitParams = FitParams(),
val fixBkg: Boolean = false,

View File

@@ -1,51 +0,0 @@
package ru.inr.mass.scripts
import kotlinx.html.code
import ru.inr.mass.models.*
import ru.inr.mass.models.NBkgSpectrum.Companion.bkg
import ru.inr.mass.models.NBkgSpectrum.Companion.norm
import ru.inr.mass.models.NumassBeta.e0
import ru.inr.mass.models.NumassBeta.mnu2
import ru.inr.mass.models.NumassBeta.msterile2
import ru.inr.mass.models.NumassBeta.u2
import ru.inr.mass.models.NumassTransmission.Companion.thickness
import ru.inr.mass.models.NumassTransmission.Companion.trap
import ru.inr.mass.workspace.buffer
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.invoke
import space.kscience.kmath.real.step
import space.kscience.plotly.*
import space.kscience.plotly.models.AxisType
import space.kscience.plotly.models.ScatterMode
import space.kscience.plotly.models.appendXY
import kotlin.math.pow
import kotlin.system.measureTimeMillis
fun main() {
val args: Map<Symbol, Double> = mapOf(
mnu2 to 0.0,
e0 to 18575.0,
msterile2 to 0.0.pow(2),
u2 to 0.0,
)
Plotly.page {
plot {
scatter {
name = "Computed spectrum"
mode = ScatterMode.lines
x.buffer = 11000.0..18600.0 step 50.0
y.numbers = x.doubles.map {
val value = NumassBeta(0.0, it, args)
println("${it}\t${value}")
value
}
}
layout {
title = "Sterile neutrino spectrum"
// yaxis.type = AxisType.log
}
}
}.makeFile()
}

View File

@@ -1,17 +0,0 @@
package ru.inr.mass.scripts
import ru.inr.mass.data.proto.NumassDirectorySet
import ru.inr.mass.workspace.Numass.readRepository
import ru.inr.mass.workspace.plotNumassSet
import space.kscience.dataforge.data.DataTree
import space.kscience.dataforge.data.await
import space.kscience.dataforge.data.get
import space.kscience.plotly.Plotly
import space.kscience.plotly.makeFile
suspend fun main() {
val repo: DataTree<NumassDirectorySet> = readRepository("D:\\Work\\Numass\\data\\2018_04")
val testSet = repo["Adiabacity_19.set_3"]?.await() ?: error("Not found")
Plotly.plotNumassSet(testSet).makeFile()
}

View File

@@ -1,40 +0,0 @@
package ru.inr.mass.scripts
import ru.inr.mass.data.api.NumassBlock
import ru.inr.mass.data.api.channels
import ru.inr.mass.workspace.Numass
import ru.inr.mass.workspace.listFrames
import space.kscience.dataforge.io.write
import space.kscience.dataforge.io.writeUtf8String
import java.nio.file.Files
import kotlin.io.path.createDirectories
import kotlin.io.path.writeText
fun main() {
val point = Numass.readPoint("D:\\Work\\Numass\\data\\test\\set_7\\p59(30s)(HV1=14000)")
val channels: Map<Int, NumassBlock> = point.channels
//Initialize and create target directory
val targetDir = Files.createTempDirectory("numass_p101(30s)(HV1=14150)")
targetDir.createDirectories()
//dumping meta
targetDir.resolve("meta").writeText(point.meta.toString())
val pointTime = point.startTime
channels.forEach { (key, block) ->
targetDir.resolve("channel-$key.csv").write {
block.listFrames().forEach { frame ->
// val frameTime = pointTime.plus(frame.timeOffset, DateTimeUnit.NANOSECOND)
// writeUtf8String("$frameTime,")
writeUtf8String("${frame.timeOffset},")
val line = frame.signal.joinToString(",", postfix = "\n" )
writeUtf8String(line)
}
}
}
println("Exported to $targetDir")
}

View File

@@ -33,34 +33,6 @@ import kotlin.math.pow
val rearWall: Symbol by symbol
//fun wallStep(u: Double): Double {
// return (3.932729e-13 * u.pow(4.0)
// - 2.827187e-8 * u.pow(3.0)
// + 7.618574e-4 * u.pow(2.0)
// - 9.124489 * u
// + 4.099330e+4) * 1e-4
//}
// Angle = 170.4, 2025-03-10 (weekend simulation)
val WALL_FROM_GEANT = arrayOf<Double>(
1.0, 0.983725115222919, 0.967653080298236, 0.951718416974794, 0.936024651676719, 0.920364067924837, 0.904895494720263, 0.889546153871678, 0.874435941365996, 0.859396958579476, 0.844639576514986, 0.829893254965895, 0.815396237433872, 0.801054509538036, 0.786916073915212, 0.772810598628275, 0.758871252282614, 0.744986987303634, 0.731305350966744, 0.717764183175408, 0.704346671946219, 0.691118295530335, 0.678120641465651, 0.665197756485057, 0.652462236635303, 0.639816085749964, 0.627406187473524, 0.615003367926939, 0.602793001348277, 0.590679303674193, 0.578771774007125, 0.567004491675303, 0.555399577709522, 0.543774754816025, 0.532440602267185, 0.521252890942212, 0.51027643546134, 0.499336037260664, 0.488627467462729, 0.47800915147044, 0.467592579279009, 0.457220470359478, 0.44702134790077, 0.43696645456285, 0.427042296516933, 0.417301521816314, 0.407677324947988, 0.398188066367517, 0.38879149490608, 0.379502874074926, 0.370428827242492, 0.361487285384524, 0.352668736457781, 0.343910577945111, 0.335274527522434, 0.326941092801042, 0.31865765160925, 0.31051799711763, 0.302525889901418, 0.294702123729562, 0.286888312021564, 0.279237532310531, 0.271755978485085, 0.26442285677628, 0.257172025302035, 0.250055689695028, 0.242984038570229, 0.236211463781789, 0.229509676291896, 0.222894160822106, 0.216442119769897, 0.210088517304729, 0.203852156302779, 0.197707376368324, 0.191745979779166, 0.185928591100488, 0.180139738551537, 0.17446635778334, 0.168900042804195, 0.163492335615855, 0.158201427470117, 0.153043024298846, 0.147980405190921, 0.142966452350747, 0.138075934862413, 0.133347343319504, 0.128675160405125, 0.124153842920772, 0.119732070075001, 0.115434838632611, 0.11120905811969, 0.107032607505445, 0.103007243531534, 0.099080096934357, 0.095251831344837, 0.0915160316640435, 0.0879125157474088, 0.0843950506405698, 0.0809419577333465, 0.0775698277988358, 0.074282200201965, 0.0711215473218621, 0.0680015971384235, 0.0649557524081507, 0.0620386520771095, 0.0591927814652307, 0.0563865074984764, 0.0537421594771473, 0.0511834198449979, 0.0486333074148589, 0.0462050818644047, 0.0438423345651061, 0.0415895287888625, 0.0394125981482485, 0.0372892004021603, 0.0352394656886222, 0.0332863998796616, 0.0313837700209154, 0.0295220640691415, 0.0277641057517998, 0.0260775983639286, 0.024434890617033, 0.022893939611798, 0.0213892670970682, 0.0199934300538537, 0.0186486925917774, 0.0173431093542097, 0.0161038892090294, 0.0149089111254406, 0.0137780840311597, 0.0127441470517643, 0.0117212705877668, 0.0107775874140183, 0.00986951909985102, 0.00901852304513686, 0.00821597204786549, 0.00744969954109922, 0.00675598401534315, 0.00611425291195719, 0.00549928825583415, 0.00492989292315043, 0.00439987302528323, 0.00393754348165116, 0.0035008743337422, 0.00309672310110307, 0.00272708067650536, 0.00238862890532973, 0.00208579199373532, 0.00180640337478446, 0.00155555088556017, 0.00132173159004863, 0.00112396957473424, 0.000948992221139521, 0.000785739013866568, 0.000657215824943011, 0.000536656207105939, 0.000428705576822469, 0.000335797247480138, 0.000261691794314231, 0.000202628642089464, 0.000148210906331813
)
const val WALL_STEP = 50.0
const val WALL_L = 10_000.0
const val WALL_R = 18_000.0
fun wallStep(u: Double): Double {
if (u < WALL_L) {
error("u < WALL_L (${u} < ${WALL_L})")
}
if (u > WALL_R) {
return 0.0
}
val idx: Int = ((u - WALL_L) / WALL_STEP).toInt()
return WALL_FROM_GEANT[idx]
}
class CustomSterileNeutrinoSpectrum(
source: DifferentiableKernel = NumassBeta,

View File

@@ -11,23 +11,13 @@ import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.double
import kotlinx.coroutines.runBlocking
import kotlinx.html.*
import org.apache.commons.math3.analysis.interpolation.BicubicInterpolator
import ru.inr.mass.models.*
import ru.inr.mass.models.NumassBeta.e0
import ru.inr.mass.models.NumassBeta.mnu2
import ru.inr.mass.models.NumassBeta.msterile2
import ru.inr.mass.models.NumassBeta.u2
import ru.inr.mass.models.NumassTransmission.Companion.thickness
import ru.inr.mass.models.NumassTransmission.Companion.trap
import ru.inr.mass.workspace.buffer
import ru.inr.mass.workspace.fitWith
import space.kscience.dataforge.provider.Path
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.data.XYErrorColumnarData
import space.kscience.kmath.data.indices
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.derivative
import space.kscience.kmath.expressions.invoke
import space.kscience.kmath.misc.Loggable
import space.kscience.kmath.optimization.*
import space.kscience.kmath.structures.asBuffer
@@ -36,10 +26,7 @@ import space.kscience.plotly.*
import space.kscience.plotly.models.ScatterMode
import java.io.File
import kotlin.io.path.Path
import kotlin.io.path.extension
import kotlin.io.path.nameWithoutExtension
import kotlin.math.max
import kotlin.math.min
import kotlin.math.pow
@OptIn(UnstableKMathAPI::class)

View File

@@ -1,144 +0,0 @@
package ru.inr.mass.scripts
import ru.inr.mass.data.analysis.NumassEventExtractor
import ru.inr.mass.data.analysis.energySpectrum
import ru.inr.mass.data.api.NumassEvent
import ru.inr.mass.data.api.NumassPoint
import ru.inr.mass.data.api.channel
import ru.inr.mass.data.proto.NumassDirectorySet
import ru.inr.mass.models.*
import ru.inr.mass.workspace.Numass
import ru.inr.mass.workspace.Numass.readRepository
import ru.inr.mass.workspace.buffer
import space.kscience.dataforge.data.DataTree
import space.kscience.dataforge.data.await
import space.kscience.dataforge.data.data
import space.kscience.dataforge.names.NameToken
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.functions.PiecewisePolynomial
import space.kscience.kmath.functions.asFunction
import space.kscience.kmath.integration.integrate
import space.kscience.kmath.integration.splineIntegrator
import space.kscience.kmath.integration.value
import space.kscience.kmath.interpolation.LinearInterpolator
import space.kscience.kmath.interpolation.interpolatePolynomials
import space.kscience.kmath.operations.DoubleField
import space.kscience.kmath.real.step
import space.kscience.kmath.structures.asBuffer
import space.kscience.plotly.Plotly
import space.kscience.plotly.makeFile
import space.kscience.plotly.scatter
import kotlin.math.pow
fun Spectrum.cutFrom(lowerCut: Double): Spectrum = Spectrum { x, arguments ->
if (x < lowerCut) 0.0 else this@cutFrom.invoke(x, arguments)
}
fun Spectrum.convolve(range: ClosedRange<Double>, function: (Double) -> Double): Spectrum = Spectrum { x, arguments ->
DoubleField.splineIntegrator.integrate(range) { y ->
this@convolve.invoke(y, arguments) * function(x - y)
}.value
}
/**
* E = A * ADC +B
* Channel A B
* 0 0.01453 1.3
* 2 0.01494 -4.332
* 3 0.01542 -5.183
* 4 0.01573 -2.115
* 5 0.0152 -3.808
* 6 0.0155 -3.015
* 7 0.01517 -0.5429
*/
val calibration: (NumassEvent) -> Double = {
when (it.channel) {
0 -> 0.01453 * it.amplitude + 1.3
2 -> 0.01494 * it.amplitude - 5.183
3 -> 0.01542 * it.amplitude - 5.183
4 -> 0.01573 * it.amplitude - 2.115
5 -> 0.0152 * it.amplitude - 3.808
6 -> 0.0155 * it.amplitude - 3.015
7 -> 0.01517 * it.amplitude - 0.5429
else -> error("Unrecognized channel ${it.channel}")
} * 1000.0
}
private val neutrinoSpectrum = NumassBeta.withFixedX(0.0)
private val args: Map<Symbol, Double> = mapOf(
NBkgSpectrum.norm to 8e5,
NBkgSpectrum.bkg to 2.0,
NumassBeta.mnu2 to 0.0,
NumassBeta.e0 to 18575.0,
NumassBeta.msterile2 to 1000.0.pow(2),
NumassBeta.u2 to 0.0,
NumassTransmission.thickness to 1.0,
NumassTransmission.trap to 1.0
)
suspend fun main() {
val repo: DataTree<NumassDirectorySet> = readRepository("D:\\Work\\Numass\\data\\2021_11\\Adiabacity_17\\")
val gunEnergy = 17000.0
val hv = 16900.0
//select point number 2 (U = 16900 V) from each directory
val points: Map<NameToken, NumassPoint?> = repo.items.mapValues {
val directory = it.value.data?.await()
val point = directory?.points?.find { point -> point.voltage == hv }
point
}
val spectrum: Map<Double, Long> = points.values.first()!!
.energySpectrum(NumassEventExtractor.TQDC, calibration)
.filter { it.key > 9000.0 }
.toSortedMap()
// //the channel of spectrum peak position
// val argmax = spectrum.maxByOrNull { it.value }!!.key
//
// // convert channel to energy
// fun Short.toEnergy(): Double = toDouble() / argmax * gunEnergy
val norm = spectrum.values.sum().toDouble()
val interpolated: PiecewisePolynomial<Double> = LinearInterpolator(DoubleField).interpolatePolynomials(
spectrum.keys.map { it - gunEnergy }.asBuffer(),
spectrum.values.map { it.toDouble() / norm }.asBuffer()
)
//convolve neutrino model with the gun spectrum
val model: Spectrum = neutrinoSpectrum
.cutFrom(14000.0)
.convolve(0.0..18500.0, interpolated.asFunction(DoubleField, 0.0))
val tritiumData = Numass.readPoint("D:\\Work\\Numass\\data\\2021_11\\Tritium_2\\set_11\\p0(30s)(HV1=14000)")
Plotly.plot {
scatter {
name = "gun"
x.numbers = spectrum.keys
y.numbers = spectrum.values.map { it.toDouble() / norm }
}
scatter {
name = "convoluted"
x.buffer = 0.0..19000.0 step 100.0
y.numbers = x.doubles.map { model(it, args) }
val yNorm = y.doubles.maxOrNull()!!
y.numbers = y.doubles.map { it / yNorm }
}
scatter {
name = "tritium"
val tritiumSpectrum = tritiumData.energySpectrum(NumassEventExtractor.TQDC, calibration).toSortedMap()
x.numbers = tritiumSpectrum.keys
y.numbers = tritiumSpectrum.values.map { it.toDouble() }
val yNorm = y.doubles.maxOrNull()!!
y.numbers = y.doubles.map { it / yNorm }
}
}.makeFile()
}

View File

@@ -1,63 +0,0 @@
package ru.inr.mass.scripts
import ru.inr.mass.workspace.buffer
import space.kscience.kmath.functions.asFunction
import space.kscience.kmath.integration.integrate
import space.kscience.kmath.integration.splineIntegrator
import space.kscience.kmath.integration.value
import space.kscience.kmath.interpolation.interpolatePolynomials
import space.kscience.kmath.interpolation.splineInterpolator
import space.kscience.kmath.operations.DoubleField
import space.kscience.kmath.real.step
import space.kscience.plotly.Plotly
import space.kscience.plotly.layout
import space.kscience.plotly.makeFile
import space.kscience.plotly.models.AxisType
import space.kscience.plotly.scatter
import kotlin.math.PI
import kotlin.math.exp
import kotlin.math.pow
import kotlin.math.sqrt
fun main() {
val backScatteringSpectrum: List<Pair<Double, Double>> = {}.javaClass
.getResource("/simulation/Gun19_E_back_scatt.dat")!!.readText()
.lineSequence().drop(2).mapNotNull {
if (it.isBlank()) return@mapNotNull null
val (e, p) = it.split('\t')
Pair(e.toDouble(), p.toDouble())
}.toList()
val interpolated = DoubleField.splineInterpolator
.interpolatePolynomials(backScatteringSpectrum)
.asFunction(DoubleField, 0.0)
val sigma = 0.3
val detectorResolution: (Double) -> Double = { x ->
1.0 / sqrt(2 * PI) / sigma * exp(-(x / sigma).pow(2) / 2.0)
}
val convoluted: (Double) -> Double = { x ->
DoubleField.splineIntegrator.integrate(-2.0..2.0) { y ->
detectorResolution(y) * interpolated(x - y)
}.value
}
Plotly.plot {
// scatter {
// name = "simulation"
// x.numbers = backScatteringSpectrum.map { 19.0 - it.first }
// y.numbers = backScatteringSpectrum.map { it.second }
// }
scatter {
name = "smeared"
x.buffer = 0.0..20.0 step 0.1
y.numbers = x.doubles.map { convoluted(19.0 - it) * 0.14/0.01 + 0.86 * detectorResolution(it - 19.0) }
println(y.doubles.sum()*0.1)//Norm check
}
layout {
yaxis.type = AxisType.log
}
}.makeFile()
}

View File

@@ -1,82 +0,0 @@
package ru.inr.mass.scripts
import ru.inr.mass.workspace.buffer
import space.kscience.kmath.real.step
import space.kscience.kmath.structures.toDoubleArray
import space.kscience.plotly.*
import space.kscience.plotly.models.TraceType
import space.kscience.dataforge.meta.Value
import space.kscience.plotly.models.ScatterMode
import kotlin.io.path.Path
import kotlin.io.path.name
import kotlin.io.path.nameWithoutExtension
fun main() {
val p = Path("/home/chernov/Trit8-12_for_fit.tsv")
val interpolator = TrapInterpolator()
Plotly.page {
plot {
val eis = (12000.0..18000.0 step 100.0).toDoubleArray()
val deltas = (0.0..7000.0 step 10.0).toDoubleArray()
val values = eis.map { ei ->
deltas.map { interpolator.value(ei, it) }.toList()
}
trace {
type = TraceType.surface
x.numbers = deltas.toList()
y.numbers = eis.toList()
z.value = Value.of(values)
}
}
plot {
scatter {
name = "12 keV"
mode = ScatterMode.lines
x.buffer = 0.0..7000.0 step 10.0
y.numbers = x.doubles.map {
interpolator.value(12000.0, it)
}
}
scatter {
name = "13 keV"
mode = ScatterMode.lines
x.buffer = 0.0..7000.0 step 10.0
y.numbers = x.doubles.map {
interpolator.value(13000.0, it)
}
}
scatter {
name = "14 keV"
mode = ScatterMode.lines
x.buffer = 0.0..7000.0 step 10.0
y.numbers = x.doubles.map {
interpolator.value(14000.0, it)
}
}
scatter {
name = "15 keV"
mode = ScatterMode.lines
x.buffer = 0.0..7000.0 step 10.0
y.numbers = x.doubles.map {
interpolator.value(15000.0, it)
}
}
scatter {
name = "16 keV"
mode = ScatterMode.lines
x.buffer = 0.0..7000.0 step 10.0
y.numbers = x.doubles.map {
interpolator.value(16000.0, it)
}
}
}
}.makeFile(Path(p.parent.toString(), p.nameWithoutExtension + ".html"))
}

View File

@@ -1,17 +0,0 @@
package ru.inr.mass.scripts
//import com.google.cloud.storage.contrib.nio.CloudStorageFileSystem
//import ru.inr.mass.data.proto.NumassDirectorySet
//import ru.inr.mass.workspace.Numass
//import space.kscience.dataforge.data.DataTree
//
//// https://storage.cloud.google.com/numass-data/2020_12/Adiabaticity/16/set_3/p10(10s)(HV1%3D13750)
//
//suspend fun main() {
// CloudStorageFileSystem.forBucket("numass-data").use { fs ->
// val repo: DataTree<NumassDirectorySet> = Numass.readRepository(fs.getPath("2020_12/Adiabaticity"))
// repo.items().forEach{ (key,item)->
// println(key)
// }
// }
//}

View File

@@ -1,55 +0,0 @@
package ru.inr.mass.scripts
import org.apache.commons.math3.analysis.interpolation.BicubicInterpolator
import kotlin.math.max
import kotlin.math.min
class RearTrapInterpolator {
private val x = arrayOf(12000.0, 14000.0, 16000.0, 18000.0).toDoubleArray()
private val yFine = arrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0).toDoubleArray()
private val gridFine = arrayOf(
arrayOf(
0.00493528, 0.000166909, 6.54547e-5, 3.27273e-5, 1.63637e-5, 6.54547e-6, 0.0, 3.27273e-6, 6.54547e-6, 3.27273e-6, 3.27273e-6, 0.000487637, 0.002376, 0.001728, 0.00123382, 0.00110291, 0.00108982, 0.000906547, 0.000756001, 0.000677456, 0.000585819, 0.000445092, 0.00041891, 0.000523637, 0.000641456, 0.000746183, 0.000693819, 0.000733092, 0.000746183, 0.000752729, 0.00059891, 0.000644728, 0.000612001, 0.000628365, 0.000497455, 0.000507274, 0.000500728, 0.00056291, 0.000546546, 0.000612001, 0.000536728, 0.000592365, 0.000582547, 0.00063491, 0.000559637, 0.00059891, 0.000585819, 0.000582547, 0.000513819, 0.00052691
).toDoubleArray(),
arrayOf(
0.0045491, 0.000137455, 5.56365e-5, 1.96364e-5, 2.61819e-5, 1.30909e-5, 1.30909e-5, 9.8182e-6, 6.54547e-6, 3.27273e-6, 0.0, 0.000402546, 0.00223855, 0.00160364, 0.00120764, 0.000965456, 0.000903274, 0.000680729, 0.000674183, 0.000612001, 0.000549819, 0.000540001, 0.000432001, 0.000402546, 0.000530183, 0.000710183, 0.000510546, 0.000749456, 0.000752729, 0.000579274, 0.000549819, 0.000559637, 0.000530183, 0.000566183, 0.000510546, 0.000461455, 0.000474546, 0.000464728, 0.000474546, 0.000523637, 0.000536728, 0.00052691, 0.000530183, 0.000497455, 0.000448364, 0.000481092, 0.00049091, 0.000497455, 0.000481092, 0.000651274
).toDoubleArray(),
arrayOf(
0.00426437, 0.000121091, 6.21819e-5, 3.60001e-5, 2.94546e-5, 1.30909e-5, 9.8182e-6, 6.54547e-6, 6.54547e-6, 0.0, 0.0, 0.000399273, 0.00221891, 0.00153491, 0.00126655, 0.000893456, 0.000850911, 0.000693819, 0.000631638, 0.00059891, 0.000461455, 0.000392728, 0.000392728, 0.000333819, 0.000517092, 0.000638183, 0.000559637, 0.000582547, 0.000713456, 0.000661092, 0.000625092, 0.00059891, 0.000523637, 0.000576001, 0.000458183, 0.000510546, 0.000477819, 0.000474546, 0.000536728, 0.000461455, 0.000523637, 0.000504001, 0.000481092, 0.000445092, 0.000549819, 0.000438546, 0.000497455, 0.000579274, 0.000412364, 0.000445092
).toDoubleArray(),
arrayOf(
0.00405164, 0.000104727, 5.23637e-5, 4.25455e-5, 9.8182e-6, 9.8182e-6, 1.63637e-5, 0.0, 3.27273e-6, 6.54547e-6, 0.0, 0.000428728, 0.00196364, 0.00131237, 0.000958911, 0.000893456, 0.000657819, 0.000654547, 0.000497455, 0.000497455, 0.000445092, 0.000369819, 0.000366546, 0.000356728, 0.000474546, 0.000576001, 0.000579274, 0.000605456, 0.000595637, 0.000523637, 0.000559637, 0.000546546, 0.000494183, 0.000451637, 0.000343637, 0.000409092, 0.000412364, 0.000487637, 0.000471274, 0.00045491, 0.000438546, 0.000507274, 0.000494183, 0.000422183, 0.00041891, 0.000458183, 0.000428728, 0.000500728, 0.000409092, 0.000343637
).toDoubleArray()
)
private val fineInterpolator = BicubicInterpolator().interpolate(x, yFine, gridFine)
private val yCoarse = arrayOf(50.0, 150.0, 250.0, 350.0, 450.0, 550.0, 650.0, 750.0, 850.0, 950.0, 1050.0, 1150.0, 1250.0, 1350.0, 1450.0, 1550.0, 1650.0, 1750.0, 1850.0, 1950.0, 2050.0, 2150.0, 2250.0, 2350.0, 2450.0, 2550.0, 2650.0, 2750.0, 2850.0, 2950.0, 3050.0, 3150.0, 3250.0, 3350.0, 3450.0, 3550.0, 3650.0, 3750.0, 3850.0, 3950.0, 4050.0, 4150.0, 4250.0, 4350.0, 4450.0, 4550.0, 4650.0, 4750.0, 4850.0, 4950.0, 5050.0, 5150.0, 5250.0, 5350.0, 5450.0, 5550.0, 5650.0, 5750.0, 5850.0, 5950.0, 6050.0, 6150.0, 6250.0, 6350.0, 6450.0, 6550.0, 6650.0, 6750.0, 6850.0, 6950.0, 7050.0, 7150.0, 7250.0, 7350.0, 7450.0).toDoubleArray()
private val gridCoarse = arrayOf(
arrayOf(
0.000573285, 0.000401695, 0.000336764, 0.000308226, 0.000283844, 0.000265222, 0.000253997, 0.000236095, 0.000229255, 0.000222022, 0.000213251, 0.000211353, 0.00020592, 0.000200324, 0.000199375, 0.000194695, 0.000193222, 0.000190637, 0.000182389, 0.000185171, 0.000183339, 0.000179673, 0.000178004, 0.000176139, 0.000182979, 0.000175419, 0.000174764, 0.000172048, 0.000169986, 0.000171917, 0.000174895, 0.000178659, 0.000169069, 0.000172309, 0.000172669, 0.000169691, 0.000167335, 0.000174142, 0.000172931, 0.0001746, 0.000171197, 0.000172146, 0.000173324, 0.000172768, 0.000172277, 0.000175222, 0.000172768, 0.000172309, 0.00017568, 0.000177808, 0.000176073, 0.000179902, 0.000177153, 0.000180819, 0.000183895, 0.000182062, 0.000179182, 0.000186088, 0.000182815, 0.000187888, 0.000189131, 0.000190931, 0.000187495, 0.000194695, 0.000194106, 0.000200782, 0.000195219, 0.000200029, 0.000198426, 0.000204808, 0.0, 0.0, 0.0, 0.0, 0.0
).toDoubleArray(),
arrayOf(
0.000524946, 0.000371357, 0.000317062, 0.000280375, 0.0002574, 0.000236913, 0.000227455, 0.000215509, 0.000203531, 0.000198, 0.000193877, 0.000190179, 0.000184255, 0.000181931, 0.000183109, 0.000173618, 0.000170706, 0.000171262, 0.000168578, 0.000162753, 0.000163702, 0.000159284, 0.000159513, 0.00015912, 0.000152346, 0.000158662, 0.000155815, 0.000153949, 0.000155455, 0.000149695, 0.000151233, 0.000147175, 0.000148353, 0.000148648, 0.000148975, 0.000148189, 0.000150022, 0.000149368, 0.000145931, 0.000145015, 0.000147568, 0.000148484, 0.000143935, 0.000148713, 0.000145866, 0.000145211, 0.000144557, 0.000149924, 0.000149204, 0.00014652, 0.000149924, 0.00014976, 0.000149498, 0.000150709, 0.000149368, 0.000150677, 0.000152149, 0.000150186, 0.000152313, 0.000154506, 0.000154178, 0.000151495, 0.000153458, 0.00015156, 0.000157648, 0.000155815, 0.000156404, 0.000158728, 0.000157877, 0.000159513, 0.0, 0.0, 0.0, 0.0, 0.0
).toDoubleArray(),
arrayOf(
0.000501579, 0.000341804, 0.000288361, 0.0002592, 0.000238124, 0.000219895, 0.000210666, 0.000200848, 0.000196004, 0.000191193, 0.000176891, 0.000173062, 0.000173226, 0.000168088, 0.000159218, 0.00016524, 0.000156044, 0.000156044, 0.000146946, 0.000152935, 0.000148157, 0.000147371, 0.000145211, 0.000144262, 0.000143935, 0.000143968, 0.000136768, 0.000138306, 0.000136473, 0.000138862, 0.000135982, 0.000134248, 0.000131989, 0.000135949, 0.000134902, 0.00013212, 0.000131728, 0.00013068, 0.000135491, 0.000131793, 0.000127964, 0.000131269, 0.000131564, 0.000129338, 0.000128488, 0.000131531, 0.000131335, 0.000128782, 0.000133724, 0.000129568, 0.000132088, 0.000127571, 0.000131629, 0.000127669, 0.000131204, 0.000132251, 0.000130648, 0.000127277, 0.000135033, 0.000134509, 0.0001332, 0.000130778, 0.000132153, 0.000135917, 0.000133495, 0.000135033, 0.000132938, 0.000135655, 0.000133691, 0.000132415, 0.0, 0.0, 0.0, 0.0, 0.0
).toDoubleArray(),
arrayOf(
0.000459132, 0.000318928, 0.00027396, 0.000241953, 0.000222742, 0.000210404, 0.000194433, 0.000185924, 0.000179051, 0.000169593, 0.00016812, 0.000164717, 0.00015552, 0.000157713, 0.000153982, 0.000145473, 0.000146029, 0.000142298, 0.000140695, 0.000138698, 0.000135164, 0.000135328, 0.000134608, 0.000132382, 0.000127735, 0.000128684, 0.0001296, 0.000127538, 0.000129109, 0.000121189, 0.000126066, 0.000122269, 0.000121615, 0.000120862, 0.000123447, 0.000119357, 0.000121124, 0.000118735, 0.000120764, 0.000115789, 0.000119455, 0.000120175, 0.000116509, 0.000118309, 0.0001188, 0.000117458, 0.000116215, 0.000117687, 0.000114611, 0.000116509, 0.000117229, 0.000115462, 0.000116607, 0.00011412, 0.000116967, 0.000116247, 0.000117426, 0.0001188, 0.000113597, 0.000117786, 0.000118604, 0.000118309, 0.000117786, 0.000117949, 0.000117426, 0.000117884, 0.000117426, 0.000116411, 0.000118506, 0.000118866, 1.30909e-7, 0.0, 0.0, 0.0, 0.0
).toDoubleArray()
)
private val coarseOInterpolator = BicubicInterpolator().interpolate(x, yCoarse, gridCoarse)
fun value(ei: Double, delta: Double): Double {
val ei = max(12000.0, min(18000.0, ei))
return if (delta < 50.0) {
fineInterpolator.value(ei, min(49.0, delta))
} else {
coarseOInterpolator.value(ei, min(6850.0, delta))
}
}
}

View File

@@ -0,0 +1,117 @@
package ru.inr.mass.scripts
import ru.inr.mass.models.*
import ru.inr.mass.models.NBkgSpectrum.Companion.bkg
import ru.inr.mass.models.NBkgSpectrum.Companion.norm
import ru.inr.mass.models.NumassBeta.e0
import ru.inr.mass.models.NumassBeta.mnu2
import ru.inr.mass.models.NumassBeta.msterile2
import ru.inr.mass.models.NumassBeta.u2
import ru.inr.mass.models.NumassTransmission.Companion.thickness
import ru.inr.mass.models.NumassTransmission.Companion.trap
import ru.inr.mass.workspace.buffer
import space.kscience.dataforge.meta.Value
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.real.step
import space.kscience.kmath.structures.asBuffer
import space.kscience.kmath.structures.toDoubleArray
import space.kscience.plotly.*
import space.kscience.plotly.models.AxisType
import space.kscience.plotly.models.ScatterMode
import space.kscience.plotly.models.TraceType
import kotlin.math.pow
fun main() {
val maxDelta = (WALL_R - WALL_L);
val rearTrapInterpolator = RearTrapInterpolator()
val range = (WALL_L - 10.0)..18600.0 step 10.0
val spectrum: NBkgSpectrum = SterileNeutrinoSpectrum(
fss = null,
transmission = NumassTransmission(
trapFunc = { ei, ef, _ ->
val delta = ei - ef
rearTrapInterpolator.value(ei, delta)
},
adjustX = false,
),
resolution = NumassResolution(1.7e-4, tailFunction = {
e,u -> adiab2024(e,u)
})
).withNBkg()
val args: Map<Symbol, Double> = mapOf(
norm to 1000.0,
bkg to 0.0,
mnu2 to 0.0,
e0 to 18575.0,
msterile2 to 0000.0.pow(2),
u2 to 0e-2,
thickness to 0.0,
trap to 0.521
)
Plotly.page {
plot {
layout {
title = "Sterile neutrino spectrum"
yaxis.type = AxisType.log
}
scatter {
name = "NumassBeta + RearTrap"
mode = ScatterMode.lines
x.buffer = range
y.numbers = x.doubles.map {
val value = spectrum(it, args)
println("${it}\t${value}")
value
}
}
scatter {
name = "(NumassBeta + RearTrap) / NumassBeta"
mode = ScatterMode.lines
x.buffer = range
y.numbers = x.doubles.map { spectrum(it, args) / NumassBeta(0.0, it, args) }
}
scatter {
name = "NumassBeta"
mode = ScatterMode.lines
x.buffer = range
y.numbers = x.doubles.map { NumassBeta(0.0, it, args) }
}
}
plot {
val eis = (WALL_L..WALL_R step 100.0).toDoubleArray()
val deltas = (0.0..maxDelta step 10.0).toDoubleArray()
val values = eis.map { ei ->
deltas.map { rearTrapInterpolator.value(ei, it) }.toList()
}
layout {
}
trace {
type = TraceType.surface
x.numbers = deltas.toList()
y.numbers = eis.toList()
z.value = Value.of(values)
}
}
plot {
for (HV in (WALL_L..WALL_R step 1000.0)) {
scatter {
name = "${HV / 1000.0} keV"
mode = ScatterMode.lines
x.buffer = (0.0..90.0 step 1.0).toDoubleArray().plus((100.0..maxDelta step 10.0).toDoubleArray()).asBuffer()
y.numbers = x.doubles.map {
rearTrapInterpolator.value(HV, it)
}
}
}
}
}.makeFile()
}

View File

@@ -0,0 +1,74 @@
// Code generated by trap-spectrum-2024-11.jl Julia notebook 2025-03-11T12:56:45.212
package ru.inr.mass.scripts
import org.apache.commons.math3.analysis.interpolation.PiecewiseBicubicSplineInterpolator
class RearTrapInterpolator {
private val x = arrayOf(10000.0, 12000.0, 14000.0, 16000.0, 18000.0, 19000.0, ).toDoubleArray()
private val yCoarse = arrayOf(
100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0, 1100.0, 1200.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0, 2100.0, 2200.0, 2300.0, 2400.0, 2500.0, 2600.0, 2700.0, 2800.0, 2900.0, 3000.0, 3100.0, 3200.0, 3300.0, 3400.0, 3500.0, 3600.0, 3700.0, 3800.0, 3900.0, 4000.0, 4100.0, 4200.0, 4300.0, 4400.0, 4500.0, 4600.0, 4700.0, 4800.0, 4900.0, 5000.0, 5100.0, 5200.0, 5300.0, 5400.0, 5500.0, 5600.0, 5700.0, 5800.0, 5900.0, 6000.0, 6100.0, 6200.0, 6300.0, 6400.0, 6500.0, 6600.0, 6700.0, 6800.0, 6900.0, 7000.0, 7100.0, 7200.0, 7300.0, 7400.0, 7500.0, 7600.0, 7700.0, 7800.0, 7900.0, 8000.0, 8100.0, 8200.0, 8300.0, 8400.0, 8500.0, 8600.0, 8700.0, 8800.0, 8900.0, 9000.0,
).toDoubleArray()
private val gridCoarse = arrayOf(
arrayOf(
0.0007805053872790702, 0.0007805053872790702, 0.0006731202450986702, 0.0006030148166265464, 0.0005485627486065162, 0.0005170758080918605, 0.00048803470514784445, 0.00047186643152298443, 0.0004569082038541251, 0.0004377791794858592, 0.000428690961986535, 0.0004096906659114607, 0.00041252268836167497, 0.00040492771906337294, 0.0003952988427326442, 0.00038561847508463885, 0.0003876008907997889, 0.00037786903183450695, 0.00037395569172148346, 0.00036957892975297043, 0.00036816291852786326, 0.00036504769383262744, 0.00036504769383262744, 0.0003645842719771379, 0.0003670301095477775, 0.00035459495642547274, 0.0003630395324588391, 0.0003555475457950903, 0.0003678797162828418, 0.0003508618359229175, 0.0003503984140674279, 0.0003611858450368806, 0.0003564228981887929, 0.00035951237722539034, 0.0003600530360567949, 0.0003601045273740716, 0.0003600272903981566, 0.0003626276019206261, 0.0003601045273740716, 0.00035904895536990075, 0.0003607224231813911, 0.0003733635415728023, 0.0003702998081948432, 0.0003704027908293964, 0.00037913056910778416, 0.00037568065085025036, 0.000378538418959103, 0.00037931078871825244, 0.00038518079888778757, 0.0003882445322657467, 0.0003951443687808143, 0.00039313620740702595, 0.000406910134778523, 0.0003992636741629443, 0.0004118275555784406, 0.0004128573819239731, 0.00041656475676789, 0.00042853648803470513, 0.00042645108968500183, 0.00043196066063360067, 0.00043685233577487996, 0.0004486438474312269, 0.00045881338259336023, 0.0004621860638749791, 0.00046846800458272725, 0.0004760887195396676, 0.00048504820874580024, 0.0004977923097717647, 0.0005093006191830902, 0.0005208604199116924, 0.0005250569622697373, 0.0005362048324601264, 0.000546400113280898, 0.0005621822020261834, 0.0005776810885264473, 0.0005902192242833053, 0.000602165209891482, 0.0006229677020712383, 0.0006481469562195075, 0.0006624357967637707, 0.000684731537144549, 0.0007208269505554626, 0.0007359396521761519, 0.0007688940952331912, 0.0007981669091049521, 0.0008345970160781638, 0.0008811194212375938, 0.0009320958253414518, 0.0009804204266055637, 0.0010394037305459368,
).toDoubleArray(),
arrayOf(
0.000710792137318904, 0.000710792137318904, 0.0005979900532347581, 0.0005400702245744824, 0.0004930135815562672, 0.0004664219446646828, 0.00043769370964918605, 0.00042062666680395814, 0.00041002090262260983, 0.00039449838854165595, 0.00038327481285459805, 0.0003749086153814471, 0.0003615226994244056, 0.00035184365250162176, 0.00034530514739952836, 0.0003384577365445802, 0.00034054285037635017, 0.00033094102989178004, 0.00032782623021716074, 0.00032623021716074425, 0.0003208501086318564, 0.00031912538484508377, 0.0003138225027544096, 0.00031464625142868914, 0.00031613929590082067, 0.0003140541820690507, 0.00030918891646158756, 0.00031091364024836025, 0.00030460681446090797, 0.0003082364570569519, 0.0003030108014044915, 0.00030084846113450785, 0.0003042206822698395, 0.00029595745338097346, 0.00030164646766271615, 0.00030198111556164217, 0.00029701288136989404, 0.000303062285696634, 0.0002989692844713078, 0.00030445236158448054, 0.00029799108292060094, 0.00030658895970839294, 0.00030249595848306685, 0.0003076443876973136, 0.0003111968038551438, 0.00031353933914762605, 0.00030386029222484223, 0.0003005138132355818, 0.0003068721233151765, 0.0003152125786422563, 0.0003072067712141026, 0.000312870043349774, 0.0003158561322940371, 0.0003207471400475715, 0.00031490367288940143, 0.0003222916688118455, 0.0003210560458004263, 0.0003274915823182347, 0.00032324412821648114, 0.0003382517993760104, 0.000326307443598958, 0.00033511125755531987, 0.00033570332691495823, 0.00034491901520845993, 0.0003381230886456542, 0.0003475961983998682, 0.00034847143136629017, 0.0003533881812658958, 0.0003546752885694575, 0.0003588455162329973, 0.000362887033166181, 0.0003628355488740385, 0.0003678037830657866, 0.00037609275410072383, 0.00038183325267460903, 0.00038546289527065296, 0.0003925934697323846, 0.00039617162803628613, 0.00040214380592481233, 0.0004039200140037275, 0.0004150148789604292, 0.0004234325607257226, 0.0004234583028717938, 0.00043622640732312576, 0.000441658000144156, 0.00044227581164986565, 0.00045772109929260584, 0.0004633071449900635, 0.0004745049785310502, 0.0004873245672745245,
).toDoubleArray(),
arrayOf(
0.0006538233855815509, 0.0006538233855815509, 0.0005522610866599747, 0.0004885079659228374, 0.00045018402697346406, 0.0004202506884925231, 0.00040277456052299694, 0.0003840115306411345, 0.0003655830952564795, 0.0003564203536406455, 0.0003445036419324119, 0.00033593287519625254, 0.00032689882377165213, 0.0003192031503358814, 0.0003121509278562788, 0.00030880498288420456, 0.00030159833217512165, 0.00030226752116953645, 0.000295858749646102, 0.00028983604869636836, 0.0002898617867346151, 0.000284817131238257, 0.00028188299487813035, 0.0002778678609116413, 0.0002752940570869688, 0.0002745733920160606, 0.00027254008699456925, 0.00026940004632846883, 0.00026808740637788585, 0.000266491648006589, 0.00026659460015957583, 0.0002667490283890562, 0.00026463850925282473, 0.0002649473657117854, 0.0002642781767173706, 0.00026237356188711295, 0.00025689135974056056, 0.00026296553676678763, 0.0002610866599747767, 0.00026373767791418936, 0.0002576892389262091, 0.0002592077831827658, 0.00026098370782178985, 0.000258718760456078, 0.000260494685095102, 0.000259001878876792, 0.0002643811288703575, 0.0002653076982472396, 0.0002595166396417265, 0.0002656165547062003, 0.0002645870331763313, 0.00026070058940107585, 0.0002663114817388619, 0.00026432965279386405, 0.0002639693202584099, 0.000263403083416982, 0.0002672637891539907, 0.00026847347695158676, 0.0002738269889069055, 0.00026855069106632693, 0.0002706612102025584, 0.00026808740637788585, 0.00027501093866625487, 0.0002734923944096981, 0.00027513962885748847, 0.0002741615834041129, 0.0002795665714359252, 0.00028239775564306487, 0.00027902607263274393, 0.00028870357501351246, 0.00028721076879520245, 0.00028785421975137057, 0.00028679896018325485, 0.0002892698118549404, 0.0002937482305098705, 0.00029199804390909323, 0.00029827812524129413, 0.0002978405785910998, 0.0003058193704475845, 0.0003060252747535583, 0.0003067459398244666, 0.00030847038838699713, 0.00031377242426582243, 0.0003133606156538749, 0.00032422206779399274, 0.0003189457699534142, 0.0003293696754433377, 0.0003299616503230123, 0.00033760584768228964, 0.00033531516227833116,
).toDoubleArray(),
arrayOf(
0.0006080969826699049, 0.0006080969826699049, 0.000510383649610999, 0.00045429753426913104, 0.0004250710081093319, 0.00038305787675462063, 0.0003740532252089079, 0.00035426871938418474, 0.00033721133659902027, 0.0003207456880582884, 0.00031171530893673075, 0.00030088399950603057, 0.0003023247437533446, 0.00029445210554480717, 0.0002894352282550529, 0.0002831576997488989, 0.0002753622442678961, 0.0002718375663771457, 0.0002669750545424608, 0.00026646050302556293, 0.0002600800642160293, 0.0002589223233030091, 0.0002549860041987404, 0.0002557835590499321, 0.0002490172066027251, 0.0002549602766228955, 0.00024461779113324825, 0.00024441197052648913, 0.0002453638908327502, 0.0002421479438521385, 0.0002379543489894208, 0.00023653933231795166, 0.00023911208990244103, 0.0002392407277816655, 0.0002329374716996666, 0.00023579323261844977, 0.00023466121928127442, 0.0002320112789692504, 0.0002332204750339604, 0.000233554933519944, 0.00023412094018853167, 0.00023113654139052402, 0.00022876960441279383, 0.00023044189684271187, 0.0002319855513934055, 0.00022869242168525912, 0.0002268657638002717, 0.0002303904416910221, 0.00022735458774132466, 0.00022601675379739017, 0.00022606820894908, 0.00022897542501955297, 0.00022943852138476107, 0.00022967006956736507, 0.0002328088338204421, 0.00023424957806775614, 0.0002280492322891368, 0.00022727740501379, 0.00023383793685423785, 0.0002367451529247108, 0.000231625365331577, 0.0002336063886716338, 0.00023530440867739676, 0.0002355874120116906, 0.00023090499320791997, 0.00023661651504548636, 0.00023828880747540446, 0.00023219137200016467, 0.00024222512657967317, 0.00023705388383484955, 0.00024322850203762402, 0.00023589614292182933, 0.0002464959041699255, 0.0002440775120405055, 0.00024698472811097847, 0.00024582698719795824, 0.00024780801053801504, 0.0002447978841641625, 0.00024747355205203143, 0.0002515642366113695, 0.0002476021899312559, 0.00025516609722965464, 0.0002547544560161363, 0.0002544714526818425, 0.0002624470011937595, 0.0002573786687523155, 0.0002638620178652287, 0.00025925678178899273, 0.0002595397851232865, 0.0002673609681801342,
).toDoubleArray(),
arrayOf(
0.0005667653424597744, 0.0005667653424597744, 0.00047295059449383944, 0.00042668508386586596, 0.0003962094117707469, 0.0003662215558254234, 0.0003392376203814722, 0.00032776110359417803, 0.0003106875383513355, 0.00030265140914680956, 0.0002929721097534988, 0.00028380630104418334, 0.00028111047495320816, 0.000278311950725434, 0.00026557738176235135, 0.00026601384884374736, 0.0002577209742972238, 0.00024994159043469555, 0.000245987712167932, 0.00024460128732114474, 0.00024116089973837652, 0.00023938935687859282, 0.00023705297426641436, 0.00023214913823425959, 0.00022893982145928918, 0.00022593590095791686, 0.00022896549599348896, 0.00022069829598116513, 0.00021795112082179048, 0.00022246983884094884, 0.0002155633891412125, 0.0002210834139941616, 0.00021641064876980472, 0.0002151525965940163, 0.00021810516802698906, 0.00021597418168840872, 0.00021540934193601394, 0.00021112169472465347, 0.00021797679535599026, 0.0002123540723662421, 0.0002096839208094667, 0.00020942717546746907, 0.0002066286512396949, 0.00020770698167608495, 0.00020806642515488165, 0.00020809209968908137, 0.00020678269844489347, 0.00020288016924652943, 0.00020827182142847973, 0.0002115068127376499, 0.00020549897173490533, 0.0002057043680085034, 0.00020385580154612046, 0.00020501115558510977, 0.00020526790092710744, 0.00020544762266650577, 0.00020632055682929772, 0.00020637190589769725, 0.0002070394437868911, 0.0002069624201842918, 0.00020593543881630125, 0.00020205858415213703, 0.0002052935754613072, 0.00020857991583887687, 0.00020896503385187335, 0.00020840019409947857, 0.00020829749596267948, 0.000211712209011248, 0.0002063462313634975, 0.000210736576711657, 0.0002070137692526913, 0.0002077326562102847, 0.00020852856677047737, 0.00021225137422944306, 0.00021484450218361916, 0.00021107034565625391, 0.00021194327981904586, 0.0002173862810693957, 0.00021335537920003284, 0.00021615390342780705, 0.00021327835559743357, 0.00021625660156460614, 0.00021599985622260847, 0.00022069829598116513, 0.00021607687982520778, 0.000214536407773222, 0.00021920917299757888, 0.0002214942065413578, 0.00022390761275613557, 0.00022701423139430695,
).toDoubleArray(),
arrayOf(
0.0005479427438980562, 0.0005479427438980562, 0.0004632291784324396, 0.00041283744236910466, 0.0003757945105609578, 0.00035376898353989755, 0.0003343105342602195, 0.0003201916066826168, 0.00030807499974329225, 0.0002923131424112048, 0.0002849456292934375, 0.00027234127758325033, 0.00027123743415445595, 0.0002654358384589319, 0.00025855607011202725, 0.00025011038434287947, 0.0002467475125016686, 0.00024341031143787156, 0.0002383274975099346, 0.00023488761333648227, 0.00023740334952303697, 0.00022924004230544118, 0.00022456796081612537, 0.00022931705463768263, 0.00022189819996508772, 0.0002218468584102601, 0.000220409294875086, 0.00021219464610266258, 0.00021902307289473953, 0.00021571154260835635, 0.00021450501606990667, 0.0002095762268064526, 0.0002132214771992155, 0.00020975592224834936, 0.00020654707507162146, 0.00020824134638093382, 0.00020341524022713504, 0.00020521219464610265, 0.00020113054103730477, 0.00020292749545627238, 0.00019941059895057863, 0.0001968435212091963, 0.0002035949356690318, 0.00019512357912247015, 0.00020338956944972124, 0.00019876882951523305, 0.00019992401449885508, 0.0001958423608900572, 0.00019496955445798722, 0.00019566266544816043, 0.000195868031667471, 0.00019535461611919455, 0.00019550864078367747, 0.0001990512080667851, 0.0001990512080667851, 0.00019170936572643167, 0.0001937373571421237, 0.00019450748046453837, 0.00019740827831230042, 0.00019702321665109306, 0.00019014344830418843, 0.00019476418823867662, 0.00019740827831230042, 0.0001972029120929898, 0.00019753663219936954, 0.00019571400700298808, 0.00019481552979350427, 0.00019876882951523305, 0.00019522626223212542, 0.00019933358661833716, 0.0002011562118147186, 0.00019712589976074836, 0.0002039286557754115, 0.00019812706007988747, 0.0002015926150307536, 0.00019869181718299158, 0.0001990768788441989, 0.00020231139679834065, 0.00020174663969523655, 0.0002046987790978262, 0.00020264511690472033, 0.0002039029849979977, 0.00020346658178196269, 0.00020297883701110003, 0.00020462176676558472, 0.00020503249920420592, 0.00020187499358230565, 0.00020939653136455583, 0.0002041340219947221, 0.00020811299249386467,
).toDoubleArray(),
)
private val coarseInterpolator = PiecewiseBicubicSplineInterpolator().interpolate(x, yCoarse, gridCoarse)
private val yFine = arrayOf(
0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 100.0,
).toDoubleArray()
private val gridFine = arrayOf(
arrayOf(
0.009824543336379903, 0.009824543336379903, 0.0002754785474299396, 0.00011585546387240451, 6.436414659578028e-5, 4.1193053821299383e-5, 1.802196104681848e-5, 2.5745658638312115e-5, 1.2872829319156057e-5, 5.149131727662423e-6, 7.723697591493634e-6, 0.0, 0.0010555720041707968, 0.004997232341696381, 0.003480813047899798, 0.0024561358340949757, 0.0021265914035245807, 0.002059652691064969, 0.001704362601856262, 0.0015318666889795709, 0.001289857497779437, 0.0012203442194559943, 0.0010967650579920961, 0.0009036726182047552, 0.0008882252230217679, 0.0012924320636432682, 0.0015241429913880771, 0.0012409407463666439, 0.0014546297130646345, 0.001397989264060348, 0.0014546297130646345, 0.0014057129616518414, 0.0011456818094048892, 0.0012563881415496312, 0.001155980072860214, 0.0010916159262644336, 0.0009577385013452107, 0.0009397165402983922, 0.0010993396238559274, 0.0010324009113963158, 0.0010246772138048223, 0.0011173615849027457, 0.0011353835459495642, 0.0010529974383069656, 0.0012538135756858, 0.0012332170487751504, 0.0010324009113963158, 0.001107063321447421, 0.0011019141897197584, 0.0009963569893026787, 0.0010710193993537839, 0.0011147870190389147, 0.0010324009113963158, 0.001047848306579303, 0.000937141974434561, 0.0009731858965281979, 0.0010298263455324845, 0.0010401246089878095, 0.0010324009113963158, 0.0010143789503494973, 0.0009886332917111852, 0.0010066552527580037, 0.0009525893696175483, 0.0009834841599835227, 0.000962887633072873, 0.0008727778278387806, 0.0009577385013452107, 0.001011804384485666, 0.000924269145115405, 0.0009165454475239113, 0.0009036726182047552, 0.0010272517796686533, 0.0009036726182047552, 0.0009551639354813794, 0.0008753523937026119, 0.0009525893696175483, 0.0010864667945367711, 0.000950014803753717, 0.000924269145115405, 0.000950014803753717, 0.0009165454475239113, 0.0009294182768430673, 0.0008624795643834559, 0.000986058725847354, 0.0008985234864770928, 0.0008727778278387806, 0.0009834841599835227, 0.0008058391153791691, 0.001009229818621835, 0.0009577385013452107, 0.0009345674085707297, 0.0009113963157962488, 0.000937141974434561, 0.0009036726182047552, 0.0009680367648005355, 0.000816137378834494, 0.0008135628129706628, 0.0008187119446983253, 0.0008624795643834559, 0.0008779269595664431, 0.0008367339057451437,
).toDoubleArray(),
arrayOf(
0.008929950472110959, 0.008929950472110959, 0.0003011831090334339, 0.0001081170134991814, 4.1187433713973865e-5, 2.5742146071233666e-5, 1.8019502249863567e-5, 2.31679314641103e-5, 7.7226438213701e-6, 5.148429214246733e-6, 5.148429214246733e-6, 5.148429214246733e-6, 0.0009035493271003017, 0.004481707631001782, 0.0033027173409392796, 0.0024249101599102115, 0.001964125745235129, 0.0016861105676658052, 0.0015187866182027863, 0.0013154236642400404, 0.0011480997147770215, 0.0010348342720635933, 0.001003943696778113, 0.0008443423911364642, 0.000849490820350711, 0.0011043380664559244, 0.0014570054676318256, 0.0011455255001698982, 0.0013102752350257936, 0.001397798531667988, 0.0011326544271342814, 0.0012021582215266122, 0.001109486495670171, 0.001052853774313457, 0.0010708732765633206, 0.000947310975421399, 0.0008649361079934512, 0.0008958266832789315, 0.0009370141169929055, 0.0010065179113852363, 0.0010425569158849634, 0.0009833499799211261, 0.0009061235417074251, 0.0010065179113852363, 0.0010631506327419505, 0.00103226005745647, 0.0010785959203846907, 0.0010065179113852363, 0.000996221052956743, 0.0008932524686718083, 0.0009009751124931783, 0.0009061235417074251, 0.0009782015507068793, 0.0009653304776712625, 0.0008829556102433148, 0.0009086977563145484, 0.0009241430439572886, 0.0009679046922783859, 0.0009884984091353727, 0.0009421625462071522, 0.0008469166057435876, 0.0008134518158509839, 0.0009936468383496195, 0.0009447367608142756, 0.0008932524686718083, 0.0008829556102433148, 0.0008314713181008474, 0.0008211744596723539, 0.000926717258564412, 0.0007954323136011203, 0.0008803813956361914, 0.0008520650349578343, 0.0008829556102433148, 0.000800580742815367, 0.0009318656877786587, 0.0008572134641720811, 0.0008108776012438605, 0.0008391939619222176, 0.0008855298248504381, 0.0008057291720296138, 0.0007748385967441334, 0.0008186002450652306, 0.0009061235417074251, 0.0008263228888866007, 0.0008855298248504381, 0.0008186002450652306, 0.0008057291720296138, 0.0008237486742794773, 0.0008546392495649577, 0.0007182058753874193, 0.0008417681765293408, 0.0008443423911364642, 0.0008057291720296138, 0.0008726587518148213, 0.000870084537207698, 0.0008211744596723539, 0.0007619675237085166, 0.0007799870259583801, 0.0007671159529227632, 0.0007696901675298866, 0.0008469166057435876,
).toDoubleArray(),
arrayOf(
0.008295369726919414, 0.008295369726919414, 0.00024193755951921344, 8.236172238951947e-5, 5.147607649344967e-5, 2.5738038246724835e-5, 1.8016626772707386e-5, 3.08856458960698e-5, 1.0295215298689933e-5, 7.72141147401745e-6, 1.0295215298689933e-5, 2.5738038246724833e-6, 0.0007875839703497799, 0.003948215067047589, 0.0027385272694515224, 0.0020101407870692094, 0.0016317916248423546, 0.0015005276297840578, 0.0014155921035698658, 0.001186523563174015, 0.0010784238025377706, 0.0008905361233366792, 0.0008853885156873343, 0.0007618459321030551, 0.0007335340900316578, 0.0009497336113041464, 0.0013126399505829665, 0.001011504903096286, 0.0012328520320181195, 0.0011788021516999975, 0.001101588036959823, 0.001101588036959823, 0.0010526857642910456, 0.0010501119604663732, 0.0008750933003886444, 0.0009214217692327491, 0.0008442076544925745, 0.0008339124391938846, 0.0009239955730574215, 0.000947159807479474, 0.0009548812189534914, 0.0010089310992716135, 0.0009137003577587316, 0.0009291431807067665, 0.0009600288266028363, 0.0009059789462847142, 0.000926569376882094, 0.0009188479654080766, 0.0008184696162458498, 0.0008545028697912646, 0.0008158958124211773, 0.0008596504774406095, 0.0007798625588757625, 0.0008699456927392994, 0.0009188479654080766, 0.0008879623195120068, 0.0008828147118626618, 0.0008802409080379893, 0.0008004529894731423, 0.0008931099271613517, 0.0008030267932978148, 0.0008339124391938846, 0.0008107482047718323, 0.0007335340900316578, 0.000926569376882094, 0.0009445860036548015, 0.0008493552621419196, 0.000782436362700435, 0.0008107482047718323, 0.0008519290659665921, 0.000862224281265282, 0.0007489769129796927, 0.0007669935397524001, 0.0008056005971224874, 0.0008313386353692121, 0.0007669935397524001, 0.0007901577741744524, 0.0007386816976810027, 0.0008364862430185571, 0.0007747149512264175, 0.0007618459321030551, 0.000782436362700435, 0.000782436362700435, 0.0008056005971224874, 0.0007721411474017451, 0.0007978791856484698, 0.0006717627982395182, 0.0007798625588757625, 0.0007335340900316578, 0.0007850101665251074, 0.0007258126785576404, 0.0008416338506679021, 0.0006872056211875531, 0.000702648444135588, 0.00077728875505109, 0.0007155174632589504, 0.0007232388747329679, 0.0007412555015056752, 0.0007077960517849329, 0.0006666151905901733, 0.0007180912670836229,
).toDoubleArray(),
arrayOf(
0.007659099329024822, 0.007659099329024822, 0.00024441197052648913, 0.0001132013337175318, 4.8882394105297825e-5, 4.37368789363191e-5, 2.058206067591487e-5, 1.2863787922446796e-5, 1.0291030337957436e-5, 1.0291030337957436e-5, 7.718272753468077e-6, 7.718272753468077e-6, 0.0007563907298398716, 0.0034500679208002306, 0.002534166220722019, 0.0018678220063392747, 0.001649137611657679, 0.0014536080352364879, 0.0012709422467377435, 0.0011783229736961264, 0.0010779854279010415, 0.0008412917301280204, 0.0006869262750586588, 0.0006792080023051908, 0.0005917342444325526, 0.0008721648211418927, 0.001168031943358169, 0.0010908492158234883, 0.0010985674885769564, 0.0010857037006545096, 0.0011294405795908287, 0.0010136664882888075, 0.000939056518338616, 0.0008876013666488289, 0.0008695920635574034, 0.0008001276087761907, 0.0007075083357345737, 0.0007435269419174248, 0.0008515827604659779, 0.0008593010332194459, 0.0007615362450088503, 0.0008850286090643395, 0.0008927468818178076, 0.0007924093360227226, 0.0008284279422055736, 0.0009442020335075948, 0.0007718272753468077, 0.0008052731239451694, 0.000831000699790063, 0.0008258551846210843, 0.0008284279422055736, 0.0008284279422055736, 0.0007718272753468077, 0.000794982093607212, 0.0007846910632692545, 0.000766681760177829, 0.0006869262750586588, 0.0008284279422055736, 0.0008001276087761907, 0.0008078458815296588, 0.0007100810933190631, 0.0007975548511917013, 0.0007512452146708928, 0.0007538179722553822, 0.0007744000329312971, 0.0006766352447207015, 0.0007718272753468077, 0.0007126538509035524, 0.0006714897295517227, 0.000766681760177829, 0.0007744000329312971, 0.0007049355781500844, 0.0007512452146708928, 0.0007100810933190631, 0.0006689169719672333, 0.0008181369118676162, 0.0007846910632692545, 0.0007460996995019141, 0.0007538179722553822, 0.0006972173053966163, 0.0006637714567982547, 0.0006894990326431483, 0.0006972173053966163, 0.0007332359115794673, 0.0006509076688758079, 0.0007795455481002758, 0.0006714897295517227, 0.0006406166385378504, 0.0006354711233688717, 0.0006200345778619355, 0.000738381426748446, 0.0007203721236570205, 0.0006997900629811056, 0.0005917342444325526, 0.0007460996995019141, 0.0006843535174741695, 0.0006534804264602972, 0.0006817807598896801, 0.0007358086691639567, 0.0007589634874243609, 0.0006740624871362121,
).toDoubleArray(),
arrayOf(
0.007024552557055233, 0.007024552557055233, 0.00025161043515768017, 0.00010783304363900578, 5.6483975239479214e-5, 3.337689445969227e-5, 2.8241987619739607e-5, 7.702360259928983e-6, 2.567453419976328e-6, 1.0269813679905312e-5, 5.134906839952656e-6, 5.134906839952656e-6, 0.000626458634474224, 0.003450657396448185, 0.0024570529229173458, 0.0017201937913841397, 0.0015764163998654654, 0.001329940871547738, 0.001222107827908732, 0.000955092672231194, 0.0009294181380314308, 0.0008087478272925433, 0.0007548313054730405, 0.0007137520507534192, 0.000611053913954366, 0.000836989814912283, 0.0011117073308497501, 0.000962795032491123, 0.0010192790077306023, 0.0010372511816704366, 0.0010064417406307207, 0.0009730648461710284, 0.0008395572683322593, 0.0008036129204525907, 0.0007753709328328511, 0.0007882081999327327, 0.0007240218644333245, 0.0007111845973334429, 0.0007214544110133482, 0.0007394265849531825, 0.0008036129204525907, 0.0007856407465127564, 0.0008010454670326143, 0.0007933431067726854, 0.0008523945354321409, 0.0008472596285921882, 0.0008498270820121646, 0.0007471289452131115, 0.0007676685725729221, 0.0007188869575933719, 0.0007342916781132298, 0.0007933431067726854, 0.0006726727960337979, 0.0007419940383731589, 0.0007651011191529458, 0.0006598355289339163, 0.0007291567712732771, 0.0007651011191529458, 0.0007265893178533009, 0.0006855100631336796, 0.0007188869575933719, 0.0007805058396728037, 0.0007599662123129931, 0.00065726807551394, 0.000790775653352709, 0.000626458634474224, 0.0006829426097137033, 0.0007445614917931351, 0.0006392959015741056, 0.0007009147836535375, 0.0007060496904934902, 0.0007599662123129931, 0.0006752402494537743, 0.000641863354994082, 0.0006829426097137033, 0.0007163195041733955, 0.000626458634474224, 0.0007368591315332062, 0.0007959105601926617, 0.00065726807551394, 0.0006829426097137033, 0.0006906449699736323, 0.000634160994734153, 0.0006701053426138216, 0.000641863354994082, 0.000680375156293727, 0.0006444308084140583, 0.0007548313054730405, 0.000500653416895384, 0.0006213237276342714, 0.0005982166468544844, 0.0006469982618340347, 0.0006855100631336796, 0.0006469982618340347, 0.0006469982618340347, 0.0006187562742142951, 0.0005879468331745791, 0.000611053913954366, 0.0005674072058147685, 0.0005930817400145318, 0.0006238911810542478,
).toDoubleArray(),
arrayOf(
0.006774518159507943, 0.006774518159507943, 0.00017199420867261545, 8.214648772423425e-5, 2.823785515520552e-5, 4.107324386211712e-5, 1.28353887069116e-5, 1.540246644829392e-5, 7.70123322414696e-6, 7.70123322414696e-6, 5.13415548276464e-6, 2.56707774138232e-6, 0.0006725743682421679, 0.003586207604711101, 0.0024566933985028802, 0.001732777475433066, 0.0013939232135705998, 0.0013194779590705126, 0.0011500508281392793, 0.001019129863328781, 0.0008394344214320186, 0.0007547208559664021, 0.0006956780679146088, 0.0005647571031041104, 0.0005801595695524043, 0.0008471356546561656, 0.001034532329777075, 0.0008445685769147833, 0.001034532329777075, 0.0010935751178288682, 0.0009267150646390175, 0.0008574039656216949, 0.0008651051988458418, 0.0008368673436906363, 0.0007932270220871369, 0.0007110805343629027, 0.0007085134566215204, 0.0006623060572766386, 0.0007906599443457546, 0.0007726904001560783, 0.0007547208559664021, 0.0008574039656216949, 0.000842001499173401, 0.0007957940998285192, 0.0008445685769147833, 0.0007290500785525789, 0.0007675562446733137, 0.000777824555638843, 0.0007239159230698143, 0.000649470668569727, 0.0007033793011387557, 0.0006982451456559911, 0.0006469035908283447, 0.0007547208559664021, 0.0006751414459835502, 0.0006520377463111093, 0.0007675562446733137, 0.0008163307217595778, 0.0007187817675870496, 0.0007033793011387557, 0.0006828426792076972, 0.0007547208559664021, 0.0006931109901732264, 0.0006597389795352563, 0.0006725743682421679, 0.0007239159230698143, 0.0006597389795352563, 0.0007803916333802253, 0.0006854097569490795, 0.0006725743682421679, 0.0007008122233973734, 0.000649470668569727, 0.0007624220891905491, 0.000713647612104285, 0.0006674402127594032, 0.0007341842340353435, 0.0006366352798628154, 0.0006725743682421679, 0.00064176943534558, 0.0005929949582593159, 0.0006160986579317569, 0.0006520377463111093, 0.0006135315801903745, 0.0006443365130869624, 0.000649470668569727, 0.0006160986579317569, 0.0006725743682421679, 0.000569891258586875, 0.0006982451456559911, 0.0006186657356731392, 0.0006597389795352563, 0.0006854097569490795, 0.0006469035908283447, 0.0006109645024489922, 0.0005878608027765512, 0.0006469035908283447, 0.0005929949582593159, 0.0006135315801903745, 0.0005673241808454927, 0.0006520377463111093, 0.0006828426792076972,
).toDoubleArray(),
)
private val fineInterpolator = PiecewiseBicubicSplineInterpolator().interpolate(x, yFine, gridFine)
fun value(ei: Double, delta: Double): Double {
if (ei < x.first() || ei > x.last())
error("trap: ei ($ei) not in [${x.first()}..${x.last()}]")
if (delta < yFine.first())
error("trap: delta < ${yFine.first()}")
if (delta > yCoarse.last())
error("trap: delta > ${yCoarse.last()}")
return if (delta < yFine.last()) {
fineInterpolator.value(ei, delta)
} else {
coarseInterpolator.value(ei, delta)
}
}
}

View File

@@ -1,9 +0,0 @@
package ru.inr.mass.scripts
import kotlinx.coroutines.flow.toList
import ru.inr.mass.workspace.Numass.readPoint
suspend fun main() {
val point = readPoint("D:\\Work\\Numass\\data\\2019_11\\Fill_3\\set_2\\p2(30s)(HV1=14000)")
val events = point.events.toList()
}

View File

@@ -1,22 +0,0 @@
package ru.inr.mass.scripts
import ru.inr.mass.data.proto.NumassDirectorySet
import ru.inr.mass.workspace.Numass.readRepository
import space.kscience.dataforge.data.DataSource
import space.kscience.dataforge.data.DataTree
import space.kscience.dataforge.data.filter
import space.kscience.dataforge.data.forEach
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.string
suspend fun main() {
val repo: DataTree<NumassDirectorySet> = readRepository("D:\\Work\\Numass\\data\\2018_04")
val filtered: DataSource<NumassDirectorySet> = repo.filter { _, meta: Meta ->
val operator by meta.string()
operator?.startsWith("Vas") ?: false
}
filtered.forEach{
println(it)
}
}

View File

@@ -1,125 +0,0 @@
package ru.inr.mass.scripts
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.runBlocking
import kotlinx.html.code
import kotlinx.html.h2
import kotlinx.html.p
import kotlinx.html.unsafe
import kotlinx.serialization.json.Json
import ru.inr.mass.data.analysis.NumassEventExtractor
import ru.inr.mass.data.analysis.amplitudeSpectrum
import ru.inr.mass.data.api.NumassFrame
import ru.inr.mass.data.api.channels
import ru.inr.mass.workspace.Numass.readDirectory
import ru.inr.mass.workspace.Numass.readPoint
import ru.inr.mass.workspace.listFrames
import space.kscience.dataforge.meta.MetaSerializer
import space.kscience.plotly.*
//fun NumassFrame.tqdcAmplitude(): Short {
// var max = Short.MIN_VALUE
// var min = Short.MAX_VALUE
//
// signal.forEach { sh: Short ->
// if (sh >= max) {
// max = sh
// }
// if (sh <= min) {
// min = sh
// }
// }
//
// return (max - min).toShort()
//}
//fun Flow<NumassFrame>.tqdcAmplitudes(): List<Short> = runBlocking {
// map { it.tqdcAmplitude() }.toList()
//}
val IntRange.center: Double get() = (endInclusive + start).toDouble() / 2.0
suspend fun main() {
//val repo: DataTree<NumassDirectorySet> = readNumassRepository("D:\\Work\\numass-data\\")
//val directory = readDirectory("D:\\Work\\Numass\\data\\2021_11\\Tritium_2\\set_11\\")
val point = readPoint("D:\\Work\\Numass\\data\\2021_11\\Tritium_2\\set_11\\p0(30s)(HV1=14000)")
val channel = point.channels[4]!!
val binning = 16U
val frames: List<NumassFrame> = channel.listFrames()
Plotly.page {
p { +"${frames.size} frames" }
h2 { +"Random frames" }
plot {
val random = kotlin.random.Random(1234)
repeat(10) {
val frame = frames.random(random)
scatter {
y.numbers = frame.signal.toList()
}
}
}
h2 { +"Analysis" }
plot {
scatter {
name = "max"
val spectrum = runBlocking {
channel.amplitudeSpectrum(NumassEventExtractor.EVENTS_ONLY)
}.binned(binning)
x.numbers = spectrum.keys.map { it.center }
y.numbers = spectrum.values.map { it }
}
scatter {
name = "max-min"
val spectrum = runBlocking {
channel.amplitudeSpectrum(NumassEventExtractor.TQDC)
}.binned(binning)
x.numbers = spectrum.keys.map { it.center }
y.numbers = spectrum.values.map { it}
}
scatter {
name = "max-baseline + filter"
val spectrum = runBlocking {
channel.amplitudeSpectrum(NumassEventExtractor.TQDC_V2)
}.binned(binning)
x.numbers = spectrum.keys.map { it.center }
y.numbers = spectrum.values.map { it }
}
histogram {
name = "events"
xbins {
size = 2.0
}
x.numbers = runBlocking { point.events.map { it.amplitude.toInt() }.toList() }
}
}
h2 { +"Meta" }
code {
unsafe {
+Json { prettyPrint = true }.encodeToString(MetaSerializer, point.meta)
}
}
}.makeFile()
// val point = Numass.readPoint("D:\\Work\\Numass\\data\\test\\set_7\\p0(30s)(HV1=14000)")
//
// Plotly.plot {
// histogram {
// xbins.size = 2
// x.numbers = point.frames.map { it.tqdcAmplitude() }.toList()
// }
//
// histogram {
// x.numbers = point.flowBlocks().flatMapMerge { it.frames.map { it.tqdcAmplitude() } }.toList()
// }
//
// histogram {
// x.numbers = point.getChannels().values.flatMap { it.listFrames().map { it.tqdcAmplitude() } }
// }
// }.makeFile()
}

View File

@@ -1,22 +0,0 @@
package ru.inr.mass.scripts
import ru.inr.mass.data.api.NumassPoint
import ru.inr.mass.workspace.Numass
import space.kscience.plotly.Plotly
import space.kscience.plotly.makeFile
import space.kscience.plotly.scatter
fun main() {
val directory = Numass.readDirectory("D:\\Work\\Numass\\data\\test\\set_7\\")
val monitorPoints: List<NumassPoint> = directory.filter { it.voltage == 14000.0 }.sortedBy { it.startTime }
Plotly.plot {
scatter {
x.numbers = monitorPoints.map {
it.startTime.toEpochMilliseconds()
}
y.numbers = monitorPoints.map { it.framesCount }
}
}.makeFile()
}

View File

@@ -1,130 +0,0 @@
package ru.inr.mass.scripts
import kotlinx.html.code
import ru.inr.mass.models.*
import ru.inr.mass.models.NBkgSpectrum.Companion.bkg
import ru.inr.mass.models.NBkgSpectrum.Companion.norm
import ru.inr.mass.models.NumassBeta.e0
import ru.inr.mass.models.NumassBeta.mnu2
import ru.inr.mass.models.NumassBeta.msterile2
import ru.inr.mass.models.NumassBeta.u2
import ru.inr.mass.models.NumassTransmission.Companion.thickness
import ru.inr.mass.models.NumassTransmission.Companion.trap
import ru.inr.mass.workspace.buffer
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.real.step
import space.kscience.plotly.*
import space.kscience.plotly.models.AxisType
import space.kscience.plotly.models.ScatterMode
import space.kscience.plotly.models.appendXY
import kotlin.math.pow
import kotlin.system.measureTimeMillis
fun main() {
val trapInterpolator = RearTrapInterpolator()
val range = WALL_L - 10.0..18600.0 step 10.0
val spectrum: NBkgSpectrum = SterileNeutrinoSpectrum(
fss = null,
transmission = NumassTransmission(
trapFunc = { ei, ef, _ ->
val delta = ei - ef
trapInterpolator.value(ei, delta)
},
adjustX = false,
),
resolution = NumassResolution(1.7e-4, tailFunction = {
e,u -> adiab2024(e,u)
})
).withNBkg()
val args: Map<Symbol, Double> = mapOf(
norm to 1000.0,
bkg to 0.0,
mnu2 to 0.0,
e0 to 18575.0,
msterile2 to 0000.0.pow(2),
u2 to 0e-2,
thickness to 0.0,
trap to 0.521
)
Plotly.page {
plot {
// scatter {
// name = "NumassBeta + RearTrap"
// mode = ScatterMode.lines
// x.buffer = range
// y.numbers = x.doubles.map {
// val value = spectrum(it, args)
// value
// }
// }
// scatter {
// name = "(NumassBeta + RearTrap) / NumassBeta"
// mode = ScatterMode.lines
// x.buffer = range
// y.numbers = x.doubles.map { spectrum(it, args) / NumassBeta(0.0, it, args) }
// }
scatter {
name = "NumassBeta"
mode = ScatterMode.lines
x.buffer = range
y.numbers = x.doubles.map {
val value = NumassBeta(0.0, it, args)
println("${it}\t${value}")
value
}
}
layout {
title = "Sterile neutrino spectrum"
// yaxis.type = AxisType.log
}
}
// val spectrumTime = measureTimeMillis {
// plot {
// scatter {
// mode = ScatterMode.markers
// javaClass.getResource("/old-spectrum.dat").readText().lines().map {
// val (u, w) = it.split("\t").map { it.toDouble() }
// appendXY(u, w / spectrum(u, args) - 1.0)
// }
// }
// layout {
// title = "Sterile neutrino old/new ratio"
// }
// }
// }
// println("Spectrum with 460 points computed in $spectrumTime millis")
// plot {
// val resolution = NumassResolution()
// scatter {
// name = "resolution"
// x.buffer = 14000.0..14015.0 step 0.1
// y.numbers = x.doubles.map { resolution(it, 14005.0, args) }
// }
// layout {
// title = "Resolution, U = 14005.0"
// }
// }
// plot {
// val transmission = NumassTransmission()
// scatter {
// name = "transmission"
// x.buffer = 14000.0..14100.0 step 0.2
// y.numbers = x.doubles.map { transmission(it, 14005.0, args) }
// }
// layout {
// title = "Resolution, U = 14005.0"
// }
// }
//
// code {
// +args.toString()
// }
}.makeFile()
}

View File

@@ -1,122 +0,0 @@
package ru.inr.mass.scripts
import org.apache.commons.math3.analysis.interpolation.BicubicInterpolator
import kotlin.math.max
import kotlin.math.min
class TrapInterpolator {
private val x = arrayOf(12000.0, 14000.0, 16000.0, 18000.0).toDoubleArray()
private val yFine = arrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 51.0).toDoubleArray()
private val gridFine = arrayOf(
arrayOf(
0.0012643067855944597, 0.00031968702323903096, 0.00010821089214836011, 5.420435913830104e-5, 2.9871745364538163e-5, 2.453043990200485e-5, 1.4441307361664145e-5, 1.16717415662765e-5, 8.506523514404908e-6, 7.5173928731950345e-6, 6.132609975501212e-6, 0.00029713484461944584, 0.00132345679793881, 0.0010190023865744111, 0.000832452347642229, 0.000560639247437756, 0.000522260978558813, 0.0004546044427000576, 0.00038714573296954425, 0.000319093544854305, 0.0002925848436698804, 0.00023719352776212753, 0.00021345439237309058, 0.00017745003703305122, 0.00016004133774775745, 0.00017487829736590553, 0.00016637177385150063, 0.00014362176910367354, 0.0001517326403615945, 0.00014441307361664146, 0.0001392695942823501, 0.00013036741851146127, 0.00011454132825210329, 0.0001066282831224243, 9.159349737603424e-5, 8.625219191350092e-5, 8.80326270676787e-5, 7.458045034722442e-5, 8.842827932416264e-5, 8.506523514404907e-5, 8.24934954769034e-5, 8.466958288756512e-5, 8.40761045028392e-5, 8.348262611811327e-5, 7.893262516854787e-5, 8.308697386162933e-5, 7.636088550140219e-5, 7.16130584235948e-5, 7.339349357777257e-5, 7.220653680832073e-5, 0.0
).toDoubleArray(),
arrayOf(
0.001017798227726721, 0.00031166365148059007, 0.00010217508422033295, 5.177924964357299e-5, 2.5691994097956065e-5, 2.055359527836485e-5, 1.2253104877486738e-5, 9.4862747438607e-6, 9.881536191521563e-6, 7.312336781725956e-6, 5.336029543421644e-6, 0.00026008203256084754, 0.001207523722603935, 0.0008905240415799233, 0.0007432891523262519, 0.0004660132467921569, 0.00047154690705940896, 0.0003843917578501888, 0.0003365651226832244, 0.00029960817732693377, 0.00026640621572342134, 0.00022213693358540473, 0.0001814250044763359, 0.0001509898730064495, 0.0001460491049106887, 0.00014940882721580604, 0.0001409107060910975, 0.00013537704582384543, 0.00012786707831828902, 0.00012865760121361075, 0.0001175902806791066, 0.00010593006797311116, 0.00010098929987735037, 8.616699559006803e-5, 7.727361301769862e-5, 7.687835157003776e-5, 6.917075334065095e-5, 6.897312261682051e-5, 7.608782867471604e-5, 6.581103103553361e-5, 7.70759822938682e-5, 7.015890695980309e-5, 6.3241831625738e-5, 5.849869425380765e-5, 5.573186412018162e-5, 6.798496899766835e-5, 6.482287741638145e-5, 6.343946234956843e-5, 5.415081832953817e-5, 5.553423339635118e-5, 0.0
).toDoubleArray(),
arrayOf(
0.0008294685693622354, 0.0002760945380877155, 0.00010941085414920915, 4.957062164521931e-5, 2.7451459795559698e-5, 2.0144236684511432e-5, 1.4416953705581712e-5, 1.1257073441344624e-5, 8.68967072665199e-6, 5.924775495444539e-6, 5.332297945900085e-6, 0.00024568069054443356, 0.0010411805470661203, 0.0008022146020831906, 0.0006491579017842067, 0.0004352735063986588, 0.00041374682209854364, 0.00035449906714409826, 0.00031282814615947165, 0.00026424498709682644, 0.00023225119942142593, 0.00019216021856891788, 0.0001660912063889619, 0.00013903473162643184, 0.00013804726904385775, 0.00012777765818508722, 0.00012284034527221678, 0.00011513813712813888, 0.00010467103375285351, 0.00010170864600513125, 0.00010151115348861643, 9.67713330922608e-5, 7.662709640774937e-5, 8.077443925456055e-5, 7.247975356093819e-5, 6.951736581321592e-5, 5.924775495444539e-5, 6.023521753701948e-5, 6.793742568109738e-5, 6.26051277351973e-5, 6.300011276822693e-5, 6.221014270216766e-5, 5.7075337272782394e-5, 5.984023250398984e-5, 5.549539714066385e-5, 5.0953069260823034e-5, 5.5890382173693484e-5, 5.5692889657178664e-5, 5.60878746902083e-5, 5.5692889657178664e-5, 0.0
).toDoubleArray(),
arrayOf(
0.0006934201583963283, 0.00027247843585548076, 0.00010607337083230727, 4.751613823529006e-5, 3.016584709543311e-5, 1.8730427935072844e-5, 1.5575829546007945e-5, 8.675145569928476e-6, 8.280820771295363e-6, 6.703521576762913e-6, 7.492171174029138e-6, 0.00021451269045641322, 0.0009546603374907654, 0.0007295008774712582, 0.0005938531467414675, 0.00038564965306318405, 0.00038821276425429925, 0.0003182201124969218, 0.00027799898303634433, 0.00023146865679763706, 0.00020169713450083704, 0.00016699655222112314, 0.00014629450029288475, 0.00012677542276054568, 0.00011652297799608474, 0.00011238256761043707, 0.00010213012284597615, 9.207484048083177e-5, 9.621525086647946e-5, 9.266632767878144e-5, 8.300537011227019e-5, 8.063942132047151e-5, 7.156995095190993e-5, 7.354157494507548e-5, 6.348629257993112e-5, 5.8162907798384095e-5, 5.8162907798384095e-5, 5.343101021478674e-5, 5.0473574225038405e-5, 5.540263420795231e-5, 4.830478783255628e-5, 6.368345497924767e-5, 5.836007019770065e-5, 5.205087341957085e-5, 5.2445198218203966e-5, 4.830478783255628e-5, 4.633316383939072e-5, 4.850195023187284e-5, 4.1798428655109924e-5, 4.830478783255628e-5, 0.0
).toDoubleArray(),
)
// arrayOf(
// arrayOf(
// 0.00660514, 0.00167015, 0.000565328, 0.000283181, 0.000156059, 0.000128155, 7.5446e-5, 6.09769e-5, 4.44408e-5, 3.92732e-5, 3.20387e-5, 0.00155233, 0.00691416, 0.00532359, 0.00434899, 0.00292896, 0.00272846, 0.002375, 0.00202257, 0.00166705, 0.00152856, 0.00123917, 0.00111515, 0.000927055, 0.000836107, 0.00091362, 0.000869179, 0.000750326, 0.000792699, 0.00075446, 0.000727588, 0.000681081, 0.0005984, 0.00055706, 0.000478513, 0.000450609, 0.00045991, 0.000389632, 0.000461977, 0.000444408, 0.000430972, 0.000442341, 0.00043924, 0.00043614, 0.000412369, 0.000434073, 0.000398933, 0.000374129, 0.000383431, 0.00037723
// ).toDoubleArray(),
// arrayOf(
// 0.00532256, 0.00162984, 0.000534323, 0.000270779, 0.000134356, 0.000107485, 6.40774e-5, 4.96083e-5, 5.16753e-5, 3.82397e-5, 2.79047e-5, 0.00136009, 0.00631472, 0.00465698, 0.00388702, 0.00243701, 0.00246595, 0.00201017, 0.00176006, 0.0015668, 0.00139317, 0.00116166, 0.000948759, 0.000789599, 0.000763761, 0.000781331, 0.00073689, 0.000707952, 0.000668679, 0.000672813, 0.000614936, 0.000553959, 0.000528122, 0.000450609, 0.000404101, 0.000402034, 0.000361727, 0.000360694, 0.0003979, 0.000344158, 0.000403067, 0.000366895, 0.000330722, 0.000305918, 0.000291449, 0.000355526, 0.00033899, 0.000331756, 0.000283181, 0.000290415
// ).toDoubleArray(),
// arrayOf(
// 0.00434073, 0.00144484, 0.000572562, 0.00025941, 0.000143657, 0.000105418, 7.5446e-5, 5.89099e-5, 4.54743e-5, 3.10052e-5, 2.79047e-5, 0.00128568, 0.00544865, 0.0041981, 0.00339714, 0.00227785, 0.0021652, 0.00185514, 0.00163707, 0.00138283, 0.0012154, 0.0010056, 0.000869179, 0.000727588, 0.000722421, 0.000668679, 0.000642841, 0.000602534, 0.000547758, 0.000532256, 0.000531222, 0.000506418, 0.000401, 0.000422704, 0.000379297, 0.000363794, 0.000310052, 0.000315219, 0.000355526, 0.000327621, 0.000329689, 0.000325554, 0.000298683, 0.000313152, 0.000290415, 0.000266645, 0.000292482, 0.000291449, 0.000293516, 0.000291449
// ).toDoubleArray(),
// arrayOf(
// 0.00363484, 0.00142831, 0.000556026, 0.000249075, 0.000158126, 9.81831e-5, 8.1647e-5, 4.54743e-5, 4.34073e-5, 3.51392e-5, 3.92732e-5, 0.00112445, 0.00500424, 0.00382397, 0.00311292, 0.00202154, 0.00203497, 0.00166808, 0.00145724, 0.00121334, 0.00105728, 0.00087538, 0.000766862, 0.000664545, 0.000610802, 0.000589099, 0.000535356, 0.000482647, 0.000504351, 0.000485748, 0.000435106, 0.000422704, 0.000375163, 0.000385498, 0.000332789, 0.000304884, 0.000304884, 0.00028008, 0.000264578, 0.000290415, 0.000253209, 0.000333823, 0.000305918, 0.000272846, 0.000274913, 0.000253209, 0.000242874, 0.000254243, 0.000219103, 0.000253209
// ).toDoubleArray(),
// )
private val fineInterpolator = BicubicInterpolator().interpolate(x, yFine, gridFine)
private val yCoarse = arrayOf(50.0, 150.0, 250.0, 350.0, 450.0, 550.0, 650.0, 750.0, 850.0, 950.0, 1050.0, 1150.0, 1250.0, 1350.0, 1450.0, 1550.0, 1650.0, 1750.0, 1850.0, 1950.0, 2050.0, 2150.0, 2250.0, 2350.0, 2450.0, 2550.0, 2650.0, 2750.0, 2850.0, 2950.0, 3050.0, 3150.0, 3250.0, 3350.0, 3450.0, 3550.0, 3650.0, 3750.0, 3850.0, 3950.0, 4050.0, 4150.0, 4250.0, 4350.0, 4450.0, 4550.0, 4650.0, 4750.0, 4850.0, 4950.0, 5050.0, 5150.0, 5250.0, 5350.0, 5450.0, 5550.0, 5650.0, 5750.0, 5850.0, 5950.0, 6050.0, 6150.0, 6250.0, 6350.0, 6450.0, 6550.0, 6650.0, 6750.0, 6850.0, 6950.0, 7050.0, 7150.0, 7250.0, 7350.0, 7450.0).toDoubleArray()
private val gridCoarse = arrayOf(
arrayOf(
0.0001409214424531706, 4.663553147176309e-5, 4.214290009938785e-5, 3.998066051770307e-5, 3.7786768755499566e-5, 3.660970329245982e-5, 3.524668126887261e-5, 3.414874625712965e-5, 3.383420271322492e-5, 3.371550703627973e-5, 3.3759028784492964e-5, 3.415072451841207e-5, 3.402213753505479e-5, 3.4257550627662736e-5, 3.438218108845519e-5, 3.5616616128685105e-5, 3.643561629960688e-5, 3.738122519260352e-5, 3.715372514512525e-5, 3.806768185760317e-5, 3.8342660175859515e-5, 3.944850823273215e-5, 3.9800638741002864e-5, 4.106474770046909e-5, 4.087483461735679e-5, 4.1846160907024886e-5, 4.18679217811315e-5, 4.265329151025214e-5, 4.357713952914216e-5, 4.372748738660606e-5, 4.4942139814011786e-5, 4.5337792070495736e-5, 4.619833572834833e-5, 4.659794450739712e-5, 4.803218393715143e-5, 4.750003165218052e-5, 4.8538618825450886e-5, 4.9371466825349595e-5, 4.958314078256851e-5, 5.003418435496021e-5, 5.103716282514703e-5, 5.1525793361904694e-5, 5.231907613615502e-5, 5.292244582729304e-5, 5.4028293884165686e-5, 5.4445707014756254e-5, 5.511831585077896e-5, 5.5757294245000545e-5, 5.574146815474118e-5, 5.728451195502858e-5, 5.765840333740591e-5, 5.853279482423544e-5, 5.893240360328423e-5, 5.987603423499845e-5, 6.0928469237245756e-5, 6.191759987845562e-5, 6.33775567048814e-5, 6.404620901833927e-5, 6.460407869998164e-5, 6.538747016781985e-5, 6.593544854305014e-5, 6.770203586825097e-5, 6.887316654744346e-5, 6.99711015591864e-5, 7.080790608164996e-5, 7.219862376319104e-5, 7.359329796729697e-5, 7.514623307399647e-5, 7.619668981496135e-5, 7.823825545841853e-5, 3.956522564839492e-9, 0.0, 0.0, 0.0, 0.0
).toDoubleArray(),
arrayOf(
0.00012175040741573717, 4.001626896118572e-5, 3.564072473557997e-5, 3.425335705429034e-5, 3.275136355317907e-5, 3.1344232799506394e-5, 3.056359144037619e-5, 2.9765163316101254e-5, 2.8790843847617227e-5, 2.845289530986719e-5, 2.794103173514637e-5, 2.823747782089202e-5, 2.8245383049845232e-5, 2.8051704940491414e-5, 2.8628786654076275e-5, 2.836198517690519e-5, 2.8808630612761967e-5, 2.95576510560793e-5, 2.9636703345611474e-5, 3.0320505650064762e-5, 3.089363474917301e-5, 3.11624125335824e-5, 3.147269276999618e-5, 3.19410775854743e-5, 3.182645176565265e-5, 3.2520135606297466e-5, 3.291342074672002e-5, 3.4101181396940916e-5, 3.40023660350257e-5, 3.5051785178565293e-5, 3.4765220629011165e-5, 3.5945076050278836e-5, 3.561503274148202e-5, 3.6101204322104875e-5, 3.63857925644207e-5, 3.6994495193818424e-5, 3.70715711761123e-5, 3.769410795617815e-5, 3.864668804504083e-5, 3.854392006864901e-5, 3.919610145728943e-5, 3.909728609537422e-5, 3.998464804537285e-5, 4.0524179921429935e-5, 4.1144740394257484e-5, 4.185028207833212e-5, 4.1988623585013425e-5, 4.2111154633788295e-5, 4.277321755862024e-5, 4.335820450115831e-5, 4.3947144058173e-5, 4.426532952353999e-5, 4.462699374814968e-5, 4.568431812064249e-5, 4.538787203489684e-5, 4.654005915482826e-5, 4.731477159224355e-5, 4.6931367988012514e-5, 4.829699628968079e-5, 4.882467032230804e-5, 4.939582311417799e-5, 4.982270547765172e-5, 4.96764587420172e-5, 5.0923508609387225e-5, 5.153814016049986e-5, 5.176936810738147e-5, 5.232668674858328e-5, 5.294329460693423e-5, 5.433066228822386e-5, 5.4915649230761937e-5, 0.0, 0.0, 0.0, 0.0, 0.0
).toDoubleArray(),
arrayOf(
0.00010693429799211334, 3.4932476321141e-5, 3.133218774507587e-5, 2.964560165403933e-5, 2.8038012569608706e-5, 2.7514657400844436e-5, 2.6586442573224795e-5, 2.562465401779763e-5, 2.5464685079420627e-5, 2.4927505434500324e-5, 2.4040764035348792e-5, 2.434490251078161e-5, 2.3880795096971787e-5, 2.4017064933367013e-5, 2.3772174212888638e-5, 2.4315278633304387e-5, 2.4279729980331718e-5, 2.4305404007478644e-5, 2.431132878297409e-5, 2.4797160373600545e-5, 2.5784622956174634e-5, 2.578857280650493e-5, 2.5587130439659817e-5, 2.6379075430884235e-5, 2.668321390631706e-5, 2.6408699308361457e-5, 2.7269766680366067e-5, 2.7548231128651958e-5, 2.7597604257780663e-5, 2.7609453808771553e-5, 2.8290802990747675e-5, 2.8743060853566604e-5, 2.8484345656932192e-5, 2.9254566471339984e-5, 2.9989238632775107e-5, 3.0005038034096294e-5, 3.0413847543281967e-5, 3.076538422267834e-5, 3.077130899817379e-5, 3.071798601871478e-5, 3.173309755360095e-5, 3.14684575814711e-5, 3.211820796080485e-5, 3.2471719565366366e-5, 3.28212813195976e-5, 3.3684323616767354e-5, 3.327946395791197e-5, 3.408720835045758e-5, 3.4268901465651215e-5, 3.442097070336762e-5, 3.5112194511169485e-5, 3.504504705555445e-5, 3.5402508510446266e-5, 3.640774541950669e-5, 3.618062902551465e-5, 3.673755792208644e-5, 3.642749467115817e-5, 3.7211539961721995e-5, 3.765589812388034e-5, 3.778624318478012e-5, 3.8639410856124134e-5, 3.8499191169398615e-5, 3.8552514148857616e-5, 3.972759462212078e-5, 3.9780917601579784e-5, 4.03556208246379e-5, 4.0912549721209685e-5, 4.0940198673521764e-5, 4.1349008182707435e-5, 4.163339740648877e-5, 0.0, 0.0, 0.0, 0.0, 0.0
).toDoubleArray(),
arrayOf(
9.58347274357985e-5, 3.098604267658998e-5, 2.7853132151449905e-5, 2.656960493189912e-5, 2.518355326470373e-5, 2.44639105071983e-5, 2.3969032884913743e-5, 2.3085745335975572e-5, 2.275845575311009e-5, 2.2642129937513322e-5, 2.1883054700144578e-5, 2.1062859118987704e-5, 2.129156750219491e-5, 2.1037228007076553e-5, 2.117129843861181e-5, 2.097216441530209e-5, 2.1145667326700658e-5, 2.1327056734071892e-5, 2.112200783878267e-5, 2.1498588021477295e-5, 2.1340858102024047e-5, 2.1346772974003546e-5, 2.1912629060042063e-5, 2.1987550771782353e-5, 2.2289209242736686e-5, 2.2764370625089583e-5, 2.283337746485038e-5, 2.2947731656453982e-5, 2.325136175140148e-5, 2.334994295105976e-5, 2.3779756981569852e-5, 2.4178025028189293e-5, 2.438898879545801e-5, 2.444616589125981e-5, 2.4434336147300818e-5, 2.4875979921769903e-5, 2.523284386453287e-5, 2.549112660763756e-5, 2.5698147126919944e-5, 2.625414509299263e-5, 2.6133876029409534e-5, 2.668001587551639e-5, 2.6626782027700926e-5, 2.701322033036137e-5, 2.7192638113739437e-5, 2.7334595041247357e-5, 2.7734834711859967e-5, 2.7801869927627598e-5, 2.816662036636323e-5, 2.8696987220524765e-5, 2.820999609421287e-5, 2.9511267929702143e-5, 2.942451647400286e-5, 2.9073567403219388e-5, 2.9830671016594964e-5, 2.993516708823274e-5, 3.0648894973758665e-5, 3.0305832398947864e-5, 3.10767373802756e-5, 3.151443790675835e-5, 3.1354736363311945e-5, 3.1841727489623835e-5, 3.198959928911125e-5, 3.17234300500339e-5, 3.2579114863067755e-5, 3.2701355550644025e-5, 3.27427596545005e-5, 3.3326360356477506e-5, 3.3975024650228974e-5, 3.388235832255019e-5, 1.380136795215894e-8, 0.0, 0.0, 0.0, 0.0
).toDoubleArray(),
)
// arrayOf(
// arrayOf(
// 0.000736218, 0.000243639, 0.000220168, 0.000208872, 0.00019741, 0.000191261, 0.00018414, 0.000178404, 0.000176761, 0.00017614, 0.000176368, 0.000178414, 0.000177742, 0.000178972, 0.000179623, 0.000186072, 0.000190351, 0.000195291, 0.000194103, 0.000198878, 0.000200314, 0.000206091, 0.000207931, 0.000214535, 0.000213543, 0.000218618, 0.000218731, 0.000222834, 0.000227661, 0.000228446, 0.000234792, 0.000236859, 0.000241355, 0.000243442, 0.000250935, 0.000248155, 0.000253581, 0.000257932, 0.000259038, 0.000261394, 0.000266634, 0.000269187, 0.000273331, 0.000276484, 0.000282261, 0.000284442, 0.000287956, 0.000291294, 0.000291211, 0.000299272, 0.000301226, 0.000305794, 0.000307882, 0.000312811, 0.00031831, 0.000323477, 0.000331104, 0.000334598, 0.000337512, 0.000341605, 0.000344468, 0.000353697, 0.000359815, 0.000365551, 0.000369923, 0.000377188, 0.000384475, 0.000392588, 0.000398076, 0.000408741, 2.06701e-8, 0.0, 0.0, 0.0, 0.0
// ).toDoubleArray(),
// arrayOf(
// 0.000636692, 0.000209264, 0.000186383, 0.000179127, 0.000171273, 0.000163914, 0.000159832, 0.000155656, 0.000150561, 0.000148794, 0.000146117, 0.000147667, 0.000147709, 0.000146696, 0.000149714, 0.000148318, 0.000150654, 0.000154571, 0.000154985, 0.000158561, 0.000161558, 0.000162963, 0.000164586, 0.000167035, 0.000166436, 0.000170063, 0.00017212, 0.000178332, 0.000177815, 0.000183303, 0.000181804, 0.000187974, 0.000186248, 0.000188791, 0.000190279, 0.000193462, 0.000193865, 0.000197121, 0.000202102, 0.000201565, 0.000204975, 0.000204459, 0.000209099, 0.00021192, 0.000215166, 0.000218855, 0.000219579, 0.00022022, 0.000223682, 0.000226741, 0.000229821, 0.000231485, 0.000233376, 0.000238905, 0.000237355, 0.00024338, 0.000247432, 0.000245427, 0.000252568, 0.000255328, 0.000258315, 0.000260547, 0.000259782, 0.000266304, 0.000269518, 0.000270727, 0.000273641, 0.000276866, 0.000284121, 0.00028718, 0.0, 0.0, 0.0, 0.0, 0.0 ).toDoubleArray(),
// arrayOf(
// 0.000559602, 0.000182807, 0.000163966, 0.00015514, 0.000146727, 0.000143988, 0.000139131, 0.000134097, 0.00013326, 0.000130449, 0.000125809, 0.0001274, 0.000124972, 0.000125685, 0.000124403, 0.000127245, 0.000127059, 0.000127194, 0.000127225, 0.000129767, 0.000134935, 0.000134955, 0.000133901, 0.000138045, 0.000139637, 0.0001382, 0.000142707, 0.000144164, 0.000144422, 0.000144484, 0.00014805, 0.000150417, 0.000149063, 0.000153093, 0.000156938, 0.000157021, 0.00015916, 0.000161, 0.000161031, 0.000160752, 0.000166064, 0.000164679, 0.000168079, 0.000169929, 0.000171758, 0.000176275, 0.000174156, 0.000178383, 0.000179334, 0.00018013, 0.000183747, 0.000183396, 0.000185266, 0.000190527, 0.000189338, 0.000192253, 0.00019063, 0.000194733, 0.000197059, 0.000197741, 0.000202206, 0.000201472, 0.000201751, 0.0002079, 0.000208179, 0.000211187, 0.000214101, 0.000214246, 0.000216385, 0.000217873, 0.0, 0.0, 0.0, 0.0, 0.0
// ).toDoubleArray(),
// arrayOf(
// 0.000502356, 0.000162426, 0.000146003, 0.000139275, 0.00013201, 0.000128237, 0.000125643, 0.000121013, 0.000119298, 0.000118688, 0.000114709, 0.000110409, 0.000111608, 0.000110275, 0.000110978, 0.000109934, 0.000110844, 0.000111794, 0.00011072, 0.000112694, 0.000111867, 0.000111898, 0.000114864, 0.000115257, 0.000116838, 0.000119329, 0.00011969, 0.00012029, 0.000121881, 0.000122398, 0.000124651, 0.000126739, 0.000127845, 0.000128144, 0.000128082, 0.000130397, 0.000132268, 0.000133622, 0.000134707, 0.000137622, 0.000136991, 0.000139854, 0.000139575, 0.000141601, 0.000142541, 0.000143285, 0.000145383, 0.000145735, 0.000147647, 0.000150427, 0.000147874, 0.000154695, 0.00015424, 0.000152401, 0.000156369, 0.000156917, 0.000160659, 0.00015886, 0.000162901, 0.000165196, 0.000164359, 0.000166911, 0.000167686, 0.000166291, 0.000170777, 0.000171417, 0.000171634, 0.000174694, 0.000178094, 0.000177608, 7.23454e-8, 0.0, 0.0, 0.0, 0.0
// ).toDoubleArray(),
// )
private val coarseInterpolator = BicubicInterpolator().interpolate(x, yCoarse, gridCoarse)
fun value(ei: Double, delta: Double): Double {
val ei = max(12000.0, min(18000.0, ei))
return if (delta < 50.0) {
fineInterpolator.value(ei, min(49.0, delta))
} else {
coarseInterpolator.value(ei, min(6850.0, delta))
}
// return coarseInterpolator.value(ei, max(50.0, min(6850.0, delta)))
}
}
// Старый неправильный треппинг (каждая энергия нормирована сама на себя)
class TrapInterpolatorIncorrect {
private val x = arrayOf(12000.0, 14000.0, 16000.0, 18000.0).toDoubleArray()
private val yFine = arrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0).toDoubleArray()
private val gridFine = arrayOf(
arrayOf(0.00351226, 0.000888095, 0.000300611, 0.00015058, 8.29841e-5, 6.81459e-5, 4.01181e-5, 3.24242e-5, 2.36312e-5, 2.08834e-5, 1.70365e-5, 0.000825444, 0.00367658, 0.0028308, 0.00231256, 0.00155746, 0.00145085, 0.0012629, 0.0010755, 0.000886446, 0.000812804, 0.000658927, 0.000592979, 0.000492958, 0.000444597, 0.000485814, 0.000462183, 0.000398983, 0.000421515, 0.000401181, 0.000386893, 0.000362162, 0.000318197, 0.000296215, 0.000254448, 0.00023961, 0.000244556, 0.000207185, 0.000245655, 0.000236312, 0.000229168, 0.000235213, 0.000233564, 0.000231916, 0.000219276, 0.000230817, 0.000212132, 0.000198942, 0.000203888, 0.000200591).toDoubleArray(),
arrayOf(0.00365292, 0.00111857, 0.000366711, 0.000185838, 9.22097e-5, 7.37678e-5, 4.39769e-5, 3.40467e-5, 3.54653e-5, 2.62443e-5, 1.91512e-5, 0.000933446, 0.00433386, 0.00319613, 0.0026677, 0.00167254, 0.0016924, 0.0013796, 0.00120795, 0.00107531, 0.000956144, 0.000797259, 0.000651142, 0.000541909, 0.000524177, 0.000536235, 0.000505735, 0.000485874, 0.000458921, 0.000461758, 0.000422037, 0.000380188, 0.000362455, 0.000309257, 0.000277338, 0.00027592, 0.000248257, 0.000247548, 0.000273083, 0.000236199, 0.000276629, 0.000251803, 0.000226978, 0.000209954, 0.000200024, 0.000244001, 0.000232652, 0.000227687, 0.00019435, 0.000199315).toDoubleArray(),
arrayOf(0.00366718, 0.00122065, 0.000483719, 0.000219158, 0.000121366, 8.90602e-5, 6.37391e-5, 4.97689e-5, 3.84181e-5, 2.61942e-5, 2.35748e-5, 0.00108618, 0.00460319, 0.00354669, 0.00287001, 0.0019244, 0.00182923, 0.00156728, 0.00138305, 0.00116826, 0.00102681, 0.000849564, 0.00073431, 0.00061469, 0.000610324, 0.000564921, 0.000543092, 0.00050904, 0.000462764, 0.000449667, 0.000448793, 0.000427838, 0.000338778, 0.000357114, 0.000320442, 0.000307345, 0.000261942, 0.000266307, 0.00030036, 0.000276785, 0.000278531, 0.000275039, 0.000252337, 0.000264561, 0.000245352, 0.00022527, 0.000247098, 0.000246225, 0.000247971, 0.000246225).toDoubleArray(),
arrayOf(0.00363484, 0.00142831, 0.000556026, 0.000249075, 0.000158126, 9.81831e-5, 8.1647e-5, 4.54743e-5, 4.34073e-5, 3.51392e-5, 3.92732e-5, 0.00112445, 0.00500424, 0.00382397, 0.00311292, 0.00202154, 0.00203497, 0.00166808, 0.00145724, 0.00121334, 0.00105728, 0.00087538, 0.000766862, 0.000664545, 0.000610802, 0.000589099, 0.000535356, 0.000482647, 0.000504351, 0.000485748, 0.000435106, 0.000422704, 0.000375163, 0.000385498, 0.000332789, 0.000304884, 0.000304884, 0.00028008, 0.000264578, 0.000290415, 0.000253209, 0.000333823, 0.000305918, 0.000272846, 0.000274913, 0.000253209, 0.000242874, 0.000254243, 0.000219103, 0.000253209).toDoubleArray(),
)
private val fineInterpolator = BicubicInterpolator().interpolate(x, yFine, gridFine)
private val yCoarse = arrayOf(50.0, 150.0, 250.0, 350.0, 450.0, 550.0, 650.0, 750.0, 850.0, 950.0, 1050.0, 1150.0, 1250.0, 1350.0, 1450.0, 1550.0, 1650.0, 1750.0, 1850.0, 1950.0, 2050.0, 2150.0, 2250.0, 2350.0, 2450.0, 2550.0, 2650.0, 2750.0, 2850.0, 2950.0, 3050.0, 3150.0, 3250.0, 3350.0, 3450.0, 3550.0, 3650.0, 3750.0, 3850.0, 3950.0, 4050.0, 4150.0, 4250.0, 4350.0, 4450.0, 4550.0, 4650.0, 4750.0, 4850.0, 4950.0, 5050.0, 5150.0, 5250.0, 5350.0, 5450.0, 5550.0, 5650.0, 5750.0, 5850.0, 5950.0, 6050.0, 6150.0, 6250.0, 6350.0, 6450.0, 6550.0, 6650.0, 6750.0, 6850.0).toDoubleArray()
private val gridCoarse = arrayOf(
arrayOf(0.000147475, 0.00012202, 0.000112809, 0.00010855, 0.000102103, 9.98996e-5, 9.65858e-5, 9.51404e-5, 9.26289e-5, 9.36896e-5, 9.46953e-5, 9.47557e-5, 9.48931e-5, 9.52174e-5, 9.8174e-5, 9.93006e-5, 0.000102543, 0.000103554, 0.000104719, 0.000105121, 0.000108863, 0.000109841, 0.000112452, 0.000113963, 0.000114397, 0.000117008, 0.000116892, 0.000119992, 0.000120706, 0.000124004, 0.000123993, 0.000128241, 0.000128708, 0.000131478, 0.000132637, 0.000132599, 0.000136561, 0.00013733, 0.000139891, 0.000139386, 0.000142051, 0.000144255, 0.000146838, 0.000148157, 0.000150459, 0.000152883, 0.000153806, 0.000155164, 0.000157181, 0.000158538, 0.00016078, 0.000163797, 0.000165572, 0.000167496, 0.000171244, 0.000173514, 0.000176421, 0.00017929, 0.000181493, 0.000181383, 0.000185703, 0.000189929, 0.000192166, 0.000196502, 0.000198447, 0.00020252, 0.000205614, 0.000210164, 0.00021461).toDoubleArray(),
arrayOf(0.000161395, 0.000134655, 0.000125136, 0.000119532, 0.000114759, 0.000110552, 0.000109602, 0.000104268, 0.000102225, 0.000101225, 0.000100466, 0.000101693, 0.000101097, 0.000101608, 0.000102055, 0.000102225, 0.000104438, 0.000106729, 0.00010802, 0.000109354, 0.000111439, 0.000112624, 0.000114829, 0.000113602, 0.00011512, 0.000118248, 0.000119511, 0.000122064, 0.000123526, 0.00012659, 0.000126668, 0.000127845, 0.000128604, 0.000130576, 0.00013191, 0.00013281, 0.000134059, 0.000136364, 0.000137747, 0.000140684, 0.00014096, 0.000141343, 0.00014423, 0.000146337, 0.000149025, 0.000150614, 0.000151373, 0.000152621, 0.000154153, 0.000157466, 0.000156764, 0.000159927, 0.000161551, 0.000163388, 0.000166751, 0.000167644, 0.000169247, 0.000170311, 0.000174354, 0.000176206, 0.000178121, 0.000178085, 0.000180149, 0.000185923, 0.000186292, 0.00018432, 0.000189917, 0.000191966, 0.000197038).toDoubleArray(),
arrayOf(0.000170891, 0.000143806, 0.000135651, 0.000127574, 0.000122781, 0.00011852, 0.000115988, 0.000113604, 0.000110522, 0.000108025, 0.00010744, 0.000106968, 0.000105012, 0.000105903, 0.0001062, 0.000107204, 0.00010744, 0.000107658, 0.000108033, 0.000111771, 0.000114477, 0.000112652, 0.000114923, 0.000118485, 0.00011597, 0.000119699, 0.000121122, 0.000121235, 0.00012272, 0.000122921, 0.000126544, 0.000126186, 0.000127635, 0.000131276, 0.000132743, 0.000132237, 0.000136227, 0.000136611, 0.000135625, 0.000138803, 0.000139781, 0.000140322, 0.000141676, 0.000144941, 0.00014729, 0.000147464, 0.000149979, 0.000149403, 0.000151856, 0.000154397, 0.00015486, 0.000155279, 0.000159793, 0.00016009, 0.000161592, 0.000162282, 0.000162456, 0.00016477, 0.000166543, 0.000168621, 0.000171083, 0.000170664, 0.000172524, 0.000178164, 0.000174174, 0.00018053, 0.000181246, 0.000181945, 0.000183438).toDoubleArray(),
arrayOf(0.000182073, 0.000151698, 0.000142614, 0.000135978, 0.000129633, 0.000127452, 0.000123029, 0.000120011, 0.000118605, 0.000116755, 0.00011228, 0.000111267, 0.000111391, 0.000110006, 0.000109479, 0.000111216, 0.000112042, 0.000110637, 0.000112032, 0.000113572, 0.000110761, 0.000112394, 0.00011536, 0.000116476, 0.00011906, 0.000118233, 0.000120672, 0.000120062, 0.000121954, 0.000124031, 0.000126098, 0.00012771, 0.00012738, 0.000128206, 0.000129137, 0.000131266, 0.000133653, 0.000132527, 0.000137012, 0.000137787, 0.000138635, 0.000139492, 0.000139244, 0.000142789, 0.00014251, 0.000145383, 0.000143595, 0.000148639, 0.000148908, 0.000150665, 0.000148194, 0.000155687, 0.000153641, 0.000154416, 0.000155388, 0.000158602, 0.000159408, 0.00016254, 0.000163408, 0.000166405, 0.000164296, 0.000168275, 0.000165609, 0.000168751, 0.000170756, 0.000172926, 0.000172037, 0.000177877, 0.000176285).toDoubleArray(),
)
private val coarseOInterpolator = BicubicInterpolator().interpolate(x, yCoarse, gridCoarse)
fun value(ei: Double, delta: Double): Double {
val ei = max(12000.0, min(18000.0, ei))
return if (delta < 50.0) {
fineInterpolator.value(ei, min(49.0, delta))
} else {
coarseOInterpolator.value(ei, min(6850.0, delta))
}
}
}

View File

@@ -0,0 +1,50 @@
package ru.inr.mass.scripts
import ru.inr.mass.workspace.buffer
import space.kscience.kmath.real.step
import space.kscience.kmath.structures.toDoubleArray
import space.kscience.plotly.*
import space.kscience.plotly.models.TraceType
import space.kscience.dataforge.meta.Value
import space.kscience.kmath.structures.asBuffer
import space.kscience.plotly.models.ScatterMode
fun main() {
val maxDelta = (WALL_R - WALL_L);
val interpolator = TrapInterpolator()
Plotly.page {
plot {
val eis = (WALL_L..WALL_R step 100.0).toDoubleArray()
val deltas = (0.0..maxDelta step 10.0).toDoubleArray()
val values = eis.map { ei ->
deltas.map { interpolator.value(ei, it) }.toList()
}
layout {
}
trace {
type = TraceType.surface
x.numbers = deltas.toList()
y.numbers = eis.toList()
z.value = Value.of(values)
}
}
plot {
for (HV in (WALL_L..WALL_R step 1000.0)) {
scatter {
name = "${HV / 1000.0} keV"
mode = ScatterMode.lines
x.buffer = (0.0..90.0 step 1.0).toDoubleArray().plus((100.0..maxDelta step 10.0).toDoubleArray()).asBuffer()
y.numbers = x.doubles.map {
interpolator.value(HV, it)
}
}
}
}
}.makeFile()
}

View File

@@ -0,0 +1,74 @@
// Code generated by trap-spectrum-2024-11.jl Julia notebook 2025-03-11T12:54:54.833
package ru.inr.mass.scripts
import org.apache.commons.math3.analysis.interpolation.PiecewiseBicubicSplineInterpolator
class TrapInterpolator {
private val x = arrayOf(10000.0, 12000.0, 14000.0, 16000.0, 18000.0, 19000.0, ).toDoubleArray()
private val yCoarse = arrayOf(
100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0, 1100.0, 1200.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0, 2100.0, 2200.0, 2300.0, 2400.0, 2500.0, 2600.0, 2700.0, 2800.0, 2900.0, 3000.0, 3100.0, 3200.0, 3300.0, 3400.0, 3500.0, 3600.0, 3700.0, 3800.0, 3900.0, 4000.0, 4100.0, 4200.0, 4300.0, 4400.0, 4500.0, 4600.0, 4700.0, 4800.0, 4900.0, 5000.0, 5100.0, 5200.0, 5300.0, 5400.0, 5500.0, 5600.0, 5700.0, 5800.0, 5900.0, 6000.0, 6100.0, 6200.0, 6300.0, 6400.0, 6500.0, 6600.0, 6700.0, 6800.0, 6900.0, 7000.0, 7100.0, 7200.0, 7300.0, 7400.0, 7500.0, 7600.0, 7700.0, 7800.0, 7900.0, 8000.0, 8100.0, 8200.0, 8300.0, 8400.0, 8500.0, 8600.0, 8700.0, 8800.0, 8900.0, 9000.0,
).toDoubleArray()
private val gridCoarse = arrayOf(
arrayOf(
5.615033575679756e-5, 5.615033575679756e-5, 5.1326543006368104e-5, 4.780066283770888e-5, 4.6863667123596676e-5, 4.363623744165466e-5, 4.285193732539779e-5, 4.219256997102254e-5, 4.294910725130572e-5, 4.237302840485155e-5, 4.2622893928614806e-5, 4.2546546129687144e-5, 4.3650118859641514e-5, 4.485780222449723e-5, 4.5655983758740955e-5, 4.67803786156756e-5, 4.780760354670229e-5, 4.81615797053669e-5, 5.027155523936771e-5, 4.9785705609828045e-5, 5.1264076625427285e-5, 5.296455032881609e-5, 5.22635387204803e-5, 5.411670802172442e-5, 5.392236816990856e-5, 5.635161631760684e-5, 5.6643126095330635e-5, 5.805209002099565e-5, 5.8357481216706284e-5, 6.006489562908852e-5, 6.0876958581319076e-5, 6.120317190401e-5, 6.268154291960925e-5, 6.248026235879995e-5, 6.541618226301817e-5, 6.638094081310406e-5, 6.670715413579497e-5, 6.765803126789402e-5, 6.87963075428155e-5, 6.952508198712498e-5, 7.064947684405962e-5, 7.12324963995072e-5, 7.20515000607312e-5, 7.470979160521247e-5, 7.514011556280474e-5, 7.672259721330534e-5, 7.672953792229876e-5, 7.945029584772084e-5, 8.065797921257655e-5, 8.18726032864257e-5, 8.335791501101837e-5, 8.525966927521647e-5, 8.723777133834222e-5, 8.844545470319793e-5, 9.015286911558015e-5, 9.190192778192292e-5, 9.405354756988425e-5, 9.430341309364751e-5, 9.864135621453731e-5, 9.979351390744565e-5, 0.00010263226388575593, 0.00010631083965227047, 0.00010805989831861324, 0.00011087782616994326, 0.00011441064704759592, 0.00011835991046485399, 0.00012221200395620414, 0.00012382224844267843, 0.00012899307664277905, 0.00013194287796498413, 0.00013747462303274278, 0.0001425413405979421, 0.00014516492859745623, 0.00015167531363328765, 0.00015731116933594767, 0.00016321771268935123, 0.00017163679269837414, 0.00017935486109906128, 0.00018681612326699174, 0.00019667193003765335, 0.00020842949107251308, 0.0002195762697159515, 0.00023067446339643596, 0.0002446530513091912, 0.00025819437455536085, 0.0002810154257257379, 0.0002993597195953567, 0.00032471412954833336, 0.0003525463726119623, 0.0003836060453575333,
).toDoubleArray(),
arrayOf(
4.732839988268437e-5, 4.732839988268437e-5, 4.18370297234277e-5, 3.909134464379936e-5, 3.828705305481732e-5, 3.6720071165938527e-5, 3.527789314431557e-5, 3.480641186801575e-5, 3.369704415907501e-5, 3.334343320185015e-5, 3.448746865169529e-5, 3.402292092357635e-5, 3.328796481640311e-5, 3.407145576084251e-5, 3.426559510990714e-5, 3.6102985377840244e-5, 3.585337764332857e-5, 3.6865675677737e-5, 3.6720071165938527e-5, 3.841185692207316e-5, 3.885560400564946e-5, 3.95905601128227e-5, 4.0540456213603206e-5, 4.008284203366515e-5, 4.168449166344834e-5, 4.190636520523649e-5, 4.274532453512293e-5, 4.281466001693173e-5, 4.364668579863728e-5, 4.424990449037381e-5, 4.465205028486483e-5, 4.5393939940218944e-5, 4.6191297981020106e-5, 4.6829184413661034e-5, 4.774441277353714e-5, 4.7598808261738674e-5, 4.836149856163543e-5, 4.9623404330555517e-5, 4.992154690233335e-5, 4.983834432416279e-5, 5.0046350769589185e-5, 5.2237351994747147e-5, 5.312484616189974e-5, 5.2993108746463026e-5, 5.3325919059145244e-5, 5.442835321990511e-5, 5.5301980290695946e-5, 5.578039511517664e-5, 5.546838544703705e-5, 5.7569250545843584e-5, 5.779805763581261e-5, 5.811700085213307e-5, 5.9385840169234045e-5, 5.928183694652085e-5, 6.0308002077291036e-5, 6.201365492978742e-5, 6.283874716331209e-5, 6.409371938405131e-5, 6.405211809496603e-5, 6.502974838847007e-5, 6.666606575915766e-5, 6.75050250890441e-5, 6.898880439975233e-5, 6.946721922423302e-5, 7.029924500593858e-5, 7.197023011753057e-5, 7.255958171290535e-5, 7.297559460375812e-5, 7.574901387610997e-5, 7.75448028549578e-5, 7.918805377382627e-5, 7.940299376743353e-5, 8.228041626249858e-5, 8.365325880231276e-5, 8.476262651125349e-5, 8.756377997632887e-5, 8.788965674083021e-5, 9.106522180767308e-5, 9.338796044826776e-5, 9.67437977678135e-5, 9.833851384941582e-5, 0.00010061271765274434, 0.00010221436728252752, 0.00010541073299391304, 0.00010916178255976892, 0.00011253148697567643, 0.00011414700370182136, 0.00011746817328046271, 0.00012302887892152818, 0.00012529614917667581,
).toDoubleArray(),
arrayOf(
3.993011017354587e-5, 3.993011017354587e-5, 3.557586304922102e-5, 3.384941793145527e-5, 3.242804745297344e-5, 3.1498956506063355e-5, 3.04935968993323e-5, 2.826793873546562e-5, 2.8635415005512143e-5, 2.8254071706407262e-5, 2.7616188369722728e-5, 2.8496744714928552e-5, 2.7734058116718783e-5, 2.7935130038064995e-5, 2.9509037836188787e-5, 2.8801819354212456e-5, 2.8351140909815778e-5, 2.9883447620764492e-5, 3.0264790919869373e-5, 3.009145305663988e-5, 2.9730910301122538e-5, 3.165149382570531e-5, 3.194963495046004e-5, 3.232404473503574e-5, 3.208137172651446e-5, 3.209523875557281e-5, 3.317686702212485e-5, 3.4008888765626406e-5, 3.352354274858383e-5, 3.4057423367330664e-5, 3.508358351764926e-5, 3.5347057069758084e-5, 3.5568929534691835e-5, 3.552039493298758e-5, 3.667135834483141e-5, 3.8023393678021455e-5, 3.642175182178094e-5, 3.8037260707079814e-5, 3.863354295658926e-5, 3.924369223515708e-5, 3.972210473767048e-5, 3.8813814334347936e-5, 4.0262918870946496e-5, 4.127521199220673e-5, 4.1067206556331337e-5, 4.1067206556331337e-5, 4.147628391355294e-5, 4.3570205301365214e-5, 4.337606689454818e-5, 4.351473718513177e-5, 4.317499497320197e-5, 4.4256623239754e-5, 4.431209135598744e-5, 4.441609407392513e-5, 4.4873706032850994e-5, 4.5906799697698765e-5, 4.6634818723262635e-5, 4.774418104793138e-5, 4.7827383222281546e-5, 4.9491426709284664e-5, 4.944289210758041e-5, 4.9449825622109586e-5, 5.0475985772428184e-5, 5.034424899637377e-5, 5.138427617575073e-5, 5.073945932453702e-5, 5.255604013118209e-5, 5.273631150894077e-5, 5.2680843392707334e-5, 5.358913379602988e-5, 5.537104703002905e-5, 5.618920174447226e-5, 5.5787057901779826e-5, 5.7527370048603935e-5, 5.8803136721973e-5, 5.8713001033093667e-5, 5.978769578511652e-5, 6.174294688234519e-5, 6.21173566669209e-5, 6.117439869095247e-5, 6.430834725814168e-5, 6.548704472810224e-5, 6.529983983581438e-5, 6.638840161689559e-5, 6.794150887143184e-5, 7.05485103344034e-5, 6.910633931233403e-5, 7.172027428983477e-5, 7.425794060751454e-5, 7.450061361603584e-5,
).toDoubleArray(),
arrayOf(
3.432494279176201e-5, 3.432494279176201e-5, 3.203522975990526e-5, 2.9627918173542262e-5, 2.7607990060846873e-5, 2.7006162164256126e-5, 2.5830176619193746e-5, 2.5020821861709636e-5, 2.4965481365471408e-5, 2.455734520571446e-5, 2.4204549542195746e-5, 2.432214809670198e-5, 2.3907094374915262e-5, 2.411462123580862e-5, 2.4363653468880655e-5, 2.372723776214101e-5, 2.4073115863629947e-5, 2.375490801026013e-5, 2.4550427643684682e-5, 2.434290078279132e-5, 2.5242183846662554e-5, 2.589243467746175e-5, 2.5726413188747063e-5, 2.6148384472563562e-5, 2.5975445421819096e-5, 2.6584190880439623e-5, 2.7289782207477056e-5, 2.7317452455596172e-5, 2.73727929518344e-5, 2.7732506177382894e-5, 2.8154477461199397e-5, 2.8417344818330985e-5, 2.894307953259417e-5, 2.957949523933381e-5, 2.910218345927908e-5, 3.015365288780545e-5, 3.064479979191973e-5, 3.1184369630242475e-5, 3.0755480784396195e-5, 3.154408285579097e-5, 3.1620176038118536e-5, 3.16962692204461e-5, 3.227042686891773e-5, 3.275465621100224e-5, 3.2685480590704456e-5, 3.3059028940312504e-5, 3.3079781626401847e-5, 3.3923724194034846e-5, 3.398598225230286e-5, 3.489910044023365e-5, 3.438720085003002e-5, 3.478841944775719e-5, 3.5514763460883955e-5, 3.49475233744421e-5, 3.55631863950924e-5, 3.6531645079261424e-5, 3.680834756045258e-5, 3.7008956859316155e-5, 3.768687793823447e-5, 3.802583847769363e-5, 3.7998168229574515e-5, 3.833021120700389e-5, 3.9194906460726234e-5, 3.864841906037371e-5, 4.0184117830984594e-5, 3.95961250584534e-5, 4.159530048505945e-5, 4.072368766930733e-5, 4.059917155277131e-5, 4.127017506965985e-5, 4.312408169364055e-5, 4.259834697937736e-5, 4.247383086284135e-5, 4.375357983835041e-5, 4.4210138932315805e-5, 4.4251644304494476e-5, 4.4632110216132305e-5, 4.547605278376531e-5, 4.517168005445505e-5, 4.656211002244057e-5, 4.691490568595928e-5, 4.771734288141362e-5, 4.813239660320034e-5, 4.851286251483817e-5, 5.036676913881887e-5, 5.045669744520599e-5, 5.0027808599359705e-5, 5.210307720829332e-5, 5.0525873065503785e-5, 5.190938547145953e-5,
).toDoubleArray(),
arrayOf(
4.097487409375173e-5, 4.097487409375173e-5, 3.645746859261719e-5, 3.4181471027727046e-5, 3.3026177430959104e-5, 3.1767114948253914e-5, 3.0805523271902155e-5, 2.9933864630029333e-5, 3.0335104322319995e-5, 2.8820078587636282e-5, 2.7657867065139186e-5, 2.8321987935137525e-5, 2.7754718025347278e-5, 2.720128396701533e-5, 2.7035253749515745e-5, 2.687614145774531e-5, 2.675853672034977e-5, 2.6606342354308486e-5, 2.6710111240245724e-5, 2.6606342354308486e-5, 2.6384968730975706e-5, 2.6364214953788256e-5, 2.7394985887431513e-5, 2.686230560628701e-5, 2.699374619514085e-5, 2.7145940561182136e-5, 2.7478000996181304e-5, 2.8066024683159002e-5, 2.6841551829099562e-5, 2.7533344402014498e-5, 2.6744700868891468e-5, 2.6689357463058277e-5, 2.8363495489512426e-5, 2.839808511815817e-5, 2.8059106757429855e-5, 2.8460346449720517e-5, 2.8764735181803088e-5, 2.821130112347114e-5, 3.0113730698987216e-5, 2.875089933034479e-5, 2.9062205988156508e-5, 2.9311251314405888e-5, 3.0120648624716366e-5, 3.005838729315402e-5, 3.0079141070341465e-5, 2.9837013669821242e-5, 3.0480380762632134e-5, 3.0203663733466157e-5, 3.0238253362111904e-5, 3.1220598815651114e-5, 3.207842160606564e-5, 3.1767114948253914e-5, 3.095771763794344e-5, 3.1109912003984725e-5, 3.2327466932315015e-5, 3.225828767502352e-5, 3.13312856273175e-5, 3.216835464054458e-5, 3.1670263988045826e-5, 3.2071503680336485e-5, 3.313686424262549e-5, 3.277713210470973e-5, 3.355193978637445e-5, 3.420222480491449e-5, 3.448585975980962e-5, 3.4050030438873204e-5, 3.4472023908351317e-5, 3.445818805689302e-5, 3.482483812053794e-5, 3.382865681554043e-5, 3.534368255022414e-5, 3.5613481653660965e-5, 3.540594388178648e-5, 3.557889202501522e-5, 3.640904311251315e-5, 3.606314682605568e-5, 3.649205822126294e-5, 3.7405224417510656e-5, 3.728070175438597e-5, 3.837373401959156e-5, 3.79448226243843e-5, 3.834606231667497e-5, 3.785488958990536e-5, 3.841524157396646e-5, 3.927306436438099e-5, 3.998561071448337e-5, 3.990951353146272e-5, 3.975040123969229e-5, 4.0310753223753394e-5, 4.161132326083347e-5,
).toDoubleArray(),
arrayOf(
2.922372662620021e-5, 2.922372662620021e-5, 2.6591518625116932e-5, 2.485743933831403e-5, 2.3613876503156577e-5, 2.228740947898862e-5, 2.2052514276792218e-5, 2.139618944712578e-5, 2.110602478558904e-5, 2.12994678932802e-5, 2.0048996375705204e-5, 2.0048996375705204e-5, 2.007663110537537e-5, 1.9779557761421086e-5, 1.9579205971312387e-5, 1.962756674823518e-5, 1.9959183504277166e-5, 1.964138411307026e-5, 1.963447543065272e-5, 1.989009668010175e-5, 1.9765740396586005e-5, 1.9482484417466807e-5, 2.0069722422957827e-5, 1.989009668010175e-5, 2.0691503840536555e-5, 2.0988577184490835e-5, 2.1803801709760723e-5, 2.1175111609764453e-5, 2.1271833163610033e-5, 2.1720897520750227e-5, 2.147909363613628e-5, 2.1900523263606304e-5, 2.2114692418550087e-5, 2.2812469342721776e-5, 2.2674295694370943e-5, 2.2584482822942904e-5, 2.3261533699861966e-5, 2.3869497752605607e-5, 2.339279866579525e-5, 2.3890223799858233e-5, 2.384186302293544e-5, 2.3959310624033648e-5, 2.4829804608643864e-5, 2.4159662414142348e-5, 2.5078517175675355e-5, 2.4284018697658093e-5, 2.4974886939412236e-5, 2.5458494708640138e-5, 2.6183906362481985e-5, 2.5403225249299807e-5, 2.614936295039428e-5, 2.7206391360278118e-5, 2.6888591969071212e-5, 2.609409349105395e-5, 2.769690781192356e-5, 2.6591518625116932e-5, 2.7731451224011263e-5, 2.735838237346403e-5, 2.814597216906375e-5, 2.860885389103902e-5, 2.819433294598654e-5, 2.7987072473460296e-5, 2.8981922741586264e-5, 2.8961196694333638e-5, 2.8788479633895104e-5, 2.9741877807515815e-5, 2.956916074707728e-5, 3.017712479982093e-5, 3.056401101520325e-5, 3.0384385272347167e-5, 3.1607222060252e-5, 3.0633097839378665e-5, 3.136541817563805e-5, 3.138614422289068e-5, 3.1475957094318715e-5, 3.0474198143775208e-5, 3.1876660674536114e-5, 3.228427293717106e-5, 3.307186273277078e-5, 3.41427085074897e-5, 3.3465657630570645e-5, 3.4308516885510695e-5, 3.359001391408639e-5, 3.370746151518459e-5, 3.376273097452492e-5, 3.4280882155840527e-5, 3.522046296462616e-5, 3.535863661297699e-5, 3.5683344686601436e-5, 3.555207972066815e-5,
).toDoubleArray(),
)
private val coarseInterpolator = PiecewiseBicubicSplineInterpolator().interpolate(x, yCoarse, gridCoarse)
private val yFine = arrayOf(
0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 100.0,
).toDoubleArray()
private val gridFine = arrayOf(
arrayOf(
0.0017053321996841977, 0.0017053321996841977, 0.00030955562110669606, 0.00010549877670003991, 5.9690097343443635e-5, 3.262133226909129e-5, 2.3598410577640507e-5, 1.4575488886189724e-5, 8.328850792108415e-6, 8.328850792108415e-6, 6.24663809408131e-6, 4.164425396054207e-6, 0.0003317658898856518, 0.0016935329943953774, 0.0013180406378511566, 0.0008821641130641495, 0.0007148930263226388, 0.0005955128316357516, 0.0005413753014870469, 0.00045392236816990856, 0.0004247713903975291, 0.00035467022956394995, 0.0002873453523277403, 0.0002505595946625948, 0.00023876038937377454, 0.00017351772483559195, 0.00020336277350731376, 0.00020613905710468325, 0.00017976436292967328, 0.00018670507192309694, 0.00017907029203033088, 0.00016241259044611408, 0.00014297860526452777, 0.00014159046346584305, 0.0001297912581770228, 9.994620950530096e-5, 9.786399680727386e-5, 0.00010064028040464334, 7.77359407263452e-5, 9.022921691450782e-5, 9.300550051187729e-5, 0.00011521576929083306, 0.00011174541479412122, 8.675886241779598e-5, 0.00011590984019017543, 0.00010619284759938227, 9.022921691450782e-5, 8.467664971976887e-5, 6.801894813555204e-5, 8.259443702174177e-5, 7.148930263226389e-5, 7.77359407263452e-5, 7.148930263226389e-5, 7.704186982700283e-5, 7.912408252502994e-5, 7.77359407263452e-5, 7.77359407263452e-5, 6.454859363884021e-5, 7.704186982700283e-5, 7.218337353160625e-5, 8.537072061911125e-5, 7.495965712897573e-5, 7.357151533029099e-5, 6.316045184015547e-5, 7.079523173292152e-5, 6.871301903489442e-5, 7.634779892766046e-5, 7.287744443094863e-5, 8.259443702174177e-5, 7.426558622963335e-5, 6.0384168242786e-5, 5.8996026444101265e-5, 7.079523173292152e-5, 6.801894813555204e-5, 6.871301903489442e-5, 5.760788464541653e-5, 5.691381374607416e-5, 6.732487723620968e-5, 7.010116083357915e-5, 6.593673543752494e-5, 6.732487723620968e-5, 6.246638094081311e-5, 6.107823914212837e-5, 5.9690097343443635e-5, 5.691381374607416e-5, 6.801894813555204e-5, 6.663080633686732e-5, 5.8301955544758895e-5, 5.9690097343443635e-5, 5.8996026444101265e-5, 5.621974284673179e-5, 5.3443459249362324e-5, 6.524266453818258e-5, 7.218337353160625e-5, 6.732487723620968e-5, 5.621974284673179e-5, 6.385452273949784e-5, 5.3443459249362324e-5, 5.8301955544758895e-5, 6.801894813555204e-5, 5.691381374607416e-5,
).toDoubleArray(),
arrayOf(
0.001241105124377454, 0.001241105124377454, 0.0003217166355928149, 0.00010677664198554633, 5.6161740265125016e-5, 3.4667740904398155e-5, 2.218735417881482e-5, 1.3867096361759263e-5, 9.706967453231484e-6, 7.626902998967594e-6, 6.240193362791669e-6, 6.240193362791669e-6, 0.00031408973259384733, 0.0013998833777195976, 0.001056672742766056, 0.0008354925557959956, 0.0005616174026512502, 0.0005103091461127409, 0.0004763347600264307, 0.00037025147285897234, 0.0003293435385917825, 0.000301609345868264, 0.00026486154050960194, 0.00020592638097212507, 0.00017472541415816672, 0.00017749883343051856, 0.00017056528524963892, 0.00017056528524963892, 0.00015115135034317597, 0.00015531147925170374, 0.00013312412507288893, 0.0001185636738930417, 0.00012272380280156948, 0.00011440354498451392, 0.00010053644862275466, 9.013612635143521e-5, 9.22161908056991e-5, 7.626902998967594e-5, 7.418896553541206e-5, 8.042915889820373e-5, 7.696238480776391e-5, 8.320257817055557e-5, 9.082948116952318e-5, 8.250922335246762e-5, 8.320257817055557e-5, 7.34956107173241e-5, 7.626902998967594e-5, 8.042915889820373e-5, 7.696238480776391e-5, 5.962851435556483e-5, 6.864212699070835e-5, 8.45892878067315e-5, 6.03218691736528e-5, 6.656206253644446e-5, 7.280225589923613e-5, 6.1015223991740755e-5, 6.79487721726204e-5, 5.754844990130094e-5, 6.656206253644446e-5, 5.962851435556483e-5, 5.962851435556483e-5, 5.962851435556483e-5, 6.37886432640926e-5, 5.8241804719388903e-5, 6.656206253644446e-5, 5.685509508321298e-5, 5.754844990130094e-5, 5.8241804719388903e-5, 5.754844990130094e-5, 5.6161740265125016e-5, 5.685509508321298e-5, 5.685509508321298e-5, 6.170857880982872e-5, 5.061490172042131e-5, 6.37886432640926e-5, 5.26949661746852e-5, 5.6161740265125016e-5, 6.309528844600465e-5, 5.546838544703705e-5, 6.240193362791668e-5, 5.477503062894909e-5, 5.061490172042131e-5, 5.962851435556483e-5, 5.2001611356597236e-5, 6.170857880982872e-5, 5.061490172042131e-5, 5.26949661746852e-5, 5.130825653850927e-5, 4.992154690233335e-5, 5.6161740265125016e-5, 5.3388320992773165e-5, 4.368135353954168e-5, 5.685509508321298e-5, 5.8241804719388903e-5, 5.546838544703705e-5, 4.853483726615742e-5, 5.546838544703705e-5, 4.576141799380557e-5, 4.992154690233335e-5, 5.754844990130094e-5, 4.9228192084245384e-5,
).toDoubleArray(),
arrayOf(
0.0010303202590361028, 0.0010303202590361028, 0.0002939810160372191, 0.00010400271793769544, 3.813432991048833e-5, 3.1200815381308634e-5, 2.4267300852128935e-5, 1.733378632294924e-5, 1.1786974699605483e-5, 6.240163076261727e-6, 5.546811623343757e-6, 4.160108717507818e-6, 0.0002419796570683714, 0.0011946445533776615, 0.0008770895879412316, 0.0007120719421467548, 0.0004742523937958912, 0.0004222510348270435, 0.00038203665055780125, 0.0003272618857772816, 0.00028150068988469566, 0.00023157938527460184, 0.0002142455989516526, 0.00018859159519368774, 0.00019067164955244162, 0.00013659023622484, 0.00014699050801860955, 0.00015531072545362518, 0.00013104342460149625, 0.00012064315280772671, 0.00012896337024274234, 0.00011925644990189076, 0.0001046960693906134, 0.00011024288101395716, 8.736228306766417e-5, 8.805563452058214e-5, 8.18154714443204e-5, 7.765536272681259e-5, 7.418860546222275e-5, 7.904206563264853e-5, 7.349525400930477e-5, 7.834871417973056e-5, 7.765536272681259e-5, 7.07218481976329e-5, 6.933514529179696e-5, 6.17082793096993e-5, 6.17082793096993e-5, 7.141519965055087e-5, 6.933514529179696e-5, 5.893487349802742e-5, 5.061465606301178e-5, 5.7548170592191474e-5, 4.5067844439668026e-5, 5.962822495094538e-5, 5.7548170592191474e-5, 4.78412502513399e-5, 5.061465606301178e-5, 4.368114153383208e-5, 4.7147898798421934e-5, 5.061465606301178e-5, 4.645454734550396e-5, 5.616146768635554e-5, 4.645454734550396e-5, 5.408141332760163e-5, 4.576119589258599e-5, 4.368114153383208e-5, 4.922795315717584e-5, 4.5067844439668026e-5, 4.4374492986750054e-5, 5.616146768635554e-5, 4.368114153383208e-5, 4.4374492986750054e-5, 3.6054275551734415e-5, 4.922795315717584e-5, 4.368114153383208e-5, 4.7147898798421934e-5, 4.576119589258599e-5, 2.981411247547269e-5, 4.1601087175078175e-5, 4.09077357221602e-5, 4.7147898798421934e-5, 4.368114153383208e-5, 3.8827681363406295e-5, 5.130800751592975e-5, 3.9521032816324267e-5, 4.09077357221602e-5, 4.2294438627996146e-5, 4.1601087175078175e-5, 4.368114153383208e-5, 4.368114153383208e-5, 5.200135896884772e-5, 4.368114153383208e-5, 4.021438426924224e-5, 3.9521032816324267e-5, 3.9521032816324267e-5, 3.744097845757036e-5, 4.78412502513399e-5, 3.536092409881645e-5, 4.922795315717584e-5, 5.200135896884772e-5, 4.7147898798421934e-5,
).toDoubleArray(),
arrayOf(
0.0008508601296627827, 0.0008508601296627827, 0.0002753189687851931, 0.0001113727486794374, 3.943010356973871e-5, 2.4903223307203395e-5, 1.936917368338042e-5, 9.68458684169021e-6, 1.1759855450623826e-5, 4.150537217867232e-6, 6.917562029778721e-6, 4.842293420845105e-6, 0.0002227454973588748, 0.0010618457715710337, 0.0007768422159441504, 0.0006177382892592398, 0.0004240465524254356, 0.0004212795276135241, 0.00032166663438471053, 0.00030852326652813095, 0.00027393545637923735, 0.00022966305938865354, 0.00018677417480402546, 0.00015564514567002123, 0.00015287812085810974, 0.0001487275836402425, 0.0001342007033777072, 0.00011483152969432677, 0.00011206450488241528, 0.00010998923627348166, 0.00010791396766454805, 0.00011068099247645954, 9.546235601094635e-5, 8.508601296627827e-5, 9.477059980796847e-5, 7.886020713947742e-5, 5.9491033456097e-5, 5.1189959020362534e-5, 5.7415764847163385e-5, 5.9491033456097e-5, 6.018278965907487e-5, 7.19426451096987e-5, 6.848386409480934e-5, 4.7731178005473176e-5, 5.6724008644185514e-5, 5.603225244120764e-5, 5.603225244120764e-5, 5.603225244120764e-5, 4.1505372178672324e-5, 4.980644661440679e-5, 4.842293420845105e-5, 4.980644661440679e-5, 5.6724008644185514e-5, 4.7039421802495304e-5, 4.842293420845105e-5, 4.358064078760594e-5, 5.1189959020362534e-5, 3.527956635187148e-5, 4.496415319356169e-5, 4.427239699058382e-5, 4.911469041142892e-5, 3.666307875782722e-5, 4.911469041142892e-5, 4.288888458462807e-5, 3.2512541539959986e-5, 4.565590939653956e-5, 4.2197128381650196e-5, 4.081361597569445e-5, 3.8046591163782966e-5, 3.043727293102637e-5, 4.358064078760594e-5, 3.666307875782722e-5, 4.7039421802495304e-5, 3.527956635187148e-5, 4.358064078760594e-5, 4.7731178005473176e-5, 4.565590939653956e-5, 3.943010356973871e-5, 3.8046591163782966e-5, 3.597132255484935e-5, 3.943010356973871e-5, 4.288888458462807e-5, 4.7731178005473176e-5, 4.1505372178672324e-5, 3.597132255484935e-5, 4.358064078760594e-5, 3.043727293102637e-5, 4.081361597569445e-5, 3.666307875782722e-5, 4.496415319356169e-5, 2.905376052507063e-5, 3.943010356973871e-5, 3.389605394591573e-5, 3.597132255484935e-5, 3.7354834960805095e-5, 4.288888458462807e-5, 3.666307875782722e-5, 3.666307875782722e-5, 3.7354834960805095e-5, 3.320429774293786e-5, 3.7354834960805095e-5,
).toDoubleArray(),
arrayOf(
0.0006738059660191488, 0.0006738059660191488, 0.00026772372571808067, 0.00010169350821849576, 4.150755437489623e-5, 3.389783607283192e-5, 1.7986606895788368e-5, 1.5911229177043554e-5, 1.5911229177043554e-5, 8.301510874979247e-6, 5.5343405833194975e-6, 4.84254801040456e-6, 0.00022621617134318446, 0.001023853007914107, 0.000748519563893962, 0.0006212297304776136, 0.00041161658088438764, 0.0003818695002490453, 0.00032790967956168024, 0.00026910731086391055, 0.0002269079639160994, 0.0002068459793015662, 0.00018470861696828823, 0.00014250927002047706, 0.000121063700260114, 0.00013144058885383806, 0.00011760473739553932, 0.0001224472854059439, 0.00014043389230173226, 0.00010861143394764513, 0.00011622115224970945, 0.0001155293596767945, 9.062482705185677e-5, 9.270020477060159e-5, 7.748076816647296e-5, 7.886435331230284e-5, 6.917925729149372e-5, 7.194642758315347e-5, 6.848746471857879e-5, 7.81725607393879e-5, 7.748076816647296e-5, 6.433670928108916e-5, 6.917925729149372e-5, 6.779567214566384e-5, 5.9494161270684595e-5, 6.917925729149372e-5, 4.6350102385300794e-5, 5.39598206873651e-5, 5.603519840610991e-5, 4.911727267696054e-5, 5.119265039570535e-5, 4.6350102385300794e-5, 5.741878355193979e-5, 4.565830981238585e-5, 6.848746471857879e-5, 6.50285018540041e-5, 5.0500857822790416e-5, 4.911727267696054e-5, 4.3582932093641044e-5, 4.4966517239470916e-5, 5.39598206873651e-5, 6.156953898942942e-5, 5.603519840610991e-5, 4.911727267696054e-5, 5.257623554153522e-5, 4.911727267696054e-5, 5.188444296862029e-5, 3.943217665615142e-5, 4.911727267696054e-5, 4.565830981238585e-5, 3.8048591510321544e-5, 4.427472466655598e-5, 5.465161326028004e-5, 4.980906524987548e-5, 3.458962864574686e-5, 4.980906524987548e-5, 3.389783607283192e-5, 4.0815761801981294e-5, 5.465161326028004e-5, 4.911727267696054e-5, 4.2199346947811166e-5, 4.427472466655598e-5, 4.7733687531130666e-5, 5.465161326028004e-5, 4.289113952072611e-5, 3.8048591510321544e-5, 3.874038408323648e-5, 5.741878355193979e-5, 4.427472466655598e-5, 4.84254801040456e-5, 4.704189495821573e-5, 3.874038408323648e-5, 4.289113952072611e-5, 4.3582932093641044e-5, 3.735679893740661e-5, 4.150755437489623e-5, 4.565830981238585e-5, 4.427472466655598e-5, 3.943217665615142e-5, 5.257623554153522e-5, 4.289113952072611e-5,
).toDoubleArray(),
arrayOf(
0.000670833062743272, 0.000670833062743272, 0.000257693854174295, 0.00010708457747189202, 4.42155674722651e-5, 2.7634729670165686e-5, 1.727170604385355e-5, 2.210778373613255e-5, 1.727170604385355e-5, 1.31264965933287e-5, 3.4543412087707107e-6, 8.981287142803847e-6, 0.00019482484417466807, 0.0009464894912031747, 0.0006307627047215318, 0.0005630576170296258, 0.0003654692998879412, 0.0003426706479100545, 0.00029500073922901867, 0.000267366009558853, 0.00021900523263606304, 0.00019137050296589737, 0.0001526818814276654, 0.00013748278010907429, 0.0001181384693399583, 0.00012090194230697487, 9.395808087856332e-5, 9.533981736207161e-5, 0.00010984805043890859, 8.497679373575947e-5, 9.603068560382575e-5, 7.944984780172634e-5, 9.879415857084232e-5, 6.632335120839765e-5, 7.806811131821806e-5, 7.185029714243078e-5, 6.425074648313521e-5, 4.490643571401923e-5, 4.905164516454409e-5, 5.319685461506894e-5, 6.56324829666435e-5, 4.076122626349438e-5, 4.007035802174024e-5, 5.1124249889806513e-5, 4.076122626349438e-5, 5.3887722856823085e-5, 5.526945934033137e-5, 4.9742513406298234e-5, 4.5597303955773376e-5, 3.7306885054723674e-5, 4.697904043928166e-5, 4.490643571401923e-5, 3.3852543845952966e-5, 4.42155674722651e-5, 4.628817219752752e-5, 4.1452094505248525e-5, 4.3524699230510954e-5, 3.799775329647782e-5, 3.5234280329461245e-5, 3.3852543845952966e-5, 3.93794897799861e-5, 3.45434120877071e-5, 3.7306885054723674e-5, 4.490643571401923e-5, 3.316167560419882e-5, 2.62529931866574e-5, 2.7634729670165686e-5, 3.3852543845952966e-5, 3.1089070878936394e-5, 4.490643571401923e-5, 3.7306885054723674e-5, 3.868862153823196e-5, 2.8325597911919825e-5, 2.901646615367397e-5, 3.316167560419882e-5, 4.214296274700267e-5, 3.177993912069054e-5, 2.8325597911919825e-5, 3.1089070878936394e-5, 2.62529931866574e-5, 3.177993912069054e-5, 3.039820263718225e-5, 2.901646615367397e-5, 3.7306885054723674e-5, 4.1452094505248525e-5, 2.5562124944903257e-5, 3.93794897799861e-5, 2.7634729670165686e-5, 3.177993912069054e-5, 3.316167560419882e-5, 3.3852543845952966e-5, 3.3852543845952966e-5, 3.1089070878936394e-5, 4.3524699230510954e-5, 2.901646615367397e-5, 3.316167560419882e-5, 3.3852543845952966e-5, 3.177993912069054e-5, 3.799775329647782e-5, 3.5234280329461245e-5, 3.177993912069054e-5,
).toDoubleArray(),
)
private val fineInterpolator = PiecewiseBicubicSplineInterpolator().interpolate(x, yFine, gridFine)
fun value(ei: Double, delta: Double): Double {
if (ei < x.first() || ei > x.last())
error("trap: ei ($ei) not in [${x.first()}..${x.last()}]")
if (delta < yFine.first())
error("trap: delta < ${yFine.first()}")
if (delta > yCoarse.last())
error("trap: delta > ${yCoarse.last()}")
return if (delta < yFine.last()) {
fineInterpolator.value(ei, delta)
} else {
coarseInterpolator.value(ei, delta)
}
}
}

View File

@@ -1,6 +1,5 @@
package ru.inr.mass.scripts
import kotlinx.html.code
import ru.inr.mass.models.*
import ru.inr.mass.models.NBkgSpectrum.Companion.bkg
import ru.inr.mass.models.NBkgSpectrum.Companion.norm
@@ -16,9 +15,7 @@ import space.kscience.kmath.real.step
import space.kscience.plotly.*
import space.kscience.plotly.models.AxisType
import space.kscience.plotly.models.ScatterMode
import space.kscience.plotly.models.appendXY
import kotlin.math.pow
import kotlin.system.measureTimeMillis
fun main() {

View File

@@ -0,0 +1,29 @@
package ru.inr.mass.scripts
import org.apache.commons.math3.analysis.interpolation.LinearInterpolator
import space.kscience.kmath.real.step
import space.kscience.kmath.structures.toDoubleArray
//fun wallStep(u: Double): Double {
// return (3.932729e-13 * u.pow(4.0)
// - 2.827187e-8 * u.pow(3.0)
// + 7.618574e-4 * u.pow(2.0)
// - 9.124489 * u
// + 4.099330e+4) * 1e-4
//}
// Angle = 170.4, 2025-03-10 (weekend simulation)
private val WALL_FROM_GEANT = arrayOf<Double>(
1.0, 0.983725115222919, 0.967653080298236, 0.951718416974794, 0.936024651676719, 0.920364067924837, 0.904866294959613, 0.889546153871678, 0.874435941365996, 0.859396958579476, 0.844639576514986, 0.829893254965895, 0.815366374042298, 0.801054509538036, 0.786916073915212, 0.772810598628275, 0.758871252282614, 0.744986987303634, 0.731278584519482, 0.717764183175408, 0.704346671946219, 0.691118295530335, 0.678120641465651, 0.665197756485057, 0.652439451973583, 0.639816085749964, 0.627406187473524, 0.615003367926939, 0.602793001348277, 0.590679303674193, 0.578771774007125, 0.567004491675303, 0.555399577709522, 0.543774754816025, 0.532440602267185, 0.521252890942212, 0.510256305323316, 0.499336037260664, 0.488627467462729, 0.47800915147044, 0.467592579279009, 0.457206755320384, 0.446997235977202, 0.43696645456285, 0.427042296516933, 0.417301521816314, 0.407677324947988, 0.398168599860416, 0.388771807188671, 0.379502874074926, 0.370428827242492, 0.361487285384524, 0.352668736457781, 0.343893544751398, 0.335274527522434, 0.326941092801042, 0.31865765160925, 0.31051799711763, 0.302525889901418, 0.29468818748016, 0.286888312021564, 0.279237532310531, 0.271755978485085, 0.26442285677628, 0.257172025302035, 0.250042638286859, 0.242984038570229, 0.236211463781789, 0.229509676291896, 0.222894160822106, 0.216442119769897, 0.210088517304729, 0.203838883684302, 0.197707376368324, 0.191745979779166, 0.185928591100488, 0.180139738551537, 0.174457066950406, 0.168886327765101, 0.163492335615855, 0.158201427470117, 0.153043024298846, 0.147970008306447, 0.142966452350747, 0.138075934862413, 0.133347343319504, 0.128675160405125, 0.124153842920772, 0.119732070075001, 0.115426875061524, 0.11120905811969, 0.107032607505445, 0.103007243531534, 0.099080096934357, 0.0952423193015948, 0.0915160316640435, 0.0879125157474088, 0.0843950506405698, 0.0809419577333465, 0.0775698277988358, 0.074282200201965, 0.0711140261713915, 0.0680015971384235, 0.0649557524081507, 0.0620386520771095, 0.0591927814652307, 0.0563816408717013, 0.0537421594771473, 0.0511834198449979, 0.0486333074148589, 0.0462050818644047, 0.0438423345651061, 0.0415857682136272, 0.0394125981482485, 0.0372892004021603, 0.0352394656886222, 0.0332863998796616, 0.0313837700209154, 0.0295220640691415, 0.0277641057517998, 0.0260775983639286, 0.024434890617033, 0.022893939611798, 0.0213892670970682, 0.0199934300538537, 0.0186486925917774, 0.017341339671746, 0.0161038892090294, 0.0149089111254406, 0.0137780840311597, 0.0127441470517643, 0.0117212705877668, 0.0107775874140183, 0.00986951909985102, 0.00901852304513686, 0.00821597204786549, 0.00744881469986738, 0.00675598401534315, 0.00611425291195719, 0.00549928825583415, 0.00492989292315043, 0.00439987302528323, 0.00393754348165116, 0.00350021070281833, 0.00309672310110307, 0.00272708067650536, 0.00238862890532973, 0.00208579199373532, 0.00180640337478446, 0.00155555088556017, 0.00132173159004863, 0.00112396957473424, 0.000948992221139521, 0.000785739013866568, 0.000657215824943011, 0.000536656207105939, 0.000428705576822469, 0.000335797247480138, 0.000261691794314231, 0.000202628642089464, 0.000148210906331813, 0.000112374836442629, 8.09629727126025E-05, 5.77358903770198E-05, 3.8048172968764E-05, 2.67664472629096E-05, 1.63695627888868E-05, 7.07872985465377E-06, 2.43331338753723E-06, 6.63630923873791E-07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
)
const val WALL_STEP = 50.0
const val WALL_L = 10_000.0
const val WALL_R = 19_000.0
private val WALL_INTERPOLATOR = LinearInterpolator().interpolate(
(WALL_L..WALL_R step WALL_STEP).toDoubleArray(),
WALL_FROM_GEANT.toDoubleArray()
)
fun wallStep(u: Double): Double {
return WALL_INTERPOLATOR.value(u)
}