From b9383ec854922b2fd8d40381f701c1736a2fc893 Mon Sep 17 00:00:00 2001 From: XT-Lee <916992126@qq.com> Date: Fri, 17 Feb 2023 12:07:45 +0800 Subject: [PATCH] add modulexx --- README.md | 25 +- data_analysis_cycle.py | 326 +++++++- getDataAndScatter.py | 185 ++++- particle_tracking.py | 74 +- points_analysis_2D.py | 752 ++++++++++++++++--- symmetry_transformation/pin_seed_oop.py | 27 +- symmetry_transformation/simple_simulation.py | 39 +- workflow_part.py | 197 ++++- 8 files changed, 1435 insertions(+), 190 deletions(-) diff --git a/README.md b/README.md index 55b66df..f9943c4 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,31 @@ ## description: - this is just a library for me to record the codes used to finish my Ph.D project. - the repository has a series of workflows to operate hoomd-blue; -- and has a library to proceed trajectories of particles in 2D and get their structural or dynamic properties. +- and has a library to proceed trajectories of particles in 2D and get their structural or dynamic properties ## log: -- 20230116 edit data_analysis.txyz_to_bond_plot, +- 20230216 add workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m_random_oop + add mysql_data_processor in getDataAndScatter + add get_string_like_motion_rank in data_analysis_workflow, + add plot_string_like_motion_rank in dynamic_points_analysis_2d + add get_displacement_field_xy_rank in displacemnt_field_2D +- 20230206 seperate draw_bonds_conditional_bond() into two parts( listed as follows) in bond_plot_module in points_analysis_2D + part1, restrict_axis_property() + part2, draw_points_with_conditional_bond() +- 20230131 add workflow_liquid in workflow_part + add init_cut in dynamic_points_analysis_2d.plot_bond_neighbor_change_oop + add __init_state_pin_from_gsd etc in pin_seed_oop + add lattice_constant in coordination_number module in save_from_gsd +- 20230129 edit example in workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m() + pip install latex, code added in bond_plot_module in points_analysis_2D +- 20230119 edit workflow_part.workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m() + edit particle_tracking +- 20230118 edit data_analysis_cycle.data_analysis_workflow.get_displacment_field() + generalize displacment_field_2D.get_displacement_field_xy() to any two frames. + add savetxt function in plot_hist_neighbor_change_event() in points_analysis_2D.dynamic_points_analysis_2d + add check mode in workflow_part.workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m() + add zorder to rank plot object in figure, in +- 20230116 edit data_analysis.txyz_to_bond_plot,bond_plot_module dynamic_points_analysis_2d.plot_bond_neighbor_change_oop, static_points_analysis_2d.draw_bonds_conditional_bond_oop, create class bond_plot_module in points_analysis_2D diff --git a/data_analysis_cycle.py b/data_analysis_cycle.py index c046b4d..92ea1aa 100644 --- a/data_analysis_cycle.py +++ b/data_analysis_cycle.py @@ -704,6 +704,122 @@ def saveIndexPressure(start_index,end_index,k1,step,linear_compression_ratio,see return save_file_name +def save_exp_20230113_6(i,stable=True): + R""" + import data_analysis_cycle as dac + dac.save_exp_20230113_6() + """ + import pandas as pd + import particle_tracking as pt + spe = pt.save_points_from_exp() + path_to_folder = '/home/remote/xiaotian_file/data/20230113' + video_name = 'DefaultVideo_6' + spe.set_worksapce(path_to_folder,video_name) + tsf_filename = 'trap_honeycomb_part.txt' + + #image size + pixel_size = numpy.array([1008,1014]) + pixel_to_um=3.0/32.0 + um_size = pixel_size*pixel_to_um + + #trap location + #adjust coordinations to match particle and traps + #standard_tune, precise_tune + center = numpy.array([48,48])+[10,10] + trap_locate = numpy.array([38.53,-40.92])+numpy.array([13,-11]) + xy_adjust = center+trap_locate + pos,trap_filename = spe.get_trap_positions(tsf_filename,xy_adjust,1,90)# + + import points_analysis_2D as pa + directory = spe.path_to_results+'/' + dataname = video_name + if stable: + txyz = numpy.load(directory+'txyz_stable.npy') + xyi = txyz[i] + + else: + txyz = pd.read_csv(directory+'txyz.csv') + frame_num = txyz['frame'].values.max()+1 + if i<0: + i = frame_num+i + txyz_ith=txyz[txyz['frame']==i] + xyi = txyz_ith[['x','y','z']].values + xyi = xyi*pixel_to_um + a_frame = pa.static_points_analysis_2d(xyi) + + + data_name=dataname + prefix=directory + trap_filename=trap_filename + bond_cut_off=8 + trap_lcr=0.8 + str_index=data_name + png_filename1 = prefix +'bond_hist_index'+str_index+'_'+str(int(i))+'.png' + png_filename2 = prefix +'bond_plot_1st_minima_index'+str_index+'_'+str(int(i))+'.png' + a_frame.get_first_minima_bond_length_distribution(lattice_constant=1,hist_cutoff=bond_cut_off,png_filename=png_filename1)#,png_filename=png_filename1 + a_frame.draw_bonds_conditional_bond_oop(check=[0.4, a_frame.bond_first_minima_left], png_filename=png_filename2, + x_unit='(um)', + LinearCompressionRatio=trap_lcr, trap_filename=trap_filename,axis_limit=um_size) + #dpa = pa.dynamic_points_analysis_2d(txyz,'exp') + #dpa.plot_bond_neighbor_change_oop(data_name=dataname,prefix=directory,final_cut=True,#init_cut=True,#final_cut=True, + # trap_filename=trap_filename,bond_cut_off=10, + # trap_lcr=0.8) +def save_exp_20230113_8(i,stable=True): + R""" + import data_analysis_cycle as dac + dac.save_exp_20230113_6() + """ + import pandas as pd + import particle_tracking as pt + spe = pt.save_points_from_exp() + path_to_folder = '/home/remote/xiaotian_file/data/20230113' + video_name = 'DefaultVideo_8' + spe.set_worksapce(path_to_folder,video_name) + tsf_filename = 'trap_kagome_part.txt' + + #image size + pixel_size = numpy.array([1024,1024]) + pixel_to_um=3.0/32.0 + um_size = pixel_size*pixel_to_um + + #trap location + #adjust coordinations to match particle and traps + #standard_tune, precise_tune + center = numpy.array([48,48])+[10,10] + trap_locate = numpy.array([30.55,-38.26])+numpy.array([0.5,-9]) + xy_adjust = center+trap_locate + pos,trap_filename = spe.get_trap_positions(tsf_filename,xy_adjust,1,90)# + + import points_analysis_2D as pa + directory = spe.path_to_results+'/' + dataname = video_name + if stable: + txyz = numpy.load(directory+'txyz_stable.npy') + xyi = txyz[i] + + else: + txyz = pd.read_csv(directory+'txyz.csv') + frame_num = txyz['frame'].values.max()+1 + if i<0: + i = frame_num+i + txyz_ith=txyz[txyz['frame']==i] + xyi = txyz_ith[['x','y','z']].values + xyi = xyi*pixel_to_um + a_frame = pa.static_points_analysis_2d(xyi) + + + data_name=dataname + prefix=directory + trap_filename=trap_filename + bond_cut_off=8 + trap_lcr=0.88+0.012 + str_index=data_name + png_filename1 = prefix +'bond_hist_index'+str_index+'_'+str(int(i))+'.png' + png_filename2 = prefix +'bond_plot_1st_minima_index'+str_index+'_'+str(int(i))+'.png' + a_frame.get_first_minima_bond_length_distribution(lattice_constant=1,hist_cutoff=bond_cut_off,png_filename=png_filename1)#,png_filename=png_filename1 + a_frame.draw_bonds_conditional_bond_oop(check=[0.4, a_frame.bond_first_minima_left], png_filename=png_filename2, + x_unit='(um)', + LinearCompressionRatio=trap_lcr, trap_filename=trap_filename,axis_limit=um_size) def get_KBT_pressure(file_log): data = numpy.genfromtxt(fname=file_log, skip_header=True) @@ -777,9 +893,6 @@ def rearrange_data(): data_ex[0:sp1[0],3:5]=data1[:,1:3] ''' - - - def readdata(fn): data=numpy.loadtxt(fn) return data @@ -872,7 +985,7 @@ def save_from_gsd(simu_index=None,seed=None,frame_cut=0, psik=False, psik_plot=None, neighbor_cloud=False, - coordination_number=False, + coordination_number=False,lattice_constant=3, coordination_number3_plot=False, bond_plot=False,bond_plot_gr=False,show_traps=False,trap_filename=None,trap_lcr=None, gr=False, @@ -1061,7 +1174,7 @@ def save_from_gsd(simu_index=None,seed=None,frame_cut=0, """ #print('index '+str(i)) #print(snap.particles.position[137]) - a_frame.get_coordination_number_conditional()#cut edge to remove CN012 + a_frame.get_coordination_number_conditional(lattice_constant=lattice_constant)#cut edge to remove CN012 ccn = a_frame.count_coordination_ratio#[time_steps,psi3,psi6] ccn = numpy.transpose(ccn) if not "record_cn" in locals():#check if the variable exists @@ -1215,7 +1328,7 @@ def save_from_gsd(simu_index=None,seed=None,frame_cut=0, plt.plot(record_cn[0:frame_cut,0],record_cn[0:frame_cut,4],label='CN_3') plt.plot(record_cn[0:frame_cut,0],record_cn[0:frame_cut,5],label='CN_4') plt.plot(record_cn[0:frame_cut,0],record_cn[0:frame_cut,6],label='CN_5') - #plt.plot(record_cn[0:frame_cut,0],record_cn[0:frame_cut,7],label='CN_6') + plt.plot(record_cn[0:frame_cut,0],record_cn[0:frame_cut,7],label='CN_6') plt.plot(record_cn[0:frame_cut,0],record_cn[0:frame_cut,8],label='CN_7') #plt.plot(record_cn[0:frame_cut,0],record_cn[0:frame_cut,9],label='CN_8') #plt.plot(record_cn[0:frame_cut,0],record_cn[0:frame_cut,-1],label='CN_9') @@ -1231,11 +1344,18 @@ def save_from_gsd(simu_index=None,seed=None,frame_cut=0, plt.close() -class data_analysis: +class data_analysis_workflow: R""" + simu: select * from pin_hex_to_honeycomb_part_klt_2m where HarmonicK = 700; | SimuIndex | HarmonicK | LinearCompressionRatio | kT | Psi3 | Psi6 | RandomSeed | | 4302 | 700 | 0.81 | 1 | 0.927068 | 0.123686 | 9 | + daw = dac.data_analysis_workflow() + directory,str_simu_index = daw.gsd_to_txyz(simu_index=4302,seed=9,io_only=True) + trap_filename='/home/remote/hoomd-examples_0/testhoneycomb3-8-12-part1' + trap_lcr=0.81 + daw.get_defect_motion(directory,str_simu_index,trap_filename,trap_lcr) + select * from pin_hex_to_honeycomb_klt_2m where HarmonicK = 900; +-----------+-----------+------------------------+------+----------+----------+------------+ @@ -1262,8 +1382,54 @@ class data_analysis: | 4449 | 400 | 0.89 | 1 | 0.0224719 | 0.820225 | 9 | | 4454 | 900 | 0.89 | 1 | 0.0225989 | 0.858757 | 9 | +-----------+-----------+------------------------+------+----------------------+----------------------+------------+ + + Honeycomb part pin precise index5346,5387 + mysql> select * from pin_hex_to_honeycomb_part_klt_2m where SimuIndex =5387; + +-----------+-----------+------------------------+------+----------+----------+------------+ + | SimuIndex | HarmonicK | LinearCompressionRatio | kT | Psi3 | Psi6 | RandomSeed | + +-----------+-----------+------------------------+------+----------+----------+------------+ + | 5387 | 114 | 0.816 | 1 | 0.860764 | 0.191895 | 9 | + | 5346 | 108 | 0.81 | 1 | 0.90035 | 0.170656 | 9 | + +-----------+-----------+------------------------+------+----------+----------+------------+ """ def __init__(self): + R""" + example: + import numpy as np + import data_analysis_cycle as dac + import points_analysis_2D as pa + seed=9 + index_list=np.linspace(5390,5399,10) + lcr_list = np.linspace(0.82,1,10) + kT=1.0 + #print(index_list,lcr_list) + daw = dac.data_analysis_workflow() + for i in range(10): + directory,str_simu_index =daw.gsd_to_txyz(simu_index=index_list[i],io_only=True) + txyz_stable = np.load('/home/remote/Downloads/'+str_simu_index+'/txyz_stable.npy') + dpa = pa.dynamic_points_analysis_2d(txyz_stable) + dpa.plot_trajectory(directory) + dpa.plot_bond_neighbor_change_oop(data_name=str_simu_index,prefix=directory,final_cut=True) + example2: + import numpy as np + seed=9 + index_list=np.linspace(5400,5409,10) + lcr_list = np.linspace(1.1,2,10) + kT=1.0 + #print(index_list,lcr_list) + import data_analysis_cycle as dac + import points_analysis_2D as pa + daw = dac.data_analysis_workflow() + for i in range(10): + directory,str_simu_index =daw.gsd_to_txyz(simu_index=index_list[i],io_only=True)# + txyz = np.load('/home/remote/Downloads/'+str_simu_index+'/txyz.npy') + txyz_stable = np.load('/home/remote/Downloads/'+str_simu_index+'/txyz_stable.npy') + #dpa = pa.dynamic_points_analysis_2d(txyz_stable) + #dpa.plot_trajectory(directory) + dpa = pa.dynamic_points_analysis_2d(txyz) + dpa.plot_bond_neighbor_change_oop(data_name=str_simu_index,prefix=directory,final_cut=True,bond_cut_off=6*lcr_list[i]) + + """ pass def gsd_to_txyz(self,account='remote',simu_index=0,seed=9,io_only=False): @@ -1277,7 +1443,7 @@ def gsd_to_txyz(self,account='remote',simu_index=0,seed=9,io_only=False): directory: (str)directory with '/'; data_name: (str)'index_seed' for example. """ - str_simu_index = str(simu_index)+'_'+str(seed) + str_simu_index = str(int(simu_index))+'_'+str(seed) directory = '/home/'+account+'/Downloads/'+str_simu_index#+'/' #check if the folder exists @@ -1292,7 +1458,7 @@ def gsd_to_txyz(self,account='remote',simu_index=0,seed=9,io_only=False): gsd.get_trajectory_stable_data(directory) return directory,str_simu_index - def txyz_to_bond_plot(self,directory,data_name=None,trap_filename=None,trap_lcr=None,io_only=False): + def get_bond_plot(self,directory,data_name=None,trap_filename=None,trap_lcr=None,io_only=False): R""" input: directory from self.gsd_to_txyz @@ -1324,7 +1490,9 @@ def txyz_to_bond_plot(self,directory,data_name=None,trap_filename=None,trap_lcr= file_ts_id_dxy = directory + 'ts_id_dxy.csv' ts_id_dxy = pd.read_csv(file_ts_id_dxy) if_nb_change_int,n_particle_nb_stable = dpa.monitor_neighbor_change_event(ts_id_dxy=ts_id_dxy,csv_prefix=directory) - dpa.plot_hist_neighbor_change_event(if_nb_change_int,n_particle_nb_stable,directory) + dpa.get_hist_neighbor_change_event(if_nb_change_int,n_particle_nb_stable,directory) + count_nb_change_event_rate = numpy.load(directory+'count_nb_change_event_rate.npy') + dpa.plot_hist_neighbor_change_event(count_nb_change_event_rate,directory) """ if_nb_change_int, n_particle_nb_stable, png_filename==dpa.monitor_neighbor_change_event(ts_id_dxy=ts_id_dxy,csv_prefix=directory) dpa.plot_hist_neighbor_change_event(if_nb_change_int, n_particle_nb_stable, png_filename=) @@ -1337,15 +1505,65 @@ def txyz_to_bond_plot(self,directory,data_name=None,trap_filename=None,trap_lcr= dpa.plot_bond_neighbor_change_oop(data_name=data_name,prefix=directory,nb_change=list_sum_id_nb_stable,bond_cut_off=bond_cut_off, trap_filename=trap_filename,trap_lcr=trap_lcr) """ - - """ - """ dpa.plot_bond_neighbor_change_oop() dpa.draw_bonds.draw_bonds_conditional_bond() dpa.draw_bonds.plot_neighbor_change(txyz_stable,nb_change) dpa.draw_bonds.plot_traps(trap_filename,LinearCompressionRatio) """ - + def get_defect_motion(self,directory,data_name=None,trap_filename=None,trap_lcr=None): + file_txyz_stable = directory + 'txyz_stable.npy' + txyz_stable = numpy.load(file_txyz_stable) + dpa = pa.dynamic_points_analysis_2d(txyz_stable,mode='simu') + + file_list_sum_id_nb_stable = directory + 'list_sum_id_nb_stable.csv' + import pandas as pd + list_sum_id_nb_stable = pd.read_csv(file_list_sum_id_nb_stable) + ids = dpa.plot_neighbor_change_evolution(1173,1174,directory,data_name=data_name, + nb_change=list_sum_id_nb_stable,arrow='annotate',bond_cut_off=6,trap_filename=trap_filename,trap_lcr=trap_lcr)#'4302_9' + dpa.plot_neighbor_change_evolution(1174,1174,directory,data_name=data_name,ids=ids,bond_cut_off=6,trap_filename=trap_filename,trap_lcr=trap_lcr) + + def get_string_like_motion_rank(self,directory,data_name=None,trap_filename=None,trap_lcr=None): + R""" + EXP: + daw = dac.data_analysis_workflow() + directory,dataname= daw.gsd_to_txyz(simu_index=4302,seed=9,io_only=True) + daw.get_string_like_motion(directory,dataname,'/home/remote/hoomd-examples_0/testhoneycomb3-8-12-part1',0.81) + #daw.get_displacment_field(directory,89,106) + """ + file_txyz_stable = directory + 'txyz_stable.npy' + txyz_stable = numpy.load(file_txyz_stable) + dpa = pa.dynamic_points_analysis_2d(txyz_stable,mode='simu') + file_list_sum_id_nb_stable = directory + 'list_sum_id_nb_stable.csv' + import pandas as pd + list_sum_id_nb_stable = pd.read_csv(file_list_sum_id_nb_stable) + init_frame =89 + end_frame = 106 + + + ids = dpa.plot_string_like_motion_rank(init_frame,end_frame,directory,data_name=data_name,#89,106 + nb_change=list_sum_id_nb_stable,bond_cut_off=6,trap_filename=trap_filename,trap_lcr=trap_lcr)#'4302_9' + #dpa.plot_string_like_motion(end_frame,end_frame,directory,data_name=data_name,ids=ids, + # bond_cut_off=6,trap_filename=trap_filename,trap_lcr=trap_lcr) + + def get_string_like_motion(self,directory,data_name=None,trap_filename=None,trap_lcr=None): + R""" + EXP: + daw = dac.data_analysis_workflow() + directory,dataname= daw.gsd_to_txyz(simu_index=4302,seed=9,io_only=True) + daw.get_string_like_motion(directory,dataname,'/home/remote/hoomd-examples_0/testhoneycomb3-8-12-part1',0.81) + #daw.get_displacment_field(directory,89,106) + """ + file_txyz_stable = directory + 'txyz_stable.npy' + txyz_stable = numpy.load(file_txyz_stable) + dpa = pa.dynamic_points_analysis_2d(txyz_stable,mode='simu') + init_frame =1 + end_frame = 2000 + ids = dpa.plot_string_like_motion(init_frame,end_frame,directory,data_name=data_name,#89,106 + bond_cut_off=6,trap_filename=trap_filename,trap_lcr=trap_lcr)#'4302_9' + dpa.plot_string_like_motion(end_frame,end_frame,directory,data_name=data_name,ids=ids, + bond_cut_off=6,trap_filename=trap_filename,trap_lcr=trap_lcr) + + def get_msd(self,pixel_to_um=3.0/32.0,um_to_sigma=1.0/2.0): txyz_npy_filename = self.path_to_results+'/'+'txyz_stable' traj = numpy.load(txyz_npy_filename) @@ -1364,4 +1582,82 @@ def get_msd(self,pixel_to_um=3.0/32.0,um_to_sigma=1.0/2.0): time_log = numpy.loadtxt(time_log) dpa.plot_lindemann_msd(dpa.record_msd,average_1st_bond_length,time_log) print('average_1st_bond_length\n',average_1st_bond_length) - \ No newline at end of file + + def get_displacment_field(self,directory,frame_index_start=0,frame_index_end=-1,subplot=False): + #import numpy + #import points_analysis_2D as pa + file_txyz_stable = directory + 'txyz_stable.npy' + txyz_stable = numpy.load(file_txyz_stable) + dpa = pa.dynamic_points_analysis_2d(txyz_stable,mode='simu') + dpa.displacement_field_module() + png_filename = directory+'displacement_field_xy'+'_'+str(frame_index_start)+'_'+str(frame_index_end)+'.png' + dpa.displacemnt_field.get_displacement_field_xy(frame_index_start,frame_index_end,True,png_filename) + + def get_a_frame(self,directory,frame_index): + file_txyz_stable = directory + 'txyz_stable.npy' + txyz_stable = numpy.load(file_txyz_stable) + dpa = pa.dynamic_points_analysis_2d(txyz_stable,mode='simu') + dpa.plot_a_frame_of_points(frame_index,directory+str(frame_index)+'.png') + +class transfer_txt_to_array: + R""" + example: + import numpy as np + import data_analysis_cycle as dac + txt_file_name = '/home/remote/Downloads/5410-5419klt' + ta = dac.transfer_txt_to_array() + d1=ta.trans_txt_to_array(txt_file_name) + txt_file_name = '/home/remote/Downloads/5420-5429klt' + d2=ta.trans_txt_to_array(txt_file_name) + data = np.concatenate((d1,d2)) + print(data[:,0]) + print(data[:,1]) + data[:,2] = data[:,2]*3/7.44 + print(data[:,2]) + ta.get_scatter('remote',data) + """ + def __init__(self): + pass + def trans_txt_to_array(self,txt_file_name): + R""" + This function will save a txt file named 'start index - end index klt', which contains + n rows of data + |simu_index | HarmonicK | LinearCompressionRatio | kT | + Psi3Global | Psi6Global | RandomSeed | + + CHECK: [v] + """ + #txt_file_name = '/home/remote/Downloads/5410-5419klt' + data = numpy.loadtxt(txt_file_name) + return data + + def get_scatter(self,account,data): + import matplotlib.pyplot as plt + import numpy as np + U_interaction=300*np.exp(-0.25) + prefix='/home/'+account+'/Downloads/' + postfix = '_pin_liquid_to_honeycomb_part_klt_2m.png' + #print(data[:,4]) + plt.figure() + #plot k VS T, Psi3 as value + plt.scatter(data[:,2],data[:,1]*0.5,c=data[:,4])# LCR VS K, Psi3 as value + #plt.show() + plt.title('k VS T, Psi3 as value, Uparticle='+str(int(U_interaction)) ) + plt.xlabel('Linear Compression Ratio (1)') + plt.ylabel('U trap ($k_BT_m$)[Honeycomb part]') + plt.colorbar() + png_filename=prefix+'K_VS_T_Psi3_as_value'+postfix + plt.savefig(png_filename) + plt.close() + + plt.figure() + #plot k VS T, Psi6 as value + plt.scatter(data[:,2],data[:,1]*0.5,c=data[:,5])# LCR VS K, Psi6 as value + #plt.show() + plt.title('k VS T, Psi6 as value, Uparticle='+str(int(U_interaction)) ) + plt.xlabel('Linear Compression Ratio (1)') + plt.ylabel('U trap ($k_BT_m$)[Honeycomb part]') + plt.colorbar() + png_filename=prefix+'K_VS_T_Psi6_as_value'+postfix + plt.savefig(png_filename) + plt.close() \ No newline at end of file diff --git a/getDataAndScatter.py b/getDataAndScatter.py index 35aae2a..587ff64 100644 --- a/getDataAndScatter.py +++ b/getDataAndScatter.py @@ -1,4 +1,5 @@ import matplotlib +from matplotlib.colors import LinearSegmentedColormap, ListedColormap import matplotlib.pyplot as plt import numpy as np from numpy.core.fromnumeric import mean, var @@ -510,18 +511,22 @@ def workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt(account='tplab'): def workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m(account='tplab'): R""" - Note: the format of table_name='pin_hex_to_honeycomb_part_klt_2m' | SimuIndex | HarmonicK | LinearCompressionRatio | kT | Psi3 | Psi6 | RandomSeed | FIGURE scatter HarmonicK vs KBT, Psi6 as value - import getDataAndScatter as scatt - scatt.workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m() + example: + import getDataAndScatter as scatt + scatt.workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m(account='remote') + example: + # lcr=0.77-0.78,seed=0-9 + $ select * from pin_hex_to_honeycomb_part_klt_2m where SimuIndex >4335 and SimuIndex <4356; + #"where SimuIndex > 5298" - import getDataAndScatter as scatt - scatt.workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m(account='remote') + # lcr=0.79-0.8165-0.84,seed=0-9 + $ select * from pin_hex_to_honeycomb_part_klt_2m where SimuIndex >4265 and SimuIndex <4336; """ import matplotlib.pyplot as plt import numpy as np @@ -529,11 +534,11 @@ def workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m(account='tplab'): import opertateOnMysql as osql U_interaction=300*np.exp(-0.25) - condition="where kT < 0.15" + condition="where SimuIndex > 4265 and SimuIndex<4336" data=osql.getDataFromMysql(table_name='pin_hex_to_honeycomb_part_klt_2m',search_condition=condition) data=np.array(data) prefix='/home/'+account+'/Downloads/' - postfix = '_pin_hex_to_honeycomb_part_klt_2m_T01.png' + postfix = '_pin_hex_to_honeycomb_part_klt_2m_random.png' #print(data[:,4]) plt.figure() #plot k VS T, Psi3 as value @@ -541,7 +546,7 @@ def workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m(account='tplab'): #plt.show() plt.title('k VS T, Psi3 as value, Uparticle='+str(int(U_interaction)) ) plt.xlabel('Linear Compression Ratio (1)') - plt.ylabel('U trap (kBTm)[Honeycomb part]') + plt.ylabel('U trap ($k_BT_m$)[Honeycomb part]') plt.colorbar() png_filename=prefix+'K_VS_T_Psi3_as_value'+postfix plt.savefig(png_filename) @@ -559,6 +564,116 @@ def workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m(account='tplab'): plt.savefig(png_filename) plt.close() +def workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m_random_oop(account='tplab'): + R""" + Note: the format of table_name='pin_hex_to_honeycomb_part_klt_2m' + | SimuIndex | HarmonicK | LinearCompressionRatio | kT | + Psi3 | Psi6 | RandomSeed | + + FIGURE scatter HarmonicK vs KBT, Psi6 as value + + example: + import getDataAndScatter as scatt + scatt.workflow_mysql_to_data_pin_hex_to_honeycomb_part_klt_2m_random_oop(account='remote') + + example: + # lcr=0.77-0.78,seed=0-9 + $ select * from pin_hex_to_honeycomb_part_klt_2m where SimuIndex >4335 and SimuIndex <4356; + #"where SimuIndex > 5298" + + # lcr=0.79-0.8165-0.84,seed=0-9 + $ select * from pin_hex_to_honeycomb_part_klt_2m where SimuIndex >4265 and SimuIndex <4336; + """ + import matplotlib.pyplot as plt + import numpy as np + #getDataToMysql + import opertateOnMysql as osql + pr = mysql_data_processor() + U_interaction=300*np.exp(-0.25) + + condition="where SimuIndex > 4265 and SimuIndex<4336" + data=osql.getDataFromMysql(table_name='pin_hex_to_honeycomb_part_klt_2m',search_condition=condition) + data=np.array(data) + + prefix='/home/'+account+'/Downloads/' + postfix = '_pin_hex_to_honeycomb_part_klt_2m_random.png' + + list_k,k_num = pr.unique_param(data[:,1]) + list_lcr,lcr_num = pr.unique_param(data[:,2]) + + record=np.zeros((lcr_num*k_num,6)) + row = 0 + for k in list_k: + for lcr in list_lcr: + list_row = (data[:,1]==k)&(data[:,2]==lcr) + random_point = data[list_row,4:5+1] + record[row, 0] = k*0.5 + record[row, 1] = lcr + record[row, 2],record[row, 3] = pr.average_std(random_point[:,0])#psi3 + record[row, 4],record[row, 5] = pr.average_std(random_point[:,1])#psi6 + row = row+1 + + xlabel_name = 'Linear Compression Ratio (1)' + ylabel_name = 'U trap ($k_BT_m$)[Honeycomb part]' + + title_name = 'lcr_VS_K_Psi3_as_value' + results = pr.record_to_results_for_scatter(record,1,0,2) + pr.draw_diagram_scatter(results,title_name,xlabel_name,ylabel_name,prefix,postfix) + + title_name = 'lcr_VS_K_Psi3std_as_value' + results = pr.record_to_results_for_scatter(record,1,0,3) + pr.draw_diagram_scatter(results,title_name,xlabel_name,ylabel_name,prefix,postfix) + + title_name = 'lcr_VS_K_Psi6_as_value' + results = pr.record_to_results_for_scatter(record,1,0,4) + pr.draw_diagram_scatter(results,title_name,xlabel_name,ylabel_name,prefix,postfix) + + title_name = 'lcr_VS_K_Psi6std_as_value' + results = pr.record_to_results_for_scatter(record,1,0,5) + pr.draw_diagram_scatter(results,title_name,xlabel_name,ylabel_name,prefix,postfix) + +class mysql_data_processor: + def __init__(self): + pass + def unique_param(self,data): + R""" + return list_data, list_num + """ + list_data = np.unique(data) + list_num = np.shape(list_data)[0] + return list_data,list_num + + def average_std(self,data): + R""" + return avg, std + """ + avg = np.mean(data) + std = np.std(data) + return avg,std + + def record_to_results_for_scatter(self,data,column_x,column_y,column_value): + R""" + return: + results: array[x,y,values] + """ + results = np.zeros((np.shape(data)[0],3)) + results[:,0] = data[:,column_x] + results[:,1] = data[:,column_y] + results[:,2] = data[:,column_value] + return results + + def draw_diagram_scatter(self,data,title_name,xlabel_name,ylabel_name,prefix,postfix): + plt.figure() + plt.scatter(data[:,0],data[:,1],c=data[:,2]) + #plt.show() + plt.title(title_name) + plt.xlabel(xlabel_name) + plt.ylabel(ylabel_name) + plt.colorbar() + png_filename=prefix+title_name+postfix + plt.savefig(png_filename) + plt.close() + def workflow_mysql_to_data_pin_hex_to_honeycomb_part1_random(): R""" Introduction: @@ -1798,7 +1913,11 @@ def workflow_mysql_to_data_pin_hex_to_kagome_part_klt_2m(account='tplab'): FIGURE scatter HarmonicK vs KBT, Psi6 as value import getDataAndScatter as scatt - scatt.workflow_mysql_to_data_pin_hex_to_kagome_part_klt_2m() + scatt.workflow_mysql_to_data_pin_hex_to_kagome_part_klt_2m('remote') + + EXAMPLE: + # low-T trap + $select * from pin_hex_to_kagome_part_klt_2m where kT < 0.2; """ import matplotlib.pyplot as plt import numpy as np @@ -1806,11 +1925,13 @@ def workflow_mysql_to_data_pin_hex_to_kagome_part_klt_2m(account='tplab'): import opertateOnMysql as osql U_interaction=300*np.exp(-0.25) - data=osql.getDataFromMysql(table_name='pin_hex_to_kagome_part_klt_2m') + table_name='pin_hex_to_kagome_part_klt_2m' + condition = 'where kT < 0.2' + data=osql.getDataFromMysql(table_name=table_name,search_condition=condition) data=np.array(data) prefix='/home/'+account+'/Downloads/' - postfix = '_pin_hex_to_kagome_part_klt_2m.png' - + postfix = '_'+table_name+'_low_T'+'.png' + plt.figure() #plot k VS T, CN4 as value plt.scatter(data[:,2],data[:,1]*0.5,c=data[:,5])# LCR VS K, CN4 as value @@ -2500,16 +2621,32 @@ def draw_points_and_traps_result(simu_index,table_name,): def showTrapsMap(account): import hoomd.azplugins.sequence_generator as sg #get points + N = 256 + vals = np.ones((N, 4)) + vals[:, 0] = np.linspace(1, 1, N) + vals[:, 1] = np.linspace(1, 128/256, N) + vals[:, 2] = np.linspace(1, 128/256, N) + newcmp = ListedColormap(vals)#LinearSegmentedColormap(vals)#ListedColormap(vals) + + #import matplotlib as mpl + """ + cmp = plt.get_cmap('autumn') + cmp.reversed('autumn_r') + """ + cmp = plt.get_cmap('Reds') rcut=1.0 - + cmap_name = 'Reds'#'autumn_r'#'autumn'#newcmp#'binary'# + transparency = 0.5#0.3 + particle_size = 100 + trap_prefix='/home/'+account+'/hoomd-examples_0/' - trap_filename=trap_prefix+"testhoneycomb3-32-48-part1"#data of trap position + trap_filename=trap_prefix+"testhoneycomb3-8-12-part1"#data of trap position - new1 = True#False# + new1 = False#True# if new1: #generate a trap sequence pp = sg.sequence() - pp.generate_honeycomb_part1(a=3,n=[32,48]) + pp.generate_honeycomb_part1(a=3,n=[8,12]) pp.save(trap_filename) #set traps @@ -2537,8 +2674,8 @@ def showTrapsMap(account): #origin = np.zeros((1,2)) sz = np.shape(traps_pos) i = 0 - Z = (0.50*HarmonicK*rcut*rcut-0.50*HarmonicK*((X-traps_pos[i,0])**2 + (Y-traps_pos[i,1])**2))\ - *(((X-traps_pos[i,0])**2 + (Y-traps_pos[i,1])**2) < rcut*rcut) + Z = ( (0.50*HarmonicK*rcut*rcut-0.50*HarmonicK*((X-traps_pos[i,0])**2 + (Y-traps_pos[i,1])**2))\ + *(((X-traps_pos[i,0])**2 + (Y-traps_pos[i,1])**2) < rcut*rcut) ) i = i+1 while i")) + https://matplotlib.org/stable/tutorials/text/annotations.html#sphx-glr-tutorials-text-annotations-py + """ + else:# force ax to draw scatter using given ids + bpm.ax.scatter(xy_final[ids,0],xy_final[ids,1],facecolors='none',edgecolors=circle_color,marker='o',s=circle_size,linewidths=lw) + + #draw traps + if not trap_filename is None: + bpm.plot_traps(trap_filename,trap_lcr,'map') + + + png_filename2 = prefix +'string_like_motion'+str_index+'_'+str(int(frame_init))+'.png'#'.pdf' + bpm.save_figure(png_filename2) + + return ids + + def plot_string_like_motion(self,frame_init,frame_final,prefix='', + data_name='default_exp',ids=None, + bond_cut_off=None, + trap_filename=None,trap_lcr=None): + R""" + return + ids: particles whose displacemnt is large + """ + str_index=data_name + txyz = np.load(prefix+'txyz.npy') + + xy_init = self.txyz_stable[frame_init,:,:2] + xy_final = self.txyz_stable[frame_final,:,:2] + particle_size=30 + circle_size = particle_size + lw = 2#circle linewidths + circle_color = 'limegreen'#'orange' + arrow_color = 'limegreen' + + + bpm = bond_plot_module() + bpm.restrict_axis_property_relative(xy_init,'($\sigma$)') + #draw bonds + a_frame = static_points_analysis_2d(points=xy_init) + a_frame.get_first_minima_bond_length_distribution(lattice_constant=1,hist_cutoff=bond_cut_off)#,png_filename=png_filename1 + check=[0.4, a_frame.bond_first_minima_left] + bpm.draw_points_with_conditional_bond(xy_init,a_frame.bond_length,check,particle_size=particle_size) + #draw arrows + df2 = displacemnt_field_2D(self.txyz_stable,bpm.ax,bpm.fig) + ids_in = df2.get_displacement_field_xy_id(frame_init,frame_final) + #draw circles + if ids is None: + ids = ids_in + bpm.ax.scatter(xy_final[ids,0],xy_final[ids,1],facecolors='none', + edgecolors=circle_color,marker='o',s=circle_size,linewidths=lw,zorder =2) + else: + bpm.ax.scatter(xy_final[ids,0],xy_final[ids,1],facecolors='none', + edgecolors=circle_color,marker='o',s=circle_size,linewidths=lw,zorder =2)#circle, facecolors='none',fillstyle='none'[x] + #draw traps + if not trap_filename is None: + bpm.plot_traps(trap_filename,trap_lcr,'map') + + #save figure + png_filename2 = prefix +'string_like_motion'+str_index+'_'+str(int(frame_init))+'_'+str(int(frame_final))+'.png'#'.pdf' + bpm.save_figure(png_filename2) + return ids_in + + def plot_string_like_motion_rank(self,frame_init,frame_final,prefix='', + data_name='default_exp',nb_change=None,ids=None, + bond_cut_off=None, + trap_filename=None,trap_lcr=None): + R""" + return : + ids: particles whose displacemnt is large + warning: + ids would lost partly for edge_cut ins static_points_analysis_2D + """ + str_index=data_name + txyz = np.load(prefix+'txyz.npy') + + xy_init = self.txyz_stable[frame_init,:,:2] + xy_final = self.txyz_stable[frame_final,:,:2] + particle_size=30 + circle_size = particle_size + lw = 2#circle linewidths + circle_color = 'limegreen'#'orange' + arrow_color = 'limegreen' + + + bpm = bond_plot_module() + bpm.restrict_axis_property_relative(xy_init,'($\sigma$)') + #draw bonds + a_frame = static_points_analysis_2d(points=xy_init) + a_frame.get_first_minima_bond_length_distribution(lattice_constant=1,hist_cutoff=bond_cut_off)#,png_filename=png_filename1 + check=[0.4, a_frame.bond_first_minima_left] + bpm.draw_points_with_conditional_bond(xy_init,a_frame.bond_length,check,particle_size=particle_size) + #draw arrows + df2 = displacemnt_field_2D(self.txyz_stable,bpm.ax,bpm.fig) + df2.get_displacements(frame_final,frame_init) + uv,ids_active = df2.select_long_displacement_arrow() + #df2.get_displacement_field_xy_id(frame_init) + + rank = df2.compare_displacement_method(uv,ids_active,frame_init,frame_final) + #not so good, nan + #rank = self.neighbor_change_id_method(nb_change,frame_init,frame_final,ids_active) + + df2.get_displacement_field_xy_rank(rank,frame_init,frame_final) + + #draw circles + if ids is None: + ids = ids_active + bpm.ax.scatter(xy_final[ids,0],xy_final[ids,1],c=rank, + marker='o',s=circle_size,linewidths=lw,zorder =2)#edgecolors=, + else: + bpm.ax.scatter(xy_final[ids,0],xy_final[ids,1],facecolors='none', + edgecolors=circle_color,marker='o',s=circle_size,linewidths=lw,zorder =2)#circle, facecolors='none',fillstyle='none'[x] + #draw traps + if not trap_filename is None: + bpm.plot_traps(trap_filename,trap_lcr,'map') + + #save figure + png_filename2 = prefix +'string_like_motion_rank'+str_index+'_'+str(int(frame_init))+'_'+str(int(frame_final))+'.png'#'.pdf' + bpm.save_figure(png_filename2) + return ids_active + + def neighbor_change_id_method(self,nb_change,frame_init,frame_final,ids_active): + list_sum_id_nb_stable = nb_change + list_frames = (list_sum_id_nb_stable['frame']>=frame_init)&(list_sum_id_nb_stable['frame']<=frame_final) + snap = list_sum_id_nb_stable[list_frames] + snap_true = snap[snap['if_nb_change'] == True] + #print(snap_true.head(10)) + + ids_active = np.array(ids_active) + num_ids_active = np.sum(ids_active.astype(int)) + rank = np.zeros((num_ids_active,)) + list_ids_active = np.zeros((num_ids_active,)) + #get list_ids_active + j=0 + for i in range(len(ids_active)): + if ids_active[i]: + list_ids_active[j]=i + j=j+1 + if j==num_ids_active: + break + #print(list_ids_active) + j=0 + for i in list_ids_active.astype(int): + id_trajectory = snap_true[snap_true["particle_id"] == i] + rank[j] = id_trajectory["frame"].max() + j=j+1 + print(rank) #some ids are nan for edge_cut + #or xy is in need to check displacement. + return rank + + def __annotate_arrow(self,xy_init,xy_final,ids): + R""" + input: + xy_init: from txyz_stable + xy_final: from txyz_stable + ids: defined by neighbor change events. + output: + dxy: vectors from points to places to annotate arrows, selected by ids only. + uv: vectors of arrow, selected by ids only. + ids: selected by displacements(>0.2) + """ + #normalize arrow length part1 + uv = xy_final[ids]-xy_init[ids] + dr2 = uv*uv + dr = np.sqrt(dr2[:,0]+dr2[:,1]) + + #select particles with long displacement + dr_long_list = dr[:]>0.2 + ids=ids[dr_long_list] + uv = xy_final[ids]-xy_init[ids] + dr2 = uv*uv + dr = np.sqrt(dr2[:,0]+dr2[:,1]) + + ##normalize arrow length part2 + uv[:,0] = uv[:,0]/dr + uv[:,1] = uv[:,1]/dr + rotate = np.zeros((2,2)) + rotate[0,0] = np.cos(np.pi/2) + rotate[1,1] = np.cos(np.pi/2) + rotate[1,0] = np.sin(-np.pi/2) + rotate[0,1] = np.sin(np.pi/2) + # move arrow a little away from in situ points. + scale_away = 0.5 + #rotate operator is on the right side, + # so rotational direction is inverted. + #to let rotation match intuition, + # I inverted rotation operator too. + dxy = np.matmul(uv,rotate)*scale_away + #tune the length of arrow + scale_arrow =1 + uv = uv*scale_arrow + return dxy,uv,ids + + class mean_square_displacement: R""" Introduction: @@ -1920,36 +2222,125 @@ def plot_msd_particle_wise_X(self,m_msd,time_log=None,png_filename='msds_loglog. self.plot_lindemann_msd() class displacemnt_field_2D: - def __init__(self,txyz_stable): + def __init__(self,txyz_stable,ax=None,fig=None): self.txyz_stable = txyz_stable + if ax is None: + fig,ax = plt.subplots() + self.fig = fig + self.ax = ax - def get_displacement_field_xy(self,frame_index,plot=False,png_filename=None): + def get_displacement_field_xy(self,frame_index_start=0,frame_index_end=-1,plot=False,png_filename=None,x_unit='($\sigma$)'): R""" Introduction: The function draws a displacement vector field from init state to final state with positions at edge removed to clean abnormal displacement vector. + input: + frame_index: -1 + plot:True or False + png_filename: 'displacement_field_xy.png' + x_unit:'(sigma)', '(um)' or '(1)' Example: import points_analysis_2D as pa gsd = pa.proceed_gsd_file(simu_index=1382) gsd.get_displacement_field(plot=True) """ - self.get_displacements(frame_index) + self.get_displacements(frame_index_end,frame_index_start) - xy = self.txyz_stable[0]#init_positions + xy = self.txyz_stable[frame_index_start]#init_positions + xye = self.txyz_stable[frame_index_end] uv = self.displacements if plot: - plt.figure() - #plt.scatter(self.init_positions[:,0],self.init_positions[:,1])#init_state - #plt.scatter(self.final_positions[:,0],self.final_positions[:,1])#final_state - plt.quiver(xy[:,0],xy[:,1],uv[:,0],uv[:,1],angles='xy', scale_units='xy', scale=1) - plt.title('displacement field '+'index:'+str(self.simu_index)) - plt.xlabel('x(sigma)') - plt.ylabel('y(sigma)') + #self.ax.scatter(self.final_positions[:,0],self.final_positions[:,1])#final_state + self.ax.quiver(xy[:,0],xy[:,1],uv[:,0],uv[:,1],color='orange',angles='xy', scale_units='xy', scale=1) + self.ax.scatter(xye[:,0],xye[:,1],c='k')#init_state + self.ax.set_title('displacement field ')#+'index:'+str(self.simu_index) + self.ax.set_xlabel('x'+x_unit) + self.ax.set_ylabel('y'+x_unit) + self.ax.set_aspect('equal','box') + + if False: + self.ax.xlim(5,20) + self.ax.ylim(-15,0) + pass if not png_filename is None: plt.savefig(png_filename) plt.close() + def get_displacement_field_xy_id(self,frame_index_start=0,frame_index_end=-1,x_unit='($\sigma$)',color='limegreen'): + R""" + Introduction: + The function draws a displacement vector field from init state to final state + with positions at edge removed to clean abnormal displacement vector. + input: + frame_index: -1 + plot:True or False + png_filename: 'displacement_field_xy.png' + x_unit:'($\sigma$)', '(um)' or '(1)' + return: + ids: the ids of particles whose displacements are large enough. + Example: + import points_analysis_2D as pa + gsd = pa.proceed_gsd_file(simu_index=1382) + gsd.get_displacement_field(plot=True) + """ + self.get_displacements(frame_index_end,frame_index_start) + uv,ids = self.select_long_displacement_arrow() + + xy = self.txyz_stable[frame_index_start]#init_positions + xye = self.txyz_stable[frame_index_end] + + + #self.ax.scatter(self.final_positions[:,0],self.final_positions[:,1])#final_state + self.ax.quiver(xy[ids,0],xy[ids,1],uv[:,0],uv[:,1],color=color,angles='xy', scale_units='xy', scale=1) + """ + self.ax.scatter(xy[:,0],xy[:,1],c='k')#init_state + self.ax.set_title('displacement field ')#+'index:'+str(self.simu_index) + self.ax.set_xlabel('x'+x_unit) + self.ax.set_ylabel('y'+x_unit) + self.ax.set_aspect('equal','box') + + """ + + if False: + self.ax.xlim(5,20) + self.ax.ylim(-15,0) + return ids + + def get_displacement_field_xy_rank(self,rank,frame_index_start=0,frame_index_end=-1,x_unit='($\sigma$)'):#,color='limegreen' + R""" + Introduction: + The function draws a displacement vector field from init state to final state + with positions at edge removed to clean abnormal displacement vector. + input: + frame_index: -1 + plot:True or False + png_filename: 'displacement_field_xy.png' + x_unit:'($\sigma$)', '(um)' or '(1)' + return: + ids: the ids of particles whose displacements are large enough. + Example: + import points_analysis_2D as pa + gsd = pa.proceed_gsd_file(simu_index=1382) + gsd.get_displacement_field(plot=True) + """ + self.get_displacements(frame_index_end,frame_index_start) + uv,ids = self.select_long_displacement_arrow() + + xy = self.txyz_stable[frame_index_start]#init_positions + + + #self.ax.scatter(self.final_positions[:,0],self.final_positions[:,1])#final_state + #arrow + #plt.figure() + #plt.quiver(xy[ids,0],xy[ids,1],uv[:,0],uv[:,1],c=rank, scale=1) + #plt.show() + cc = np.hypot(uv[:,0],uv[:,1]) + mapp = self.ax.quiver(xy[ids,0],xy[ids,1],uv[:,0],uv[:,1],rank,angles='xy', scale_units='xy', scale=1)#,rank + self.fig.colorbar(mapp,ax=self.ax)#ax=self.ax + + + def get_displacement_field_distribution(self,frame_index,log_mode=False,png_filename=None): R""" Introduction: @@ -1980,38 +2371,92 @@ def get_displacement_field_distribution(self,frame_index,log_mode=False,png_file plt.savefig(png_filename) plt.close() - def get_displacements(self,frame_index): - init_positions = self.txyz_stable[0] - final_positions = self.txyz_stable[frame_index] + def get_displacements(self,frame_index_end=-1,frame_index_start=0): + init_positions = self.txyz_stable[frame_index_start] + final_positions = self.txyz_stable[frame_index_end] self.displacements = final_positions - init_positions + def select_long_displacement_arrow(self): + R""" + output: + uv: vectors of arrow, selected by ids only. + ids: selected by displacements(>0.2) + """ + #normalize arrow length part1 + uv = self.displacements + dr2 = uv*uv + dr = np.sqrt(dr2[:,0]+dr2[:,1]) + + #select particles with long displacement + dr_long_list = dr[:]>1.0#2.5(3*lcr),1.0(sigma),0.2(precise) + ids=dr_long_list + uv = uv[ids] + + #tune the length of arrow + scale_arrow =1 + uv = uv*scale_arrow + + return uv,ids + + def compare_displacement_method(self,uv,ids,frame_index_start=0,frame_index_end=-1): + R""" + introduction: + compare the displacements from start to set frame and + the displacements from start to end. hence a rank of frame for particles + who arrive destinations earlier or later + return: + rank_relative: an array of frame [j]. relative to the frame to start, the i-th particle arrive whose + destination at the j-th frame. + """ + ids_active = np.array(ids) + num_ids_active = np.sum(ids_active.astype(int)) + rank_record = np.zeros((num_ids_active,frame_index_end-frame_index_start)) + rank = np.zeros((num_ids_active,)) + list_ids_active = np.zeros((num_ids_active,)) + #get list_ids_active + j = 0 + for id in range(len(ids_active)): + if ids_active[id]: + list_ids_active[j]=id + j=j+1 + if j==num_ids_active: + break + #rank = np.zeros((np.shape(uv)[0],)) + + j = 0 + for dframe in range(frame_index_end-frame_index_start): + temp_frame_index_end = frame_index_start+dframe+1 + self.get_displacements(temp_frame_index_end,frame_index_start) + duv = uv - self.displacements[ids,:]# + duv2 = duv*duv + druv = np.sqrt(duv2[:,0]+duv2[:,1]) + arrive_bool = druv[:]<1.0 + rank_record[:,j] = arrive_bool + j=j+1 + #rank_frame = frame_index_end+1-np.sum(rank_record,1)#frame1,frame2,frame3 + rank_relative = frame_index_end-frame_index_start+1-np.sum(rank_record,1)#1,2,3 + rank_normalized = rank_relative/np.max(rank_relative) + #print(rank_frame) + return rank_relative#normalized + class bond_plot_module: def __init__(self): self.fig,self.ax = plt.subplots() - - def draw_bonds_conditional_bond_ref(self,check=[0.9,2.0],png_filename=None,nb_change=None,x_unit='(um)', - show_traps=False,LinearCompressionRatio=0.79, - trap_filename="/home/tplab/hoomd-examples_0/testhoneycomb3-8-12-part1"): + + def restrict_axis_property_relative(self,xy,x_unit='(um)'): R""" Parameters: - check: limit the shortest and longest bond to draw. - png_filename: "prefix/bond_plot_index1513" - nb_change: particle ids( in txyz_stable) which change neighbors. - Examples: - import points_analysis_2D as pa - s = "/home/tplab/Downloads/" - index_num = 1387 - index_name = "index"+str(index_num) - fname = s+index_name - bb = pa.PointsAnalysis2D(filename=fname) - oname1 = s+"bond_hist_"+index_name - bb.draw_bond_length_distribution_and_first_minima(png_filename=oname1) - oname2 = s+"bond_plot_"+index_name - bb.draw_bonds_conditional_bond(check=[0.9, bb.bond_first_minima_left], png_filename=oname2) + txyz: all the particle positions, no one removed. + bond_length: [particle_id1,particle_id2, bond_length] for txyz. + check: limit the shortest and longest bond( in bond_length) to draw. + png_filename: "prefix/bond_plot_index1513.png" + weight of shapes: + bond(blue line) < particles(black circle) < neighbor_change(orange circle) < traps(red cross) + 0 1 2 3 """ - bond_check= [check[0],check[1]] #if dis is None: + self.points = xy xmax = max(self.points[:,0]) #- 3 ymax = max(self.points[:,1]) #- 3 xmin = min(self.points[:,0]) #+ 3 @@ -2025,11 +2470,17 @@ def draw_bonds_conditional_bond_ref(self,check=[0.9,2.0],png_filename=None,nb_ch center = [0,0] #draw a figure with edges - plt.figure() - plt.axis('equal') - plt.xlabel('x'+x_unit) - plt.ylabel('y'+x_unit) - plt.title("bond_length:"+str(np.around(check,2))+x_unit) + if x_unit == '(sigma)': + """ + plt.rcParams.update({ + "text.usetex": True, + "font.family": "Helvetica" + }) + """ + x_unit = '($\sigma$)'#pip install latex is necessary for plt.savefig + self.ax.set_aspect('equal','box')#plt.axis('equal') + self.ax.set_xlabel('x'+x_unit) # Add an x-label to the axes. + self.ax.set_ylabel('y'+x_unit) # Add a y-label to the axes. """ the displayed image size will be the smaller one between axis limitation for xlim/ylim or data itself. @@ -2049,46 +2500,143 @@ def draw_bonds_conditional_bond_ref(self,check=[0.9,2.0],png_filename=None,nb_ch plt.yticks(new_ticks,new_ticks.astype(str)) """ #restrict data region to show - plt.xlim(-dis+center[0],dis+center[0]) - plt.ylim(-dis+center[1],dis+center[1]) - - #add lines for edges - for i in range(np.shape(self.bond_length)[0]): - if (self.bond_length[i,2] > bond_check[0])&(self.bond_length[i,2] < bond_check[1]) : - edge = tuple(self.bond_length[i,0:2].astype(int)) - pt1,pt2 = [self.points[edge[0]],self.points[edge[1]]] - line = plt.Polygon([pt1,pt2], closed=None, fill=None, edgecolor='b') - plt.gca().add_line(line) + self.ax.set_xlim(-dis+center[0],dis+center[0])#plt.xlim(-dis+center[0],dis+center[0]) + self.ax.set_ylim(-dis+center[1],dis+center[1])#plt.ylim(-dis+center[1],dis+center[1]) + self.x_unit = x_unit - plt.scatter(self.points[:,0],self.points[:,1],color='k') + def restrict_axis_limitation(self,xlim,ylim): + #restrict data region to show + self.ax.set_xlim(xlim[0],xlim[1]) + self.ax.set_ylim(ylim[0],ylim[1]) + + def draw_points_with_conditional_bond(self,xy,bond_length=None,bond_length_limmit=[0.9,2.0],particle_size=None): + R""" + Parameters: + xy: particle positions of a frame, with no one removed. + bond_length: [particle_id1,particle_id2, bond_length] for txyz. + bond_length_limmit: limit the shortest and longest bond( in bond_length) to draw. + weight of shapes: + bond(blue line) < particles(black circle) < neighbor_change(orange circle) < traps(red cross) + 0 1 2 3 + Examples: + import points_analysis_2D as pa + s = "/home/tplab/Downloads/" + index_num = 1387 + index_name = "index"+str(index_num) + fname = s+index_name + bb = pa.PointsAnalysis2D(filename=fname) + oname1 = s+"bond_hist_"+index_name + bb.draw_bond_length_distribution_and_first_minima(png_filename=oname1) + oname2 = s+"bond_plot_"+index_name + bb.draw_bonds_conditional_bond(check=[0.9, bb.bond_first_minima_left], png_filename=oname2) """ - particle_ids = np.linspace(0,self.points.shape[0]-1,self.points.shape[0],dtype=int) - particle_ids_str = particle_ids.astype(str) - for j in particle_ids: - plt.annotate(particle_ids_str[j],self.points[j]) + if not (bond_length is None): + bond_check= tuple([bond_length_limmit[0],bond_length_limmit[1]]) + #add lines for edges + for i in range(np.shape(bond_length)[0]): + if (bond_length[i,2] > bond_check[0])&(bond_length[i,2] < bond_check[1]) : + edge = tuple(bond_length[i,0:2].astype(int)) + pt1,pt2 = [self.points[edge[0]],self.points[edge[1]]] + line = plt.Polygon([pt1,pt2], closed=None, fill=None, edgecolor='b',zorder=0)#,lineStyle='dashed' + self.ax.add_line(line) + self.ax.set_title("bond_length:"+str(np.around(bond_length_limmit,2))+self.x_unit) # Add a title to the axes + + self.points = xy + if not particle_size is None: + self.ax.scatter(xy[:,0],xy[:,1],color='k',zorder=1,s=particle_size) + else: + self.ax.scatter(xy[:,0],xy[:,1],color='k',zorder=1) + + def plot_neighbor_change(self,xy_stable,nb_change): + R""" + txyz_stable:array[Nframes,Nparticles,xyz] + for simu data, + ensure that particles never move across the boundary(box)! + for exp data, + unit of xyz must be um! + ensure that particles are always in the vision field! + nb_change: particle ids( in txyz_stable) which change neighbors. """ - if not nb_change is None: - plt.scatter(self.points[nb_change,0],self.points[nb_change,1],color='orange') - - if show_traps: - traps=np.loadtxt(trap_filename) - traps=np.multiply(traps,LinearCompressionRatio) - plt.scatter(traps[:,0], - traps[:,1], - c='r',marker = 'x') + self.ax.scatter(xy_stable[nb_change,0],xy_stable[nb_change,1],color='orange',zorder=2) + + def plot_traps(self,trap_filename="/home/tplab/hoomd-examples_0/testhoneycomb3-8-12-part1",LinearCompressionRatio=0.79,mode='array'): + R""" + trap_filename: + '/home/remote/hoomd-examples_0/testhoneycomb3-8-12' + '/home/remote/hoomd-examples_0/testhoneycomb3-8-12-part1' + '/home/remote/hoomd-examples_0/testkagome3-11-6' + '/home/remote/hoomd-examples_0/testkagome_part3-11-6' + mode: 'array'(scatter) or 'map'(pcolormesh) + """ + traps=np.loadtxt(trap_filename) + traps=np.multiply(traps,LinearCompressionRatio) + if mode=='array': + #x_scale = 200 + self.ax.scatter(traps[:,0], traps[:,1],c='r',marker = 'x',zorder=3)#,s=x_scale + elif mode=='map': + """ + #get points + N = 256 + vals = np.ones((N, 4)) + vals[:, 0] = np.linspace(1, 1, N) + vals[:, 1] = np.linspace(1, 128/256, N) + vals[:, 2] = np.linspace(1, 128/256, N) + newcmp = ListedColormap(vals)#LinearSegmentedColormap(vals)#ListedColormap(vals) + + cmp = plt.get_cmap('autumn') + cmp.reversed('autumn_r') + """ + rcut=1.0 + cmap_name = 'Reds'#'autumn_r'#'autumn'#newcmp#'binary'# + transparency = 0.5#0.3 + + + #set traps + max = np.max(traps) + min = np.min(traps) + length = (max - min) + steps = length/(rcut/10.0) + #plt.style.use('_mpl-gallery-nogrid') + + # make data + X, Y = np.meshgrid(np.linspace(min, max, steps.astype(int)), np.linspace(min, max, steps.astype(int))) + HarmonicK = 100 + #origin = np.zeros((1,2)) + sz = np.shape(traps) + i = 0 + Z = ( (0.50*HarmonicK*rcut*rcut-0.50*HarmonicK*((X-traps[i,0])**2 + (Y-traps[i,1])**2))\ + *(((X-traps[i,0])**2 + (Y-traps[i,1])**2) < rcut*rcut) ) + i = i+1 + while i bond_check[0])&(bond_length[i,2] < bond_check[1]) : edge = tuple(bond_length[i,0:2].astype(int)) pt1,pt2 = [self.points[edge[0]],self.points[edge[1]]] - line = plt.Polygon([pt1,pt2], closed=None, fill=None, edgecolor='b') + line = plt.Polygon([pt1,pt2], closed=None, fill=None, edgecolor='b',zorder=0) self.ax.add_line(line) """ particle_ids = np.linspace(0,self.points.shape[0]-1,self.points.shape[0],dtype=int) @@ -2157,26 +2713,4 @@ def draw_bonds_conditional_bond(self,xy,bond_length,bond_length_limmit=[0.9,2.0] for j in particle_ids: plt.annotate(particle_ids_str[j],self.points[j]) """ - self.ax.scatter(xy[:,0],xy[:,1],color='k') - - - def plot_neighbor_change(self,xy_stable,nb_change): - R""" - txyz_stable:array[Nframes,Nparticles,xyz] - for simu data, - ensure that particles never move across the boundary(box)! - for exp data, - unit of xyz must be um! - ensure that particles are always in the vision field! - nb_change: particle ids( in txyz_stable) which change neighbors. - """ - self.ax.scatter(xy_stable[nb_change,0],xy_stable[nb_change,1],color='orange') - - def plot_traps(self,trap_filename="/home/tplab/hoomd-examples_0/testhoneycomb3-8-12-part1",LinearCompressionRatio=0.79): - traps=np.loadtxt(trap_filename) - traps=np.multiply(traps,LinearCompressionRatio) - self.ax.scatter(traps[:,0], traps[:,1],c='r',marker = 'x') - - def save_figure(self,png_filename): - self.fig.savefig(png_filename)#plt.savefig(png_filename) - del self.ax,self.fig \ No newline at end of file + self.ax.scatter(xy[:,0],xy[:,1],color='k',zorder=1) \ No newline at end of file diff --git a/symmetry_transformation/pin_seed_oop.py b/symmetry_transformation/pin_seed_oop.py index 85e9317..9f5c202 100644 --- a/symmetry_transformation/pin_seed_oop.py +++ b/symmetry_transformation/pin_seed_oop.py @@ -8,7 +8,7 @@ class workflow_uniform: R""" Introduction """ - def __init__(self,index1,account='tplab',k1=100.0,step=100.0,k_end=1000.0,linear_compression_ratio=1.0,kT=1.0,seed_set=9,trap_name="testkagome_cycle3-4-6",mode=""): + def __init__(self,index1,account='tplab',k1=100.0,step=100.0,k_end=1000.0,linear_compression_ratio=1.0,kT=1.0,seed_set=9,trap_name="testkagome_cycle3-4-6",mode="--mode=cpu"): #set parameters self.account = account self.index_start = index1 @@ -21,7 +21,7 @@ def __init__(self,index1,account='tplab',k1=100.0,step=100.0,k_end=1000.0,linear self.trap_name = trap_name self.mode=mode #this should be set independently! - self.set_init_state_parameters(pin=True) + self.set_init_state_parameters(pin_from_hex=True) def workflow(self): R""" @@ -111,26 +111,39 @@ def __simulation1(self,linear_compression_ratio,trap_filename,kset,rcut,seed_set points=snap.particles.position[:] numpy.savetxt(result_filename,points) - def set_init_state_parameters(self,a=3,nx=16,ny=8,pin=False,depin_from_kagome=False,depin_from_honeycomb=False): + def set_init_state_parameters(self,a=3,nx=16,ny=8,pin_from_hex=False,init_gsd=None,depin_from_kagome=False,depin_from_honeycomb=False): + R""" + init_gsd: .gsd filename + """ self.a = a self.nx= nx self.ny = ny #choose one init state to launch(pin by default) - self.pin = pin + self.pin_from_hex = pin_from_hex self.depin_from_kagome = depin_from_kagome self.depin_from_honeycomb = depin_from_honeycomb + if init_gsd is None: + self.pin_from_gsd = False + else: + self.pin_from_gsd = True + self.init_gsd = init_gsd def __init_state_launch(self): - if self.pin: - self.__init_state_pin() + if self.pin_from_hex: + self.__init_state_pin_from_hex() + if self.pin_from_gsd: + self.__init_state_pin_from_gsd() if self.depin_from_kagome: self.__init_state_depin_from_kagome() if self.depin_from_honeycomb: self.__init_state_depin_from_honeycomb() - def __init_state_pin(self): + def __init_state_pin_from_hex(self): self.sys=hoomd.init.create_lattice(unitcell=hoomd.lattice.hex(a=self.a), n=[self.nx,self.ny]); + def __init_state_pin_from_gsd(self): + self.sys = hoomd.init.read_gsd(filename=self.init_gsd,frame=-1) + def __init_state_depin_from_kagome(self): a_set=3*self.linear_compression_ratio seq=sg.sequence() diff --git a/symmetry_transformation/simple_simulation.py b/symmetry_transformation/simple_simulation.py index cb74228..87a94e5 100644 --- a/symmetry_transformation/simple_simulation.py +++ b/symmetry_transformation/simple_simulation.py @@ -1,6 +1,7 @@ import hoomd import hoomd.md import numpy +import hoomd.azplugins.sequence_generator as sg class workflow_uniform: R""" @@ -10,10 +11,14 @@ class workflow_uniform: wk = pin.workflow_uniform(index1=5208,account='tplab',mode="--mode=cpu") end_index = wk.workflow() """ - def __init__(self,index1,account='tplab',kT=1.0,seed_set=9,mode=""): + def __init__(self,index1,account='tplab',linear_compression_ratio=1.0,kT=1.0,seed_set=9,mode="--mode=cpu"): + R""" + mode: '--mode=cpu' or '--mode=gpu' + """ #set parameters self.account = account self.index_start = index1 + self.linear_compression_ratio = linear_compression_ratio self.kT = kT self.seed_set = seed_set self.mode=mode @@ -73,7 +78,7 @@ def __simulation1(self,seed_set,file_log,file_gsd,result_filename): all = hoomd.group.all(); hoomd.md.integrate.langevin(group=all, kT=self.kT, seed=seed_set); - period=10#to analyze data, the period should be the same! + period=100#to analyze data, the period should be the same! #given period, the last frame in .log and .gsd is not the real last frame! #if the fluctuation in system is large, period must be set small! hoomd.analyze.log(filename=file_log, @@ -93,17 +98,41 @@ def __simulation1(self,seed_set,file_log,file_gsd,result_filename): points=snap.particles.position[:] numpy.savetxt(result_filename,points) - def set_init_state_parameters(self,a=2,nx=64,ny=32,pin=False): + def set_init_state_parameters(self,a=3,nx=16,ny=8,pin=False,depin_from_kagome=False,depin_from_honeycomb=False): + R""" + here pin = true just means that the init_state is hexagonal lattice. + """ self.a = a self.nx= nx self.ny = ny #choose one init state to launch(pin by default) self.pin = pin + self.depin_from_kagome = depin_from_kagome + self.depin_from_honeycomb = depin_from_honeycomb def __init_state_launch(self): if self.pin: self.__init_state_pin() + if self.depin_from_kagome: + self.__init_state_depin_from_kagome() + if self.depin_from_honeycomb: + self.__init_state_depin_from_honeycomb() - def __init_state_pin(self): - self.sys=hoomd.init.create_lattice(unitcell=hoomd.lattice.hex(a=self.a), n=[self.nx,self.ny]); \ No newline at end of file + self.sys=hoomd.init.create_lattice(unitcell=hoomd.lattice.hex(a=self.a), n=[self.nx,self.ny]); + + def __init_state_depin_from_kagome(self): + a_set=3*self.linear_compression_ratio + seq=sg.sequence() + seq.generate_kagome(a=a_set,n=[self.nx,self.ny])#12,6 -> 11,6 ;20220830,20:04 + self.sys=seq.system + #pin = hex + traps + #depin = traps + traps + #heat = gsd + traps; kT + #cool = gsd + traps + def __init_state_depin_from_honeycomb(self): + a_set=3*self.linear_compression_ratio + seq=sg.sequence() + seq.generate_honeycomb(a=a_set,n=[self.nx,self.ny]) + self.sys=seq.system + "testhoneycomb3-8-12-part1" \ No newline at end of file diff --git a/workflow_part.py b/workflow_part.py index bb23575..c663a75 100644 --- a/workflow_part.py +++ b/workflow_part.py @@ -495,7 +495,141 @@ def workflow_simu_to_mysql_depin_from_honeycomb_part_oop_kT(index1,lcr,kT=1.0,se return end_index -def workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m(index1,lcr,kT=1.0,seed=9,account='tplab'): +def workflow_simu_to_mysql_from_honeycomb_to_liquid(index1,lcr,kT=1.0,seed=9,account='tplab',check=False):#[x] + R""" + INTRODUCTION: + example4 : + import workflow_part as tt + import numpy as np + seed=9 + index1=5390 + lcr_list = np.linspace(0.82,1,10) + kT=1.0 + for lcr1 in lcr_list: + tt.workflow_simu_to_mysql_from_honeycomb_to_liquid(index1=index1,lcr=lcr1,kT=kT,seed=seed,account='remote')#,check=True + print(index1,lcr1) + index1 = index1 + 1 + """ + #step1 + #pin check + R""" + import getDataAndScatter as scatt + scatt.showTrapsMap() + + #traps:"testhoneycomb3-8-12"lcr=0.71 + #particle:"testhoneycomb3-8-12" + """ + #step2 + #set parameters + #trap_name = "testhoneycomb3-8-12-part1" + #get simulation results + import symmetry_transformation.simple_simulation as ss + wk = ss.workflow_uniform(index1,account,lcr,kT,seed) + wk.set_init_state_parameters(a=3,nx=8,ny=12,depin_from_honeycomb=True) + #wk.__init_state_launch() + if not check:#index1>5399:# + pass#end_index = wk.workflow() + else: + end_index = index1 + #end_index = index1 + 9 + 'get file index123' + + #step3 + #get analyzed data + if not check:#False:# + import data_analysis_cycle as da + filename_kl=da.saveIndexklTPsi36Seed(start_index=index1,end_index=index1+9,k1=0,step=0,linear_compression_ratio=lcr,kT=kT,randomseed=seed,account=account) + print('\n'+filename_kl) + 'get file named index1 index2 klt' + + #step4 + #loadDataToMysql + R""" + Note: the format of table_name='depin_from_honeycomb_part_klt' + |simu_index|HarmonicK|LinearCompressionRatio|kT| + Psi3Global|Psi6Global|RandomSeed| + """ + """ + import opertateOnMysql as osql + osql.loadDataToMysql\ + (path_to_file_name=filename_kl, + table_name='depin_from_honeycomb_part_klt') + """ + + #step5 + #watch kT limitation while cooling + """ + import data_analysis_cycle as da + i=index1 + while i5399:# + end_index = wk.workflow() + else: + end_index = index1 + 9 + 'get file index123' + + #step3 + #get analyzed data + if not check:#False:# + import data_analysis_cycle as da + filename_kl=da.saveIndexklTPsi36Seed(start_index=index1,end_index=end_index,k1=k1,step=stp,linear_compression_ratio=lcr,kT=kT,randomseed=seed,account=account) + print('\n'+filename_kl) + 'get file named index1 index2 klt' + + #step4 + #loadDataToMysql + + #step5 + #watch kT limitation while cooling + + return end_index + +def workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m(index1,lcr,kT=1.0,seed=9,account='tplab',check=False): R""" INTRODUCTION: example4 : @@ -553,6 +687,31 @@ def workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m(index1,lcr,kT=1. end_index = tt.workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m(index1=index1,lcr=lcr1,account='remote') #print(index1,lcr1) index1=end_index+1 #index1=index1+10 # + exp scan seed: + #0.77-0.78 + import workflow_part as tt + for seed in range(9): + index1=4336 + lcr1=0.77 + while lcr1<0.785: + index_end=tt.workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m(index1=index1,lcr=lcr1,seed=seed,account='remote',check=True) + print(lcr1,index1,seed) + index1 = index_end+1 + lcr1 = lcr1+0.01 + #0.79-0.84,0.8165 + import numpy + lcr_list = numpy.linspace(0.78,0.84,7) + lcr_list[0] = 0.79 + lcr_list[1] = 0.8165 + #print(lcr_list) + import workflow_part as tt + for seed in range(9): + index1=4266 + for lcr1 in lcr_list: + index_end=tt.workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m(index1=index1,lcr=lcr1,seed=seed, + account='remote',check=True) + print(index1,lcr1,seed) + index1=index_end+1 """ #step1 #pin check @@ -569,23 +728,25 @@ def workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m(index1,lcr,kT=1. #step2 #set parameters - k1=66.0 - stp=6.0 - kend=120.0 + k1=100.0 + stp=100.0 + kend=1000.0 trap_name = "testhoneycomb3-8-12-part1" #get simulation results - import symmetry_transformation.pin_seed_oop as pin - wk = pin.workflow_uniform(index1,account,k1,stp,kend,lcr,kT,seed,trap_name,mode="--mode=gpu") - end_index = wk.workflow()#period=1000;steps=2e6+1 - #end_index = index1 + 9 - 'get file index123' + if not check: + import symmetry_transformation.pin_seed_oop as pin + wk = pin.workflow_uniform(index1,account,k1,stp,kend,lcr,kT,seed,trap_name,mode="--mode=gpu") + end_index = wk.workflow()#period=1000;steps=2e6+1 + else: + end_index = index1 + 9 + 'get file index123' #step3 #get analyzed data - - import data_analysis_cycle as da - filename_kl=da.saveIndexklTPsi36Seed(start_index=index1,end_index=end_index,k1=k1,step=stp,linear_compression_ratio=lcr,kT=kT,randomseed=seed,account=account) - print('\n'+filename_kl) + if not check: + import data_analysis_cycle as da + filename_kl=da.saveIndexklTPsi36Seed(start_index=index1,end_index=end_index,k1=k1,step=stp,linear_compression_ratio=lcr,kT=kT,randomseed=seed,account=account) + print('\n'+filename_kl) 'get file named index1 index2 klt' @@ -596,11 +757,11 @@ def workflow_simu_to_mysql_pin_hex_to_honeycomb_part_oop_klt_2m(index1,lcr,kT=1. |SimuIndex|HarmonicK|LinearCompressionRatio|kT| Psi3|Psi6|RandomSeed| """ - - import opertateOnMysql as osql - osql.loadDataToMysql\ - (path_to_file_name=filename_kl, - table_name='pin_hex_to_honeycomb_part_klt_2m') + if not check: + import opertateOnMysql as osql + osql.loadDataToMysql\ + (path_to_file_name=filename_kl, + table_name='pin_hex_to_honeycomb_part_klt_2m')