def prada1(self,window=None,granularity=1.2,bins=20,ybins=10,segment=None,delta=None,clusters=True,verbose=False): if self.dimensions!=1: print '# Method not implemented yet for more than 1D.' return bins,mmx,mmn,delta=pyn_math.parameters_bins(self.traj,bins,segment,delta) rv_min=0 rv_max=0 if mmn>self.traj.min(): rv_min=1 bins+=1 if mmx<self.traj.max(): rv_max=1 bins+=1 if verbose: if rv_min: print '# Extra node for x <', mmn if rv_max: print '# Extra node for x >', mmx traj_aux=f_kin_anal.prada1(ybins,bins,mmn,mmx,delta,rv_min,rv_max,self.traj,window,self.particles,self.frames) ranges=pyn_math.build_ranges(traj_aux) self.network,self.traj_nodes=kinetic_network(traj_aux,ranges=ranges,traj_out=True,verbose=verbose) del(traj_aux) self.__offset__=window if clusters: self.network.symmetrize(new=False,verbose=verbose) self.network.mcl(granularity=granularity,pruning=True,verbose=verbose) num_nodes=self.network.num_nodes aux_list=numpy.empty(num_nodes,dtype=int,order='F') for ii in range(num_nodes): aux_list[ii]=self.network.node[ii].cluster new_num_frames=self.traj_nodes.shape[0] self.traj_clusters=f_kin_anal.trajnodes2trajclusters(aux_list,self.traj_nodes,num_nodes,new_num_frames,self.particles) del(num_nodes,new_num_frames,aux_list) self.__type_clusters__='prada1'
def prada2(self,window=None,granularity=1.2,bins=10,ybins=10,sbins=10,segment=None,delta=None,clusters=True,verbose=False): ref_max=self.traj.max() ref_min=self.traj.min() if segment==None: opt_range=0 mmx=ref_max mmn=ref_min else: opt_range=1 mmn=segment[0] mmx=segment[1] if delta!=None: opt=1 else: delta=1.0 # Its given by gannas function opt=2 bins,mmx,mmn,delta=pyn_math.parameters_bins(opt_range,opt,bins,mmn,mmx,delta) traj_aux=f_kin_anal.prada2(ybins,sbins,bins,mmn,mmx,delta,self.traj,window,self.particles,self.frames) ranges=pyn_math.build_ranges(traj_aux) self.network,self.traj_nodes=kinetic_network(traj_aux,ranges=ranges,traj_out=True,verbose=False) del(traj_aux) self.__offset__=window if clusters: self.network.symmetrize(new=False,verbose=verbose) self.network.mcl(granularity=granularity,pruning=True,verbose=verbose) num_nodes=self.network.num_nodes aux_list=numpy.empty(num_nodes,dtype=int,order='F') for ii in range(num_nodes): aux_list[ii]=self.network.node[ii].cluster new_num_frames=self.traj_nodes.shape[0] self.traj_clusters=f_kin_anal.trajnodes2trajclusters(aux_list,self.traj_nodes,num_nodes,new_num_frames,self.particles,self.dimensions) del(num_nodes,new_num_frames,aux_list) self.__type_clusters__='prada2'
def kinetic_network(self,traj=None,ranges=None,bins=None,labels=True,verbose=False): if traj in ['CLUSTERS','Clusters','clusters']: if type(self.traj_clusters) not in [numpy.ndarray]: self.traj_clusters=numpy.array(self.traj_clusters,order="Fortran") self.network_clusters=kinetic_network(self.traj_clusters,ranges=[self.traj_clusters.min(),self.traj_clusters.max()],verbose=verbose) return elif traj in ['NODES','Nodes','nodes']: if type(self.traj_nodes) not in [numpy.ndarray]: self.traj_nodes=numpy.array(self.traj_nodes,order="Fortran") self.network=kinetic_network(self.traj_nodes,ranges=[self.traj_nodes.min(),self.traj_nodes.max()],verbose=verbose) return else: self.traj=pyn_math.standard_traj(self.traj,particles=self.particles,dimensions=self.dimensions) if ranges==None: ranges=pyn_math.build_ranges(self.traj) else: ranges=pyn_math.standard_ranges(ranges) self.network,self.traj_nodes=kinetic_network(self.traj,ranges=ranges,bins=bins,traj_out=True,labels=labels,verbose=verbose) return
def prada1_shell(self,window=None,granularity=1.2,bins=20,ybins=10,segment=None,delta=None,extra_min=False,extra_max=False,\ ram=4,increment=1,clusters=True,verbose=False): if self.dimensions!=1: print '# Method not implemented yet for more than 1D.' return bins,mmx,mmn,delta=pyn_math.parameters_bins(False,bins,segment,delta) rv_min=0 rv_max=0 if extra_min: rv_min=1 bins+=1 if extra_max: rv_max=1 bins+=1 if verbose: if rv_min: print '# Extra node for x <', mmn if rv_max: print '# Extra node for x >', mmx if not self.__tr_mode_in_file__: '# Error: the trajectory must be in a file' return self.network=network(kinetic=True,verbose=False) self.file_traj.open() mmram=ram*1024*1024*1024 iterations=int(mmram/(self.particles*bins*8)) b_frame=window*increment e_frame=self.file_traj.frames-1-window*increment first_period=1 salida=1 if (b_frame+iterations*increment)>e_frame: iterations=((e_frame-b_frame)/increment) while (iterations>0): print b_frame+iterations*increment traj_aux=f_kin_anal.prada1_infile(self.file_traj.unit,ybins,bins,segment[0],delta,rv_min,rv_max,\ b_frame,iterations,increment,window,self.particles,self.dimensions) ranges=pyn_math.build_ranges(traj_aux) network_per=kinetic_network(traj_aux,ranges=ranges,traj_out=False,verbose=False) self.network.merge_net(network_per,verbose=True) del(traj_aux) del(network_per) b_frame+=iterations*increment if (b_frame+iterations*increment)>e_frame: iterations=((e_frame-b_frame)/increment) # cerrar unidad self.file_traj.close() self.__offset__=window if clusters: print '# Entra a clusters' self.network.symmetrize(new=False,verbose=verbose) self.network.mcl(granularity=granularity,pruning=True,verbose=verbose) #num_nodes=self.network.num_nodes #aux_list=numpy.empty(num_nodes,dtype=int,order='F') #for ii in range(num_nodes): # aux_list[ii]=self.network.node[ii].cluster # #new_num_frames=self.traj_nodes.shape[0] #self.traj_clusters=f_kin_anal.trajnodes2trajclusters(aux_list,self.traj_nodes,num_nodes,new_num_frames,self.particles) # #del(num_nodes,new_num_frames,aux_list) self.__type_clusters__='prada1'