diff --git a/numass-main/src/main/groovy/inr/numass/LaunchGrindShell.groovy b/numass-main/src/main/groovy/inr/numass/LaunchGrindShell.groovy
index 36b16f69..87beebfa 100644
--- a/numass-main/src/main/groovy/inr/numass/LaunchGrindShell.groovy
+++ b/numass-main/src/main/groovy/inr/numass/LaunchGrindShell.groovy
@@ -17,17 +17,18 @@ String cfgPath = cli.parse(args).c;
println "Loading config file from $cfgPath"
println "Starting Grind shell"
-if (cfgPath) {
- try {
- GrindTerminal.system().launch {
+
+try {
+ GrindTerminal.system().launch {
+ if (cfgPath) {
GrindWorkspaceBuilder numass = new GrindWorkspaceBuilder(context).read(new File(cfgPath))
bind("numass", numass)
+ } else {
+ println "No configuration path. Provide path via --config option"
}
- } catch (Exception ex) {
- ex.printStackTrace();
- } finally {
- Global.terminate();
}
-} else {
- println "No configuration path. Provide path via --config option"
-}
\ No newline at end of file
+} catch (Exception ex) {
+ ex.printStackTrace();
+} finally {
+ Global.terminate();
+}
diff --git a/numass-main/src/main/groovy/inr/numass/scripts/Underflow.groovy b/numass-main/src/main/groovy/inr/numass/scripts/Underflow.groovy
index f0b5c6d1..1824a7bd 100644
--- a/numass-main/src/main/groovy/inr/numass/scripts/Underflow.groovy
+++ b/numass-main/src/main/groovy/inr/numass/scripts/Underflow.groovy
@@ -15,8 +15,8 @@ import inr.numass.storage.NumassStorage
import inr.numass.utils.UnderflowCorrection
//File rootDir = new File("D:\\Work\\Numass\\data\\2016_10\\Fill_1")
-//File rootDir = new File("D:\\Work\\Numass\\data\\2016_10\\Fill_2_wide")
-File rootDir = new File("D:\\Work\\Numass\\data\\2017_01\\Fill_2_wide")
+File rootDir = new File("D:\\Work\\Numass\\data\\2016_10\\Fill_2_wide")
+//File rootDir = new File("D:\\Work\\Numass\\data\\2017_01\\Fill_2_wide")
NumassStorage storage = NumassStorage.buildLocalNumassRoot(rootDir, true);
diff --git a/numass-main/src/main/java/inr/numass/models/sterile/NumassResolution.java b/numass-main/src/main/java/inr/numass/models/sterile/NumassResolution.java
index b19a1f33..fcb4e418 100644
--- a/numass-main/src/main/java/inr/numass/models/sterile/NumassResolution.java
+++ b/numass-main/src/main/java/inr/numass/models/sterile/NumassResolution.java
@@ -5,16 +5,21 @@
*/
package inr.numass.models.sterile;
+import hep.dataforge.context.Context;
+import hep.dataforge.maths.MathPlugin;
import hep.dataforge.meta.Meta;
import hep.dataforge.stat.parametric.AbstractParametricBiFunction;
import hep.dataforge.values.NamedValueSet;
import inr.numass.models.ResolutionFunction;
+import inr.numass.utils.ExpressionUtils;
import org.apache.commons.math3.analysis.BivariateFunction;
+import java.util.HashMap;
+import java.util.Map;
+
import static java.lang.Math.sqrt;
/**
- *
* @author Alexander Nozik
*/
public class NumassResolution extends AbstractParametricBiFunction {
@@ -25,13 +30,28 @@ public class NumassResolution extends AbstractParametricBiFunction {
private double resB = 0;
private BivariateFunction tailFunction = ResolutionFunction.getConstantTail();
- public NumassResolution(Meta meta) {
+ public NumassResolution(Context context, Meta meta) {
super(list);
this.resA = meta.getDouble("A", 8.3e-5);
this.resB = meta.getDouble("B", 0);
if (meta.hasValue("tailAlpha")) {
//add polinomial function here
- tailFunction = ResolutionFunction.getAngledTail(meta.getDouble("tailAlpha"), meta.getDouble("tailBeta", 0));
+ double alpha = meta.getDouble("tailAlpha");
+ double beta = meta.getDouble("tailBeta", 0);
+ tailFunction = (double E, double U) -> 1 - (E - U) * (alpha + E / 1000d * beta) / 1000d;
+ } else if (meta.hasValue("tail")) {
+ String tailFunctionStr = meta.getString("tail");
+ if (tailFunctionStr.startsWith("function::")) {
+ tailFunction = MathPlugin.buildFrom(context).buildBivariateFunction(tailFunctionStr.substring(10));
+ } else {
+ tailFunction = (E, U) -> {
+ Map binding = new HashMap<>();
+ binding.put("E", E);
+ binding.put("U", U);
+ binding.put("D", U - E);
+ return ExpressionUtils.function(tailFunctionStr, binding);
+ };
+ }
} else {
tailFunction = ResolutionFunction.getConstantTail();
}
diff --git a/numass-main/src/main/java/inr/numass/models/sterile/SterileNeutrinoSpectrum.java b/numass-main/src/main/java/inr/numass/models/sterile/SterileNeutrinoSpectrum.java
index 7e9a0c3e..8c0bd53c 100644
--- a/numass-main/src/main/java/inr/numass/models/sterile/SterileNeutrinoSpectrum.java
+++ b/numass-main/src/main/java/inr/numass/models/sterile/SterileNeutrinoSpectrum.java
@@ -73,7 +73,7 @@ public class SterileNeutrinoSpectrum extends AbstractParametricFunction {
}
transmission = new NumassTransmission(context, configuration.getMetaOrEmpty("transmission"));
- resolution = new NumassResolution(configuration.getMeta("resolution", Meta.empty()));
+ resolution = new NumassResolution(context, configuration.getMeta("resolution", Meta.empty()));
this.fast = configuration.getBoolean("fast", true);
transRes = new TransRes();
}
@@ -148,16 +148,16 @@ public class SterileNeutrinoSpectrum extends AbstractParametricFunction {
}
UnivariateIntegrator integrator;
- if(fast){
+ if (fast) {
if (eMax - u < 300) {
integrator = NumassIntegrator.getFastInterator();
- } else if(eMax - u > 2000){
+ } else if (eMax - u > 2000) {
integrator = NumassIntegrator.getHighDensityIntegrator();
} else {
integrator = NumassIntegrator.getDefaultIntegrator();
}
- } else {
+ } else {
integrator = NumassIntegrator.getHighDensityIntegrator();
}