示例#1
0
def main(argv):
    assert len(argv) == 3, "Usage: %s <in.trr> <out.xf.npy>" % argv[0]
    t = xdrfile(argv[1])
    xf = []
    for f in t:
        xf.append([f.x.copy(), f.f.copy()])

    # convert to Ang, kcal/mol/Ang
    xf = array(xf)
    xf[:, 0] *= 10.0
    xf[:, 1] *= 0.1 / 4.184
    save(argv[2], xf)
    print("Remember to check for artifacts from periodicity"
          " (not corrected here).")
示例#2
0
def run(name):
    # Define the molecule.
    calc, D = mk_calc("sys.py")

    trj = xdrfile(name)
    #vir = zeros(6)
    #N = trj.natoms/M
    #dx = zeros((N, 3))

    g = trj.__iter__()
    frame = g.next()
    #trj.seek(0)

    print frame.box
    K = 128
    s = Sfac(SofL(frame.box), array([K, K, K], dtype=int), 4)
    s.set_A(ewald_f)
    Q = zeros((D, K, K, s.data.ldim), complex128)
    C = zeros((D * (D + 1) / 2, K, K, s.data.ldim), complex128)
    S = 0

    print >> sys.stderr, "Working",
    for frame in g:
        L = frame.box
        wts, cm = calc(frame.x, L)

        for i in range(D):
            s.sfac(len(cm[i]), wts[i], cm[i].astype(float64))
            Q[i] = s.S()
        k = 0
        for i in range(D):
            for j in range(i, D):
                C[k] += Q[i] * Q[j].conjugate()
                k += 1
        S += 1
        #s.de1(vir)
        #s.de2(N, q, x, dx)
        #vir *= Cfac
        #dx *= Cfac
        #print dx/q[:,newaxis]
        #print frame.f - dx
        if S % 100 == 0:
            print >> sys.stderr, '\b.',

    print >> sys.stderr, "\n"
    C /= float(S)
    save("correl.npy", C)
示例#3
0
    def __init__(self, inputP ):
        # class variable 
        # self.traj[i, j, k ]: i , ith frame 
        #                      j , jth atom 
        #                      k , 0 1 2 -- x, y, z 
        # self.box[i, j] : i, ith frame 
        #                : j, box x, y ,z dimention 
        # self.timeStep  : timeStep between frames
        # self.molPair   : initial pairs  
        # self.nFrames   : total # of frames in traj 
        # self.inputP    : inputP ; keep it will be convinient 

        trajFn = inputP['-f']
        molFn  = inputP['-n']

        self.inputP  = inputP 


        # read traj 
        tmpx = []
        tmpbox = []
        tmpT1 = -1 
        tmpT2 = -1 
        

        for f in xdrfile.xdrfile(trajFn):
            tmpx.append( copy.deepcopy(f.x)  )
            tmpbox.append( np.diag( copy.deepcopy(f.box) ) )
            
            if tmpT1 == -1 and tmpT2 == -1:
                tmpT1 = f.time 
            elif tmpT1 != -1 and tmpT2 == -1:
                tmpT2 = f.time 
                self.timeStep = tmpT2 - tmpT1
            else:
                tmpT1 = tmpT2 
                tmpT2 = f.time 

                if self.timeStep != tmpT2 - tmpT1 :
                    print >> sys.stderr, 'Time step changed ! '
                    sys.exit(1)

            if _debug: 
                if  f.time > 20.0 :
                    break 


        self.traj = np.array( tmpx )
        self.nFrames = np.size(self.traj , 0 ) 

        self.box  = np.array( tmpbox )

        if _debug:
            pass 
            #print self.box
            #print self.traj

        
        # read mol index 
        # format i ,j start from index 0 
        self.molPair = []
        for i in open(molFn):
            tmp1 , tmp2 = map(int ,  i.split() ) 
            self.molPair.append( (tmp1 -1, tmp2 -1) )

        if _debug:
            #print self.molPair
            print self.timeStep
示例#4
0
    def __init__(self, inputP ):
        # class variable 
        # self.traj[i, j, k ]: i , ith frame 
        #                      j , jth atom 
        #                      k , 0 1 2 -- x, y, z 
        # self.molPair   : molPair to calcualte relative diffusion
        # self.timeStep  : timeStep between frames 
        # self.skip      : skip # of frames 
        # self.fout      : file handler of output file 
        # self.nFrames   : total # of frames in traj 
        # self.deltaF    : [] of delta frames for diffusion 
        # self.msdAllPair : dictionary stores that msd of all pairs 

        # if -thread is set , we need to multi threading .
        # self.flagThread : if it is set, we do multi thread 
        # self.flagExitThread : exit flag for all thread when self.queue is empty  
        # self.queueLock  : lock for the Queue 
        # self.queue      : queue for ( i, j  ) mol pairs 
        # self.threads    : list of all threads and used for join 
        # self.nThreads   : number of threads 


        trajFn = inputP['-f']
        molFn  = inputP['-n']


        # read traj 
        tmpx = []
        # tmpbox = []
        tmpT1 = -1 
        tmpT2 = -1 
        
        self.msdAllPair = {} 

        for f in xdrfile.xdrfile(trajFn):
            tmpx.append( copy.deepcopy(f.x)  )
            #tmpbox.append( copy.deepcopy(f.box) )
            
            if tmpT1 == -1 and tmpT2 == -1:
                tmpT1 = f.time 
            elif tmpT1 != -1 and tmpT2 == -1:
                tmpT2 = f.time 
                self.timeStep = tmpT2 - tmpT1
            else:
                tmpT1 = tmpT2 
                tmpT2 = f.time 

                if self.timeStep != tmpT2 - tmpT1 :
                    print >> sys.stderr, 'Time step changed ! '
                    sys.exit(1)

            if _debug: 
                if  f.time > 80.0 :
                    break 


        self.traj = np.array( tmpx )
        self.nFrames = np.size(self.traj , 0 ) 

        #self.box  = np.array( tmpbox )

        self.fout = open( inputP['-o'], 'w' ) 
        if inputP.has_key('-skip'):
            self.skip =  int( inputP['-skip'] ) 
        else:
            self.skip = 1 
        
        # nFrames / 10 will only provide 10 data points. 
        self.deltaF = range(1, self.nFrames/ 10, self.skip ) 
        
        if _debug:
            #print self.box
            print self.traj[:, 0, :]

        
        # read mol index 
        # format i ,j start from index 0 
        self.molPair = []
        for i in open(molFn):
            tmp1 , tmp2 = map(int ,  i.split() ) 
            self.molPair.append( (tmp1 -1, tmp2 -1) )

        if _debug:
            print self.molPair
            print self.timeStep
        
        # part for multi thread 
        if inputP.has_key('-thread'):
            self.flagThread = True 
        else:
            self.flagThread = False 

        
        if self.flagThread:
            
            # all the things to set thread environment
            self.queueLock = threading.Lock() 
            self.queue = Queue.Queue() 

            self.queueLock.acquire()
            for  i in self.molPair:
                self.queue.put( i ) 

            self.queueLock.release()
            self.threads = []

            self.nThreads = int( inputP['-thread'] )
            self.flagExitThread = False
示例#5
0
    # set symmetry flag
    symmFlag = False
    if inputP.has_key('-c'):
        symmFlag = True
        cIdx = int( inputP['-c'] )

    frame_c =0
    global_time = 0 
    
    if type(inputP['-f']) is not list:
        inputP['-f'] = [ inputP['-f']  ]

    for xtc_f in inputP['-f']:
        

        for f in xdrfile.xdrfile(xtc_f) : 
            
            global_time += 1
            # print every 100 ps 

            if time_step  > 1:
                if global_time % time_step != 0 : continue


            if global_time > time_end:
                break 

            if global_time >= time_start :
                
                if global_time % 100 == 0 :
                    sys.stdout.write("reading frame : %10.3f frames\r" % (global_time) ) 
示例#6
0
    def __init__(self, inputP):
        # class variable
        # self.traj[i, j, k ]: i , ith frame
        #                      j , jth atom
        #                      k , 0 1 2 -- x, y, z
        # self.box[i, j] : i, ith frame
        #                : j, box x, y ,z dimention
        # self.timeStep  : timeStep between frames
        # self.molPair   : initial pairs
        # self.skip      : number of frames to skip in survial time
        # self.cutoff    : cutoff
        # self.nFrames   : total # of frames in traj
        # self.inputP    : inputP ; keep it will be convinient
        # self.nsample   : number of random start points draw from first half of the data

        trajFn = inputP["-f"]
        molFn = inputP["-n"]

        self.inputP = inputP

        # read traj
        tmpx = []
        tmpbox = []
        tmpT1 = -1
        tmpT2 = -1

        for f in xdrfile.xdrfile(trajFn):
            tmpx.append(copy.deepcopy(f.x))
            tmpbox.append(np.diag(copy.deepcopy(f.box)))

            if tmpT1 == -1 and tmpT2 == -1:
                tmpT1 = f.time
            elif tmpT1 != -1 and tmpT2 == -1:
                tmpT2 = f.time
                self.timeStep = tmpT2 - tmpT1
            else:
                tmpT1 = tmpT2
                tmpT2 = f.time

                if self.timeStep != tmpT2 - tmpT1:
                    print >> sys.stderr, "Time step changed ! "
                    sys.exit(1)

            if _debug:
                if f.time > 20.0:
                    break

        self.traj = np.array(tmpx)
        self.nFrames = np.size(self.traj, 0)

        self.box = np.array(tmpbox)

        self.nsample = int(inputP["-nsample"])

        self.skip = int(inputP["-skip"])
        self.cutoff = float(inputP["-cutoff"])

        if _debug:
            pass
            # print self.box
            # print self.traj

        # read mol index
        # format i ,j start from index 0
        self.molPair = []
        for i in open(molFn):
            tmp1, tmp2 = map(int, i.split())
            self.molPair.append((tmp1 - 1, tmp2 - 1))

        if _debug:
            # print self.molPair
            print self.timeStep
示例#7
0
    def __init__(self, inputP ):
        # class variable 
        # self.traj[i, j, k ]: i , ith frame 
        #                      j , jth atom 
        #                      k , 0 1 2 -- x, y, z 
        # self.molPair   : molPair to calcualte relative diffusion
        # self.timeStep  : timeStep between frames 
        # self.skip      : skip # of frames 
        # self.fout      : file handler of output file 
        # self.nFrames   : total # of frames in traj 
        # self.deltaF    : [] of delta frames for diffusion 
       
        trajFn = inputP['-f']
        molFn  = inputP['-n']


        # read traj 
        tmpx = []
        # tmpbox = []
        tmpT1 = -1 
        tmpT2 = -1 
        
        for f in xdrfile.xdrfile(trajFn):
            tmpx.append( copy.deepcopy(f.x)  )
            #tmpbox.append( copy.deepcopy(f.box) )
            
            if tmpT1 == -1 and tmpT2 == -1:
                tmpT1 = f.time 
            elif tmpT1 != -1 and tmpT2 == -1:
                tmpT2 = f.time 
                self.timeStep = tmpT2 - tmpT1
            else:
                tmpT1 = tmpT2 
                tmpT2 = f.time 

                if self.timeStep != tmpT2 - tmpT1 :
                    print >> sys.stderr, 'Time step changed ! '
                    sys.exit(1)

            if _debug: 
                if  f.time > 80.0 :
                    break 


        self.traj = np.array( tmpx )
        self.nFrames = np.size(self.traj , 0 ) 

        #self.box  = np.array( tmpbox )

        self.fout = open( inputP['-o'], 'w' ) 
        if inputP.has_key('-skip'):
            self.skip =  int( inputP['-skip'] ) 
        else:
            self.skip = 1 
        
        # nFrames / 10 will only provide 10 data points. 
        self.deltaF = range(1, self.nFrames/ 10, self.skip ) 
        
        if _debug:
            #print self.box
            print self.traj[:, 0, :]

        
        # read mol index 
        # format i ,j start from index 0 
        self.molPair = []
        for i in open(molFn):
            tmp1 , tmp2 = map(int ,  i.split() ) 
            self.molPair.append( (tmp1 -1, tmp2 -1) )

        if _debug:
            print self.molPair
            print self.timeStep