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
run = SingleRun(rp, scan_dir=scan_dir, executable=executable, strain=strain) # run C executable. run.run_exe() # move file written by C executable from temporary data path to true data path run.mv_file(f'observables') run.mv_file('psivsr', strain=strain) psistuff = PsiData(scan=scan, loadsuf=loadsuf, savesuf=savesuf, name=f"psivsr", strain=strain) rs = psistuff.r() psis = psistuff.psi() psiav = simps(integrand(rs, psis), rs) run.remove_file(fname="psivsr", strain=strain) # load the final values of E, R, eta, delta, and surface twist. Ei, Ri, etai, deltai, surftwisti = run.get_all_observables( 'observables', str2float=True) if i == 0:
axarr.append(fig.add_subplot(gs[0, 0])) axarr.append(fig.add_subplot(gs[0, 1:], projection='polar')) scan = {} scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\Lambda'] = Lambda scan['\\omega'] = omega loadsuf = ["K_{33}", "k_{24}", "\\Lambda", "\\omega", "\\gamma_s"] pre = "frustrated" 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
rp = ReadParams(scan=scan, loadsuf=loadsuf, savesuf=savesuf) # create a class to do calculations with current parameters in scan. run = SingleRun(rp, executable=executable, strain=strain) # run C executable. run.run_exe() # move file written by C executable from temporary data path to true data path run.mv_file(f'observables', newname=newobsname) run.mv_file('psivsr', newname=newpsiname, strain=strain) psistuff = PsiData(scan=scan, loadsuf=loadsuf, savesuf=savesuf, name=newpsiname, strain=strain) rs = psistuff.r() psis = psistuff.psi() psiav = simps(integrand(rs, psis), rs) # load the final values of E, R, eta, delta, and surface twist. Ei, Ri, etai, deltai, surftwisti = run.get_all_observables( newobsname, str2float=True) if i == 0: # again, if the strain is zero, then I have just determined the equilibrium
ax[observable].set_ylabel(ylabel, fontsize=10) ax[observable].plot(Lambdas[i_Lambda], ysfwd[i][i_Lambda], color=colors[js], marker=mtypes[0], markeredgewidth=0.5, markeredgecolor="w") ax[observable].set_xlabel(r"$\Lambda$", fontsize=10) for ms, Lambda in enumerate(Lambdalist): scan['\\Lambda'] = Lambda psistuff = PsiData(scan=scan, loadsuf=psi_loadsuf, savesuf=psi_loadsuf, name=f"psivsr") ax["psi(r)"].plot(psistuff.r() / psistuff.r()[-1], psistuff.psi(), linestyle=ltypes[0], label=rf"$\Lambda={Lambda}$", color=colors[js], lw=3) ax["psi(r)"].plot(1.0, psistuff.psi()[-1], marker=mtypes[ms], color=colors[js], markeredgewidth=0.5, markeredgecolor="w")
gs = GridSpec(1, 3, figure=fig, wspace=0.0) axarr = [] axarr.append(fig.add_subplot(gs[0, 0])) axarr.append(fig.add_subplot(gs[0, 1:], projection='polar')) scan = {} scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\Lambda'] = Lambda scan['\\omega'] = omega loadsuf = ["K_{33}", "k_{24}", "\\Lambda", "\\omega", "\\gamma_s"] psistuff = PsiData(scan=scan, loadsuf=loadsuf, savesuf=loadsuf, name=f"psivsr_frustrated") rs = psistuff.r() psis = psistuff.psi() observablestuff = ObservableData(scan=scan, loadsuf=loadsuf, savesuf=loadsuf, name=f"observables_frustrated") R = observablestuff.R() eta = observablestuff.eta() print("radius is ", R)
axins = inset_axes(ax, width=width / 3, height=height / 3, loc=4, bbox_to_anchor=(0.1, 0.1, 1, 1), bbox_transform=ax.transAxes) types = ['linear', 'frustrated'] for i, type in enumerate(types): psistuff = PsiData(scan=scan, loadsuf=loadsuf, savesuf=savesuf, name=f"psivsr_{type}", loadfilepath=loadfilepath, datfile=datfile, sfile_format="pdf") rs = psistuff.r() / q psis = psistuff.psi() axins.plot(rs, psis, markertypes[i], label=f'{type} twist', lw=2) print("Radius = ", rs[-1], " nm.") print("surface twist = ", psis[-1], " rad.") axins.set_xlabel(r'$\tilde{r}$' + ' (' + r'$\si{\nano\meter}$' + ')', fontsize=8,
marker=mtypes[1],markeredgewidth=0.5,markeredgecolor="w") ax[observable].set_ylabel(ylabel,fontsize = 10) ax[observable].plot(Lambdas[i_Lambda],ysfwd[i][i_Lambda],color=colors[js], marker=mtypes[0],markeredgewidth=0.5,markeredgecolor="w") ax[observable].set_xlabel(r"$\Lambda$",fontsize = 10) for ms,Lambda in enumerate(Lambdalist): scan['\\Lambda'] = Lambda psistuff = PsiData(scan=scan,loadsuf=psi_loadsuf,savesuf=psi_loadsuf, loadfilepath=loadfilepath,datfile=datfile, name=f"psivsr") ax["psi(r)"].plot(psistuff.r()/psistuff.r()[-1],psistuff.psi(), linestyle=ltypes[0],label=rf"$\Lambda={Lambda}$", color=colors[js],lw=3) ax["psi(r)"].plot(1.0,psistuff.psi()[-1],marker=mtypes[ms], color=colors[js],markeredgewidth=0.5,markeredgecolor="w") if Lambda == '27': psistuff = PsiData(scan=scan,loadsuf=psi_loadsuf,savesuf=psi_loadsuf, loadfilepath=loadfilepath,datfile=datfile, name=f"frustratedpsivsr") ax["psi(r)"].plot(psistuff.r()/psistuff.r()[-1],psistuff.psi(), linestyle=ltypes[1],label=rf"$\Lambda={Lambda}$",
gamma = str(0.04) k24 = str(0.5) Lambda = str(600.0) omega = str(20.0) scan = {} scan['k_{24}'] = k24 scan['\\gamma_s'] = gamma scan['\\Lambda'] = Lambda scan['\\omega'] = omega loadsuf = ["K_{33}", "k_{24}", "\\Lambda", "\\omega", "\\gamma_s"] # read in file name info psidata = PsiData(scan=scan, loadsuf=loadsuf, savesuf=loadsuf) hermitedata = PsiData(scan=scan, loadsuf=loadsuf, savesuf=loadsuf, name="hermite-psivsr") fig = plt.figure() fig.set_size_inches(width, 3 * height) ax1 = fig.add_subplot(3, 1, 1) ax2 = fig.add_subplot(3, 1, 2) ax3 = fig.add_subplot(3, 1, 3)
type = input("specify type (either linear, constant, " "or no type in which case just press enter):\n") scan = {} scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\Lambda'] = Lambda scan['\\omega'] = omega R_units = 1000.0 / 10.0 # units of nano meters, with q = 10 (um)^{-1} loadsuf = ["K_{33}", "k_{24}", "\\Lambda", "\\omega", "\\gamma_s"] psistuff = PsiData(scan=scan, loadsuf=loadsuf, savesuf=loadsuf, name=f"psivsr{type}", sfile_format=".png") rs = psistuff.r() * R_units psis = psistuff.psi() * 180 / np.pi fig = plt.figure() width = 5 height = width fig.set_size_inches(width, height) ax1 = fig.add_subplot(1, 1, 1) ax1.plot(rs, psis, '.', label=rf'$\Lambda={Lambda}$')
type = input("Now input the type of psi vs r curve (linear, " "constant, or no type in which case just press enter):\n") scan = {} scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\Lambda'] = Lambda scan['\\omega'] = omega R_units = 1000.0/10.0 # units of nano meters, with q = 10 (um)^{-1} loadsuf=["K_{33}","k_{24}","\\Lambda","\\omega","\\gamma_s"] psistuff = PsiData(scan=scan,loadsuf=loadsuf,savesuf=loadsuf, name=f"psivsr{type}") rs = psistuff.r()*R_units psis = psistuff.psi()*180/np.pi observablestuff = ObservableData(scan=scan,loadsuf=loadsuf,savesuf=loadsuf, name=f"observables{type}") print(observablestuff.surfacetwist()) R = observablestuff.R()*R_units fig = plt.figure() width = 4 height = width
if obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ", Lambda) for i, u in enumerate(strains): if i == 0: strain = None else: strain = str(u) psi = PsiData(scan=scan, loadsuf=loadsuf, savesuf=savesuf, strain=strain) ax.plot(psi.r(), psi.psi(), '-', color=colors[i], label=rf"$\epsilon={u:.3}$") ax.set_xlabel(r"$r$") ax.set_ylabel(r"$\psi(r)$") ax.legend(frameon=False) fig.subplots_adjust(left=0.2, right=0.8, bottom=0.1, top=0.95, hspace=0.05) fig.savefig(obsfwd.observable_sname("psivsr-vsstrain", plot_format="pdf")) plt.show()
scan['\\omega'] = omega scan['\\Lambda'] = Lambda for j, u in enumerate(strains_for[type]): if j == 0: strain = None else: strain = str(u) psi = PsiData(scan=scan, loadsuf=loadsuf, savesuf=savesuf, strain=strain, name=names_for[type]) ax[j].plot(psi.r() / q * 1000, psi.psi(), '-', color=colors[i], label=rf"$\tilde{{\sigma}}=\num{{{stresses[j]:.2e}}}$") for i, stress in enumerate(stresses): ax[i].legend(frameon=False) ax[i].set_ylabel(r'$\psi(\tilde{r})$' + ' (' + r'$\si{\radian}$' + ')') if (i == 3): ax[i].set_xlabel(r'$\tilde{r}$' + ' (' + r'$\si{\nano\meter}$' +
q = 4 / 1000 # nm^{-1} scan = {} scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\Lambda'] = Lambda scan['\\omega'] = omega types = ['linear', 'frustrated'] for i, type in enumerate(types): psistuff = PsiData(scan=scan, loadsuf=loadsuf, savesuf=savesuf, name=f"psivsr_{type}", sfile_format="pdf") rs = psistuff.r() / q psis = psistuff.psi() ax1.plot(rs, psis, markertypes[i], label=f'{type} tendon', lw=2) print("Radius = ", rs[-1], " nm.") print("surface twist = ", psis[-1], " rad.") ax1.set_xlabel(r'$\tilde{r}$' + ' (' + r'$\si{\nano\meter}$' + ')', fontsize=10) ax1.set_ylabel(r'$\psi(\tilde{r})$' + ' (' + r'$\si{\radian}$' + ')',
markertypes=['--','-.'] for i,gamma in enumerate(gammas): scan = {} scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\Lambda'] = Lambda scan['\\omega'] = omega psistuff = PsiData(scan=scan,loadsuf=loadsuf,savesuf=savesuf,name=f"psivsr", sfile_format="pdf") rs = psistuff.r() psis = psistuff.psi() ax1.plot(rs/rs[-1],psis,markertypes[i],label=rf'$\gamma={gamma}$',lw=2) ax1.set_xlabel(r'$r/R$',fontsize=10) ax1.set_ylabel(r'$\psi(r)$',fontsize=10) ax1.set_xlim(left=0) ax1.set_ylim(bottom=0) ax1.legend(frameon=False,fontsize=10) fig.subplots_adjust(left=0.2,bottom=0.2)
scan['k_{24}'] = str(k24) scan['\\Lambda'] = str(Lambda) scan['\\omega'] = str(omega) scan['K_{33}'] = str(K33) observablestuff = ObservableData(scan=scan,loadsuf=loadsuf,savesuf=loadsuf, name=f"observables_frustrated") delta = observablestuff.delta() eta = observablestuff.eta() E0 = observablestuff.E() print(delta,eta,E0) psistuff = PsiData(scan=scan,loadsuf=loadsuf,savesuf=savesuf,name=f"psivsr_frustrated", sfile_format="pdf") rs = psistuff.r() psis = psistuff.psi() psiprimes = psistuff.psiprime() R0s = np.copy(rs[:len(rs)-10:5]) Es = np.copy(R0s)*0 for i,R0 in enumerate(R0s): Es[i] = E(R0,rs,psis,psiprimes,delta,eta,K33,k24,Lambda,omega,gamma)
gamma,k24,Lambda,omega = sys.argv[1],sys.argv[2],sys.argv[3],sys.argv[4] denom = sys.argv[5] scan = {} scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\Lambda'] = Lambda scan['\\omega'] = omega loadsuf=["K_{33}","k_{24}","\\Lambda","\\omega","\\gamma_s"] psistuff = PsiData(scan=scan,loadsuf=loadsuf,savesuf=loadsuf) rs = psistuff.r()/8.0*1000 psis = psistuff.psi() observablestuff = ObservableData(scan=scan,loadsuf=loadsuf,savesuf=loadsuf) print(observablestuff.surfacetwist()) R = observablestuff.R()/8.0*1000 fig = plt.figure() width = 3.487 height = width fig.set_size_inches(2*width,height)
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