Changeset 432
- Timestamp:
- 08/26/09 15:38:17 (3 years ago)
- Location:
- branches/interval/src/signals
- Files:
-
- 2 modified
-
analogs.py (modified) (17 diffs)
-
intervals.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/interval/src/signals/analogs.py
r431 r432 31 31 """ 32 32 33 import os, re, numpy, copy 33 import os, re, numpy, copy, logging 34 34 from NeuroTools import check_dependency, check_numpy_version, analysis 35 35 from NeuroTools.io import * … … 349 349 t_min_l = numpy.floor(t_min/self.dt) 350 350 t_max_l = numpy.floor(t_max/self.dt) 351 result = numpy.zeros((t_min_l+t_max_l), numpy.float32)351 352 352 events_interval = copy.copy(self.interval) 353 353 events_interval.offset_start(t_min, colapse=True) … … 355 355 events = events_interval.slice_times(events) 356 356 assert len(events) > 0, "the PSTH windows [event-t_min, event+t_max] should be included within the spike train interval" 357 358 if average: 359 result = numpy.zeros((t_min_l+t_max_l), numpy.float32) 360 else: 361 result = [] 362 357 363 for ev in events: 358 364 ev = numpy.floor((ev - self.interval.t_start())/self.dt) 359 365 if average: 360 result += self.signal[( spike-t_min_l):(spike+t_max_l)]366 result += self.signal[(ev-t_min_l):(ev+t_max_l)] 361 367 else: 362 result.append(self.signal[( spike-t_min_l):(spike+t_max_l)])368 result.append(self.signal[(ev-t_min_l):(ev+t_max_l)]) 363 369 Nspikes += 1 364 370 if average: … … 449 455 self.analog_signals = {} 450 456 451 signals = numpy.array(signals) 457 signals = numpy.array(signals) 452 458 for id in id_list: 453 459 signal = signals[[signals[:,0] == id]][:,1] … … 455 461 if len(signal) > 0: 456 462 self.analog_signals[id] = AnalogSignal(signal, self.dt) 457 self.interval = self.create_intervals(t_start, t_stop, interval) 463 464 self.interval = self.create_intervals(t_start, t_stop, interval) 458 465 self.init_times() 466 459 467 if len(self) > 0: 460 468 for id in self.id_list(): … … 462 470 self.analog_signals[id].init_times() 463 471 self.init_times() 464 465 #if len(self.id_list()) == 0 : 466 #logging.warning("id_list is empty") 467 #self.signal_length = 0 472 self.times = self.interval.time_axis() 468 473 469 474 def create_intervals(self, t_start=None, t_stop=None, interval=None): … … 483 488 else: 484 489 if t_start is None and t_stop is None : 485 print "AnalogSignal interval derived from dt"490 logging.info("AnalogSignal interval derived from dt") 486 491 interval_out = Interval([[0,max([len(signal),1])*self.dt]]) 487 492 elif t_start is None and t_stop is not None: … … 489 494 elif t_start is not None and t_stop is not None: 490 495 if (t_stop - t_start)/self.dt != len(signal): 491 print 't_start/t_stop and dt are not consistent with len(signal)'496 logging.info("t_start/t_stop and dt are not consistent with len(signal)") 492 497 interval_out = Interval([[t_start, t_stop]]) 493 498 elif t_start is not None and t_stop is None: … … 520 525 """ 521 526 # Maybe not optimal, should be optimized 522 aslist = AnalogSignalList([], [], self.dt, self.t_start, self.t_stop, self.dimensions) 523 for id in self.id_list(): 524 aslist.append(id, self.analog_signals[id]) 525 return aslist 527 return copy.deepcopy(self) 526 528 527 529 def __getitem__(self, id): … … 542 544 self.interval = self.create_intervals(t_start=None, t_stop=None, interval=val.interval) 543 545 self.t_start = val.t_start 544 self.t_stop = val.t_stop546 self.t_stop = val.t_stop 545 547 self.analog_signals[i] = val 546 548 … … 585 587 self.init_times() 586 588 time_pavement = numpy.arange(self.t_start, self.t_stop, self.dt) 587 return SpikeTrain(time_pavement, interval=self.interval).spike_times589 return self.interval.slice_times(time_pavement) 588 590 589 591 def id_offset(self, offset): … … 623 625 """ 624 626 id_list = self.__sub_id_list(id_list) 625 new_AnalogSignalList = AnalogSignalList([], [], self.dt, self.t_start, self.t_stop, self. dimensions)627 new_AnalogSignalList = AnalogSignalList([], [], self.dt, self.t_start, self.t_stop, self.interval, self.dimensions) 626 628 627 629 for id in id_list: … … 773 775 std 774 776 """ 775 result = [] 776 for i in range(len(self.interval)) : 777 result.append(numpy.zeros(int((self.interval[i][1] - self.interval[i][0])/self.dt),float)) 778 for id in self.id_list(): 779 result[i] += self.analog_signals[id].signal[i] 780 return numpy.array(result)/len(self) 777 result = numpy.zeros(len(self.times), float) 778 for id in self.id_list(): 779 result += self.analog_signals[id].signal 780 result /= len(self) 781 return AnalogSignal(numpy.array(result), dt=self.dt, interval=self.interval) 781 782 782 783 def std(self): … … 792 793 mean 793 794 """ 794 result = [] 795 for i in range(len(self.interval)) : 796 result.append(numpy.zeros((int((self.interval[i][1] - self.interval[i][0])/self.dt),len(self.id_list())),float))797 798 for j in range(len(self.id_list())): 799 result[i][j,:] = self.analog_signals[j].signal[i] 800 return [numpy.std(result[i], axis=0) for i in range(len(self.interval))] 795 mu = self.mean() 796 result = numpy.zeros(len(self.times), float) 797 for id in self.id_list(): 798 result += (self.analog_signals[id].signal - mu.signal)**2 799 result = numpy.sqrt(result)/len(self) 800 return AnalogSignal(numpy.array(result), dt=self.dt, interval=self.interval) 801 801 802 802 803 def event_triggered_average(self, eventdict, events_ids = None, analogsignal_ids = None, average = True, t_min = 0, t_max = 100, ylim = None, display = False, mode = 'same', kwargs={}): … … 985 986 986 987 987 def load_conductancelist(user_file, id_list=None, dt=None, t_start=None, t_stop=None, dims=None):988 def load_conductancelist(user_file, id_list=None, dt=None, t_start=None, t_stop=None, interval=None, dims=None): 988 989 """ 989 990 Returns TWO ConductanceList objects from a file. One for the excitatory and the other for … … 1016 1017 1017 1018 1018 def load_vmlist(user_file, id_list=None, dt=None, t_start=0, t_stop=None, dims=None):1019 def load_vmlist(user_file, id_list=None, dt=None, t_start=0, t_stop=None, interval=None, dims=None): 1019 1020 """ 1020 1021 Returns a VmList object from a file. If the file has been generated by PyNN, … … 1042 1043 1043 1044 1044 def load_currentlist(user_file, id_list=None, dt=None, t_start=None, t_stop=None, dims=None):1045 def load_currentlist(user_file, id_list=None, dt=None, t_start=None, t_stop=None, interval=None, dims=None): 1045 1046 """ 1046 1047 Returns a CurrentList object from a file. If the file has been generated by PyNN, -
branches/interval/src/signals/intervals.py
r431 r432 46 46 47 47 def __len__(self): 48 return shape(self.interval_data)[0]48 return numpy.shape(self.interval_data)[0] 49 49 50 50 def __iter__(self):
