class Channel(BaseFile): DataFileName = "data" SegmentMaxLength = 512 * 60 * 3 """Represents a session experiment of a subject in the sense of BIF. Why use uniqueID instead of channel name as a ID reference? Because in some experiments, the experimenter could have more than one data over the same channel in the same session. So, to avoid create a new channel, it would be better to assign a uniqueID reference. Obviously, this is an akward situation. But, the file format need to be standard """ def __init__(self, metadata={}): super(Channel, self).__init__(metadata) self.session = None self.data = None def setData(self, data): if self.data is None: self.data = SegmentedData(self.SegmentMaxLength, self, self.pathname + [self.DataFileName]) self.data.set(data) def getData(self, start=0, end=None): if self.data is None: self.data = SegmentedData(self.SegmentMaxLength, self, self.pathname + [self.DataFileName]) return self.data.get(start, end) def write(self): """Write the content inside the archive provide.""" super(Channel, self).write() self.writeMetadata() def remove(self): """Removes the content inside the archive provide.""" super(Channel, self).remove() self.writeMetadata() def updateHash(self): self.objectHash = self.data.objectHash def defaultMetadataValues(self): """Fills the minimum neccesary metadata values.""" super(Subject, self).defaultMetadataValues() self.metadata.setdefault("manufacturer", "?") self.metadata.setdefault("label", "?") self.metadata.setdefault("unit", "?") self.metadata.setdefault("time-offset", 0) self.metadata.setdefault("impedance", 0) self.metadata.setdefault("sampling-rate", 0) self.metadata.setdefault("filters", []) @property def archiver(self): return self.session.archiver @property def pathname(self): return self.session.pathname + ["CHANNEL-" + self.uniqueID]
def getData(self, start=0, end=None): if self.data is None: self.data = SegmentedData(self.SegmentMaxLength, self, self.pathname + [self.DataFileName]) return self.data.get(start, end)
def setData(self, data): if self.data is None: self.data = SegmentedData(self.SegmentMaxLength, self, self.pathname + [self.DataFileName]) self.data.set(data)