예제 #1
0
    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
예제 #2
0
        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:
예제 #3
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
예제 #4
0
        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")
예제 #6
0
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)
예제 #7
0
    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)
예제 #10
0
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}$')
예제 #11
0
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()
예제 #13
0
        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}$' + ')',
예제 #15
0
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)
예제 #16
0
    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)

예제 #17
0
    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)
예제 #18
0
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