[Pybrainsim-activity] SF.net SVN: pybrainsim:[86] trunk/src/Experiment.py
Status: Planning
Brought to you by:
rgoj
From: <rg...@us...> - 2009-08-05 11:59:32
|
Revision: 86 http://pybrainsim.svn.sourceforge.net/pybrainsim/?rev=86&view=rev Author: rgoj Date: 2009-08-05 11:59:20 +0000 (Wed, 05 Aug 2009) Log Message: ----------- * Changes to Experiment class: ** timePoints is now a member of the class ** added baseline and epochDuration as members ** added the findNearestTimeIndex method ** added the getRecordingSlice method ** added the getERP method Modified Paths: -------------- trunk/src/Experiment.py Modified: trunk/src/Experiment.py =================================================================== --- trunk/src/Experiment.py 2009-08-05 11:54:07 UTC (rev 85) +++ trunk/src/Experiment.py 2009-08-05 11:59:20 UTC (rev 86) @@ -27,12 +27,16 @@ from pylab import * class Experiment: - def __init__(self, samplingFrequency = 128, duration = 1, recording = [], stimulusTimes = []): + def __init__(self, samplingFrequency = 128, duration = 1, recording = [], stimulusTimes = [], baseline = 0.1, epochDuration = 0.3): self.samplingFrequency = samplingFrequency self.duration = duration self.recording = recording self.stimulusTimes = stimulusTimes + self.baseline = baseline + self.epochDuration = epochDuration + self.timePoints = list(arange( 1.0/self.samplingFrequency, self.duration + 1.0/self.samplingFrequency, 1.0/self.samplingFrequency )) + def setSamplingFrequency(self, samplingFrequency): self.samplingFrequency = samplingFrequency @@ -52,14 +56,44 @@ return self.recording def setStimulusTimes(self, stimulusTimes): + #TODO: If dimension of stimulusTimes is 1... it needs to be two :/ self.stimulusTimes = stimulusTimes def getStimulusTimes(self): return self.stimulusTimes + def findNearestTimeIndex(self, timePoint): + """ Returns the index of the closest time point within timePoints that + is smaller than the given value timePoint""" + if timePoint in self.timePoints: + return self.timePoints.index(timePoint) + else: + for i in range(len(self.timePoints)): + if timePoint < self.timePoints[i]: + if timePoint > self.timePoints[i-1]: + return i-1 + + def getRecordingSlice(self, sliceStart, sliceDuration, sliceChannel=0): + startIndex = self.findNearestTimeIndex(sliceStart) + endIndex = self.findNearestTimeIndex(sliceStart + sliceDuration) + #print str(startIndex) + " " + str(endIndex) + return self.recording[sliceChannel][startIndex:endIndex] + + def getERP(self, stimulusNumber=0): + stimuli = self.stimulusTimes[stimulusNumber] + epochs = [] + for i in range(len(stimuli)): + epochs.append(self.getRecordingSlice(stimuli[i] - self.baseline, self.epochDuration)) + + average = list(zeros(len(epochs[0]))) + for i in range(len(epochs)): + for j in range(len(epochs[i])): + average[j] += epochs[i][j] + + return average + def plotRecording(self): - timePoints = arange( 1.0/self.samplingFrequency, self.duration + 1.0/self.samplingFrequency, 1.0/self.samplingFrequency ) - plot(timePoints, self.recording[0], linewidth=1.0) + plot(self.timePoints, self.recording[0], linewidth=1.0) xlabel('Time (s)') ylabel('Amplitude') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |