feat: make trap and fit functions configurable

This commit is contained in:
2025-09-10 10:05:42 +03:00
parent daca7ec262
commit 917d8f7de0
10 changed files with 303 additions and 37 deletions

View File

@@ -31,10 +31,11 @@ data class FitCustomParams(
val fixBkg: Boolean = false,
val fixU2: Boolean = false,
val fixTrap: Boolean = false,
val fixRWall: Boolean = false
val trapFunc: String = "TrapInterpolator",
val fixRWall: Boolean = false,
val wallFunc: String = "wallStep",
)
fun main (args: Array<String>) {
val usage = """
Usage:
@@ -57,6 +58,13 @@ fun main (args: Array<String>) {
}
val config = Yaml.default.decodeFromStream(FitCustomParams.serializer(), File(args[0]).inputStream())
val wallFunc = getWallByName(config.wallFunc)
println("using wall=${config.wallFunc}")
val trapFunc = getTrapByName(config.trapFunc)
println("using trap=${config.trapFunc}")
val fitParams: Map<Symbol, Double> = mapOf(
NBkgSpectrum.norm to config.fitParams.norm,
NBkgSpectrum.bkg to config.fitParams.bkg,
@@ -71,14 +79,16 @@ fun main (args: Array<String>) {
runBlocking {
processCustom(
config.spectrum,
config.full,
config.postfix,
fitParams,
config.fixBkg,
config.fixU2,
config.fixTrap,
config.fixRWall
spectrumFile = config.spectrum,
full =config.full,
postfix = config.postfix,
fitParams = fitParams,
fixBkg = config.fixBkg,
fixU2 = config.fixU2,
fixTrap = config.fixTrap,
trapFunc = trapFunc,
fixRwall = config.fixRWall,
wallFunc = wallFunc,
)
}
}

View File

@@ -39,12 +39,13 @@ class CustomSterileNeutrinoSpectrum(
source: DifferentiableKernel = NumassBeta,
transmission: DifferentiableKernel = NumassTransmission(),
resolution: DifferentiableKernel = NumassResolution(),
val wallFunc: (u: Double) -> Double,
fss: FSS? = null
): SterileNeutrinoSpectrumFast(source, transmission, resolution, fss) {
override fun invoke(u: Double, arguments: Map<Symbol, Double>): Double {
val rearWall = arguments[rearWall]!!
return super.invoke(u, arguments) * (1.0 + rearWall * wallStep(u))
return super.invoke(u, arguments) * (1.0 + rearWall * wallFunc(u))
}
override fun derivativeOrNull(symbols: List<Symbol>): Spectrum? {
@@ -89,8 +90,12 @@ class CustomArgs : CliktCommand() {
val fixTrap: Boolean by option().flag().help("Don't fit trap variable")
val trapFunc: String by option().default("TrapInterpolator").help("trap function by name")
val rwall: Double by option().double().default(0.17).help("rear wall")
val wallFunc: String by option().default("wallStep").help("wall function by name")
val fixRwall: Boolean by option().flag().help("Don't fit rwall variable")
@@ -117,7 +122,9 @@ class CustomArgs : CliktCommand() {
fixBkg,
fixU2,
fixTrap,
fixRwall
getTrapByName(trapFunc),
fixRwall,
getWallByName(wallFunc)
)
}
}
@@ -139,7 +146,7 @@ suspend fun fitNumassSpectrumCustom(
startingPoint = initial,
attributesBuilder = {
freeParameters(*fitParams.toTypedArray())
iterations(30)
iterations(20)
OptimizationLog(logger)
}
)
@@ -154,28 +161,28 @@ suspend fun processCustom(
fixBkg: Boolean,
fixU2: Boolean,
fixTrap: Boolean,
fixRwall: Boolean
trapFunc: ITrap,
fixRwall: Boolean,
wallFunc: (u: Double) -> Double
) {
val data = parse(spectrumFile)
val testData = if (full != null) parse(full) else data
val trapInterpolator = TrapInterpolator()
val spectrum: NBkgSpectrum = CustomSterileNeutrinoSpectrum(
// fss = FSS.default,
wallFunc = wallFunc,
transmission = NumassTransmission(
// NumassTransmission.trapFunction,
trapFunc = { ei, ef, _ ->
val delta = ei - ef
trapInterpolator.value(ei, delta)
trapFunc.value(ei, delta)
},
adjustX = false,
),
resolution = NumassResolution(1.7e-4, tailFunction = {e,u -> adiabacity(e,u) })
).withNBkg()
val logMessages = emptyList<String>().toMutableList()
val dumpLogger = Loggable { tag, block ->
logMessages += "[$tag] ${block()}"

View File

@@ -6,6 +6,7 @@ import com.github.ajalt.clikt.output.MordantHelpFormatter
import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.arguments.help
import com.github.ajalt.clikt.parameters.options.default
import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.help
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.double
@@ -27,9 +28,14 @@ private class CalcSpectrum : CliktCommand() {
}
val spectrum: String by argument().help("path to spectrum TSV file")
val full: String? by option().help("path to full spectrum (for test)")
val norm: Double by option().double().default(8.84e8).help("NBkgSpectrum.norm")
val bkg: Double by option().double().default(-1.702).help("NBkgSpectrum.bkg")
val postfix: String? by option().help("save file postfix")
val norm: Double by option().double().default(8.311751921319484E8).help("NBkgSpectrum.norm")
val bkg: Double by option().double().default(1612.626961212948).help("NBkgSpectrum.bkg")
val fixBkg: Boolean by option().flag().help("Don't fit bkg variable")
val mnu2: Double by option().double().default(0.0).help("NumassBeta.mnu2")
val e0: Double by option().double().default(18572.0).help("NumassBeta.e0")
@@ -37,8 +43,15 @@ private class CalcSpectrum : CliktCommand() {
val u2: Double by option().double().default(1e-2).help("NumassBeta.u2")
val thickness: Double by option().double().default(0.3).help("NumassTransmission.thickness")
val trap: Double by option().double().default(1.0).help("NumassTransmission.trap")
val trapFunc: String by option().default("TrapInterpolator").help("trap function by name")
val rwall: Double by option().double().default(0.17).help("rear wall")
val wallFunc: String by option().default("wallStep").help("wall function by name")
@UnstableKMathAPI
override fun run() {
val fitParams: Map<Symbol, Double> = mapOf(
@@ -49,37 +62,47 @@ private class CalcSpectrum : CliktCommand() {
NumassBeta.msterile2 to msterile2,
NumassBeta.u2 to u2,
NumassTransmission.thickness to thickness,
NumassTransmission.trap to trap
NumassTransmission.trap to trap,
rearWall to rwall
)
runBlocking {
calcSpectrum(spectrum, fitParams)
calcSpectrum(spectrum, fitParams, getTrapByName(trapFunc), getWallByName(wallFunc))
}
}
}
fun main(args: Array<String>) = CalcSpectrum().main(args)
suspend fun calcSpectrum(spectrumFile: String, fitParams: Map<Symbol, Double>) {
suspend fun calcSpectrum(spectrumFile: String, fitParams: Map<Symbol, Double>, trapFunc: ITrap, wallFunc: (u: Double) -> Double) {
val data = parse(spectrumFile)
val range = data.x.toTypedArray();
runBlocking(Dispatchers.Default) {
val handles = range.map {
val spectrum: NBkgSpectrum = CustomSterileNeutrinoSpectrum(
wallFunc = wallFunc,
transmission = NumassTransmission(
trapFunc = { ei, ef, _ ->
val delta = ei - ef
trapFunc.value(ei, delta)
},
adjustX = false,
),
resolution = NumassResolution(1.7e-4, tailFunction = {e,u -> adiabacity(e,u) })
).withNBkg()
val out = range.map {
// async(Dispatchers.Default) {
async(Dispatchers.Default) {
val spectrum: NBkgSpectrum = SterileNeutrinoSpectrum(
transmission = NumassTransmission(NumassTransmission.trapFunction),
).withNBkg()
val res = spectrum.invoke(it, fitParams)
return@async res
}
// return@async res
// }
res
}
val out = handles.map { it.await() }
// val out = handles.map { it.await() }
println(out.joinToString("\n"))
}
}

View File

@@ -0,0 +1,79 @@
// Code generated by trap-spectrum-2024-11.jl Julia notebook 2025-08-06T13:29:38.246
package ru.inr.mass.scripts
class TrapInterpolatorFull: ITrap {
private val x = arrayOf(8000.0, 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, 9100.0, 9200.0, 9300.0, 9400.0, 9500.0, 9600.0, 9700.0, 9800.0, 9900.0, 10000.0, 10100.0, 10200.0, 10300.0, 10400.0, 10500.0, 10600.0, 10700.0, 10800.0, 10900.0, 11000.0, 11100.0, 11200.0, 11300.0, 11400.0, 11500.0, 11600.0, 11700.0, 11800.0, 11900.0, 12000.0, 12100.0, 12200.0, 12300.0, 12400.0, 12500.0, 12600.0, 12700.0, 12800.0, 12900.0, 13000.0, 13100.0, 13200.0, 13300.0, 13400.0, 13500.0, 13600.0, 13700.0, 13800.0, 13900.0, 14000.0, 14100.0, 14200.0, 14300.0, 14400.0, 14500.0, 14600.0, 14700.0, 14800.0, 14900.0, 15000.0, 15100.0, 15200.0, 15300.0, 15400.0, 15500.0, 15600.0, 15700.0, 15800.0, 15900.0, 16000.0, 16100.0, 16200.0, 16300.0, 16400.0, 16500.0, 16600.0, 16700.0, 16800.0, 16900.0, 17000.0, 17100.0, 17200.0, 17300.0, 17400.0, 17500.0, 17600.0, 17700.0, 17800.0, 17900.0, 18000.0,
).toDoubleArray()
private val gridCoarse = arrayOf(
arrayOf(
7.310615677151606e-5, 7.310615677151606e-5, 6.543804110731736e-5, 5.9738765951493986e-5, 5.740724429683898e-5, 5.476485308822996e-5, 5.346956328008829e-5, 5.5852896527068966e-5, 5.6526447227302636e-5, 5.528296901148663e-5, 5.5023911049858294e-5, 6.0205070282424985e-5, 6.289927308335967e-5, 6.1293113721264e-5, 6.585253384592269e-5, 6.84949250545317e-5, 6.336557741429067e-5, 7.118912785546638e-5, 7.388333065640106e-5, 7.08264467091867e-5, 7.403876543337806e-5, 7.621485231105608e-5, 7.96344174045501e-5, 7.771738848850042e-5, 8.098151880501744e-5, 8.424564912153445e-5, 8.212137383618211e-5, 8.300217090571844e-5, 8.595543166828146e-5, 8.62144896299098e-5, 9.004854746200915e-5, 9.072209816224282e-5, 9.585144580248385e-5, 9.217282274736149e-5, 9.792390949551052e-5, 9.901195293434953e-5, 9.81311558648132e-5, 0.00010274238758179755, 0.00010631738745226857, 0.00010336412668970556, 0.0001106695612076246, 0.00011077318439227592, 0.00011336376400855928, 0.00011916666234903397, 0.00012408876361997233, 0.00012310434336578466, 0.00012688658960555835, 0.0001327412995383587, 0.00013595361826255006, 0.00014025398042558042, 0.00014901013952861814, 0.00014895832793629247, 0.0001528441973607175, 0.00015937245799375153, 0.0001653826027035289, 0.00017206629811353992, 0.0001780764428233173, 0.00018890506561938168, 0.0001951224566984617, 0.0002022206448470781, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
).toDoubleArray(),
arrayOf(
5.853110141609167e-5, 5.853110141609167e-5, 4.8062543189248845e-5, 4.7959404684550884e-5, 4.61544808523366e-5, 4.166795589797539e-5, 4.202894066441825e-5, 4.079127860804274e-5, 4.182266365502233e-5, 4.295718720669988e-5, 4.053343234629785e-5, 4.728900440401415e-5, 4.269934094495498e-5, 4.254463318790804e-5, 4.66701733758264e-5, 4.5380942067101916e-5, 4.914549748857741e-5, 4.7804696927503946e-5, 5.0589436554348836e-5, 4.930020524562435e-5, 4.8939220479181496e-5, 5.141454459193251e-5, 5.0486298049650875e-5, 5.486968449931413e-5, 5.260063739595903e-5, 5.600420805099167e-5, 5.481811524696515e-5, 5.677774683622637e-5, 6.0078178986561056e-5, 5.858267066844065e-5, 6.002660973421208e-5, 6.0078178986561056e-5, 5.9717194220118196e-5, 6.239879534226513e-5, 6.528667347380798e-5, 6.29660571181039e-5, 6.89996596429345e-5, 6.771042833421002e-5, 6.827769011004879e-5, 7.116556824159164e-5, 6.956692141877328e-5, 7.235166104561816e-5, 7.245479955031613e-5, 7.193910702682632e-5, 7.451756964427529e-5, 7.714760151407325e-5, 7.451756964427529e-5, 8.013861815031405e-5, 8.199511123487732e-5, 8.024175665501202e-5, 8.410945058118547e-5, 8.477985086172221e-5, 8.797714450735892e-5, 8.529554338521199e-5, 8.885382179729159e-5, 8.93179450684324e-5, 9.210268469527729e-5, 9.63313633878936e-5, 9.777530245366504e-5, 0.00010107573460399972, 9.999278030467115e-5, 0.00011015192301742009, 0.00010777973740936703, 0.00010958466124158132, 0.0001139164784388956, 0.00012031106573016904, 0.00012232226657177923, 0.00012062048124426293, 0.00012283795909526904, 0.0001309343317140588, 0.00013614282620130573, 0.0001409903359221098, 0.00014398135255835063, 0.0001518198789153955, 0.0001522324329341873, 0.0001547593262992873, 0.0001693534247140485, 0.00018250358406303826, 0.00018776364780263415, 0.00019292057303753207, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
).toDoubleArray(),
arrayOf(
4.804764509769516e-5, 4.804764509769516e-5, 4.2938389603955286e-5, 4.335125873476255e-5, 3.793235139291723e-5, 3.581639709753001e-5, 3.591961438023183e-5, 3.370044280214279e-5, 3.4939050194564575e-5, 3.2358618127019185e-5, 3.364883416079188e-5, 3.535191932537184e-5, 3.256505269242282e-5, 3.535191932537184e-5, 3.674535264184635e-5, 3.731304769670634e-5, 3.715822177265361e-5, 3.628087486968818e-5, 3.6693744000495444e-5, 3.6900178565899076e-5, 3.8758089654531754e-5, 3.917095878533902e-5, 4.1183695798024424e-5, 3.989347976425173e-5, 4.051278346046262e-5, 4.309321552800801e-5, 4.1183695798024424e-5, 4.4435040203131606e-5, 4.1338521722077144e-5, 4.412538835502617e-5, 4.546721303014977e-5, 4.5983299443658844e-5, 4.381573650692072e-5, 4.804764509769516e-5, 4.686064634662428e-5, 4.670582042257156e-5, 4.954429569687148e-5, 5.042164259983691e-5, 5.000877346902965e-5, 5.16086413509078e-5, 4.9853947544976935e-5, 5.078290308929327e-5, 5.305368330873321e-5, 5.475676847331317e-5, 5.047325124118782e-5, 5.269242281927686e-5, 5.310529195008412e-5, 5.6614679561945856e-5, 5.656307092059495e-5, 5.744041782356038e-5, 5.7750069671665824e-5, 5.609859314843677e-5, 6.074337087001848e-5, 5.7956504237069456e-5, 5.898867706408761e-5, 6.296254244810751e-5, 6.270449924135297e-5, 6.301415108945843e-5, 6.249806467594934e-5, 6.48720621780911e-5, 6.709123375618013e-5, 6.389149799242386e-5, 7.060062136804187e-5, 6.827823250725101e-5, 7.385196577314906e-5, 7.168440283641093e-5, 7.116831642290184e-5, 7.529700773097448e-5, 7.88063953428362e-5, 8.252221752010156e-5, 7.88063953428362e-5, 8.164487061713613e-5, 7.989017681120527e-5, 8.370921627117243e-5, 8.690895203492873e-5, 8.546391007710331e-5, 8.995386187463229e-5, 9.294716307298496e-5, 9.506311736837216e-5, 0.00010068845927562112, 9.846928769753207e-5, 0.0001046107160182901, 0.00010517841107315009, 0.00010208189259209563, 0.00010935871102257363, 0.00010858458140230999, 0.00011746126771466616, 0.00011596461711548982, 0.00012164156766408968, 0.0001282990823983568, 0.0001291248206599713, 0.0001358339440355893, 0.00013805311561367837, 0.00014213019828040007, 0.00015307123024679254, 0.00015983196226376144, 0.00016561213009506313, 0.000172940557166892, 0.00017660477070280647, 0.00018770062859325165, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
).toDoubleArray(),
arrayOf(
3.76740882561838e-5, 3.76740882561838e-5, 3.335083222678566e-5, 3.1652410215236394e-5, 3.2115616218386193e-5, 3.067453087525348e-5, 2.9593716867903942e-5, 2.8821706862654273e-5, 2.7123284851105002e-5, 2.6968882850055072e-5, 2.9645184201587253e-5, 2.8512902860554407e-5, 2.7277686852154935e-5, 2.8049696857404607e-5, 2.8049696857404607e-5, 2.8821706862654273e-5, 2.8101164191087915e-5, 3.0571596207886855e-5, 2.949078220053732e-5, 3.0108390204737053e-5, 2.9284912865804076e-5, 2.9645184201587253e-5, 3.252735488785268e-5, 3.07774655426201e-5, 3.072599820893679e-5, 3.118920421208659e-5, 3.345376689415228e-5, 3.422577689940195e-5, 3.5255123573068174e-5, 3.401990756466871e-5, 3.484338490360168e-5, 3.613006824568446e-5, 3.6233002913051084e-5, 3.597566624463453e-5, 3.5358058240434796e-5, 3.556392757516804e-5, 3.7879957590917044e-5, 3.824022892670022e-5, 3.7416751587767245e-5, 3.597566624463453e-5, 3.705648025198407e-5, 3.978424893719956e-5, 4.040185694139929e-5, 4.0093052939299426e-5, 3.824022892670022e-5, 4.1688540283482075e-5, 4.302669095924816e-5, 4.307815829293147e-5, 4.348989696239796e-5, 4.395310296554776e-5, 4.601179631288021e-5, 4.2614952289781674e-5, 4.3798700964497834e-5, 4.518831897394723e-5, 4.4467776302380885e-5, 4.626913298129677e-5, 4.54971229760471e-5, 4.5908861645513594e-5, 4.8070489660212665e-5, 4.817342432757928e-5, 4.848222832967915e-5, 4.678380631812988e-5, 4.8739564998095715e-5, 4.7092610320229755e-5, 4.9614509670712e-5, 5.10041276801614e-5, 4.946010766966206e-5, 5.4915645040093054e-5, 5.373189636537689e-5, 5.311428836117716e-5, 5.404070036747676e-5, 5.507004704114298e-5, 5.5636187711659415e-5, 5.625379571585914e-5, 5.9187433735807884e-5, 5.9856509073690935e-5, 5.8209554395824974e-5, 5.795221772740841e-5, 6.345922243152271e-5, 6.258427775890642e-5, 6.541498111148854e-5, 6.407683043572244e-5, 6.402536310203913e-5, 6.824568446407065e-5, 6.855448846617053e-5, 6.654726245252138e-5, 6.840008646512058e-5, 7.370122183450165e-5, 7.081905114823621e-5, 7.303214649661859e-5, 7.514230717763436e-5, 7.689219652286693e-5, 7.766420652811661e-5, 8.27594725627644e-5, 8.394322123748057e-5, 8.265653789539778e-5, 8.45608292416803e-5, 8.981049727737804e-5, 9.078837661736097e-5, 9.331027596784321e-5, 9.495723064570916e-5, 9.598657731937538e-5, 9.871434600459088e-5, 9.855994400354095e-5, 0.00010437575270975512, 0.00010586830538657114, 0.00010669178272550412, 0.0001140001441085343, 0.00012135997282524781, 0.00012089676682209801, 0.00012918300754511113, 0.00012980061554931083, 0.00013664577092919124, 0.00013726337893339098, 0.00014735097633531997, 0.00014868912701108605, 0.00015718123706883242, 0.00016654829179919506, 0.00017792257254320684, 0.00018425305458625408, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
).toDoubleArray(),
arrayOf(
3.554411214090445e-5, 3.554411214090445e-5, 3.03638014248419e-5, 2.9184126707322705e-5, 2.9286707117541764e-5, 2.702993809272243e-5, 2.8055742194913036e-5, 2.446542783724592e-5, 2.5491231939436526e-5, 2.467058865768404e-5, 2.441413763213639e-5, 2.431155722191733e-5, 2.482445927301263e-5, 2.1285435120455048e-5, 2.2824141273740953e-5, 2.47731690679031e-5, 2.5337361324107937e-5, 2.5491231939436526e-5, 2.3490913940164848e-5, 2.5439941734326996e-5, 2.487574947812216e-5, 2.5798973170093707e-5, 2.631187522118901e-5, 2.9491867937979886e-5, 2.7337679323379615e-5, 2.810703240002257e-5, 2.7235098913160553e-5, 2.7953161784693977e-5, 2.605542419564136e-5, 2.9902189578856126e-5, 2.7286389118270086e-5, 2.7901871579584448e-5, 2.7594130348927263e-5, 2.9081546297103642e-5, 2.913283650221317e-5, 2.9902189578856126e-5, 2.9953479783965655e-5, 3.0107350399294247e-5, 2.9543158143089412e-5, 3.390282557739949e-5, 3.062025245038955e-5, 3.118444470659438e-5, 3.185121737301828e-5, 3.292831168031841e-5, 3.0056060194184718e-5, 3.3748954962070896e-5, 3.410798639783761e-5, 3.523637091024727e-5, 3.328734311608512e-5, 3.595443378178069e-5, 3.821120280660002e-5, 3.354379414163277e-5, 3.390282557739949e-5, 3.8006041986161904e-5, 3.69802378839713e-5, 3.4056696192728074e-5, 3.651862603798553e-5, 3.641604562776646e-5, 3.9185716703681095e-5, 3.482604926937103e-5, 3.6569916243095055e-5, 4.000635998543358e-5, 3.677507706353317e-5, 3.8724104857695325e-5, 3.8262493011709555e-5, 4.169893675404808e-5, 3.821120280660002e-5, 3.949345793433828e-5, 4.103216408762419e-5, 4.2314419215362445e-5, 4.005765019054311e-5, 4.2057968189814786e-5, 4.2416999625581504e-5, 4.5545702137262853e-5, 4.344280372777211e-5, 4.2776031061348214e-5, 4.821279280295842e-5, 4.4930219675948485e-5, 4.646892582923439e-5, 4.667408664967251e-5, 4.964891854602526e-5, 4.944375772558715e-5, 4.831537321317748e-5, 4.739214952120594e-5, 4.795634177741077e-5, 5.0315691212449164e-5, 4.9597628340915736e-5, 5.134149531463976e-5, 4.887956546938231e-5, 5.118762469931118e-5, 5.139278551974929e-5, 5.441890762121157e-5, 5.534213131318312e-5, 5.457277823654017e-5, 5.703470808179761e-5, 5.7496319927783396e-5, 5.56498725438403e-5, 5.78553513635501e-5, 5.980437915771225e-5, 5.893244567085024e-5, 5.939405751683601e-5, 6.118921469566957e-5, 6.093276367012192e-5, 6.12405049007791e-5, 6.365114454092702e-5, 6.308695228472219e-5, 6.390759556647467e-5, 6.965209853874206e-5, 6.847242382122286e-5, 7.129338510224703e-5, 7.27808010504234e-5, 7.10882242818089e-5, 7.421692679349026e-5, 7.919207668911468e-5, 7.708917827962394e-5, 8.103852407305777e-5, 8.544948171247736e-5, 8.314142248254851e-5, 8.893721565992543e-5, 8.632141519933938e-5, 8.898850586503496e-5, 9.611784437525965e-5, 9.504075006795952e-5, 9.565623252927388e-5, 9.863106442562664e-5, 0.00010104170406577455, 0.00010878652503731363, 0.00011140232549789966, 0.0001092481368832994, 0.00011827521298257671, 0.00012053198200739604, 0.0001258661633387872, 0.0001311490544650688, 0.000135713882719817, 0.0001393041970774841, 0.00014499740984464196, 0.00015176771691909996, 0.00015633254517384814, 0.00016853961398991633, 0.0001767973370125507, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
).toDoubleArray(),
arrayOf(
2.8956391162406917e-5, 2.8956391162406917e-5, 2.700888166829813e-5, 2.7265132917522973e-5, 2.8033886665197492e-5, 2.547137417294909e-5, 2.2806361181010757e-5, 2.2806361181010757e-5, 2.3421364179150376e-5, 2.2037607433336238e-5, 2.290886168070069e-5, 2.275511093116579e-5, 2.1371354185351654e-5, 1.9833846690002616e-5, 2.152510493488656e-5, 1.9218843691862997e-5, 2.0141348189072422e-5, 2.2140107933026176e-5, 2.1576355184731525e-5, 1.962884569062274e-5, 2.1781356184111397e-5, 2.2345108932406048e-5, 2.0295098938607325e-5, 2.1217603435816747e-5, 2.188385668380133e-5, 2.3216363179770504e-5, 2.290886168070069e-5, 2.219135818287114e-5, 2.224260843271611e-5, 2.2293858682561075e-5, 2.6240127920623614e-5, 2.44976194258947e-5, 2.429261842651483e-5, 2.629137817046858e-5, 2.419011792682489e-5, 2.3933866677600054e-5, 2.454886967573967e-5, 2.4395118926204763e-5, 2.419011792682489e-5, 2.4805120924964507e-5, 2.429261842651483e-5, 2.5881376171708835e-5, 2.7675134916282717e-5, 2.7623884666437748e-5, 2.7931386165507558e-5, 2.782888566581762e-5, 2.9007641412251886e-5, 2.69063811686082e-5, 2.685513091876323e-5, 2.711138216798807e-5, 3.0032646409151246e-5, 2.941764341101163e-5, 2.7982636415352523e-5, 3.013514690884118e-5, 2.9673894660236467e-5, 2.905889166209685e-5, 2.8956391162406917e-5, 3.059639915744589e-5, 2.9725144910081436e-5, 2.8648889663337108e-5, 3.0186397158686145e-5, 3.2390157902019774e-5, 3.182640515372513e-5, 3.2748909650934546e-5, 3.259515890139964e-5, 3.1928905653415065e-5, 2.9366393161166665e-5, 3.280015990077952e-5, 3.2031406153104996e-5, 3.485016989457824e-5, 3.3620163898299e-5, 3.290266040046945e-5, 3.464516889519836e-5, 3.633642714008231e-5, 3.280015990077952e-5, 3.428641714628359e-5, 3.561892364225276e-5, 3.828393663419109e-5, 3.536267239302792e-5, 3.628517689023734e-5, 3.8950189882175675e-5, 3.766893363605147e-5, 3.536267239302792e-5, 3.828393663419109e-5, 4.094894962612943e-5, 3.951394263047032e-5, 3.7617683386206506e-5, 4.089769937628446e-5, 4.22814561220986e-5, 3.9308941631090454e-5, 3.946269238062536e-5, 4.141020187473414e-5, 3.956519288031529e-5, 4.3460211868532864e-5, 4.264020787101337e-5, 4.1615202874114007e-5, 4.4023964616827504e-5, 4.269145812085834e-5, 4.530522086295171e-5, 4.448521686543222e-5, 4.520272036326177e-5, 4.643272635954101e-5, 4.750898160628533e-5, 4.699647910783565e-5, 4.6483976609385974e-5, 4.617647511031616e-5, 4.556147211217655e-5, 4.986649309915386e-5, 4.950774135023908e-5, 5.1198999595123024e-5, 5.360776133783653e-5, 5.248025584124723e-5, 5.0481496097293474e-5, 5.253150609109219e-5, 5.637527482946479e-5, 5.6067773330394984e-5, 5.5760271831325185e-5, 5.673402657837957e-5, 5.7912782324813835e-5, 5.9245288820783004e-5, 5.9347789320472935e-5, 6.139779931427165e-5, 6.206405256225623e-5, 6.19615520625663e-5, 6.298655705946566e-5, 6.611282230000872e-5, 6.70865770470631e-5, 6.519031780279929e-5, 6.7240327796598e-5, 6.964908953931151e-5, 7.016159203776118e-5, 7.303160602907939e-5, 7.082784528574577e-5, 7.308285627892436e-5, 7.57478692708627e-5, 8.256415250024344e-5, 7.902788526094064e-5, 8.369165799683273e-5, 8.692042373706573e-5, 8.90216839807094e-5, 8.779167798443017e-5, 8.835543073272481e-5, 9.778547670419893e-5, 9.573546671040022e-5, 9.840047970233854e-5, 0.00010193674694164135, 0.00010695927142644822, 0.00010403800718528504, 0.00011013678691683621, 0.00011023928741652617, 0.00011587681489947263, 0.0001231543503774581, 0.0001196180831381553, 0.000131303140102808, 0.00013345565059629666, 0.000140938187073662, 0.00015103448629312068, 0.00015723576652436181, 0.0001631807955063781, 0.00016789581849211514, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
).toDoubleArray(),
arrayOf(
3.0761961986637294e-5, 3.0761961986637294e-5, 2.8450963172950014e-5, 2.4034387662347665e-5, 2.4753365071050377e-5, 2.3983032133154614e-5, 2.2750499432521402e-5, 2.074763379399243e-5, 2.2082877553011743e-5, 2.074763379399243e-5, 2.1980166494625645e-5, 2.038814508964108e-5, 2.1723388848660392e-5, 2.049085614802718e-5, 2.0953055910764632e-5, 1.977187873932447e-5, 1.905290133062176e-5, 2.0234078502061923e-5, 2.0696278264799383e-5, 1.9463745564166167e-5, 2.0542211677220227e-5, 1.9258323447393964e-5, 2.1261189085922933e-5, 2.2134233082204794e-5, 2.0285434031254977e-5, 2.1826099907046494e-5, 2.0182722972868876e-5, 1.9412390034973113e-5, 2.25450773157492e-5, 2.25450773157492e-5, 2.1004411439957683e-5, 2.3109988136872756e-5, 2.2801854961714456e-5, 2.3983032133154614e-5, 2.2082877553011743e-5, 2.162067779027429e-5, 2.4547942954278175e-5, 2.4034387662347665e-5, 2.495878718782258e-5, 2.249372178655615e-5, 2.3572187899610212e-5, 2.362354342880326e-5, 2.449658742508512e-5, 2.4650654012664273e-5, 2.4239809779119867e-5, 2.5010142717015627e-5, 2.5164209304594783e-5, 2.588318671329749e-5, 2.4599298483471222e-5, 2.5420986950560032e-5, 2.70130083555446e-5, 2.6807586238772397e-5, 2.6653519651193248e-5, 2.8040118939405612e-5, 2.71157194139307e-5, 2.6139964359262738e-5, 2.7988763410212562e-5, 2.7886052351826457e-5, 2.778334129344036e-5, 2.6807586238772397e-5, 3.122416174937475e-5, 3.060789539905814e-5, 3.004298457793458e-5, 3.055653986986509e-5, 3.055653986986509e-5, 2.6910297297158498e-5, 2.942671822761798e-5, 3.1532294924533047e-5, 2.9118585052459673e-5, 2.8245541056177815e-5, 3.194313915807745e-5, 3.0145695636320686e-5, 3.127551727856779e-5, 3.101873963260255e-5, 3.2918894212745414e-5, 3.11728062201817e-5, 3.240533892081491e-5, 3.2970249741938465e-5, 3.481904879288829e-5, 3.558938173078404e-5, 3.3894649267413377e-5, 3.410007138418558e-5, 3.1480939395339996e-5, 3.558938173078404e-5, 3.7438180781733865e-5, 3.62570036102937e-5, 3.327838291709677e-5, 3.533260408481879e-5, 3.6770558902224206e-5, 3.795173607366437e-5, 3.5281248555625744e-5, 3.769495842769912e-5, 3.795173607366437e-5, 3.851664689478793e-5, 3.851664689478793e-5, 3.697598101899641e-5, 3.790038054447132e-5, 3.954375747864894e-5, 3.954375747864894e-5, 3.856800242398098e-5, 3.5948870435135396e-5, 3.949240194945589e-5, 3.995460171219335e-5, 4.0416801474930796e-5, 4.087900123766825e-5, 4.324135558054858e-5, 4.149526758798486e-5, 4.406304404763739e-5, 4.4371177222795696e-5, 4.642539839051771e-5, 4.2625089230231974e-5, 4.319000005135553e-5, 4.693895368244822e-5, 4.621997627374551e-5, 4.9198596966942444e-5, 4.663082050728992e-5, 4.8376908499853634e-5, 4.7657931091150924e-5, 5.037977413838261e-5, 5.0328418609189565e-5, 5.186908448498107e-5, 5.037977413838261e-5, 5.1458240251436666e-5, 5.186908448498107e-5, 5.536126047010851e-5, 5.536126047010851e-5, 5.5258549411722414e-5, 5.705599293347918e-5, 5.9623769393131706e-5, 5.864801433846375e-5, 5.993190256829002e-5, 6.111307973973018e-5, 6.249967902794254e-5, 6.265374561552169e-5, 6.398898937454102e-5, 6.419441149131321e-5, 6.486203337082287e-5, 6.573507736710473e-5, 6.696761006773794e-5, 6.732709877208929e-5, 7.28221403957457e-5, 7.256536274978046e-5, 7.538991685539824e-5, 7.544127238459128e-5, 7.616024979329399e-5, 7.69819382603828e-5, 7.831718201940212e-5, 8.329866835112802e-5, 8.350409046790024e-5, 8.776659939092342e-5, 8.391493470144463e-5, 9.05911534965412e-5, 9.238859701829797e-5, 9.305621889780763e-5, 9.978379322209725e-5, 9.88080381674293e-5, 0.00010250563626932894, 0.0001067167896631591, 0.00010928456612281161, 0.00011827178373159547, 0.00011447147457130972, 0.00012232887053784645, 0.00013429470883982722, 0.00012874831168697778, 0.00013316488719758012, 0.00014050872787218637, 0.0001473390132548621, 0.0001522177885282019, 0.00016526209294323674, 0.00016839478022401283, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
).toDoubleArray(),
)
private val coarseInterpolator = BilinearInterpolator(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.0022848912215619123, 0.0022848912215619123, 0.00031086955395400167, 0.00016061593620956752, 5.699275155823364e-5, 5.1811592325666945e-5, 1.5543477697700085e-5, 2.072463693026678e-5, 5.181159232566695e-6, 0.0, 0.0, 0.0, 0.000373043464744802, 0.0022278984700036786, 0.0016476086359562088, 0.0011761231457926397, 0.0009015217064666048, 0.0007357246110244706, 0.0006321014263731367, 0.0005077536047915361, 0.0003885869424425021, 0.0004507608532333024, 0.00031086955395400167, 0.00031086955395400167, 0.0003419565093494018, 0.0003005072354888683, 0.00027460143932603483, 0.00021760868776780117, 0.00025387680239576804, 0.0002901449170237349, 0.00023315216546550125, 0.00021242752853523446, 0.00011916666234903397, 0.00015025361774443415, 0.00016061593620956752, 0.00016061593620956752, 0.00015025361774443415, 0.00011916666234903397, 0.00014507245851186744, 0.00011398550311646728, 0.00013989129927930076, 0.00010880434388390059, 0.00019688405083753439, 0.00013989129927930076, 0.00013989129927930076, 0.00010362318465133389, 0.00013471014004673405, 0.00011398550311646728, 0.00011398550311646728, 0.00013989129927930076, 9.32608661862005e-5, 0.00010362318465133389, 0.00011398550311646728, 7.771738848850042e-5, 9.844202541876719e-5, 0.00010880434388390059, 8.807970695363381e-5, 9.844202541876719e-5, 0.00011916666234903397, 8.289854772106711e-5, 0.00012434782158160068, 0.00012952898081416736, 0.00010362318465133389, 8.807970695363381e-5, 0.00010880434388390059, 8.807970695363381e-5, 6.735507002336702e-5, 9.32608661862005e-5, 8.289854772106711e-5, 5.1811592325666945e-5, 0.00012434782158160068, 5.699275155823364e-5, 7.771738848850042e-5, 8.289854772106711e-5, 0.00010362318465133389, 8.807970695363381e-5, 8.807970695363381e-5, 7.253622925593372e-5, 6.217391079080034e-5, 0.00010362318465133389, 8.289854772106711e-5, 7.771738848850042e-5, 8.807970695363381e-5, 9.844202541876719e-5, 6.735507002336702e-5, 5.699275155823364e-5, 9.844202541876719e-5, 8.289854772106711e-5, 0.00010362318465133389, 7.253622925593372e-5, 0.00010362318465133389, 6.735507002336702e-5, 6.735507002336702e-5, 6.217391079080034e-5, 0.00010362318465133389, 0.00012434782158160068, 8.289854772106711e-5, 6.217391079080034e-5, 5.1811592325666945e-5, 6.217391079080034e-5, 6.217391079080034e-5,
).toDoubleArray(),
arrayOf(
0.0016141175985230566, 0.0016141175985230566, 0.0002681601122146931, 9.2824654228163e-5, 4.64123271140815e-5, 4.1255401879183554e-5, 3.609847664428561e-5, 3.609847664428561e-5, 5.156925234897944e-6, 5.156925234897944e-6, 0.0, 5.156925234897944e-6, 0.000371298616912652, 0.0015573914209391793, 0.001211877430201017, 0.0009385603927514258, 0.0007322833833555081, 0.0005156925234897945, 0.000562104850603876, 0.000464123271140815, 0.00030425858885897874, 0.00036098476644285613, 0.00022690471033550956, 0.0002681601122146931, 0.0002320616355704075, 0.00017533545798653012, 0.00022174778510061161, 0.00022174778510061161, 0.00015470775704693834, 0.0001959631589261219, 0.00020112008416101984, 0.00012892313087244862, 0.00017533545798653012, 0.00015470775704693834, 0.00012376620563755067, 0.0001495508318120404, 0.00011345235516775478, 0.00010829542993285683, 0.00010829542993285683, 8.251080375836711e-5, 9.2824654228163e-5, 9.2824654228163e-5, 0.00012892313087244862, 8.251080375836711e-5, 9.2824654228163e-5, 9.2824654228163e-5, 8.251080375836711e-5, 9.798157946306095e-5, 6.188310281877533e-5, 5.156925234897945e-5, 8.766772899326506e-5, 0.0001031385046979589, 6.188310281877533e-5, 6.704002805367327e-5, 9.2824654228163e-5, 9.2824654228163e-5, 8.766772899326506e-5, 7.219695328857122e-5, 8.251080375836711e-5, 2.5784626174489724e-5, 0.0001031385046979589, 6.188310281877533e-5, 4.1255401879183554e-5, 4.64123271140815e-5, 8.766772899326506e-5, 6.704002805367327e-5, 8.251080375836711e-5, 5.156925234897945e-5, 7.219695328857122e-5, 7.219695328857122e-5, 6.188310281877533e-5, 4.1255401879183554e-5, 8.251080375836711e-5, 6.704002805367327e-5, 0.00011860928040265272, 9.2824654228163e-5, 7.735387852346917e-5, 4.1255401879183554e-5, 8.251080375836711e-5, 9.798157946306095e-5, 5.672617758387739e-5, 7.735387852346917e-5, 5.156925234897945e-5, 7.735387852346917e-5, 7.735387852346917e-5, 8.251080375836711e-5, 4.64123271140815e-5, 4.1255401879183554e-5, 8.251080375836711e-5, 3.094155140938767e-5, 6.188310281877533e-5, 5.156925234897945e-5, 8.251080375836711e-5, 7.219695328857122e-5, 8.251080375836711e-5, 3.094155140938767e-5, 6.188310281877533e-5, 6.704002805367327e-5, 9.2824654228163e-5, 6.188310281877533e-5, 6.188310281877533e-5,
).toDoubleArray(),
arrayOf(
0.001285055169637604, 0.001285055169637604, 0.0002838475274299929, 8.257382616145248e-5, 6.193036962108935e-5, 3.612604894563546e-5, 5.16086413509078e-6, 5.16086413509078e-6, 5.16086413509078e-6, 1.032172827018156e-5, 5.16086413509078e-6, 5.16086413509078e-6, 0.000304490983970356, 0.0014140767730148737, 0.0009547598649917942, 0.0008567034464250694, 0.0006038211038056213, 0.00046963863629326095, 0.0005522124624547135, 0.00044899517975289784, 0.00035093876118617303, 0.00029933011983526524, 0.0002270780219439943, 0.00019095197299835885, 0.00019611283713344963, 0.00014966505991763262, 0.00014450419578254184, 0.00013934333164745106, 0.00011869987510708793, 0.0001238607392421787, 0.00016514765232290496, 0.00019095197299835885, 0.00014966505991763262, 0.00011353901097199715, 0.00013934333164745106, 6.709123375618013e-5, 6.193036962108935e-5, 9.289555443163404e-5, 7.225209789127092e-5, 9.805641856672482e-5, 8.773469029654326e-5, 8.773469029654326e-5, 9.805641856672482e-5, 8.257382616145248e-5, 4.644777721581702e-5, 5.16086413509078e-5, 0.0001032172827018156, 9.805641856672482e-5, 6.193036962108935e-5, 6.709123375618013e-5, 8.257382616145248e-5, 3.612604894563546e-5, 3.612604894563546e-5, 7.225209789127092e-5, 8.257382616145248e-5, 6.709123375618013e-5, 8.773469029654326e-5, 7.74129620263617e-5, 7.225209789127092e-5, 8.773469029654326e-5, 5.16086413509078e-5, 6.193036962108935e-5, 7.225209789127092e-5, 7.225209789127092e-5, 6.709123375618013e-5, 7.74129620263617e-5, 4.644777721581702e-5, 6.709123375618013e-5, 5.676950548599858e-5, 3.612604894563546e-5, 6.709123375618013e-5, 7.74129620263617e-5, 4.128691308072624e-5, 4.644777721581702e-5, 5.676950548599858e-5, 4.644777721581702e-5, 4.644777721581702e-5, 5.16086413509078e-5, 4.644777721581702e-5, 7.74129620263617e-5, 6.193036962108935e-5, 6.709123375618013e-5, 4.128691308072624e-5, 3.0965184810544675e-5, 6.193036962108935e-5, 5.676950548599858e-5, 6.193036962108935e-5, 7.74129620263617e-5, 4.128691308072624e-5, 4.128691308072624e-5, 3.612604894563546e-5, 3.612604894563546e-5, 2.064345654036312e-5, 8.773469029654326e-5, 5.676950548599858e-5, 5.16086413509078e-5, 5.16086413509078e-5, 6.193036962108935e-5, 5.16086413509078e-5, 4.128691308072624e-5, 3.0965184810544675e-5,
).toDoubleArray(),
arrayOf(
0.0011014009408228597, 0.0011014009408228597, 0.00026248340178488714, 0.00011322813410328465, 3.602713357831784e-5, 3.602713357831784e-5, 5.14673336833112e-5, 5.1467333683311205e-6, 4.1173866946648964e-5, 5.1467333683311205e-6, 0.0, 5.1467333683311205e-6, 0.0002830703352582116, 0.0012300692750311377, 0.0009212652729312706, 0.000725689404934688, 0.00041688540283482076, 0.0004632060031498008, 0.00039629846936149624, 0.00032424420220486056, 0.000298510535363205, 0.00022130953483823817, 0.0002264562682065693, 0.00019557586799658257, 0.0001749889345232581, 0.00011322813410328465, 0.0001029346673666224, 0.00012352160083994689, 0.00010808140073495352, 0.0001029346673666224, 0.00012352160083994689, 0.00011322813410328465, 0.00012866833420827802, 6.176080041997344e-5, 0.00011837486747161577, 6.690753378830456e-5, 8.749446726162905e-5, 8.234773389329793e-5, 7.72010005249668e-5, 7.205426715663568e-5, 5.14673336833112e-5, 6.176080041997344e-5, 6.690753378830456e-5, 7.72010005249668e-5, 6.176080041997344e-5, 0.00011322813410328465, 6.690753378830456e-5, 7.205426715663568e-5, 8.234773389329793e-5, 5.14673336833112e-5, 4.1173866946648964e-5, 4.1173866946648964e-5, 5.14673336833112e-5, 4.1173866946648964e-5, 3.602713357831784e-5, 7.205426715663568e-5, 4.1173866946648964e-5, 6.690753378830456e-5, 6.176080041997344e-5, 3.088040020998672e-5, 3.088040020998672e-5, 3.602713357831784e-5, 3.602713357831784e-5, 6.690753378830456e-5, 5.14673336833112e-5, 4.632060031498008e-5, 6.176080041997344e-5, 7.205426715663568e-5, 8.234773389329793e-5, 4.632060031498008e-5, 4.1173866946648964e-5, 2.57336668416556e-5, 6.176080041997344e-5, 5.14673336833112e-5, 5.14673336833112e-5, 3.088040020998672e-5, 3.602713357831784e-5, 2.57336668416556e-5, 3.088040020998672e-5, 4.632060031498008e-5, 5.6614067051642325e-5, 0.00010808140073495352, 2.57336668416556e-5, 2.0586933473324482e-5, 6.176080041997344e-5, 2.57336668416556e-5, 2.57336668416556e-5, 4.632060031498008e-5, 3.088040020998672e-5, 5.6614067051642325e-5, 2.57336668416556e-5, 3.602713357831784e-5, 3.602713357831784e-5, 4.1173866946648964e-5, 3.602713357831784e-5, 3.602713357831784e-5, 5.14673336833112e-5, 2.57336668416556e-5, 4.632060031498008e-5, 7.72010005249668e-5, 1.544020010499336e-5,
).toDoubleArray(),
arrayOf(
0.0008001271997086717, 0.0008001271997086717, 0.00029235416912432233, 0.00010258041021906047, 5.641922562048326e-5, 3.077412306571814e-5, 3.590314357667116e-5, 1.0258041021906047e-5, 2.0516082043812094e-5, 0.0, 5.1290205109530235e-6, 5.1290205109530235e-6, 0.00025132200503669817, 0.0010206750816796517, 0.0008103852407305777, 0.0006359985433581749, 0.0003744184972995707, 0.0004616118459857721, 0.00033851535372289956, 0.00026158004605860417, 0.0002769671075914633, 0.00025645102554765117, 0.00020516082043812095, 0.00022054788197098, 0.00017438669737240278, 0.00013848355379573164, 0.00011283845124096651, 0.00012822551277382558, 7.693530766429535e-5, 0.00016412865635049675, 0.00010258041021906047, 9.745138970810744e-5, 9.745138970810744e-5, 0.00011283845124096651, 6.66772666423893e-5, 9.745138970810744e-5, 6.66772666423893e-5, 6.66772666423893e-5, 3.590314357667116e-5, 5.641922562048326e-5, 8.719334868620139e-5, 8.719334868620139e-5, 6.154824613143628e-5, 5.1290205109530236e-5, 7.693530766429535e-5, 6.66772666423893e-5, 3.077412306571814e-5, 3.077412306571814e-5, 0.00011283845124096651, 5.1290205109530236e-5, 5.1290205109530236e-5, 3.590314357667116e-5, 5.1290205109530236e-5, 4.103216408762419e-5, 6.154824613143628e-5, 3.077412306571814e-5, 3.590314357667116e-5, 3.590314357667116e-5, 6.66772666423893e-5, 1.0258041021906047e-5, 2.0516082043812094e-5, 5.641922562048326e-5, 3.590314357667116e-5, 3.077412306571814e-5, 4.103216408762419e-5, 7.180628715334232e-5, 3.590314357667116e-5, 6.154824613143628e-5, 5.1290205109530236e-5, 3.077412306571814e-5, 3.590314357667116e-5, 4.616118459857721e-5, 3.077412306571814e-5, 2.5645102554765118e-5, 3.077412306571814e-5, 3.590314357667116e-5, 3.590314357667116e-5, 2.0516082043812094e-5, 3.590314357667116e-5, 4.103216408762419e-5, 6.154824613143628e-5, 6.66772666423893e-5, 3.590314357667116e-5, 4.103216408762419e-5, 6.154824613143628e-5, 2.0516082043812094e-5, 2.5645102554765118e-5, 2.0516082043812094e-5, 5.1290205109530236e-5, 3.077412306571814e-5, 5.641922562048326e-5, 3.590314357667116e-5, 5.1290205109530236e-5, 6.154824613143628e-5, 2.5645102554765118e-5, 2.5645102554765118e-5, 4.103216408762419e-5, 4.616118459857721e-5, 3.590314357667116e-5, 5.1290205109530236e-5, 1.0258041021906047e-5,
).toDoubleArray(),
arrayOf(
0.0006816283229380743, 0.0006816283229380743, 0.0002665012991938336, 0.00011787557464342638, 2.0500099937987197e-5, 2.0500099937987197e-5, 2.5625124922483998e-5, 0.0, 2.5625124922483998e-5, 2.0500099937987197e-5, 0.0, 1.53750749534904e-5, 0.00018962592442638157, 0.0009378795721629143, 0.0006662532479845839, 0.0005996279231861256, 0.0004305020986977312, 0.00040487697377524715, 0.00036387677389927275, 0.0002972514491008144, 0.00022037607433336237, 0.0001486257245504072, 0.00019987597439537517, 0.00017425084947289118, 0.00011787557464342638, 0.0001486257245504072, 8.200039975194879e-5, 0.00011787557464342638, 0.00011787557464342638, 9.225044972094239e-5, 8.712542473644559e-5, 7.175034978295519e-5, 7.687537476745199e-5, 7.175034978295519e-5, 4.1000199875974394e-5, 5.637527482946479e-5, 6.66253247984584e-5, 4.1000199875974394e-5, 4.1000199875974394e-5, 3.587517489147759e-5, 6.66253247984584e-5, 5.1250249844967996e-5, 6.15002998139616e-5, 6.66253247984584e-5, 6.66253247984584e-5, 1.53750749534904e-5, 2.5625124922483998e-5, 3.587517489147759e-5, 3.587517489147759e-5, 4.6125224860471195e-5, 6.66253247984584e-5, 4.1000199875974394e-5, 5.637527482946479e-5, 4.6125224860471195e-5, 4.6125224860471195e-5, 3.587517489147759e-5, 3.07501499069808e-5, 5.1250249844967996e-5, 3.587517489147759e-5, 3.587517489147759e-5, 6.15002998139616e-5, 2.5625124922483998e-5, 6.15002998139616e-5, 5.1250249844967996e-5, 2.5625124922483998e-5, 4.6125224860471195e-5, 3.587517489147759e-5, 5.1250249844967996e-5, 3.07501499069808e-5, 2.0500099937987197e-5, 2.0500099937987197e-5, 3.587517489147759e-5, 3.07501499069808e-5, 4.1000199875974394e-5, 2.5625124922483998e-5, 4.1000199875974394e-5, 1.0250049968993599e-5, 4.6125224860471195e-5, 2.0500099937987197e-5, 3.587517489147759e-5, 2.5625124922483998e-5, 4.1000199875974394e-5, 6.66253247984584e-5, 1.0250049968993599e-5, 2.0500099937987197e-5, 3.07501499069808e-5, 2.5625124922483998e-5, 4.1000199875974394e-5, 3.587517489147759e-5, 5.637527482946479e-5, 7.687537476745199e-5, 3.587517489147759e-5, 2.5625124922483998e-5, 3.07501499069808e-5, 3.587517489147759e-5, 3.587517489147759e-5, 3.07501499069808e-5, 3.07501499069808e-5, 4.1000199875974394e-5, 2.5625124922483998e-5, 3.07501499069808e-5,
).toDoubleArray(),
arrayOf(
0.0006368085619938271, 0.0006368085619938271, 0.00031326872807760847, 9.757550546679608e-5, 5.135552919305057e-5, 2.0542211677220227e-5, 2.0542211677220227e-5, 5.135552919305057e-6, 0.0, 1.0271105838610114e-5, 1.5406658757915172e-5, 1.0271105838610114e-5, 0.00019515101093359216, 0.0008781795492011648, 0.0007651973849764535, 0.0006059952444779967, 0.00030813317515830343, 0.00033381093975482873, 0.00038003091602857423, 0.00024650654012664275, 0.0002156932226108124, 0.00021055766969150732, 0.00023623543428803262, 0.00016433769341776182, 0.00011298216422471126, 0.00011298216422471126, 0.00013352437590193148, 6.676218795096574e-5, 7.189774087027079e-5, 9.757550546679608e-5, 7.703329378957586e-5, 9.757550546679608e-5, 9.243995254749103e-5, 6.162663503166069e-5, 5.649108211235563e-5, 8.216884670888091e-5, 4.621997627374551e-5, 3.0813317515830344e-5, 5.649108211235563e-5, 5.135552919305057e-5, 4.621997627374551e-5, 4.1084423354440454e-5, 5.649108211235563e-5, 6.162663503166069e-5, 5.135552919305057e-5, 3.5948870435135396e-5, 4.1084423354440454e-5, 3.5948870435135396e-5, 2.5677764596525286e-5, 4.1084423354440454e-5, 5.649108211235563e-5, 2.5677764596525286e-5, 3.0813317515830344e-5, 3.0813317515830344e-5, 3.0813317515830344e-5, 2.0542211677220227e-5, 4.1084423354440454e-5, 4.621997627374551e-5, 5.135552919305057e-6, 4.1084423354440454e-5, 3.0813317515830344e-5, 3.0813317515830344e-5, 1.0271105838610114e-5, 6.162663503166069e-5, 9.757550546679608e-5, 3.5948870435135396e-5, 5.649108211235563e-5, 3.0813317515830344e-5, 1.5406658757915172e-5, 2.5677764596525286e-5, 5.135552919305057e-5, 3.5948870435135396e-5, 4.621997627374551e-5, 3.5948870435135396e-5, 4.1084423354440454e-5, 5.135552919305057e-5, 4.621997627374551e-5, 2.0542211677220227e-5, 1.5406658757915172e-5, 1.5406658757915172e-5, 2.5677764596525286e-5, 3.5948870435135396e-5, 4.621997627374551e-5, 2.0542211677220227e-5, 3.0813317515830344e-5, 3.5948870435135396e-5, 7.703329378957586e-5, 2.5677764596525286e-5, 1.5406658757915172e-5, 1.5406658757915172e-5, 4.1084423354440454e-5, 7.189774087027079e-5, 3.5948870435135396e-5, 3.5948870435135396e-5, 2.0542211677220227e-5, 2.0542211677220227e-5, 1.5406658757915172e-5, 2.0542211677220227e-5, 2.5677764596525286e-5, 3.5948870435135396e-5, 3.0813317515830344e-5,
).toDoubleArray(),
)
private val fineInterpolator = BilinearInterpolator(x, yFine, gridFine)
override 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

@@ -0,0 +1,112 @@
package ru.inr.mass.scripts
import kotlin.math.exp
import kotlinx.serialization.*
import kotlinx.serialization.json.*
interface ITrap {
fun value(ei: Double, delta: Double): Double
}
class NozikTrap: ITrap {
override fun value(ei: Double, delta: Double): Double {
return if (delta > 10) {
1.86e-04 * exp(-delta / 25.0) + 5.5e-05
} else {
0.0
}
}
}
@Serializable
data class GridPoint(
val hv: Double,
val grid: List<Double>
)
class FineGridInterpolation(jsonInput: String, private val wall_l: Double) : ITrap {
private val hvValues: DoubleArray
private val deltaLayers: Array<DoubleArray>
private val deltaStep = 1.0
init {
// Parse JSON input
val gridPoints = Json.decodeFromString<List<GridPoint>>(jsonInput)
require(gridPoints.isNotEmpty()) { "Grid cannot be empty" }
val ySizeMax = gridPoints[0].grid.size
// Validate grid consistency
require(gridPoints.all { it.grid.size == ySizeMax }) { "Inconsistent grid sizes" }
// Sort by hv and preprocess grids
val sortedPoints = gridPoints.sortedBy { it.hv }
hvValues = DoubleArray(sortedPoints.size) { sortedPoints[it].hv }
deltaLayers = Array(sortedPoints.size) { layerIdx ->
val grid = sortedPoints[layerIdx].grid
val trimmedLength = grid.indexOfLast { it >= 1e-5 }.let { idx ->
if (idx == -1) 0 else idx + 1
}
val out = if (trimmedLength == 0) {
listOf<Double>(sortedPoints[layerIdx+1].grid.last { it >= 1e-5 }).toTypedArray().toDoubleArray()
} else {
DoubleArray(trimmedLength) { grid[it] }
}
out
}
}
override fun value(ei: Double, delta: Double): Double {
if (ei - delta <= wall_l)
return 0.0
var eiUp = -1
var eiDown = -1
for (i in 0..(hvValues.size-2)) {
if (hvValues[i] <= ei && hvValues[i+1] >= ei) {
eiDown = i
eiUp = i + 1
}
}
require(ei >= hvValues.first() && ei <= hvValues.last()) {
"ei $ei out of range ${hvValues.first()}..${hvValues.last()}"
}
val xFrac = ((ei - hvValues[eiDown]) / (hvValues[eiUp] - hvValues[eiDown])).coerceIn(0.0, 1.0)
// TODO: add assertions for eiUp, eiDown
// Linear interpolation for y (delta has step of 1)
val yScaled = (delta / deltaStep).toInt()
require(yScaled < deltaLayers.last().size) {
"delta $delta > ${deltaLayers.last().size * deltaStep}"
}
val valUp = deltaLayers[eiUp][yScaled]
val valDown = deltaLayers[eiDown].getOrElse(yScaled) { deltaLayers[eiDown].last() }
// Linear interpolation along x
return valDown + (valUp - valDown) * xFrac
}
}
fun getTrapByName(name: String): ITrap {
return when(name) {
"NozikTrap" -> NozikTrap()
"Fine" -> {
val resourcePath = "trap-fine-2-day.json"
// Load JSON from resources at compile-time
val jsonInput = {}::class.java.classLoader
.getResourceAsStream(resourcePath)
?.bufferedReader()
?.use { it.readText() }
?: throw IllegalArgumentException("Resource not found: $resourcePath")
FineGridInterpolation(jsonInput, 2000.0)
}
"TrapInterpolator" -> TrapInterpolator()
"TrapInterpolator_24_07_12" -> TrapInterpolator_24_07_12()
"TrapInterpolatorFull" -> TrapInterpolatorFull()
else -> throw IllegalArgumentException()
}
}

View File

@@ -50,6 +50,7 @@ fun main() {
},
adjustX = false,
),
wallFunc = getWallByName("wallStep"),
resolution = NumassResolution(1.7e-4, tailFunction = {
e,u -> adiabacity(e,u)
})

View File

@@ -8,12 +8,18 @@ import space.kscience.plotly.models.TraceType
import space.kscience.dataforge.meta.Value
import space.kscience.kmath.structures.asBuffer
import space.kscience.plotly.models.ScatterMode
import kotlin.io.path.Path
import kotlin.io.path.nameWithoutExtension
import kotlin.math.exp
fun main() {
val WALL_L = 2000.0
val WALL_R = 18000.0
val maxDelta = (WALL_R - WALL_L)
val interpolator = TrapInterpolator()
val interpolator = getTrapByName("Fine")
Plotly.page {
plot {
val eis = (WALL_L..WALL_R step 100.0).toDoubleArray()
@@ -24,7 +30,9 @@ fun main() {
}
layout {
width = 1800
height = 800
title = "Trapping function"
}
trace {
@@ -59,5 +67,5 @@ fun main() {
}
}
}
}.makeFile()
}.makeFile(path = Path("./trap-plot.html"))
}

View File

@@ -2,7 +2,7 @@
package ru.inr.mass.scripts
import org.apache.commons.math3.analysis.interpolation.PiecewiseBicubicSplineInterpolator
class TrapInterpolator {
class TrapInterpolator: ITrap {
private val x = arrayOf(10000.0, 12000.0, 14000.0, 16000.0, 18000.0, 19000.0, ).toDoubleArray()
private val yCoarse = arrayOf(
@@ -59,7 +59,7 @@ class TrapInterpolator {
// private val fineInterpolator = PiecewiseBicubicSplineInterpolator().interpolate(x, yFine, gridFine)
private val fineInterpolator = BilinearInterpolator(x, yFine, gridFine)
fun value(ei: Double, delta: Double): Double {
override fun value(ei: Double, delta: Double): Double {
var eiL = ei;

View File

@@ -44,6 +44,7 @@ fun main() {
},
adjustX = false,
),
wallFunc = getWallByName("wallStep"),
resolution = NumassResolution(1.7e-4, tailFunction = {
e,u -> adiabacity(e,u)
})

View File

@@ -11,6 +11,23 @@ import space.kscience.kmath.structures.toDoubleArray
// + 4.099330e+4) * 1e-4
//}
// это с этим фитом предположительно все ок
val WALL_FROM_GEANT_24_07_12 = arrayOf<Double>(
1.0, 0.972786442674142, 0.945952334545635, 0.91964489360908, 0.894233201597419, 0.869259016583796, 0.844669464499728, 0.820761054827299, 0.797111831765082, 0.773672031483916, 0.750952769979141, 0.728844152128026, 0.707387647788205, 0.686195513790801, 0.665647199333165, 0.64545448890474, 0.625764600500126, 0.606609673258992, 0.58788603253725, 0.569558428955913, 0.551775117256022, 0.534257212644989, 0.517156080103177, 0.500604423175015, 0.484208278212981, 0.46834087393578, 0.452845661630844, 0.437580607035776, 0.423030907484895, 0.408756982487279, 0.394878057883627, 0.381282165058327, 0.368184947271076, 0.355217322788931, 0.342516142142084, 0.330340591940748, 0.318597365005246, 0.306926710320603, 0.29577961258859, 0.284894811706111, 0.27455533945152, 0.264394187584754, 0.254267248350536, 0.244669049801152, 0.235251245132475, 0.226043899991291, 0.217203563090168, 0.208591310406031, 0.200293191893472, 0.192330979227748, 0.184710892887505, 0.177080439082853, 0.169739237535198, 0.162683141258776, 0.155818843073912, 0.149170188148744, 0.142737176483273, 0.136596527314122, 0.13056473652126, 0.124614848697224, 0.119119055814281, 0.113816097769336, 0.108600226425423, 0.103514985133056, 0.0987107021261596, 0.0941251726182824, 0.0896816773728016, 0.0853667386859861, 0.0811399234466428, 0.077199250224974, 0.0733674353795943, 0.069575016898967, 0.06596610253837, 0.06248781822932, 0.0592915289521811, 0.0562300167123526, 0.0531114834182774, 0.0501629765405015, 0.0474021207685194, 0.0446547427002683, 0.0420856850198433, 0.0396928742343628, 0.0373207983776992, 0.0351291164017434, 0.0330442193091951, 0.0309966450885174, 0.0290807376658276, 0.0272104470865351, 0.0254904847411659, 0.0237788163673234, 0.0221884473270603, 0.0206779077627426, 0.0193125127001439, 0.0179792567772115, 0.0167144261193751, 0.0155138737408714, 0.0143454605020341, 0.013340853200851, 0.0123165477172917, 0.0113409693164523, 0.0104555878559669, 0.0095546551988687, 0.0087833158468767, 0.00807729152065821, 0.00740029609478351, 0.00677306449806958, 0.006136502183388, 0.0055517771907489, 0.00502822023811992, 0.0045772355363504, 0.00415113274916127, 0.00373747091926233, 0.00334350727173954, 0.00298271951032392, 0.0026385196919619, 0.00233371623835215, 0.00206727240305384, 0.00182363698945422, 0.00158207506873629, 0.00138924023073829, 0.00121403008223473, 0.00102948921576352, 0.000883307967603747, 0.000751641169615865, 0.000640709300444972, 0.00054636537432767, 0.000460315419737164, 0.000386706422436852, 0.000307913692932292, 0.000243635413599625, 0.000193871584438851, 0.000148254741041474, 0.000121299333579388, 9.43439261173016E-05, 6.6351772214366E-05, 5.49475613650218E-05, 3.52493789888819E-05, 1.96981823761399E-05, 9.33071796764522E-06, 3.11023932254841E-06
)
fun wallStep_24_07_12(u: Double): Double {
if (u < 11000) {
return 1.0
}
if (u > 17950) {
return 0.0
}
val idx: Int = ((u - 11000.0) / 50.0).toInt()
return WALL_FROM_GEANT_24_07_12[idx]
}
// Angle = 170.4, 2025-03-10 (weekend simulation)
private val WALL_FROM_GEANT = arrayOf<Double>(
1.0, 0.974889596797131, 0.950165449373342, 0.925878240027274, 0.902311758151626, 0.879132319047274, 0.856348579628581, 0.834079847915328, 0.812201149543789, 0.790758287460869, 0.769751104268126, 0.749232643240847, 0.729118853610476, 0.709528256404582, 0.690139758799478, 0.671295072814881, 0.652845299523728, 0.634648150733563, 0.616858191715396, 0.599567815355257, 0.582656454445821, 0.566172272910642, 0.549971565971275, 0.534191899866888, 0.518664543466603, 0.503475593718732, 0.488613875333822, 0.474227972442051, 0.460122868372562, 0.446209318208182, 0.432675413088279, 0.419513597887587, 0.406557974647203, 0.39401237435079, 0.381752137431506, 0.369754755912004, 0.358029988495748, 0.346635285614428, 0.335533816032385, 0.324734236663984, 0.314120544856746, 0.303777263574553, 0.293732881935585, 0.284010852307847, 0.274466525522236, 0.265141454767701, 0.25609466446036, 0.247273111324928, 0.238704969682699, 0.23032838194558, 0.222270998250831, 0.214340005505798, 0.206652508152059, 0.199180961462093, 0.191947716014804, 0.184905394878853, 0.178079181805118, 0.171412570752568, 0.164988038505326, 0.158764504069773, 0.152701043850734, 0.146805212973472, 0.141124703166211, 0.135583805777877, 0.130177484058292, 0.124914394921823, 0.119823499681976, 0.1149093628936, 0.110161438861015, 0.105554071638013, 0.101109611803498, 0.0968214486228659, 0.0926755736346905, 0.0886904024568008, 0.084864990698539, 0.081125675888589, 0.0775395097636615, 0.0740462087200941, 0.070699130830058, 0.0674773421006365, 0.0643366135693513, 0.061336127050764, 0.0583973407218261, 0.0556094994997091, 0.0529393923129434, 0.0503435771912657, 0.0478253595019787, 0.0454036270582404, 0.0430920735245903, 0.0408570156342299, 0.0387310348648569, 0.0366708466446508, 0.0347000607400591, 0.0328421295190864, 0.0310358249874121, 0.0293187653729092, 0.0276646651355995, 0.0261045317687508, 0.0245946085052137, 0.0231578755176638, 0.02176631588325, 0.0204498353061392, 0.0191941105280198, 0.0180100020414578, 0.0168789368301811, 0.0157873786280931, 0.0147616129751721, 0.0137995936916593, 0.0128448147365237, 0.0119873080191516, 0.011181270592635, 0.010398370737237, 0.00964521918756275, 0.00893724099102467, 0.00828797241371929, 0.00766215620441839, 0.00708025416070979, 0.00652825782116798, 0.00602001824877548, 0.00555034129491384, 0.00508947865385926, 0.00466733602977853, 0.00426014625778119, 0.00388002901797695, 0.00352808609946669, 0.0032043175022504, 0.00290069590573596, 0.00261753610680932, 0.00236428201204948, 0.00212330499584232, 0.00191302067601687, 0.00170981928612566, 0.0015275518891512, 0.00136794986796632, 0.00121228280785601, 0.00107487396713174, 0.00094974220496016, 0.000832952560266683, 0.000731587962985553, 0.000632899139235135, 0.000551366745769878, 0.000469519555418654, 0.000398375459190283, 0.000341239824387409, 0.000290714924189827, 0.000243652789737873, 0.000211071312040367, 0.000175971459255131, 0.000143704778443591, 0.000117576636908392, 9.41242689039072E-05, 7.47642604169831E-05, 5.54042519300591E-05, 4.28123764914093E-05, 3.44702590133038E-05, 2.75447275220464E-05, 2.1878383574654E-05, 1.69990318421772E-05, 1.24344769956667E-05, 7.86992214915612E-06, 5.35154706142616E-06, 3.30536730264557E-06, 2.04617975878059E-06, 9.44390657898734E-07, 6.29593771932489E-07, 1.57398442983122E-07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
@@ -26,4 +43,12 @@ private val WALL_INTERPOLATOR = LinearInterpolator().interpolate(
fun wallStep(u: Double): Double {
return WALL_INTERPOLATOR.value(u)
}
fun getWallByName(name: String): (u: Double) -> Double {
return when(name) {
"wallStep" -> {u: Double -> wallStep(u)}
"wallStep_24_07_12" -> {u: Double -> wallStep_24_07_12(u) }
else -> throw IllegalArgumentException()
}
}