Browse Source

prep: only process intervals present in both raw & sinefit

tags/nilmtools-1.4.2^0
Jim Paris 11 years ago
parent
commit
6090dd6112
5 changed files with 24 additions and 7 deletions
  1. +2
    -1
      Makefile
  2. +1
    -1
      README.txt
  3. +6
    -2
      nilmtools/filter.py
  4. +14
    -2
      nilmtools/prep.py
  5. +1
    -1
      setup.py

+ 2
- 1
Makefile View File

@@ -46,7 +46,8 @@ test_prep: /tmp/raw.dat
nilmtool create /test/sinefit float32_3 nilmtool create /test/sinefit float32_3
nilmtool create /test/prep float32_8 nilmtool create /test/prep float32_8
nilmtool insert -s '@0' -t -r 8000 /test/raw /tmp/raw.dat nilmtool insert -s '@0' -t -r 8000 /test/raw /tmp/raw.dat
nilmtools/sinefit.py -a 0.5 -c 1 /test/raw /test/sinefit
nilmtools/sinefit.py -a 0.5 -c 1 -s '@0' -e '@5000000' /test/raw /test/sinefit
nilmtools/prep.py -c 2 /test/raw /test/sinefit /test/prep
nilmtools/prep.py -c 2 /test/raw /test/sinefit /test/prep nilmtools/prep.py -c 2 /test/raw /test/sinefit /test/prep
nilmtool extract -s min -e max /test/prep | head -20 nilmtool extract -s min -e max /test/prep | head -20




+ 1
- 1
README.txt View File

@@ -8,7 +8,7 @@ Prerequisites:
sudo apt-get install python2.7 python2.7-dev python-setuptools sudo apt-get install python2.7 python2.7-dev python-setuptools
sudo apt-get install python-numpy python-scipy python-daemon sudo apt-get install python-numpy python-scipy python-daemon


nilmdb (1.8.1+)
nilmdb (1.8.5+)


Install: Install:




+ 6
- 2
nilmtools/filter.py View File

@@ -316,7 +316,8 @@ class Filter(object):
self._client_dest.stream_update_metadata(self.dest.path, data) self._client_dest.stream_update_metadata(self.dest.path, data)


# The main filter processing method. # The main filter processing method.
def process_numpy(self, function, args = None, rows = 100000):
def process_numpy(self, function, args = None, rows = 100000,
intervals = None):
"""Calls process_numpy_interval for each interval that currently """Calls process_numpy_interval for each interval that currently
exists in self.src, but doesn't exist in self.dest. It will exists in self.src, but doesn't exist in self.dest. It will
process the data in chunks as follows: process the data in chunks as follows:
@@ -325,6 +326,9 @@ class Filter(object):
corresponding to the data. The data is converted to a Numpy corresponding to the data. The data is converted to a Numpy
array in chunks of 'rows' rows at a time. array in chunks of 'rows' rows at a time.


If 'intervals' is not None, process those intervals instead of
the default list.

'function' should be defined as: 'function' should be defined as:
# def function(data, interval, args, insert_func, final) # def function(data, interval, args, insert_func, final)


@@ -358,7 +362,7 @@ class Filter(object):
maxrows = rows) maxrows = rows)
inserter_func = functools.partial(inserter, self.dest.path) inserter_func = functools.partial(inserter, self.dest.path)


for interval in self.intervals():
for interval in (intervals or self.intervals()):
print "Processing", interval.human_string() print "Processing", interval.human_string()
process_numpy_interval(interval, extractor_func, inserter_func, process_numpy_interval(interval, extractor_func, inserter_func,
rows * 3, function, args) rows * 3, function, args)


+ 14
- 2
nilmtools/prep.py View File

@@ -12,6 +12,7 @@ import scipy.fftpack
import scipy.signal import scipy.signal
#from matplotlib import pyplot as p #from matplotlib import pyplot as p
import bisect import bisect
from nilmdb.utils.interval import Interval


def main(argv = None): def main(argv = None):
# Set up argument parser # Set up argument parser
@@ -82,9 +83,20 @@ def main(argv = None):
"prep_column": args.column, "prep_column": args.column,
"prep_rotation": repr(rotation) }) "prep_rotation": repr(rotation) })


# Run the processing function on all data
# Find the intersection of the usual set of intervals we'd filter,
# and the intervals actually present in sinefit data. This is
# what we will process.
filter_int = f.intervals()
sinefit_int = ( Interval(start, end) for (start, end) in
client_sinefit.stream_intervals(
args.sinepath, start = f.start, end = f.end) )
intervals = nilmdb.utils.interval.intersection(filter_int, sinefit_int)

# Run the process (using the helper in the filter module)
f.process_numpy(process, args = (client_sinefit, sinefit.path, args.column, f.process_numpy(process, args = (client_sinefit, sinefit.path, args.column,
args.nharm, rotation, args.nshift))
args.nharm, rotation, args.nshift),
intervals = intervals)



def process(data, interval, args, insert_function, final): def process(data, interval, args, insert_function, final):
(client, sinefit_path, column, nharm, rotation, nshift) = args (client, sinefit_path, column, nharm, rotation, nshift) = args


+ 1
- 1
setup.py View File

@@ -61,7 +61,7 @@ setup(name='nilmtools',
long_description = "NILM Database Tools", long_description = "NILM Database Tools",
license = "Proprietary", license = "Proprietary",
author_email = 'jim@jtan.com', author_email = 'jim@jtan.com',
install_requires = [ 'nilmdb >= 1.8.1',
install_requires = [ 'nilmdb >= 1.8.5',
'numpy', 'numpy',
'scipy', 'scipy',
'python-daemon >= 1.5', 'python-daemon >= 1.5',


Loading…
Cancel
Save