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( 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_trajs.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_trajs.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,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_nodes=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_nodes,self.traj_nodes=kinetic_network(self.traj,ranges=ranges,traj_out=True,verbose=verbose) return
def prada1_largo( 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"