psistuff = PsiData(scan=scan, loadsuf=loadsuf, savesuf=loadsuf, name=f"{pre}psivsr") rs = psistuff.r() psis = psistuff.psi() observablestuff = ObservableData(scan=scan, loadsuf=loadsuf, savesuf=loadsuf, name=f"{pre}observables") R = observablestuff.R() eta = observablestuff.eta() dband = 2 * np.pi / eta axarr[0].plot(rs, (dband - np.cos(psis)) / np.cos(psis) * 100, '-', color=colors[0]) axarr[0].set_xlabel(r'$r$', fontsize=10) axarr[0].set_ylabel('molecular strain (\%)', fontsize=10) axarr[0].legend(frameon=False) fibrilstrain = FibrilStrain(psistuff, observablestuff, sfile_format='pdf') rs, thetas = fibrilstrain.mesh_polar(grid_skip=4)
k24 = pair[1] scan = {} scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\omega'] = str(omega) obsfwd = ObservableData(["\\Lambda"], scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) Lambdas = obsfwd.data[:, 0] x, y = obsfwd.surfacetwist()[1:], 2 * np.pi / obsfwd.eta()[1:] ax.plot(x, y, '.', color=colors[js]) ax.plot(x[-1], y[-1], 'rs') dums = np.linspace(0.05, 0.25, num=150, endpoint=True) ax.plot(dums, np.cos(dums), '--') ax.set_xlabel(r"$\psi(R)$", fontsize=10) ax.set_ylabel(r"$2\pi/\eta$", fontsize=10) fig.subplots_adjust(left=0.1, right=0.9, bottom=0.15, top=0.95) fig.savefig(obsfwd.observable_sname("twistvsdband", plot_format="pdf")) plt.show()
scan['\\Lambda'] = Lambda scan['k_{24}'] = k24 scan['\\omega'] = omega obsfwd = ObservableData(["\\gamma_s"], scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) gammas = obsfwd.data[:, 0] ysfwd = [ obsfwd.E(), obsfwd.R(), obsfwd.eta(), obsfwd.delta(), obsfwd.surfacetwist() ] """ obsbkwd = ObservableData(["\\gamma_s"],scan_dir='scanbackward',scan=scan,loadsuf=loadsuf, savesuf=savesuf) ysbkwd = [obsbkwd.R(),obsbkwd.surfacetwist()] g_small,g_large,g_eq = find_metastable(obsfwd.R(),obsbkwd.R(), obsfwd.E(),obsbkwd.E()) print(g_small,g_large,g_eq) """
savesuf=savesuf) if not obsfwd.file_exists: continue obsfwd.sort_observables() obsfwd.remove_duplicates() Lambdas = obsfwd.data[:,0] #obsbkwd = ObservableData(["\\Lambda"],scan_dir='scanbackward',scan=scan,loadsuf=loadsuf, # savesuf=savesuf) #obsbkwd.sort_observables() ysfwd = [obsfwd.E(),obsfwd.R(),obsfwd.eta(),obsfwd.delta(),obsfwd.surfacetwist()] #ysbkwd = [obsbkwd.E(),obsbkwd.R(),obsbkwd.eta(),obsbkwd.delta(),obsbkwd.surfacetwist()] for i,observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$\psi(R)$' elif observable == 'eta': ylabel = r'$2\pi/\eta$' ysfwd[i] = 2*np.pi/ysfwd[i] elif observable == 'delta': ylabel = r'$\delta/\delta_0$' ysfwd[i] = ysfwd[i]/np.sqrt(2/3) elif len(observable) > 1:
scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) Lambdas = obsfwd.data[:, 0] if js == 1: obsbkwd = ObservableData(["\\Lambda"], scan_dir='scanbackward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) obsbkwd.sort_observables() ysbkwd = [obsbkwd.E(), obsbkwd.eta(), obsbkwd.delta()] ysfwd = [obsfwd.E(), obsfwd.eta(), obsfwd.delta()] for i, observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$\psi(R)$' elif observable == 'eta': ylabel = r'$2\pi/\eta$' ysfwd[i] = 2 * np.pi / ysfwd[i] if js == 1: ysbkwd[i] = 2 * np.pi / ysbkwd[i] elif observable == 'delta': ylabel = r'$\delta/\delta_0$' ysfwd[i] = ysfwd[i] / np.sqrt(2 / 3)
scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) obsbkwd = ObservableData(["\\Lambda"], scan_dir='scanbackward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) obsbkwd.sort_observables() observable_list = ['E', 'R', 'eta', 'delta', 'surfacetwist'] ysfwd = [ obsfwd.E(), obsfwd.R(), obsfwd.eta(), obsfwd.delta(), obsfwd.surfacetwist() ] ysbkwd = [ obsbkwd.E(), obsbkwd.R(), obsbkwd.eta(), obsbkwd.delta(), obsbkwd.surfacetwist() ] for i, observable in enumerate(observable_list): fig[observable] = plt.figure() ax[observable] = fig[observable].add_subplot(1, 1, 1)
obsfwd = ObservableData(["strain","averagetwist"],scan_dir=f'scanforward{type}', scan=scan,loadsuf=loadsuf,savesuf=savesuf) Req = obsfwd.R()[0] print(Req) strains = obsfwd.data[:,0] stresses = np.gradient(obsfwd.E(),strains)*K22*q*q/1000 # stress in kPa stresses[0] = 0.0 avgtwist = obsfwd.data[:,1] minindex = np.argmin(avgtwist) if type == "no-core": # incompatibility between the no core and core case so need to do this hack deltas = obsfwd.eta() else: deltas = obsfwd.delta() ysfwd = [stresses,avgtwist,deltas] if obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ",Lambda) for j,observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$<\psi>$' + ' (' + r"$\si{\radian}$" + ')'
ax[observable] = fig[observable].add_subplot(1,1,1) for j,Lambda in enumerate(Lambdas): scan = {} scan['\\Lambda']=Lambda scan['k_{24}']=k24 scan['\\omega']=omega obsfwd = ObservableData(["\\gamma_s"],scan_dir='scanforward',scan=scan,loadsuf=loadsuf, savesuf=savesuf) gammas = obsfwd.data[:,0] ysfwd = [obsfwd.E(),obsfwd.R(),obsfwd.eta(), obsfwd.delta(),obsfwd.surfacetwist()] """ obsbkwd = ObservableData(["\\gamma_s"],scan_dir='scanbackward',scan=scan,loadsuf=loadsuf, savesuf=savesuf) ysbkwd = [obsbkwd.R(),obsbkwd.surfacetwist()] g_small,g_large,g_eq = find_metastable(obsfwd.R(),obsbkwd.R(), obsfwd.E(),obsbkwd.E()) print(g_small,g_large,g_eq) """
class FibrilStrain(ReadParams): def __init__(self,scan_dir="",scan={}, loadsuf=["K_{33}","k_{24}","\\Lambda", "\\omega","\\gamma_s"], savesuf=["K_{33}","k_{24}","\\Lambda", "\\omega","\\gamma_s"], sfile_format="pdf",obsname = "observables", datfile="data/input.dat",psiname = "psivsr", psiloadfilepath="data",obsloadfilepath="data", psisavefilepath="results",obssavefilepath="results"): ReadParams.__init__(self,datfile=datfile, scan=scan,loadsuf=loadsuf,savesuf=savesuf) self.obsdata = ObservableData(scan=scan,loadsuf=loadsuf,savesuf=savesuf, datfile=datfile,loadfilepath=obsloadfilepath, savefilepath=obssavefilepath, scan_dir=scan_dir,name=obsname) self.psidata = PsiData(scan=scan,loadsuf=loadsuf,savesuf=savesuf, datfile=datfile,loadfilepath=psiloadfilepath, savefilepath=obssavefilepath, scan_dir = scan_dir,name=psiname) self.scan_dir=scan_dir self.sfile_format=sfile_format self.i_R_c = self.find_R_c_index() return def find_R_c_index(self): i = np.argmin(np.abs(self.psidata.r()-self.obsdata.R_c())) return i def mesh_polar(self,num_azm=50,grid_skip=1): azm = np.linspace(0,2*np.pi,num=num_azm) rs,thetas = np.meshgrid(self.psidata.r()[::grid_skip], azm) return rs,thetas def strain_1d(self,denom='d(r)'): preferred_dband = np.cos(self.psidata.psi()[self.i_R_c:]) true_dband = 2*np.pi/self.obsdata.eta() if denom=='d(r)': dn = preferred_dband elif denom=='d': dn = true_dband else: raise ValueError(f'setting denominator of the strain equation to ' '"{denom}" is not valid, it must either be "d(r)" ' '(the default value) or "d".') dums = np.full(self.i_R_c,np.nan) s0s = (true_dband-preferred_dband)/dn return np.concatenate((dums,s0s)) def strain_polar(self,r_mesh,denom='d(r)',grid_skip=1): return np.tile(self.strain_1d(denom=denom)[::grid_skip], (r_mesh.shape[0],1)) def strain_sname(self,descriptor="polar"): suffix = self.write_suffix(suffix_type="save") if self.scan_dir != "": sname = f"results/_{descriptor}_strain_{self.scan_dir}_{suffix}.{self.sfile_format}" else: sname = f"results/_{descriptor}_strain_{suffix}.{self.sfile_format}" return sname