diff --git a/numass-main/src/main/kotlin/inr/numass/NumassUtils.kt b/numass-main/src/main/kotlin/inr/numass/NumassUtils.kt index 189281d0..65f1b523 100644 --- a/numass-main/src/main/kotlin/inr/numass/NumassUtils.kt +++ b/numass-main/src/main/kotlin/inr/numass/NumassUtils.kt @@ -19,7 +19,6 @@ import hep.dataforge.context.Context import hep.dataforge.data.DataNode import hep.dataforge.data.DataSet import hep.dataforge.data.binary.Binary -import hep.dataforge.fx.plots.plusAssign import hep.dataforge.io.envelopes.DefaultEnvelopeType import hep.dataforge.io.envelopes.Envelope import hep.dataforge.io.envelopes.EnvelopeBuilder @@ -29,13 +28,7 @@ import hep.dataforge.io.markup.SimpleMarkupRenderer import hep.dataforge.kodex.nullable import hep.dataforge.meta.Meta import hep.dataforge.meta.MetaBuilder -import hep.dataforge.plots.PlotUtils -import hep.dataforge.plots.XYFunctionPlot -import hep.dataforge.plots.data.DataPlot import hep.dataforge.plots.jfreechart.JFreeChartFrame -import hep.dataforge.stat.fit.FitResult -import hep.dataforge.stat.models.XYModel -import hep.dataforge.tables.Adapters import hep.dataforge.tables.ListTable import hep.dataforge.tables.Table import hep.dataforge.tables.ValueMap @@ -270,37 +263,37 @@ fun Values.unbox(): Map { return res } -fun FitResult.display(context: Context, stage: String = "fit") { - val model = optModel(context).get() as XYModel - - val adapter = model.adapter - - val frame = PlotUtils.getPlotManager(context) - .getPlotFrame(stage, "plot", Meta.empty()) - - val func = { x: Double -> model.spectrum.value(x, parameters) } - - val fit = XYFunctionPlot("fit", function = func) - fit.density = 100 - // ensuring all data points are calculated explicitly - data.rows.map { dp -> Adapters.getXValue(adapter, dp).doubleValue() }.sorted().forEach { fit.calculateIn(it) } - - frame.add(fit) - - frame.add(DataPlot.plot("data", adapter, data)) - - val residualsFrame = PlotUtils.getPlotManager(context) - .getPlotFrame(stage, "residuals", Meta.empty()) - - val residual = DataPlot("residuals"); - - data.rows.forEach { - val x = Adapters.getXValue(adapter, it).doubleValue() - val y = Adapters.getYValue(adapter, it).doubleValue() - val err = Adapters.optYError(adapter, it).orElse(1.0) - residual += Adapters.buildXYDataPoint(x, (y - func(x)) / err, 1.0) - } - - residualsFrame.add(residual) - -} +//fun FitResult.display(context: Context, stage: String = "fit") { +// val model = optModel(context).get() as XYModel +// +// val adapter = model.adapter +// +// val frame = PlotUtils.getPlotManager(context) +// .getPlotFrame(stage, "plot", Meta.empty()) +// +// val func = { x: Double -> model.spectrum.value(x, parameters) } +// +// val fit = XYFunctionPlot("fit", function = func) +// fit.density = 100 +// // ensuring all data points are calculated explicitly +// data.rows.map { dp -> Adapters.getXValue(adapter, dp).doubleValue() }.sorted().forEach { fit.calculateIn(it) } +// +// frame.add(fit) +// +// frame.add(DataPlot.plot("data", adapter, data)) +// +// val residualsFrame = PlotUtils.getPlotManager(context) +// .getPlotFrame(stage, "residuals", Meta.empty()) +// +// val residual = DataPlot("residuals"); +// +// data.rows.forEach { +// val x = Adapters.getXValue(adapter, it).doubleValue() +// val y = Adapters.getYValue(adapter, it).doubleValue() +// val err = Adapters.optYError(adapter, it).orElse(1.0) +// residual += Adapters.buildXYDataPoint(x, (y - func(x)) / err, 1.0) +// } +// +// residualsFrame.add(residual) +// +//} diff --git a/numass-main/src/main/kotlin/inr/numass/data/Visualization.kt b/numass-main/src/main/kotlin/inr/numass/data/Visualization.kt index ab16a760..f6d356d3 100644 --- a/numass-main/src/main/kotlin/inr/numass/data/Visualization.kt +++ b/numass-main/src/main/kotlin/inr/numass/data/Visualization.kt @@ -44,17 +44,19 @@ fun NumassBlock.plotAmplitudeSpectrum(plotName: String = "spectrum", frameName: } else { NumassAnalyzer.COUNT_KEY } - val plot = DataPlot.plot( - plotName, - Adapters.buildXYAdapter(NumassAnalyzer.CHANNEL_KEY, valueAxis), - data - ).configure { + plots.configure { "connectionType" to "step" "thickness" to 2 "showLine" to true "showSymbol" to false "showErrors" to false - } + }.setType(DataPlot::class) + + val plot = DataPlot.plot( + plotName, + Adapters.buildXYAdapter(NumassAnalyzer.CHANNEL_KEY, valueAxis), + data + ) plot.configure(meta) add(plot) } diff --git a/numass-main/src/main/kotlin/inr/numass/scripts/tristan/ViewPoint.kt b/numass-main/src/main/kotlin/inr/numass/scripts/tristan/ViewPoint.kt new file mode 100644 index 00000000..11f76f81 --- /dev/null +++ b/numass-main/src/main/kotlin/inr/numass/scripts/tristan/ViewPoint.kt @@ -0,0 +1,30 @@ +package inr.numass.scripts.tristan + +import hep.dataforge.kodex.toList +import inr.numass.data.api.MetaBlock +import inr.numass.data.api.NumassBlock +import inr.numass.data.api.NumassPoint +import inr.numass.data.channel +import inr.numass.data.plotAmplitudeSpectrum +import inr.numass.data.storage.ProtoNumassPoint +import java.io.File + + +private fun NumassPoint.getChannels(): Map { + return blocks.toList().groupBy { it.channel ?: 0 }.mapValues { entry -> + if (entry.value.size == 1) { + entry.value.first() + } else { + MetaBlock(entry.value) + } + } +} + +fun main(args: Array) { + val file = File("D:\\Work\\Numass\\data\\17kV\\processed.df").toPath() + val point = ProtoNumassPoint.readFile(file) + println(point.meta) + point.getChannels().forEach{ num, block -> + block.plotAmplitudeSpectrum(plotName = num.toString()) + } +} \ No newline at end of file