Mess with adapters. Partially resolved. Need to rewrite.

This commit is contained in:
Alexander Nozik 2017-11-27 17:33:34 +03:00
parent 19d2f95121
commit 5bcd1277f0
6 changed files with 90 additions and 33 deletions

View File

@ -16,7 +16,6 @@
package inr.numass.data; package inr.numass.data;
import hep.dataforge.exceptions.DataFormatException; import hep.dataforge.exceptions.DataFormatException;
import hep.dataforge.exceptions.NameNotFoundException;
import hep.dataforge.meta.Meta; import hep.dataforge.meta.Meta;
import hep.dataforge.meta.MetaBuilder; import hep.dataforge.meta.MetaBuilder;
import hep.dataforge.tables.ValueMap; import hep.dataforge.tables.ValueMap;
@ -25,6 +24,8 @@ import hep.dataforge.tables.XYAdapter;
import hep.dataforge.values.Value; import hep.dataforge.values.Value;
import hep.dataforge.values.Values; import hep.dataforge.values.Values;
import java.util.Objects;
/** /**
* @author Darksnake * @author Darksnake
*/ */
@ -59,7 +60,7 @@ public class SpectrumDataAdapter extends XYAdapter {
} }
public double getTime(Values point) { public double getTime(Values point) {
return this.getFrom(point, POINT_LENGTH_NAME, 1d).doubleValue(); return this.getComponent(point, POINT_LENGTH_NAME, 1d).doubleValue();
} }
public Values buildSpectrumDataPoint(double x, long count, double t) { public Values buildSpectrumDataPoint(double x, long count, double t) {
@ -79,30 +80,37 @@ public class SpectrumDataAdapter extends XYAdapter {
return true; return true;
} }
@Override
public Value getYerr(Values point) throws NameNotFoundException {
if (super.providesYError(point)) {
return Value.of(super.getYerr(point).doubleValue() / getTime(point));
} else {
double y = super.getY(point).doubleValue();
if (y < 0) {
throw new DataFormatException();
} else if (y == 0) {
//avoid infinite weights
return Value.of(1d / getTime(point));
} else {
return Value.of(Math.sqrt(y) / getTime(point));
}
}
}
public long getCount(Values point) { public long getCount(Values point) {
return super.getY(point).numberValue().longValue(); return super.getY(point).numberValue().longValue();
} }
@Override @Override
public Value getY(Values point) { public Value getValue(Values point, String axis) {
return Value.of(super.getY(point).doubleValue() / getTime(point)); if (Objects.equals(axis, XYAdapter.Y_AXIS)) {
return Value.of(getComponent(point, Y_VALUE_KEY).doubleValue() / getTime(point));
} else {
return super.getValue(point, axis);
}
} }
@Override
public Value getError(Values point, String axis) {
if (Objects.equals(axis, XYAdapter.Y_AXIS)) {
if (super.providesYError(point)) {
return Value.of(getComponent(point, Y_ERROR_KEY).doubleValue() / getTime(point));
} else {
double y = getComponent(point, Y_VALUE_KEY).doubleValue();
if (y < 0) {
throw new DataFormatException();
} else if (y == 0) {
//avoid infinite weights
return Value.of(1d / getTime(point));
} else {
return Value.of(Math.sqrt(y) / getTime(point));
}
}
} else {
return super.getError(point, axis);
}
}
} }

View File

@ -18,7 +18,7 @@ import inr.numass.data.SpectrumDataAdapter
import inr.numass.data.SpectrumGenerator import inr.numass.data.SpectrumGenerator
import inr.numass.models.NBkgSpectrum import inr.numass.models.NBkgSpectrum
import inr.numass.models.NumassModelsKt import inr.numass.models.NumassModelsKt
import inr.numass.models.misc.GaussFunction import inr.numass.models.misc.Gauss
import inr.numass.models.sterile.NumassBeta import inr.numass.models.sterile.NumassBeta
import inr.numass.utils.DataModelUtils import inr.numass.utils.DataModelUtils
@ -30,37 +30,45 @@ ctx.getPluginManager().load(NumassPlugin)
new GrindShell(ctx).eval { new GrindShell(ctx).eval {
def beta = new NumassBeta().getSpectrum(0) def beta = new NumassBeta().getSpectrum(0)
def response = new GaussFunction(4.0) def response = new Gauss(5.0)
ParametricFunction spectrum = NumassModelsKt.convolute(beta, response) ParametricFunction spectrum = NumassModelsKt.convolute(beta, response)
def model = new XYModel(Meta.empty(), new SpectrumDataAdapter(), new NBkgSpectrum(spectrum)); def model = new XYModel(Meta.empty(), new SpectrumDataAdapter(), new NBkgSpectrum(spectrum));
ParamSet params = morph(ParamSet, [:], "params") { ParamSet params = morph(ParamSet, [:], "params") {
N(value: 1e+12, err: 30, lower: 0) N(value: 1e+12, err: 30, lower: 0)
bkg(value: 1.0, err: 0.1) bkg(value: 5.0, err: 0.1)
E0(value: 18575.0, err: 0.1) E0(value: 18575.0, err: 0.1)
mnu2(value: 0, err: 0.01) mnu2(value: 0, err: 0.01)
msterile2(value: 1000**2, err: 1) msterile2(value: 1000**2, err: 1)
U2(value: 0.0, err: 1e-3) U2(value: 0.0, err: 1e-3)
X(value: 0.0, err: 0.01, lower: 0) //X(value: 0.0, err: 0.01, lower: 0)
trap(value: 1.0, err: 0.05) //trap(value: 1.0, err: 0.05)
w(value: 150, err: 5) w(value: 150, err: 5)
//shift(value: 1, err: 1e-2)
tail(value: 1e-4, err: 1e-5)
} }
SpectrumGenerator generator = new SpectrumGenerator(model, params, 12316); SpectrumGenerator generator = new SpectrumGenerator(model, params, 12316);
PlotHelper ph = plots PlotHelper ph = plots
ph.plot((2000..19500).step(100).collectEntries { ph.plot(data: (2000..19500).step(50).collectEntries { [it, model.value(it, params)] }, name: "spectrum")
[it, model.value(it, params)] .configure(showLine: true, showSymbol: false, showErrors: false, thickness: 2, connectionType: "spline", color: "red")
}, "spectrum").configure(showLine: true, showSymbol: false, showErrors: false, thickness: 3, color: "red")
Table data = generator.generateData(DataModelUtils.getUniformSpectrumConfiguration(10000, 19500, 1, 950)); Table data = generator.generateData(DataModelUtils.getUniformSpectrumConfiguration(10000, 19500, 1, 950));
//params.setParValue("w", 151) //params.setParValue("w", 151)
//params.setParValue("X", 0.01)
//params.setParValue("trap", 0.01)
//params.setParValue("mnu2", 4)
ph.plot(data).configure(color: "blue") ph.plot(data: (2000..19500).step(50).collectEntries { [it, model.value(it, params)] }, name: "spectrum-mod")
.configure(showLine: true, showSymbol: false, showErrors: false, thickness: 2, connectionType: "spline", color: "green")
ph.plot(data: data, adapter: new SpectrumDataAdapter())
.configure(color: "blue")
FitState state = new FitState(data, model, params); FitState state = new FitState(data, model, params);

View File

@ -24,7 +24,7 @@ import java.lang.Math.*
/** /**
* @author Darksnake * @author Darksnake
*/ */
class GaussFunction(private val cutoff: Double = 4.0) : AbstractParametricFunction(list), FunctionSupport { class Gauss(private val cutoff: Double = 4.0) : AbstractParametricFunction(*list), FunctionSupport {
private fun getShift(pars: ValueProvider): Double { private fun getShift(pars: ValueProvider): Double {
return pars.getDouble("shift", 0.0) return pars.getDouble("shift", 0.0)

View File

@ -0,0 +1,41 @@
package inr.numass.models.misc
import hep.dataforge.stat.parametric.AbstractParametricFunction
import hep.dataforge.values.Values
class ConstantTail(private val defaultTail: Double = 0.0) : AbstractParametricFunction("tail") {
override fun derivValue(parName: String, x: Double, set: Values): Double {
if (parName == "tail" && x <= 0) {
return 1.0
} else {
return 0.0
}
}
override fun value(x: Double, set: Values): Double {
return if (x <= 0) {
set.getDouble("tail", defaultTail)
} else {
0.0
}
}
override fun providesDeriv(name: String): Boolean {
return true;
}
}
class exponentialTail : AbstractParametricFunction("tail") {
override fun derivValue(parName: String?, x: Double, set: Values?): Double {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun value(x: Double, set: Values?): Double {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun providesDeriv(name: String?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}

View File

@ -204,7 +204,7 @@ class NumassBeta : AbstractParametricBiFunction(list) {
return BetaSpectrum(fs); return BetaSpectrum(fs);
} }
inner class BetaSpectrum(val fs: Double) : AbstractParametricFunction(list) { inner class BetaSpectrum(val fs: Double) : AbstractParametricFunction(*list) {
override fun providesDeriv(name: String): Boolean { override fun providesDeriv(name: String): Boolean {
return this@NumassBeta.providesDeriv(name) return this@NumassBeta.providesDeriv(name)

View File

@ -47,7 +47,7 @@ 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) {
/** /**