Source code for morphforge.traces.eventset
#!/usr/bin/python
# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------
# Copyright (c) 2012 Michael Hull.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# - Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ----------------------------------------------------------------------
import itertools
import numpy as np
from morphforge.constants.standardtags import StandardTags
[docs]class Event(object):
[docs] def __init__(self, time):
time.rescale('ms')
self.time = time
[docs] def get_time(self):
return self.time
[docs]class EventSet(object):
@classmethod
[docs] def combine_sets(cls, eventsets, tags=None, comment=None, name=None):
""" If 'tags' is none, then take 'communal' tags """
# Rewritten on August 2012
if tags is None:
# Find tags common to all sets:
tags = eventsets[0].tags.intersection(*[evset.tags for evset in eventsets])
return EventSet(itertools.chain(*eventsets), tags=tags, comment=comment, name=name)
[docs] def __init__(self, events=None, name=None, comment=None, tags=None,):
#print events, type(events)
if events is None:
events = []
self.events = [(Event(event) if not isinstance(event, Event) else event) for event in events ]
self._tags = set( ( tags if tags is not None else [StandardTags.Event] ) )
self.name = name if name else '<Unnamed EventSet>'
self.comment = comment if comment else "UnknownSrcEventSet"
self._tags.add('Event')
[docs] def __len__(self):
return len(self.events)
[docs] def __getitem__(self, i):
return self.events[i]
[docs] def __iter__(self):
return iter(self.events)
[docs] def add_event(self, ev):
if ev is None:
return
self.events.append(ev)
# Iterators:
@property
def times(self):
for event in self.events:
yield event.get_time()
@property
def tags(self):
return self._tags
[docs] def times_in_np_array_ms(self):
return np.array( [ float(t.rescale('ms') ) for t in self.times] )