Numass underflow update

This commit is contained in:
darksnake 2017-02-07 16:21:07 +03:00
parent 8861dff73d
commit 44c42758c6
5 changed files with 61 additions and 20 deletions

View File

@ -14,7 +14,6 @@ import inr.numass.storage.NumassDataUtils
import inr.numass.storage.NumassStorage
import inr.numass.utils.UnderflowCorrection
File rootDir = new File("D:\\Work\\Numass\\data\\2016_10\\Fill_1")
NumassStorage storage = NumassStorage.buildLocalNumassRoot(rootDir, true);
@ -49,6 +48,39 @@ data = NumassDataUtils.substractReferencePoint(data, 18600d);
// }
//}
Table t = new UnderflowCorrection().fitAllPoints(data, 400, 750, 3100, 20);
def printPoint(Iterable<NMPoint> data, List us, int binning = 20, normalize = false) {
List<NMPoint> points = data.findAll { it.uset in us }.sort { it.uset }
Map spectra = points.first().getMapWithBinning(binning, normalize).collectEntries { key, value ->
[key, [value]]
};
points.eachWithIndex { it, index ->
if (index > 0) {
print "\t${it.uset}"
it.getMapWithBinning(binning, normalize).each { k, v ->
spectra[k].add(v)
}
}
}
println()
spectra.each { key, value ->
print key
value.each {
print "\t${it}"
}
println()
}
}
println "\n# spectra\n"
printPoint(data, [16200d, 16400d, 16800d, 17000d, 17200d])
println()
Table t = new UnderflowCorrection().fitAllPoints(data, 400, 700, 3100, 20);
ColumnedDataWriter.writeDataSet(System.out, t, "underflow parameters")

View File

@ -9,12 +9,11 @@ import hep.dataforge.maths.integration.GaussRuleIntegrator;
import hep.dataforge.maths.integration.UnivariateIntegrator;
/**
*
* @author Alexander Nozik
*/
public class NumassIntegrator {
private static double mult = 1.0;
private static double mult = 1.0;//for testing purposes
private static UnivariateIntegrator fastInterator;
private static UnivariateIntegrator defaultIntegrator;
@ -22,21 +21,21 @@ public class NumassIntegrator {
public static UnivariateIntegrator getFastInterator() {
if (fastInterator == null) {
fastInterator = new GaussRuleIntegrator((int) (mult*100));
fastInterator = new GaussRuleIntegrator((int) (mult * 100));
}
return fastInterator;
}
public static UnivariateIntegrator getDefaultIntegrator() {
if (defaultIntegrator == null) {
defaultIntegrator = new GaussRuleIntegrator((int) (mult*300));
defaultIntegrator = new GaussRuleIntegrator((int) (mult * 300));
}
return defaultIntegrator;
}
public static UnivariateIntegrator getHighDensityIntegrator() {
if (highDensityIntegrator == null) {
highDensityIntegrator = new GaussRuleIntegrator((int) (mult*500));
highDensityIntegrator = new GaussRuleIntegrator((int) (mult * 500));
}
return highDensityIntegrator;
}

View File

@ -62,9 +62,13 @@ public class UnderflowCorrection {
public Table fitAllPoints(Iterable<NMPoint> data, int xLow, int xHigh, int upper, int binning) {
ListTable.Builder builder = new ListTable.Builder("U", "amp", "expConst", "correction");
for (NMPoint point : data) {
double norm = ((double) point.getCountInWindow(xLow, upper))/point.getLength();
double norm = ((double) point.getCountInWindow(xLow, upper)) / point.getLength();
double[] fitRes = getUnderflowExpParameters(point, xLow, xHigh, binning);
builder.row(point.getUset(), fitRes[0], fitRes[1], fitRes[0] * fitRes[1] * (Math.exp(xLow / fitRes[1]) - 1d) / norm + 1d);
double a = fitRes[0];
double sigma = fitRes[1];
//builder.row(point.getUset(), a, sigma, (a * sigma * (Math.exp(xLow / sigma) - 1) - a*xLow) / norm + 1d);
builder.row(point.getUset(), a, sigma, a * sigma * (Math.exp(xLow / sigma) - 1) / norm + 1d);
}
return builder.build();
}
@ -103,15 +107,15 @@ public class UnderflowCorrection {
* Exponential function for fitting
*/
private static class ExponentFunction implements ParametricUnivariateFunction {
@Override
public double value(double x, double... parameters) {
if (parameters.length != 2) {
throw new DimensionMismatchException(parameters.length, 2);
}
double a = parameters[0];
double x0 = parameters[1];
return a * Math.exp(x / x0);
double sigma = parameters[1];
//return a * (Math.exp(x / sigma) - 1);
return a * Math.exp(x / sigma);
}
@Override
@ -120,8 +124,11 @@ public class UnderflowCorrection {
throw new DimensionMismatchException(parameters.length, 2);
}
double a = parameters[0];
double x0 = parameters[1];
return new double[]{Math.exp(x / x0), -a * x / x0 / x0 * Math.exp(x / x0)};
double sigma = parameters[1];
return new double[]{
Math.exp(x / sigma),
-a * x / sigma / sigma * Math.exp(x / sigma)
};
}
}

View File

@ -5,7 +5,7 @@ if (!hasProperty('mainClass')) {
}
mainClassName = mainClass
version = "0.3.7"
version = "0.3.7 - SNAPSHOT"
description = "The viewer for numass data"
@ -26,3 +26,9 @@ dependencies {
compile project(':dataforge-fx')
compile 'com.jcraft:jsch:0.1.53'
}
shadowJar {
baseName = 'numass-viewer'
classifier = null
version = null
}

View File

@ -27,10 +27,7 @@ import hep.dataforge.io.ColumnedDataWriter;
import hep.dataforge.meta.Meta;
import hep.dataforge.meta.MetaBuilder;
import hep.dataforge.plots.XYPlotFrame;
import hep.dataforge.plots.data.PlotDataUtils;
import hep.dataforge.plots.data.PlottableData;
import hep.dataforge.plots.data.TimePlottable;
import hep.dataforge.plots.data.TimePlottableGroup;
import hep.dataforge.plots.data.*;
import hep.dataforge.plots.fx.FXPlotFrame;
import hep.dataforge.plots.fx.PlotContainer;
import hep.dataforge.plots.jfreechart.JFreeChartFrame;
@ -324,7 +321,7 @@ public class NumassLoaderViewComponent extends AnchorPane implements Initializab
* update detector pane with new data
*/
private void updateDetectorPane(List<NMPoint> points, int binning, boolean normalize) {
FXPlotFrame detectorPlotFrame;
FXPlotFrame<XYPlottable> detectorPlotFrame;
if (detectorPlot.getPlot() == null) {
Meta frameMeta = new MetaBuilder("frame")
.setValue("title", "Detector response plot")