From 44c42758c644df201a90c8e378b8e43a0eaa7750 Mon Sep 17 00:00:00 2001 From: darksnake Date: Tue, 7 Feb 2017 16:21:07 +0300 Subject: [PATCH] Numass underflow update --- .../inr/numass/scripts/Underflow.groovy | 36 +++++++++++++++++-- .../inr/numass/utils/NumassIntegrator.java | 9 +++-- .../inr/numass/utils/UnderflowCorrection.java | 21 +++++++---- numass-viewer/build.gradle | 8 ++++- .../viewer/NumassLoaderViewComponent.java | 7 ++-- 5 files changed, 61 insertions(+), 20 deletions(-) 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 2b93f793..c54bbae2 100644 --- a/numass-main/src/main/groovy/inr/numass/scripts/Underflow.groovy +++ b/numass-main/src/main/groovy/inr/numass/scripts/Underflow.groovy @@ -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 data, List us, int binning = 20, normalize = false) { + List 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") diff --git a/numass-main/src/main/java/inr/numass/utils/NumassIntegrator.java b/numass-main/src/main/java/inr/numass/utils/NumassIntegrator.java index b4029714..86cd90ba 100644 --- a/numass-main/src/main/java/inr/numass/utils/NumassIntegrator.java +++ b/numass-main/src/main/java/inr/numass/utils/NumassIntegrator.java @@ -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; } diff --git a/numass-main/src/main/java/inr/numass/utils/UnderflowCorrection.java b/numass-main/src/main/java/inr/numass/utils/UnderflowCorrection.java index eb8f790d..c8ddbd7b 100644 --- a/numass-main/src/main/java/inr/numass/utils/UnderflowCorrection.java +++ b/numass-main/src/main/java/inr/numass/utils/UnderflowCorrection.java @@ -62,9 +62,13 @@ public class UnderflowCorrection { public Table fitAllPoints(Iterable 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) + }; } } diff --git a/numass-viewer/build.gradle b/numass-viewer/build.gradle index 6cfea677..582ab11e 100644 --- a/numass-viewer/build.gradle +++ b/numass-viewer/build.gradle @@ -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 +} \ No newline at end of file diff --git a/numass-viewer/src/main/java/inr/numass/viewer/NumassLoaderViewComponent.java b/numass-viewer/src/main/java/inr/numass/viewer/NumassLoaderViewComponent.java index 7ed72ce8..40ca13d6 100644 --- a/numass-viewer/src/main/java/inr/numass/viewer/NumassLoaderViewComponent.java +++ b/numass-viewer/src/main/java/inr/numass/viewer/NumassLoaderViewComponent.java @@ -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 points, int binning, boolean normalize) { - FXPlotFrame detectorPlotFrame; + FXPlotFrame detectorPlotFrame; if (detectorPlot.getPlot() == null) { Meta frameMeta = new MetaBuilder("frame") .setValue("title", "Detector response plot")