def plotallpnts(self, event): # wxGlade: MyFrame.<event_handler> print "Event handler `plotallpnts' not implemented" r = self.postcheck() if r == -1: #nothing posted return print 'plotting ',self.datapdf self.p = pdf.read(self.datapdf[0]) print self.p ind=hstack([self.p.hs.index_lpa,self.p.hs.index_rpa,self.p.hs.index_nasion]).reshape(3,3) s=sensors.locations(self.datapdf[0]) plotvtk.display(self.p.hs.hs_point, s.megchlpos, ind)
def __init__(self, path2pdf, leadfield, weight): '''leadfield structured, grid X channels X 3''' self.ext = 'pymwf' reducedrank=2; ts = time() if len(weight.shape) == 1: #check winv and if 1D make 2D. weight=array([weight]) if size(weight,0) != size(leadfield,1): #need to reshape weight to match leadfields weight = weight.transpose() print 'weight reshaped to match leadfields' if size(weight,0) != size(leadfield,1): #something wrong, exit print 'something wrong... weight and leadfields dont match' return self.winv = winv = copy(weight) #should be channels X numofweights Lc=zeros((size(leadfield,1), size(leadfield,0)*2)); for d in range(0, size(leadfield, 0)): #for each gridpoint u, s, vh = linalg.svd(leadfield[d,:,:]); v = vh.T self.u=u self.s=s self.v=v Lc[:,((d+1-1)*2):(d+1)*2] = u[:,0:2]; self.Lc=Lc s=sensors.locations(path2pdf) #get sensor pos chanlocs=s.megchlpos chanlocsright = chanlocs[chanlocs[:,1] < 0] chanlocsleft = chanlocs[chanlocs[:,1] > 0] for i in range(0, size(winv,1)): #remove mean from matrix winv[:,i] = winv[:,i] - mean(winv[:,i]) self.winv = winv self.winv_std = winv_std = sqrt(sum(winv**2,0)); self.fn = fn=arange(size(leadfield,0)); self.f = f = fn self.psi_reconstruct = psi_reconstruct = zeros((len(fn)*2,len(f))); pbar = progressbar.ProgressBar().start() for i in range(0,len(f)): L = Lc[:,(i+1-1)*2+1-1:(i+1)*2]; #check indicies self.L=L for j in range(0,size(L,1)): L[:,j] = L[:,j] - mean(L[:,j]); self.psi_tmp = psi_tmp = zeros([2,size(winv,1)]); self.corr_tmp = corr_tmp = zeros([size(winv,1)]); for j in range(0, size(winv,1)): #[Q,V] = linalg.eig(dot(dot(L.transpose(),winv[:,j]).reshape([2,1]),dot(winv[:,j].transpose(),L).reshape([1,2])),dot(L.transpose(),L)); # maximize normalized correlation w1 = dot(dot(L.transpose(),winv[:,j]).reshape([2,1]),dot(winv[:,j].transpose(),L).reshape([1,2])) w2 = dot(L.transpose(),L) self.w1 = w1 self.w2 = w2 self.A = A = linalg.eig(w1)#,w2); # maximize normalized correlation #[val,pos] = max(diag(V)); self.pos = pos = A[0].argmax() self.poscopy = pos Q = A[1] if dot(Q[:,pos].transpose(),dot(L.transpose(),winv[:,j])) < 0: Q[:,pos] = - Q[:,pos]; # correct the sign self.Q = Q self.psi_tmp[:,j] = psi_tmp[:,j] = Q[:,pos]; self.L_std = L_std = sqrt(sum(dot(L,Q[:,pos])**2,axis=0)); corr_tmp[j] = dot(dot(Q[:,pos].transpose(),L.transpose()),winv[:,j])/dot(L_std,winv_std[j]); self.corr_tmp = corr_tmp self.pos = pos = corr_tmp.argmax(); prange = array([0,2]) ##print 'working on', i+1, 'out of', size(f), 'gridpoints' psi_reconstruct[prange[0]+(i+1-1)*2:prange[1]+(i+1-1)*2,i] = psi_tmp[:,pos]; self.psi_reconstruct = psi_reconstruct sys.stdout.flush() pbar.update((float(i)/float(len(f)))*100) sys.stdout.flush() print('please wait, need to do some heavy number crunching');sys.stdout.flush() self.L = L = dot(Lc,psi_reconstruct); for i in range(0,size(L,1)):#remove mean L[:,i] = L[:,i] - mean(L[:,i]) self.L = L #compute standard deviation of each column self.L_std = L_std = sqrt(sum(L**2,0)); #compute absolute value of normalized corrrelation coefficient between columns #corr_mat[:,:] = NaN*ones(size(winv,1),size(leadfield, 0)); self.corr_mat = corr_mat = zeros([size(winv,1),size(leadfield, 0)]); for i in range(0,len(f)): for j in range(0,size(winv,1)): corr_mat[j,f[i]] = (abs(dot(L[:,f[i]].transpose(),winv[:,j]))/dot(L_std[f[i]],winv_std[j])); te = time() print 'elapsed time', te-ts, 'seconds' del self.L, self.Lc, self.psi_reconstruct, self.winv, self.winv_std