Show
Ignore:
Timestamp:
09/25/09 14:02:04 (3 years ago)
Author:
apdavison
Message:

Modified the mapping of cell id to image position for plotting activity maps/movies.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/visualization/__init__.py

    r416 r436  
    103103        return self.t, numpy.sin(self.t + self.phase) 
    104104 
    105 def xy2ij(coordinates): 
     105def xy2ij(coordinates, height): 
    106106    """ 
    107107    Generally, we use (x,y) coordinates, but since arrays use matrix coordinates, 
     
    109109    """ 
    110110    assert len(coordinates) == 2 
    111     return (coordinates[1], coordinates[0]) 
     111    x,y = coordinates 
     112    j = x 
     113    i = height - 1 - y 
     114    return (i,j) 
    112115 
    113116class ActivityMap(object): 
     
    122125            raise Exception("Dimensions of the population are not defined ! Set spikelist.dims") 
    123126         
    124         self.time, self.pos = self.spikelist.convert("times, ids") 
     127        self.time, self.ids = self.spikelist.convert("times, ids") 
    125128        # We sort the spikes to allow faster process later 
    126129        sort_idx = self.time.ravel().argsort(kind="quicksort") 
    127130        self.time = self.time[sort_idx] 
    128         self.pos = self.pos[sort_idx] 
    129         self.idx = 0 
    130         self.max_idx = len(self.time)-1 
     131        self.ids = self.ids[sort_idx] 
     132        self.i = 0 
     133        self.max_i = len(self.time)-1 
    131134        self.t_start = 0 
    132135         
    133136    def next_frame(self): 
    134137        spk = self.spikelist 
    135         activity_map = numpy.zeros(xy2ij(spk.dimensions)) 
    136          
    137         while ((self.idx < self.max_idx) and (self.time[self.idx] < self.t_start + self.frame_duration)): 
    138             addr = spk.id2position(self.pos[self.idx]) 
    139             activity_map[xy2ij(addr)] += 1 
    140             self.idx += 1 
     138        activity_map = numpy.zeros(spk.dimensions) 
     139        h,w = spk.dimensions 
     140        id_offset = min(spk.id_list()) 
     141        while (self.i < self.max_i) and (self.time[self.i] < self.t_start + self.frame_duration): 
     142            xy = spk.id2position(self.ids[self.i] - id_offset)  
     143            activity_map[xy2ij(xy, h)] += 1 
     144            self.i += 1 
    141145        self.t_start += self.frame_duration 
    142         #logging.debug("next_frame: idx=%d, t_start=%g, max_idx=%d, time[idx]=%g" % (self.idx, self.t_start, self.max_idx, self.time[self.idx])) 
     146        #logging.debug("next_frame: i=%d, t_start=%g, max_i=%d, time[i]=%g" % (self.i, self.t_start, self.max_i, self.time[self.i])) 
    143147        activity_map *= 1000.0/self.frame_duration # convert to spikes/second     
    144148        return [activity_map]