From bd126a430db0ff7e25ce59530ee631f32130290e Mon Sep 17 00:00:00 2001 From: Marc Bonnici Date: Fri, 18 Aug 2017 09:53:27 +0100 Subject: [PATCH] Instruments/EnergyMeas: Adds support for DerivedMeasurement from devlib Delvib now is capable of performing postprocessing of MeasurementCSV files, instead of calculating additional metrics in WA this will be performed externally. Currently support has been added for calculating average power and cumulative energy. --- wa/instrumentation/energy_measurement.py | 27 +++++------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/wa/instrumentation/energy_measurement.py b/wa/instrumentation/energy_measurement.py index 301c2204..b1670319 100644 --- a/wa/instrumentation/energy_measurement.py +++ b/wa/instrumentation/energy_measurement.py @@ -17,13 +17,13 @@ # pylint: disable=W0613,E1101 from __future__ import division import os -from collections import defaultdict from devlib.instrument import CONTINUOUS from devlib.instrument.energy_probe import EnergyProbeInstrument from devlib.instrument.daq import DaqInstrument from devlib.instrument.acmecape import AcmeCapeInstrument from devlib.utils.misc import which +from devlib.derived.derived_measurements import DerivedEnergyMeasurements from wa import Instrument, Parameter from wa.framework import pluginloader @@ -253,24 +253,7 @@ class EnergyMeasurement(Instrument): self.extract_metrics(context) def extract_metrics(self, context): - measurements = self.measurement_csv.itermeasurements() - energy_results = defaultdict(dict) - power_results = defaultdict(int) - - for count, row in enumerate(measurements): - for entry in row: - channel = entry.channel - if channel.kind == 'energy': - if count == 0: - energy_results[channel.site]['start'] = entry.value - else: - energy_results[channel.site]['end'] = entry.value - elif channel.kind == 'power': - power_results[channel.site] += entry.value - - for site in energy_results: - total_energy = energy_results[site]['end'] - energy_results[site]['start'] - context.add_metric('{}_energy'.format(site), total_energy, 'joules') - for site in power_results: - power = power_results[site] / count + 1 #pylint: disable=undefined-loop-variable - context.add_metric('{}_power'.format(site), power, 'watts') + derived_measurements = DerivedEnergyMeasurements.process(self.measurement_csv) + for meas in derived_measurements: + name = '{}_{}'.format(meas.channel.site, meas.channel.name) + context.add_metric(name, meas.value, meas.units)