Polinomial corrections to spectrum.
This commit is contained in:
parent
c1d421a84f
commit
c073ba6ce1
@ -221,7 +221,7 @@ class NumassPlugin : BasicPlugin() {
|
|||||||
|
|
||||||
library.addModel("sterile") { context, meta ->
|
library.addModel("sterile") { context, meta ->
|
||||||
val sp = SterileNeutrinoSpectrum(context, meta)
|
val sp = SterileNeutrinoSpectrum(context, meta)
|
||||||
val spectrum = NBkgSpectrum(sp)
|
val spectrum = NBkgSpectrumWithCorrection(sp)
|
||||||
|
|
||||||
XYModel(meta, getAdapter(meta), spectrum)
|
XYModel(meta, getAdapter(meta), spectrum)
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018 Alexander Nozik.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package inr.numass.models
|
||||||
|
|
||||||
|
import hep.dataforge.names.NamesUtils.combineNamesWithEquals
|
||||||
|
import hep.dataforge.stat.parametric.AbstractParametricFunction
|
||||||
|
import hep.dataforge.stat.parametric.ParametricFunction
|
||||||
|
import hep.dataforge.values.Values
|
||||||
|
|
||||||
|
class NBkgSpectrumWithCorrection(val source: ParametricFunction) : AbstractParametricFunction(*combineNamesWithEquals(source.namesAsArray(), *parameters)) {
|
||||||
|
|
||||||
|
private val Values.bkg get() = getDouble("bkg")
|
||||||
|
private val Values.n get() = getDouble("N")
|
||||||
|
private val Values.l get() = getDouble("L")
|
||||||
|
private val Values.q get() = getDouble("Q")
|
||||||
|
|
||||||
|
override fun derivValue(parName: String, x: Double, set: Values): Double {
|
||||||
|
return when (parName) {
|
||||||
|
"bkg" -> 0.0
|
||||||
|
"N" -> (1.0 + x * set.l + x * x * set.q) * source.value(x, set)
|
||||||
|
"L" -> set.n * x * source.value(x, set)
|
||||||
|
"Q" -> set.n * x * x * source.value(x, set)
|
||||||
|
else -> set.n * (1.0 + x * set.l + x * x * set.q) * source.derivValue(parName, x, set)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun value(x: Double, set: Values): Double {
|
||||||
|
return set.n * (1.0 + x * set.l + x * x * set.q) * source.value(x, set) + set.bkg
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun providesDeriv(name: String): Boolean {
|
||||||
|
return name in parameters || source.providesDeriv(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getDefaultParameter(name: String): Double {
|
||||||
|
return when (name) {
|
||||||
|
"bkg" -> 0.0
|
||||||
|
"N" -> 1.0
|
||||||
|
"L" -> 0.0
|
||||||
|
"Q" -> 0.0
|
||||||
|
else -> super.getDefaultParameter(name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val parameters = arrayOf("bkg, N, L, Q")
|
||||||
|
}
|
||||||
|
}
|
@ -47,7 +47,8 @@ class SterileNeutrinoSpectrum @JvmOverloads constructor(
|
|||||||
configuration: Meta,
|
configuration: Meta,
|
||||||
val source: ParametricBiFunction = NumassBeta(),
|
val source: ParametricBiFunction = NumassBeta(),
|
||||||
val transmission: NumassTransmission = NumassTransmission(context, configuration.getMetaOrEmpty("transmission")),
|
val transmission: NumassTransmission = NumassTransmission(context, configuration.getMetaOrEmpty("transmission")),
|
||||||
val resolution: ParametricBiFunction = NumassResolution(context, configuration.getMeta("resolution", Meta.empty()))) : AbstractParametricFunction(*list) {
|
val resolution: ParametricBiFunction = NumassResolution(context, configuration.getMeta("resolution", Meta.empty()))
|
||||||
|
) : AbstractParametricFunction(*list) {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018 Alexander Nozik.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package inr.numass.scripts.models
|
||||||
|
|
||||||
|
import hep.dataforge.buildContext
|
||||||
|
import hep.dataforge.configure
|
||||||
|
import hep.dataforge.fx.output.FXOutputManager
|
||||||
|
import hep.dataforge.plots.Plot
|
||||||
|
import hep.dataforge.plots.data.DataPlot
|
||||||
|
import hep.dataforge.plots.jfreechart.JFreeChartPlugin
|
||||||
|
import hep.dataforge.stat.fit.ParamSet
|
||||||
|
import hep.dataforge.step
|
||||||
|
import inr.numass.NumassPlugin
|
||||||
|
import inr.numass.displayChart
|
||||||
|
import inr.numass.models.sterile.NumassBeta
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
val context = buildContext("NUMASS", NumassPlugin::class.java, JFreeChartPlugin::class.java) {
|
||||||
|
output = FXOutputManager()
|
||||||
|
}
|
||||||
|
|
||||||
|
val spectrum = NumassBeta()//NBkgSpectrum(SterileNeutrinoSpectrum(context, Meta.empty()))
|
||||||
|
|
||||||
|
val t = 30 * 50 // time in seconds per point
|
||||||
|
|
||||||
|
val params = ParamSet().apply {
|
||||||
|
setPar("N", 8e5, 6.0, 0.0, Double.POSITIVE_INFINITY)
|
||||||
|
setPar("bkg", 0.0, 0.03)
|
||||||
|
setPar("E0", 18575.0, 1.0)
|
||||||
|
setPar("mnu2", 0.0, 1.0)
|
||||||
|
setParValue("msterile2", (2.6 * 2.6))
|
||||||
|
setPar("U2", 0.0, 1e-3)
|
||||||
|
setPar("X", 0.0, 0.01)
|
||||||
|
setPar("trap", 0.0, 0.01)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun ParamSet.update(vararg override: Pair<String, Double>): ParamSet = this.copy().also { set ->
|
||||||
|
override.forEach {
|
||||||
|
set.setParValue(it.first, it.second)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun plotSpectrum(name: String, vararg override: Pair<String, Double>): Plot {
|
||||||
|
val x = (18569.0..18575.0).step(0.2).toList()
|
||||||
|
val y = x.map { 1e12*spectrum.value(0.0,it, params.update(*override)) }
|
||||||
|
return DataPlot.plot(name, x.toDoubleArray(), y.toDoubleArray())
|
||||||
|
}
|
||||||
|
|
||||||
|
val frame = displayChart("Light neutrinos", context = context).apply {
|
||||||
|
plots.setType<DataPlot>()
|
||||||
|
plots.configure {
|
||||||
|
"showSymbol" to false
|
||||||
|
"showLine" to true
|
||||||
|
"showErrors" to false
|
||||||
|
"thickness" to 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
frame.add(plotSpectrum("zero mass"))
|
||||||
|
frame.add(plotSpectrum("active neutrino 2 ev", "mnu2" to 2.0))
|
||||||
|
frame.add(plotSpectrum("sterile neutrino 2.6 ev", "U2" to 0.4).apply { configureValue("color", "red") })
|
||||||
|
frame.add(plotSpectrum("sterile neutrino 2.6 ev, 0.09", "U2" to 0.09).apply { configureValue("color", "brown") })
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user