def dcd_fit(filename_dcd, filename_dcd_out, natom_total, serials, filename_rmsd): f_out = open(filename_rmsd, 'w') # Coord1 pdb = PdbFile('16SCD.cg.pdb') pdb.open_to_read() ref_chains = pdb.read_all() pdb.close() #num_atom = 0 #for chain in ref_chains : # for residue in chain.residues : # num_atom += len(residue.atoms) ref = zeros((natom_total, 3), dtype=float64, order='C') i = 0 for chain in ref_chains: for residue in chain.residues: for atom in residue.atoms: (ref[i][0], ref[i][1], ref[i][2]) = atom.xyz.get_as_tuple() i += 1 mask = [] for i in range(natom_total): # the serial ID starts from 1, thus i+1 is the serial ID if i + 1 in serials: mask.append(1) else: mask.append(0) dcd = DcdFile(filename_dcd) dcd.open_to_read() dcd.read_header() out_dcd = DcdFile(filename_dcd_out) out_dcd.open_to_write() out_dcd.set_header(dcd.get_header()) out_dcd.write_header() #dcd.show_header() k = 0 while dcd.has_more_data(): k += 1 coords_dcd = dcd.read_onestep_np() rmsd = superimpose(ref.T, coords_dcd.T, mask) f_out.write('{:8d} {:6.2f}\n'.format(k, rmsd)) out_dcd.write_onestep(coords_dcd) dcd.close() out_dcd.close()
def dcd_concatenate(filepaths): n_frames = [] # To return the number of frames # Number of input DCD files num_dcd = len(filepaths) - 1 # New DCD file f_out = DcdFile(filepaths[-1]) f_out.open_to_write() # Count the total frame number num_frame = 1 for i in range(0, num_dcd - 1): f_in = DcdFile(filepaths[i]) f_in.open_to_read() f_in.read_header() num_frame += f_in.get_header().nset - 1 f_in.close() # Get the total step number from final DCD file f_in = DcdFile(filepaths[num_dcd - 1]) f_in.open_to_read() f_in.read_header() num_frame += f_in.get_header().nset - 1 num_step = f_in.get_header().nstep f_in.close() f_in = DcdFile(filepaths[0]) f_in.open_to_read() f_in.read_header() header = copy(f_in.get_header()) header.nset = num_frame header.nstep = num_step f_out.set_header(header) f_out.write_header() #print filepaths[0], f_in.get_header().nset n_frames.append(f_in.get_header().nset) while f_in.has_more_data(): f_out.write_onestep(f_in.read_onestep()) f_in.close() for i in range(1, num_dcd): f_in = DcdFile(filepaths[i]) f_in.open_to_read() f_in.read_header() f_in.skip_onestep() # skip the first step #print filepaths[i], f_in.get_header().nset - 1 n_frames.append(f_in.get_header().nset - 1) while f_in.has_more_data(): f_out.write_onestep(f_in.read_onestep()) f_in.close() f_out.close() return n_frames
dcd_filename = sys.argv[1] dcd = DcdFile(dcd_filename) dcd.open_to_read() dcd.read_header() header = dcd.get_header() #header.istart = header.nstep_save * (frame_begin - 1) #header.istart = header.istart + header.nstep_save * frame_begin #header.nset = int(frame_num / frame_stride) #header.nset = int((frame_end-frame_begin)/frame_stride) + 1 #header.nstep = header.nstep_save * (frame_num - 1) #header.nstep_save = header.nstep_save * frame_stride # Open DCD and read the header dcd_out = DcdFile(sys.argv[-1]) dcd_out.open_to_write() dcd_out.set_header(header) dcd_out.write_header() # Open TS and read the header ts = TsFile(sys.argv[2]) ts.open_to_read() ts.read_header() # read and write #imodel = 0 #i_org = 0 while dcd.has_more_data(): if not ts.has_more_data(): print('Not enough data in .ts file (1)') sys.exit(2)
import sys from cafysis.file_io.dcd import DcdFile from copy import copy if __name__ == '__main__': if len(sys.argv) < 4: print('Usage: % SCRIPT [DCD1] [DCD2] ([DCD3] ...) [output DCD]') sys.exit(2) # Number of input DCD files num_dcd = len(sys.argv) - 2 # New DCD file f_out = DcdFile(sys.argv[-1]) f_out.open_to_write() # Count the total frame number num_frame = 1 for i in range(1, num_dcd): f_in = DcdFile(sys.argv[i]) f_in.open_to_read() f_in.read_header() num_frame += f_in.get_header().nset f_in.close() # Get the total step number from final DCD file f_in = DcdFile(sys.argv[num_dcd]) f_in.open_to_read() f_in.read_header() num_frame += f_in.get_header().nset
pdb.open_to_read() chains = pdb.read_all() pdb.close() header = DcdHeader() header.nset = 1 header.istart = 1 header.nstep_save = 1 header.nstep = 1 header.nunit_real = len(chains) header.delta = 0.0 header.title = [' ' * 80, ' ' * 80] header.tempk = 0.0 header.lunit2mp = [] imp = 0 xyzs = [] for c in chains: for r in c.residues: for a in r.atoms: imp += 1 xyzs.append([a.xyz.x, a.xyz.y, a.xyz.z]) header.lunit2mp.append(imp) header.nmp_real = imp dcd = DcdFile(sys.argv[-1]) dcd.open_to_write() dcd.set_header(header) dcd.write_header() dcd.write_onestep(xyzs) dcd.close()
i += 1 # 1 - 77 and 270 - 950 mask = [] for i in range(NATOM_TOTAL): if i in (309-1, 477-1, 519-1): mask.append(1) else: mask.append(0) dcd = DcdFile('dcd/cM0.0300.dcd') dcd.open_to_read() dcd.read_header() out_dcd = DcdFile('cM0.0300.fit665.dcd') out_dcd.open_to_write() out_dcd.set_header(dcd.get_header()) out_dcd.write_header() #dcd.show_header() k = 0 while dcd.has_more_data() : k += 1 coords_dcd = dcd.read_onestep_np() rmsd = superimpose(ref.T, coords_dcd.T, mask) print(k, rmsd) out_dcd.write_onestep(coords_dcd)