diff --git a/numass-core/src/main/kotlin/inr/numass/data/NumassDataUtils.kt b/numass-core/src/main/kotlin/inr/numass/data/NumassDataUtils.kt index 505c3315..be21e448 100644 --- a/numass-core/src/main/kotlin/inr/numass/data/NumassDataUtils.kt +++ b/numass-core/src/main/kotlin/inr/numass/data/NumassDataUtils.kt @@ -3,9 +3,11 @@ package inr.numass.data import hep.dataforge.io.envelopes.Envelope import hep.dataforge.meta.Meta import hep.dataforge.meta.MetaBuilder +import inr.numass.data.api.NumassBlock import inr.numass.data.api.NumassPoint import inr.numass.data.api.NumassSet import inr.numass.data.api.SimpleNumassPoint +import inr.numass.data.storage.ProtoBlock import java.io.InputStream import java.util.stream.Collectors import java.util.stream.Stream @@ -43,9 +45,16 @@ object NumassDataUtils { /** * Get valid data stream utilizing compression if it is present */ -val Envelope.dataStream : InputStream - get() = if(this.meta.getString("compression", "none") == "zlib"){ +val Envelope.dataStream: InputStream + get() = if (this.meta.getString("compression", "none") == "zlib") { ZipInputStream(this.data.stream) } else { this.data.stream } + +val NumassBlock.channel: Int + get() = if (this is ProtoBlock) { + this.channel + } else { + 0 + } diff --git a/numass-core/src/main/kotlin/inr/numass/data/storage/ProtoNumassPoint.kt b/numass-core/src/main/kotlin/inr/numass/data/storage/ProtoNumassPoint.kt index 2990db7b..c98c4b78 100644 --- a/numass-core/src/main/kotlin/inr/numass/data/storage/ProtoNumassPoint.kt +++ b/numass-core/src/main/kotlin/inr/numass/data/storage/ProtoNumassPoint.kt @@ -43,36 +43,6 @@ class ProtoNumassPoint(private val envelope: Envelope) : NumassPoint { return envelope.meta } - class ProtoBlock(val channel: Int, private val block: NumassProto.Point.Channel.Block, private val meta: Meta) : NumassBlock { - - override fun getStartTime(): Instant { - return ofEpochNanos(block.time) - } - - override fun getLength(): Duration { - return Duration.ofNanos((meta.getDouble("params.b_size") / meta.getDouble("params.sample_freq") * 1e9).toLong()) - } - - override fun getEvents(): Stream { - val blockTime = startTime - if (block.hasEvents()) { - val events = block.events - return IntStream.range(0, events.timesCount).mapToObj { i -> NumassEvent(events.getAmplitudes(i).toShort(), blockTime, events.getTimes(i)) } - } else { - return Stream.empty() - } - } - - override fun getFrames(): Stream { - val tickSize = Duration.ofNanos((1e9 / meta.getInt("params.sample_freq")).toLong()) - return block.framesList.stream().map { frame -> - val time = startTime.plusNanos(frame.time) - val data = frame.data.asReadOnlyByteBuffer() - NumassFrame(time, tickSize, data.asShortBuffer()) - } - } - } - companion object { fun readFile(path: Path): ProtoNumassPoint { return ProtoNumassPoint(NumassFileEnvelope.open(path, true)) @@ -85,3 +55,33 @@ class ProtoNumassPoint(private val envelope: Envelope) : NumassPoint { } } } + +class ProtoBlock(val channel: Int, private val block: NumassProto.Point.Channel.Block, private val meta: Meta) : NumassBlock { + + override fun getStartTime(): Instant { + return ProtoNumassPoint.ofEpochNanos(block.time) + } + + override fun getLength(): Duration { + return Duration.ofNanos((meta.getDouble("params.b_size") / meta.getDouble("params.sample_freq") * 1e9).toLong()) + } + + override fun getEvents(): Stream { + val blockTime = startTime + if (block.hasEvents()) { + val events = block.events + return IntStream.range(0, events.timesCount).mapToObj { i -> NumassEvent(events.getAmplitudes(i).toShort(), blockTime, events.getTimes(i)) } + } else { + return Stream.empty() + } + } + + override fun getFrames(): Stream { + val tickSize = Duration.ofNanos((1e9 / meta.getInt("params.sample_freq")).toLong()) + return block.framesList.stream().map { frame -> + val time = startTime.plusNanos(frame.time) + val data = frame.data.asReadOnlyByteBuffer() + NumassFrame(time, tickSize, data.asShortBuffer()) + } + } +} \ No newline at end of file diff --git a/numass-viewer/src/main/kotlin/inr/numass/viewer/AmplitudeView.kt b/numass-viewer/src/main/kotlin/inr/numass/viewer/AmplitudeView.kt index f168ff12..0fce05e5 100644 --- a/numass-viewer/src/main/kotlin/inr/numass/viewer/AmplitudeView.kt +++ b/numass-viewer/src/main/kotlin/inr/numass/viewer/AmplitudeView.kt @@ -55,7 +55,7 @@ class AmplitudeView( private val container = PlotContainer(frame).apply { - val binnintSelector: ChoiceBox = ChoiceBox(FXCollections.observableArrayList(1, 2, 5, 10, 20, 50)).apply { + val binningSelector: ChoiceBox = ChoiceBox(FXCollections.observableArrayList(1, 2, 5, 10, 20, 50)).apply { minWidth = 0.0 selectionModel.selectLast() binningProperty.bind(this.selectionModel.selectedItemProperty()) @@ -64,7 +64,7 @@ class AmplitudeView( minWidth = 0.0 this.selectedProperty().bindBidirectional(normalizeProperty) } - addToSideBar(0, binnintSelector, normalizeSwitch) + addToSideBar(0, binningSelector, normalizeSwitch) } private val data: ObservableMap = FXCollections.observableHashMap()