diff --git a/numass-main/src/main/groovy/inr/numass/data/PointAnalyzer.groovy b/numass-main/src/main/groovy/inr/numass/data/PointAnalyzer.groovy index 19d60d3d..8354c7ad 100644 --- a/numass-main/src/main/groovy/inr/numass/data/PointAnalyzer.groovy +++ b/numass-main/src/main/groovy/inr/numass/data/PointAnalyzer.groovy @@ -1,6 +1,8 @@ package inr.numass.data import groovy.transform.CompileStatic +import hep.dataforge.maths.histogram.Histogram +import hep.dataforge.maths.histogram.UnivariateHistogram /** * Created by darksnake on 27-Jun-17. @@ -22,9 +24,24 @@ class PointAnalyzer { } lastEvent = event } - double cr = 1d/(totalT/totalN - t0); + double cr = 1d / (totalT / totalN - t0); return new Result(cr: cr, crErr: cr / Math.sqrt(totalN), num: totalN, t0: t0, loChannel: loChannel, upChannel: upChannel) + } + + static Histogram histogram(RawNMPoint point, int loChannel = 0, int upChannel = 4000) { + List ts = new ArrayList<>(); + NMEvent lastEvent = point.events[0]; + + for (int i = 1; i < point.events.size(); i++) { + NMEvent event = point.events[i]; + double t = event.time - lastEvent.time; + if (t >= 0 && event.chanel <= upChannel && event.chanel >= loChannel) { + ts << t + } + lastEvent = event + } + return UnivariateHistogram.buildUniform(0d, 5e-4, 1e-6).fill(ts.stream().mapToDouble { it }) } static class Result { diff --git a/numass-main/src/main/groovy/inr/numass/scripts/TestPointAnalyzer.groovy b/numass-main/src/main/groovy/inr/numass/scripts/TestPointAnalyzer.groovy index e1e85395..6985de7d 100644 --- a/numass-main/src/main/groovy/inr/numass/scripts/TestPointAnalyzer.groovy +++ b/numass-main/src/main/groovy/inr/numass/scripts/TestPointAnalyzer.groovy @@ -29,8 +29,19 @@ shell.eval { NumassStorage storage = NumassStorageFactory.buildLocal(rootDir); - def hv = 14000; - def point = storage.provide("loader::set_2/rawPoint::$hv", RawNMPoint.class).get(); + def hv = 15000; + def point = storage.provide("loader::set_5/rawPoint::$hv", RawNMPoint.class).get(); + + def histogram = PointAnalyzer.histogram(point,1000,1300).asTable(); + + plot.configure("histogram"){ + yAxis(type:"log") + } + + plot.plot(histogram, ["frame": "histogram","showLine": true, "showSymbol": false, "showErrors": false, "connectionType": "step"]){ + adapter("x.value": "x", "y.value": "count") + } + def t0 = (1..150).collect { 5.5e-6 + 2e-7 * it } @@ -42,8 +53,7 @@ shell.eval { plot.plot(plotPoints, ["name": hv]) - - plot.plot(title: "dead time", from: 5.5e-6, to: 2e-5) { point.cr * 1d / (1d - 6.55e-6 * point.cr) } +// plot.plot(title: "dead time", from: 5.5e-6, to: 2e-5) { point.cr * 1d / (1d - 6.55e-6 * point.cr) } storage.close() } \ No newline at end of file