Пример #1
0
def structure_factor(VW, L, n_frames=10, n_start=1, 
        filters=0.05, dh=0.05,save='sf'):
    import MD.analysis.sfactor as sf
    #Find Structure Factor
    stmp,qx = sf.sfactor(VW[n_start:n_start+n_frames],L=L,l=20) 
    S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx)
    #Plot the graph
    xlabel = '$|\\vec{q}$ $|$'
    ylabel = '$S(\\vec{q}$ $)$ '
    pyplot.plot(Q, S, linestyle='', marker='x', 
            xlabel=xlabel, ylabel=ylabel, save=save)
    util.pickle_dump(Q,'Vsfx%i.pkl'%n_start)
    util.pickle_dump(S,'Vsfy%i.pkl'%n_start)
    #if len(QQ)>500:
    #    bars,height = sf.sf_max(QQ,qpeaks=8)
    #    db_x,db_y = sf.dbfactor(msdr=5)
    #    pyplot.plot_bar(bars, height, xlabel=xlabel, ylabel=ylabel,
    #            save=save)
    #    pyplot.plot(db_x, db_y, linestyle='--', xlabel=xlabel, ylabel=ylabel,
    #            save=save)
    #    #return q, s, bars, height, db_x, db_y
    #    return Q, S, primitive_vectors
    #filter out the noise
    Q, S, primitive_vectors = sf.sf_filter(Q, S, primitive_vectors,
            filters=filters, save = 'sf%i'%n_start)
    return Q, S, primitive_vectors
Пример #2
0
def self_intermediate_scattering(VW, L, x, n_start=1, 
        filters=0.05, dh=0.05,save='sf',l=5,delta=5,calc=True):
    import MD.analysis.sfactor as sf
    #Find Structure Factor
    if calc:
        import time
        from MD.canalysis.int_scattering import int_scatter
        F = []
        for i in range(delta):
            print i
            print "caculating Average" 
            print VW.shape
            print "Structure Factor" 
            A = VW[n_start+i]
            stmp,qx = sf.sfactor(np.array([A]),L=L[n_start],l=l)
            S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx)
            S,Q,primitive_vectors = sf.sf_filter_max(S,Q,primitive_vectors,filters=0.5)
            index = S.index(max(S))
            k = primitive_vectors[S.index(max(S))]
            #take the average over different starting configurations
            print "Calculating Int Scattering" 
            start = time.clock()
            scat_c = int_scatter(VW[n_start+i:],np.array(L[0]),np.array(k),
                    np.array(x[:-(n_start+i)]))
            end = time.clock()
            print 'cython runtime'
            print end-start
            F.append(scat_c)
        F_avg = np.zeros((len(F[-1])))
        for i in F:
            for j in range(len(F[-1])):
                F_avg[j] += i[j]
        F_avg /= delta
        #reset the zero of x so that the plot starts at the correct time
        x = range(len(F[-1]))
        util.pickle_dump([x,F_avg],'si_scat.pkl')
    xlabel = 't'
    ylabel = 'F(q,t)'
    save = 'int_scatter'
    A = util.pickle_load('si_scat.pkl')
    x = A[0]
    F_avg = A[1]
    #Kohlraush-Williams-Watts function
    # A exp[-(t/tau_b)^beta]
    beta = 1.4
    tau_a = 6
    K = []
    K_x = []
    fid = open('self_scat.dat','w')
    for i in range(len(A[0])):
        fid.write('%i %.4f\n'%(A[0][i],A[1][i]))
    fid.close()
    for i in np.arange(1,len(x),0.1):
        K.append(F_avg[1] * math.exp(-(i/tau_a)**beta))
        K_x.append(i)
Пример #3
0
def find_lattice(MD,VW,L,n_finish=1,n_start=0,delta=20,filters=0.2):
    # Identify the bcc lattice as a grid and find the recipricol lattice
    #Find Structure Factor
    #print VW.shape
    redo = True
    while redo == True:
        stmp,qx = sf.sfactor(VW[-10:-1],L=L,l=10)
        S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx)
        print np.array(Q)
        Q, S, primitive_vectors = sf.sf_filter(Q, S, primitive_vectors,
                filters=filters, save = 'sffilter')
        a,b = MD.analysis.sfactor.recipricol(Q,primitive_vectors)
        #Find the best fit for the qlattice at a particular frame by looking
        #for the lowest value of the msdr
        x = np.arange(n_start,n_finish,delta)
        defects = np.zeros((len(x),15))
        lowest=10000
        for k in x:
            for i in range(10):
                crystal, c = make.make_bcc(a[0], a[1], a[2], VW[k][i], L[0]+5)
                msdr_x =  msdr.msd_r(VW[k], crystal, L)
                if lowest > msdr_x:
                    lowest = msdr_x
                    index = i
                    frame = k
        crystal, cword = make.make_bcc(a[0], a[1], a[2], VW[frame][index], L[0]+5)
        print np.array(b)
        print np.array(a)
        if raw_input('Do you want to retry?[no]/yes  ')  == 'yes':
            redo = True
        else:
            redo = False
    util.pickle_dump(cword,'cword.pkl')
    util.pickle_dump(crystal,'ccrystal.pkl')
    #filter out the comensurate crystal
    C = []
    for i in crystal:
        #make sure there aren't two that are close due to pbc
        if rcut_neighbors_point(np.array(C),i,L,rcut=6) == 0:
            C.append(i)
    #write out the lattice
    fid = open('testlattice.xyz','w')
    fid.write(('%i\n')%(len(C)))
    fid.write('Atoms\n')
    for i in range(len(C)):
        fid.write(('%c   %f   %f   %f\n')%('A',C[i][0],C[i][1], C[i][2]))
    fid.close()
    util.pickle_dump(C,'C.pkl')

    return crystal, C
Пример #4
0
def structure_factor(VW, L, n_frames=10, n_start=1, 
        filters=0.05, dh=0.05,save='sf',l=10):
    import MD.analysis.sfactor as sf
    #Find Structure Factor
    A = Average(VW,L,n_start,n_frames)
    #A = VW[n_start]
    stmp,qx = sf.sfactor(np.array([A]),L=L[n_start],l=l)
    S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx)
    fid = open('sftotal.txt','w')
    fid.write('S  Q\n')
    for i in range(len(S)):
        fid.write('%.5f %.5f\n'%(S[i],Q[i]))
    fid.close()
    #Plot the graph
    xlabel = '$|\\vec{q}$ $|$'
    ylabel = '$S(\\vec{q}$ $)$ '
    #sp4 = 0.634698
    #sp12 = 0.530493
    #sc 1.121997
    #pyplot_eps.plot_sf(Q, S,0.552381, linestyle='', marker='x', 
            #xlabel=xlabel, ylabel=ylabel, save=save,xlen=20)
    pyplot.plot_sf(Q, S,0.552381, linestyle='', marker='x', 
            xlabel=xlabel, ylabel=ylabel, save=save,xlen=20)
    util.pickle_dump(Q,'Vsfx%i.pkl'%n_start)
    util.pickle_dump(S,'Vsfy%i.pkl'%n_start)
    print 'finished reconstruction'
    #if len(QQ)>500:
    #    bars,height = sf.sf_max(QQ,qpeaks=8)
    #    db_x,db_y = sf.dbfactor(msdr=5)
    #    pyplot.plot_bar(bars, height, xlabel=xlabel, ylabel=ylabel,
    #            save=save)
    #    pyplot.plot(db_x, db_y, linestyle='--', xlabel=xlabel, ylabel=ylabel,
    #            save=save)
    #    #return q, s, bars, height, db_x, db_y
    #    return Q, S, primitive_vectors
    #filter out the noise
    Q, S, primitive_vectors = sf.sf_filter(Q, S, primitive_vectors,
            filters=filters,save=save)
    import MD.analysis.reconstruct_lattice as rl
    import MD.unit.make_bcc as mb
    con = True
    while con:
        a1,a2,a3 = rl.reconstruct_lattice(Q,primitive_vectors,save+'recipricol.txt')
        print a1,a2,a3
        mb.make_bcc(a1,a2,a3,A[0],L[n_start])
        if raw_input('Reselect? (y)/N') == 'N':
            con = False
    return Q, S, primitive_vectors
Пример #5
0
def structure_factor(VW, L, n_frames=10, n_start=1, 
        filters=0.05, dh=0.05,save='sf',l=10):
    import MD.analysis.sfactor as sf
    #Find Structure Factor
    #Average_position
    stmp,qx = sf.sfactor(np.array([VW]),L=L,l=l)
    S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx)
    #Plot the graph
    xlabel = '$|\\vec{q}$ $|$'
    ylabel = '$S(\\vec{q}$ $)$ '
    pyplot.plot(Q, S, linestyle='', marker='x', 
            xlabel=xlabel, ylabel=ylabel, save=save)
    util.pickle_dump(Q,'Vsfx%i.pkl'%n_start)
    util.pickle_dump(S,'Vsfy%i.pkl'%n_start)
    print 'finished reconstruction'
    Q, S, primitive_vectors = sf.sf_filter(Q, S, primitive_vectors,
            filters=filters,save=save)
    print 'sorting peaks'
    return Q, S, primitive_vectors