From cf2af1d64d35c792c5672f942fd9aa38a9d4e19e Mon Sep 17 00:00:00 2001 From: Marko Luukkainen Date: Thu, 28 Jun 2018 16:25:55 +0300 Subject: [PATCH] History data collector did not collect min/max/avg values correctly gitlab #35 Change-Id: Iabc44ba0d8fb8a0348f27df07cd4d114975c4d0d (cherry picked from commit 30ca6dab0384054fec22139c2e88fbcc31a463cd) --- .../simantics/history/impl/CollectorImpl.java | 83 ++++++++++--------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/bundles/org.simantics.history/src/org/simantics/history/impl/CollectorImpl.java b/bundles/org.simantics.history/src/org/simantics/history/impl/CollectorImpl.java index 4f916868e..d6dd6d9b3 100644 --- a/bundles/org.simantics.history/src/org/simantics/history/impl/CollectorImpl.java +++ b/bundles/org.simantics.history/src/org/simantics/history/impl/CollectorImpl.java @@ -811,7 +811,7 @@ public class CollectorImpl implements Collector { boolean condition = makeNewBand || (!i.hasEndTime && i.itemState.count==2); - if(i.stream.size() > 0 && !i.itemState.ooDeadband) { + if(i.stream.size() > 0 ) { //!i.itemState.ooDeadband) { /// Extend existing band // Extend endTime value @@ -820,57 +820,59 @@ public class CollectorImpl implements Collector { } else { i.current.setEndTime( time.getBinding(), time.getValue() ); } + if (i.itemState.ooDeadband) { + if (isValidValue) { + // Set last value + if (i.current.hasLastValue()) { + i.current.setLastValue( value.getBinding(), value.getValue() ); + } - if (isValidValue) { - // Set last value - if (i.current.hasLastValue()) { - i.current.setLastValue( value.getBinding(), value.getValue() ); - } + // Add sum + if (i.current.hasAvg() && i.isNumeric && !isNanValue && !restep) { + double duration = (currentTime - i.itemState.firstTime); + if(duration < 1e-9) { + i.current.setAvg( Bindings.DOUBLE, 0.0 ); + } else { + i.current.setAvg( Bindings.DOUBLE, i.itemState.sum / duration); + } + } - // Add sum - if (i.current.hasAvg() && i.isNumeric && !isNanValue && !restep) { - double duration = (currentTime - i.itemState.firstTime); - if(duration < 1e-9) { - i.current.setAvg( Bindings.DOUBLE, 0.0 ); - } else { - i.current.setAvg( Bindings.DOUBLE, i.itemState.sum / duration); + // Update min-max + if (i.current.hasMin() && i.isNumeric && !isNanValue) { + Binding minBinding = i.current.getMinBinding(); + Object prevMinValue = i.current.getMin(); + Object currentValueWithMinBinding = value.getValue( minBinding ); + int diff = minBinding.compare( prevMinValue, currentValueWithMinBinding ); + if (diff>0) i.current.setMin( minBinding, currentValueWithMinBinding ); + } + if (i.current.hasMax() && i.isNumeric && !isNanValue) { + Binding maxBinding = i.current.getMaxBinding(); + Object prevMaxValue = i.current.getMax(); + Object currentValueWithMaxBinding = value.getValue( maxBinding ); + int diff = maxBinding.compare( prevMaxValue, currentValueWithMaxBinding ); + if (diff<0) i.current.setMax( maxBinding, currentValueWithMaxBinding ); } - } - // Update min-max - if (i.current.hasMin() && i.isNumeric && !isNanValue) { - Binding minBinding = i.current.getMinBinding(); - Object prevMinValue = i.current.getMin(); - Object currentValueWithMinBinding = value.getValue( minBinding ); - int diff = minBinding.compare( prevMinValue, currentValueWithMinBinding ); - if (diff>0) i.current.setMin( minBinding, currentValueWithMinBinding ); - } - if (i.current.hasMax() && i.isNumeric && !isNanValue) { - Binding maxBinding = i.current.getMaxBinding(); - Object prevMaxValue = i.current.getMax(); - Object currentValueWithMaxBinding = value.getValue( maxBinding ); - int diff = maxBinding.compare( prevMaxValue, currentValueWithMaxBinding ); - if (diff<0) i.current.setMax( maxBinding, currentValueWithMaxBinding ); + // Update median + if (i.current.hasMedian() && i.isNumeric && !isNanValue) { + Double median = i.itemState.median.getMedian(); + i.current.setMedian( Bindings.DOUBLE, median); + } + } else { + i.current.setValueNull(); } - // Update median - if (i.current.hasMedian() && i.isNumeric && !isNanValue) { - Double median = i.itemState.median.getMedian(); - i.current.setMedian( Bindings.DOUBLE, median); - } - } else { - i.current.setValueNull(); - } - - // Add count - if (i.current.hasCount()) { - i.current.setCount( i.itemState.count ); + // Add count + if (i.current.hasCount()) { + i.current.setCount( i.itemState.count ); + } } // Write entry to file stream // if (i.current.getTimeDouble()<0) // System.err.println("Error sample "+i.current.getBinding().toString(i.current.getSample())); i.stream.setNoflush( i.stream.size()-1, i.binding, i.current.getSample() ); + //System.err.println(i.itemState.id + " update " + i.current.getSample()); } if (condition) { @@ -923,6 +925,7 @@ public class CollectorImpl implements Collector { // Add the band to the file stream i.stream.addNoflush( i.binding, i.current.getSample() ); + //System.err.println(i.itemState.id + " add " + i.current.getSample()); } -- 2.47.1