def plot_components(eigvec_file, eigval_file, bas_state_index, majorX = 50, majorY = 0.02, col="b-o"): ### '''LDOS Plots function Plot squared components in all eigenvectors of a bas_state_index basis element (min bas_state_index = 0) as a function of the state energy.''' ### import numpy as np from matplotlib import pyplot from matplotlib.ticker import MultipleLocator, FormatStrFormatter # from survival_probability_basis import read_energy_data, read_eigenstates # # eigstates=read_eigenstates(eigvec_file) eigvals= read_energy_data(eigval_file) # # majorXLocator = MultipleLocator(majorX) majorYLocator = MultipleLocator(majorY) # ## for bas_state in range(0,4): components = eigstates[bas_state_index,:] ## Components of a given basis element in all eigenstates ## panel = pyplot.subplot(1, 1, 1) panel.tick_params(axis='both', which='major', labelsize=14) pyplot.plot(eigvals,components**2,col) ## panel.xaxis.set_major_locator(majorXLocator) panel.yaxis.set_major_locator(majorYLocator) ## ## ## pyplot.annotate(bas_state, xy=(30, 0.07)) pyplot.xlabel("Energy") pyplot.ylabel("Squared Eigenvector Components") panel.xaxis.label.set_fontsize(18) panel.yaxis.label.set_fontsize(18)
def hist_components(eigvec_file, basis_index, energy_file, N_value = 1, bins = 20, fig=False): ### '''Histogram of the squared components of the index-th basis state in the system eigenvectors (min value = 0) as a function of the system eigenvalues. Options: bins : number of bins in the histogram N_value : renormalize by the system size fig : plot bar fig ''' # import numpy as np from matplotlib import pyplot from matplotlib.ticker import MultipleLocator, FormatStrFormatter # from survival_probability_basis import read_eigenstates, read_energy_data # # eigstates=read_eigenstates(eigvec_file) ## eigenvalues = read_energy_data(energy_file)/N_value # ## Energy bins energy_bins=np.linspace(eigenvalues[0], eigenvalues[-1],num = bins) col_values = np.zeros(len(energy_bins)) # Initialize histogram values # ## Basis state components components = eigstates[basis_index,:]**2 # columns = np.zeros(bins) ### idx = 0 for index_bin in range(1,bins): # for aval_index in range(idx, len(eigenvalues)+1): # energy = eigenvalues[aval_index] # if (energy < energy_bins[index_bin]): columns[index_bin] = columns[index_bin] + components[aval_index] idx = idx + 1 else: break # # Define bar centroids wdth = (energy_bins[1]-energy_bins[0]) lngth = bins - 1 centroids = energy_bins + wdth/2 ## if (fig): figure = pyplot.figure() ax = pyplot.subplot(111) ax.bar(centroids[:lngth], columns[:lngth],width=wdth,alpha=0.5) ## return centroids[:lngth], columns[:lngth]
def plot_components_grid(eigvec_file, min_eigstate_index, state_step, num_rows, num_cols, X_vector = 0, majorX = 50, majorY = 0.02, col="b-o"): ### '''Plot in a num_rows x num_cols grid squared components of eigstates from min_eigenstate_index-th eigenvector (min value = 0) adding state_step. ''' # import numpy as np from matplotlib import pyplot from matplotlib.ticker import MultipleLocator, FormatStrFormatter # from survival_probability_basis import read_eigenstates # # eigstates=read_eigenstates(eigvec_file) # # fig,axes = pyplot.subplots(num_rows,num_cols,sharex=True,sharey=True) ## # if (not isinstance(X_vector,np.ndarray)): # majorXLocator = MultipleLocator(majorX) # majorXFormatter = FormatStrFormatter('%d') # else: # axes.tick_params(axis='both', which='major', labelsize=12) ## # majorYLocator = MultipleLocator(majorY) # ##pyplot.xlim(-5,240) # index_plot = min_eigstate_index # for index_row in range(0,num_rows): for index_col in range(0,num_cols): ## components = eigstates[:,index_plot] ## Eigenstate's components ## axes[index_row,index_col].tick_params(axis='both', which='major', labelsize=12) ## if (not isinstance(X_vector,np.ndarray)): axes[index_row,index_col].plot(components**2,col) # axes[index_row,index_col].xaxis.set_major_formatter(majorXFormatter) else: axes[index_row,index_col].plot(X_vector, components**2, col, markersize = 6) string_label = "$k = " + str(index_plot) + "$" axes[index_row,index_col].text(0.6, 0.05, string_label, fontsize=12) ## ## axes[index_row,index_col].annotate(min_eigstate_index+index_row+index_col+1, xy=(11, 0.75)) ## # axes[index_row,index_col].xaxis.set_major_locator(majorXLocator) # axes[index_row,index_col].tick_params(axis='both', which='major', labelsize=9) # axes[index_row,index_col].annotate(eigstate_index, xy=(150, 0.2)) ## index_plot = index_plot + state_step pyplot.subplots_adjust(wspace=0,hspace=0)
def plot_components(eigvec_file, eigval_file, bas_state_index, majorX=50, majorY=0.02, col="b-o"): ### '''LDOS Plots function Plot squared components in all eigenvectors of a bas_state_index basis element (min bas_state_index = 0) as a function of the state energy.''' ### import numpy as np from matplotlib import pyplot from matplotlib.ticker import MultipleLocator, FormatStrFormatter # from survival_probability_basis import read_energy_data, read_eigenstates # # eigstates = read_eigenstates(eigvec_file) eigvals = read_energy_data(eigval_file) # # majorXLocator = MultipleLocator(majorX) majorYLocator = MultipleLocator(majorY) # ## for bas_state in range(0,4): components = eigstates[ bas_state_index, :] ## Components of a given basis element in all eigenstates ## panel = pyplot.subplot(1, 1, 1) panel.tick_params(axis='both', which='major', labelsize=14) pyplot.plot(eigvals, components**2, col) ## panel.xaxis.set_major_locator(majorXLocator) panel.yaxis.set_major_locator(majorYLocator) ## ## ## pyplot.annotate(bas_state, xy=(30, 0.07)) pyplot.xlabel("Energy") pyplot.ylabel("Squared Eigenvector Components") panel.xaxis.label.set_fontsize(18) panel.yaxis.label.set_fontsize(18)
def plot_components(eigvec_file, eigstate_index, save_data = False, X_vector = 0, file_name = "sqrd_component_out.dat", majorX = 50, majorY = 0.02, col="b-o"): ### '''Plot or save the squared components of the eigstate_index-th eigenvector (min value = 0). Options: save_data : if True do no plot the data but save them. X_vector : plot as a function of the X_vector instead of simple indices. file_name : squared component filename if save_data = True ''' # import numpy as np from matplotlib import pyplot from matplotlib.ticker import MultipleLocator, FormatStrFormatter # from survival_probability_basis import read_eigenstates # # eigstates=read_eigenstates(eigvec_file) # # majorYLocator = MultipleLocator(majorY) # components = eigstates[:,eigstate_index]**2 ## Eigenstate's squared components ## if (save_data): # Saving data if (isinstance(X_vector,np.ndarray)): data_save = np.transpose(np.array([X_vector,components])) else: data_save = np.transpose(np.array([range(len(components)),components])) ## np.savetxt(file_name, data_save) else: # Plot data panel = pyplot.subplot(1, 1, 1) ## ## if (not isinstance(X_vector,np.ndarray)): majorXLocator = MultipleLocator(majorX) majorXFormatter = FormatStrFormatter('%d') panel.tick_params(axis='both', which='major', labelsize=12) pyplot.plot(components, col) panel.xaxis.set_major_locator(majorXLocator) panel.xaxis.set_major_formatter(majorXFormatter) else: panel.tick_params(axis='both', which='major', labelsize=12) pyplot.plot(X_vector, components, col, markersize = 6) ## panel.yaxis.set_major_locator(majorYLocator) ## ## panel.text(0.7, 0.03, r'$k = 49$', fontsize=15) pyplot.plot([0.4166666666666667, 0.4166666666666667], [0, 0.039], 'k-.', lw=2) ## pyplot.annotate("$k = 148$", xy=(0.1, 0.025)) ## pyplot.xlabel("Normalized Basis State Energy $e_\omega$") ## SO(4) basis pyplot.xlabel("Normalized Basis State Energy $e_n$") ## U(3) basis ## pyplot.ylabel("$|C_\omega^{(k)}|^2$") ## SO(4) basis pyplot.ylabel("$|C_n^{(k)}|^2$") ## U(3) basis panel.xaxis.label.set_fontsize(18) panel.yaxis.label.set_fontsize(18) return
## Variable length grids t_max = 60.;dim_t = 5000 time_grid = np.zeros(dim_t+1) for index in np.arange(0,dim_t+1): time_grid[index] = t_max*index**3/dim_t**3 # Basis states indexes (start in 1) -1 --> Closest to separatrix basis_states_indexes = [-1] ########################################### # End of Defs ## Edit only this section # ########################################### # print "N = ", Nval, ", L = ", Lval, ", xi = ", xi ## Read eigenvalues (absolute eigenvalues) and eigenvectors Eigenvalues = read_energy_data("../../test/eigval_"+basis+"_N"+str(Nval)+"_L"+str(Lval)+".dat") Eigenstates = read_eigenstates("../../test/eigvec_"+basis+"_N"+str(Nval)+"_L"+str(Lval)+".dat") E0 = Eigenvalues[0] Eigenvalues = Eigenvalues - E0 # Escitation energies # Computing survival probability print "Computing survival probability ... " # sp=np.zeros((time_grid.shape[0],len(basis_states_indexes)+1),order="F") # +1 for the abscyssa values # for index, index_state in enumerate(basis_states_indexes): if (index == -1): # Find basis state close to separatrix if basis is "u3": basisen = energy_basis_I(Nval,np.arange(0,Nval+1,2), Lval, xi) else: basisen = energy_basis_II(Nval,np.arange(0,Nval+1,2), Lval, xi) #
# N_value = 500 l_value = 0 xi_value = 0.4 ##eigenvectors = "../test/eigvec_so3_xi04_N500_L0.dat" eigenvectors = "../test/eigvec_u2_xi04_N500_L0.dat" ##eigenvalues = "../test/energy_so3_xi_04_N500_L0.dat" eigenvalues = "../test/energy_u2_xi_04_N500_L0.dat" # ## time_max = 16 ## time_points = 300 time_max = 0.5 time_points = 200 nvals = np.arange(0, N_value + 2, 2) # eigstates = read_eigenstates(eigenvectors) eigvals = read_energy_data(eigenvalues) # time_grid = np.linspace(0.0, time_max, time_points) spb = survival_probability_basis_states(eigvals, eigstates, 1, N_value / 2 + 1, t_max=time_max, dim_t=time_points) # ##majorXLocator = MultipleLocator(5) ##majorXFormatter = FormatStrFormatter('%d') majorXLocator = MultipleLocator(0.2) majorXFormatter = FormatStrFormatter('%3.1f') #
#t_max = 5.;dim_t = 5000 #time_grid = np.zeros(dim_t+1) #for index in np.arange(0,dim_t+1): # time_grid[index] = (t_max*index**3/dim_t**3) # Basis states indexes (start in 1) -1 --> Closest to separatrix basis_states_indexes = [-1] ########################################### # End of Defs ## Edit only this section # ########################################### # print "N = ", Nval, ", L = ", Lval, ", xi = ", xi ## Read eigenvalues (absolute eigenvalues) and eigenvectors Eigenvalues = read_energy_data("../test/eigval_" + basis + "_N" + str(Nval) + "_L" + str(Lval) + ".dat") Eigenstates = read_eigenstates("../test/eigvec_" + basis + "_N" + str(Nval) + "_L" + str(Lval) + ".dat") E0 = Eigenvalues[0] Eigenvalues = Eigenvalues - E0 # Excitation energies # Computing survival probability print "Computing survival probability ... " # sp = np.zeros((time_grid.shape[0], len(basis_states_indexes) + 1), order="F") # +1 for the abscyssa values # for index, index_state in enumerate(basis_states_indexes): if (index_state == -1): # Find basis state close to separatrix if basis is "u2": basisen = energy_basis_u2(Nval, np.arange(Lval, Nval + 1, 2), Lval, xi) else:
# N_value = 500 l_value = 0 xi_value = 0.4 ##eigenvectors = "../test/eigvec_so3_xi04_N500_L0.dat" eigenvectors = "../test/eigvec_u2_xi04_N500_L0.dat" ##eigenvalues = "../test/energy_so3_xi_04_N500_L0.dat" eigenvalues = "../test/energy_u2_xi_04_N500_L0.dat" # ## time_max = 16 ## time_points = 300 time_max = 0.5 time_points = 200 nvals = np.arange(0, N_value + 2, 2) # eigstates=read_eigenstates(eigenvectors) eigvals= read_energy_data(eigenvalues) # time_grid = np.linspace( 0.0, time_max, time_points) spb = survival_probability_basis_states(eigvals, eigstates, 1, N_value/2 + 1, t_max = time_max, dim_t = time_points) # ##majorXLocator = MultipleLocator(5) ##majorXFormatter = FormatStrFormatter('%d') majorXLocator = MultipleLocator(0.2) majorXFormatter = FormatStrFormatter('%3.1f') # fig,axes = pyplot.subplots(5,5,sharex=True,sharey=True) # pyplot.xlim(0,time_max) pyplot.ylim(0,1) #
def hist_components_LDOS(eigvec_file, basis_state, energy_file, ExcE = True, N_value = 1, bins = 20, OutputCentroid = False, fig=False, iprint=0): ### '''LDOS Plot: Histogram of the squared components of a basis state as a function of the system eigenvectors (min basis state value = 0) and as a function of the system eigenvalues. Options: ExcE : Transform energy_file to excitation energies. Default value True N_value : renormalize by the system size (N_value = N) bins : number of bins in the histogram OutputCentroid : If True outputs the centroid value for the bardiagram. fig : plot bar fig (pyplot.show()) iprint : control verbosity ''' # import numpy as np from matplotlib import pyplot from matplotlib.ticker import MultipleLocator, FormatStrFormatter # from survival_probability_basis import read_eigenstates, read_energy_data # # eigstates=read_eigenstates(eigvec_file) ## eigenvalues = read_energy_data(energy_file) if (ExcE): E0 = eigenvalues[0] eigenvalues = eigenvalues - E0 # eigenvalues = eigenvalues/N_value ## Energy bins energy_bins=np.linspace(eigenvalues[0], eigenvalues[-1],num = bins+1) if (iprint > 0): print "Energy bins = ", energy_bins # ## Basis state components components = eigstates[basis_state,:]**2 # columns = np.zeros(bins) ### idx = 0 for index_bin in range(1,bins+1): # if (iprint > 0): print "bin index = ", index_bin, " of ", bins for aval_index in range(idx, len(eigenvalues)+1): # energy = eigenvalues[aval_index] if (iprint > 0): print "aval_index, energy = ", aval_index, energy # if (energy < energy_bins[index_bin]): columns[index_bin-1] = columns[index_bin-1] + components[aval_index] idx = idx + 1 if (iprint > 0): print "idx = ", idx, "col = ", columns[index_bin-1] else: if (iprint > 0): print "BREAK", index_bin, aval_index break # Sum last component columns[index_bin-1] = columns[index_bin-1] + components[aval_index] if (iprint > 0): print "Columns = ", columns # Define bar centroids wdth = (energy_bins[1]-energy_bins[0]) lngth = bins centroids = energy_bins + wdth/2. ## if (fig): figure = pyplot.figure() ax = pyplot.subplot(111) ax.bar(centroids[:lngth], columns[:lngth],width=wdth,alpha=0.5) ## if (OutputCentroid): return centroids[:lngth], columns[:lngth] else: output_data = np.zeros([2*bins+1,2]) # +1 to close the block diagram output_data[0,0] = energy_bins[0] output_data[0,1] = columns[0] # icount = 1 for index_bin in range(1,bins): output_data[icount,0] = energy_bins[index_bin] output_data[icount,1] = columns[index_bin-1] output_data[icount+1,0] = energy_bins[index_bin] output_data[icount+1,1] = columns[index_bin] icount = icount + 2 # output_data[icount,0] = energy_bins[-1] output_data[icount,1] = columns[-1] output_data[icount+1,0] = energy_bins[-1] output_data[icount+1,1] = 0.0 return output_data