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).")
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)
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
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
# 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) )
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
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