diff --git a/numass-main/build.gradle b/numass-main/build.gradle index ea851034..7d61967e 100644 --- a/numass-main/build.gradle +++ b/numass-main/build.gradle @@ -36,6 +36,15 @@ task repl(dependsOn: classes, type: JavaExec) { } } +task grindTask(dependsOn: classes, type: JavaExec){ + group "numass" + main 'inr.numass.RunTask' + classpath = sourceSets.main.runtimeClasspath + description "Run a task in a numass workspace" + standardInput = System.in + standardOutput = System.out +} + task simulate(dependsOn: classes, type: JavaExec) { group "numass" main 'inr.numass.scripts.Simulate' diff --git a/numass-main/src/main/groovy/inr/numass/LaunchGrindShell.groovy b/numass-main/src/main/groovy/inr/numass/LaunchGrindShell.groovy index 64e87bac..8208d0ae 100644 --- a/numass-main/src/main/groovy/inr/numass/LaunchGrindShell.groovy +++ b/numass-main/src/main/groovy/inr/numass/LaunchGrindShell.groovy @@ -22,7 +22,7 @@ println "Starting Grind shell" if (cfgPath) { try { - GrindTerminal.dumb().launch { + GrindTerminal.system().launch { GrindWorkspaceBuilder numass = new GrindWorkspaceBuilder(it.shell.context).read(new File(cfgPath)).startup { it.loadTask(NumassPrepareTask) it.loadTask(NumassTableFilterTask) diff --git a/numass-main/src/main/groovy/inr/numass/RunTask.groovy b/numass-main/src/main/groovy/inr/numass/RunTask.groovy new file mode 100644 index 00000000..c0a10980 --- /dev/null +++ b/numass-main/src/main/groovy/inr/numass/RunTask.groovy @@ -0,0 +1,23 @@ +package inr.numass + +import hep.dataforge.grind.GrindWorkspaceBuilder +import inr.numass.tasks.* + +/** + * Created by darksnake on 18-Apr-17. + */ + + +cfgPath = "D:\\Work\\Numass\\sterile2016_10\\workspace.groovy" + +GrindWorkspaceBuilder numass = new GrindWorkspaceBuilder().read(new File(cfgPath)).startup { + it.loadTask(NumassPrepareTask) + it.loadTask(NumassTableFilterTask) + it.loadTask(NumassFitScanTask) + it.loadTask(NumassSubstractEmptySourceTask) + it.loadTask(NumassFitScanSummaryTask) + it.loadTask(NumassFitTask) + it.loadTask(NumassFitSummaryTask) +} + +numass.scansum "fill_1" \ No newline at end of file diff --git a/numass-main/src/main/java/hep/dataforge/plotfit/PlotFitResultAction.java b/numass-main/src/main/java/hep/dataforge/plotfit/PlotFitResultAction.java index 22fea35f..f3ad3111 100644 --- a/numass-main/src/main/java/hep/dataforge/plotfit/PlotFitResultAction.java +++ b/numass-main/src/main/java/hep/dataforge/plotfit/PlotFitResultAction.java @@ -27,6 +27,7 @@ import hep.dataforge.plots.PlotFrame; import hep.dataforge.plots.PlotUtils; import hep.dataforge.plots.data.PlottableData; import hep.dataforge.plots.data.PlottableXYFunction; +import hep.dataforge.stat.fit.FitResult; import hep.dataforge.stat.fit.FitState; import hep.dataforge.stat.models.XYModel; import hep.dataforge.tables.NavigablePointSource; @@ -41,10 +42,10 @@ import java.util.stream.StreamSupport; @TypedActionDef(name = "plotFit", info = "Plot fit result", inputType = FitState.class, outputType = FitState.class) @NodeDef(name = "adapter", info = "adapter for DataSet being fitted. By default is taken from model.") @ValueDef(name = "plotTitle", def = "", info = "The title of the plot.") -public class PlotFitResultAction extends OneToOneAction { +public class PlotFitResultAction extends OneToOneAction { @Override - protected FitState execute(Context context, String name, FitState input, Laminate metaData) { + protected FitResult execute(Context context, String name, FitResult input, Laminate metaData) { NavigablePointSource data = input.getDataSet(); if (!(input.getModel() instanceof XYModel)) { diff --git a/numass-main/src/main/java/inr/numass/Numass.java b/numass-main/src/main/java/inr/numass/Numass.java index a63e7ffd..ff460201 100644 --- a/numass-main/src/main/java/inr/numass/Numass.java +++ b/numass-main/src/main/java/inr/numass/Numass.java @@ -31,9 +31,11 @@ import hep.dataforge.meta.Meta; public class Numass { public static Context buildContext(Context parent, Meta meta) { - Context numassContext = Global.getContext("numass").withParent(parent).withProperties(meta); - numassContext.pluginManager().load("inr.numass:numass"); - return numassContext; + return Context.builder("NUMASS") + .parent(parent) + .properties(meta) + .plugin(NumassPlugin.class) + .build(); } public static Context buildContext() { diff --git a/numass-main/src/main/java/inr/numass/NumassPlugin.java b/numass-main/src/main/java/inr/numass/NumassPlugin.java index 3074efbe..bd25685d 100644 --- a/numass-main/src/main/java/inr/numass/NumassPlugin.java +++ b/numass-main/src/main/java/inr/numass/NumassPlugin.java @@ -72,7 +72,7 @@ public class NumassPlugin extends BasicPlugin { public void attach(Context context) { // StorageManager.buildFrom(context); super.attach(context); - context.setIO(new NumassIO()); + context.pluginManager().load(new NumassIO()); FitManager fm = context.getFeature(FitManager.class); loadModels(fm.getModelManager()); loadMath(MathPlugin.buildFrom(context)); diff --git a/numass-main/src/main/java/inr/numass/actions/MonitorCorrectAction.java b/numass-main/src/main/java/inr/numass/actions/MonitorCorrectAction.java index aff0cf4a..236d8b64 100644 --- a/numass-main/src/main/java/inr/numass/actions/MonitorCorrectAction.java +++ b/numass-main/src/main/java/inr/numass/actions/MonitorCorrectAction.java @@ -58,7 +58,7 @@ public class MonitorCorrectAction extends OneToOneAction { TreeMap index = getMonitorIndex(monitor, sourceData); if (index.isEmpty()) { - getReport(context, name).reportError("No monitor points found"); + context.getLog(name).reportError("No monitor points found"); return sourceData; } double norm = 0; diff --git a/numass-main/src/main/java/inr/numass/actions/PrepareDataAction.java b/numass-main/src/main/java/inr/numass/actions/PrepareDataAction.java index 86d5e411..7f6749e6 100644 --- a/numass-main/src/main/java/inr/numass/actions/PrepareDataAction.java +++ b/numass-main/src/main/java/inr/numass/actions/PrepareDataAction.java @@ -80,7 +80,7 @@ public class PrepareDataAction extends OneToOneAction { corrections.add(new DeadTimeCorrection(meta.getString("deadTime"))); } - if (meta.hasNode("correction")) { + if (meta.optMeta("correction").isPresent()) { corrections.addAll(meta.getMetaList("correction").stream() .map((Function) this::makeCorrection) .collect(Collectors.toList())); diff --git a/numass-main/src/main/java/inr/numass/tasks/NumassFitScanTask.java b/numass-main/src/main/java/inr/numass/tasks/NumassFitScanTask.java index 521ff395..a3b435ca 100644 --- a/numass-main/src/main/java/inr/numass/tasks/NumassFitScanTask.java +++ b/numass-main/src/main/java/inr/numass/tasks/NumassFitScanTask.java @@ -11,6 +11,7 @@ import hep.dataforge.data.DataTree; import hep.dataforge.meta.Meta; import hep.dataforge.meta.MetaBuilder; import hep.dataforge.stat.fit.FitAction; +import hep.dataforge.stat.fit.FitResult; import hep.dataforge.stat.fit.FitState; import hep.dataforge.tables.Table; import hep.dataforge.values.Value; @@ -40,7 +41,7 @@ public class NumassFitScanTask extends AbstractTask { } else { scanValues = config.getValue("scan.values", Value.of("[2.5e5, 1e6, 2.25e6, 4e6, 6.25e6, 9e6]")); } - Action action = new FitAction(); + Action action = new FitAction(); DataTree.Builder resultBuilder = DataTree.builder(FitState.class); DataNode sourceNode = data.getCheckedNode("prepare", Table.class); @@ -65,7 +66,7 @@ public class NumassFitScanTask extends AbstractTask { .filter(par -> par.getString("name") == scanParameter).forEach(par -> par.setValue("value", val)); } // Data
newData = new Data
(data.getGoal(),data.type(),overrideMeta); - DataNode node = action.run(model.getContext(), DataNode.of("fit_" + i, table, Meta.empty()), overrideMeta); + DataNode node = action.run(model.getContext(), DataNode.of("fit_" + i, table, Meta.empty()), overrideMeta); resultBuilder.putData(table.getName() + ".fit_" + i, node.getData()); } }); diff --git a/numass-main/src/main/java/inr/numass/tasks/NumassFitTask.java b/numass-main/src/main/java/inr/numass/tasks/NumassFitTask.java index ad6f781c..50613e75 100644 --- a/numass-main/src/main/java/inr/numass/tasks/NumassFitTask.java +++ b/numass-main/src/main/java/inr/numass/tasks/NumassFitTask.java @@ -23,7 +23,7 @@ import hep.dataforge.meta.Meta; import hep.dataforge.meta.MetaBuilder; import hep.dataforge.plotfit.PlotFitResultAction; import hep.dataforge.stat.fit.FitAction; -import hep.dataforge.stat.fit.FitState; +import hep.dataforge.stat.fit.FitResult; import hep.dataforge.tables.Table; import hep.dataforge.workspace.SingleActionTask; import hep.dataforge.workspace.TaskModel; @@ -31,7 +31,7 @@ import hep.dataforge.workspace.TaskModel; /** * Created by darksnake on 16-Sep-16. */ -public class NumassFitTask extends SingleActionTask { +public class NumassFitTask extends SingleActionTask { @Override public String getName() { @@ -51,8 +51,8 @@ public class NumassFitTask extends SingleActionTask { } @Override - protected Action getAction(TaskModel model) { - Action action = new FitAction(); + protected Action getAction(TaskModel model) { + Action action = new FitAction(); if (model.meta().getBoolean("fit.plot", false)) { return ActionUtils.compose(action, new PlotFitResultAction()); } else { diff --git a/numass-main/src/main/java/inr/numass/tasks/NumassSubstractEmptySourceTask.java b/numass-main/src/main/java/inr/numass/tasks/NumassSubstractEmptySourceTask.java index 64dab317..d539c670 100644 --- a/numass-main/src/main/java/inr/numass/tasks/NumassSubstractEmptySourceTask.java +++ b/numass-main/src/main/java/inr/numass/tasks/NumassSubstractEmptySourceTask.java @@ -29,6 +29,7 @@ import hep.dataforge.tables.MapPoint; import hep.dataforge.tables.Table; import hep.dataforge.workspace.AbstractTask; import hep.dataforge.workspace.TaskModel; +import org.slf4j.LoggerFactory; import java.io.OutputStream; import java.util.Optional; @@ -77,7 +78,7 @@ public class NumassSubstractEmptySourceTask extends AbstractTask
{ private Data subtractBackground(Data mergeData, Data emptyData) { - return DataUtils.combine(Table.class, mergeData, emptyData, mergeData.meta(), (BiFunction) this::subtractBackground); + return DataUtils.combine(mergeData, emptyData, Table.class, mergeData.meta(), (BiFunction) this::subtractBackground); } private Table subtractBackground(Table merge, Table empty) { @@ -90,7 +91,7 @@ public class NumassSubstractEmptySourceTask extends AbstractTask
{ pointBuilder.putValue("CR", Math.max(0, point.getDouble("CR") - referencePoint.get().getDouble("CR"))); pointBuilder.putValue("CRerr", Math.sqrt(Math.pow(point.getDouble("CRerr"), 2d) + Math.pow(referencePoint.get().getDouble("CRerr"), 2d))); } else { - getLogger().warn("No reference point found for Uset = {}", point.getDouble("Uset")); + LoggerFactory.getLogger(getClass()).warn("No reference point found for Uset = {}", point.getDouble("Uset")); } builder.row(pointBuilder.build()); }); diff --git a/numass-viewer/src/main/kotlin/inr/numass/viewer/NumassLoaderView.kt b/numass-viewer/src/main/kotlin/inr/numass/viewer/NumassLoaderView.kt index 0e294111..d0e5f60e 100644 --- a/numass-viewer/src/main/kotlin/inr/numass/viewer/NumassLoaderView.kt +++ b/numass-viewer/src/main/kotlin/inr/numass/viewer/NumassLoaderView.kt @@ -50,6 +50,7 @@ class NumassLoaderView : View() { lateinit var main: MainView var data: NumassData? = null + val spectrumData = PlottableData("spectrum") private val detectorPlotPane: AnchorPane by fxid(); private val tabPane: TabPane by fxid(); @@ -175,13 +176,11 @@ class NumassLoaderView : View() { getWorkManager().startWork("viewer.numass.hv") { callback: Work -> val t = hvData.get() Platform.runLater { -// hvPlot.plot.clear() val set = PlottableGroup() for (dp in t) { val block = dp.getString("block", "default") if (!set.has(block)) { - - set.add(hvPlot.plot.opt(block).orElseGet{TimePlottable(block)} as TimePlottable) + set.add(TimePlottable(block)) } set.get(block).put(dp.getValue("timestamp").timeValue(), dp.getValue("value")) } @@ -217,8 +216,7 @@ class NumassLoaderView : View() { } private fun setupSpectrumPane(points: List) { - val spectrumData = spectrumPlot.plot.opt("spectrum").orElseGet{PlottableData("spectrum")} as PlottableData - spectrumPlot.plot.add(spectrumData) //does nothing if it is the same plottable + spectrumPlot.plot.add(spectrumData) val lowChannel = channelSlider.lowValue.toInt() val highChannel = channelSlider.highValue.toInt()