123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #!/usr/bin/env python3
- from prody import *
- from pylab import *
- import matplotlib.pyplot as plt
- import itertools
- import os
- import glob
- import re
- ion()
- prody.confProDy(auto_show=False)
- #######################################################################################
- ## ADJUSTABLE PARAMETERS ##
- #######################################################################################
- # set specific system names to visualize
- #visualize=[]
- #show=["ALL", "no_PHQ"]
- #######################################################################################
- ## JOB CONTROL ##
- #######################################################################################
- # set output dir
- out_dir = os.path.splitext(os.path.basename(sys.argv[0]))[0]
- out_file = out_dir + "/combined"
- # create palette
- colors = itertools.cycle(["red", "blue", "green", "orange"])
- # create output dir
- if not os.path.exists(out_dir):
- os.makedirs(out_dir)
- # parse files
- in_files=os.listdir("1-concat/eda/")
- out_files=os.listdir(out_dir)
- systems = []
- get_systems=os.listdir("1-concat/combined/")
- for filename in get_systems:
- if filename.endswith(".pdb"):
- systems.append(re.sub('-.*','',filename))
- my_pdb=glob.glob("1-concat/eda/combined*.pdb")
- # if system_names file is present, set names from there
- if os.path.exists('system_names'):
- exec(open('system_names').read())
- else:
- systems=sorted(systems)
- # load pdb
- structure = parsePDB(my_pdb[0])
- structure_select = structure.select("resnum 88:203")
- # load trajectory
- if os.path.exists(out_file + '_prody.dcd'):
- trajectory = parseDCD(out_file + '_prody.dcd')
- trajectory.setCoords(structure_select)
- trajectory.setAtoms(structure_select)
- else:
- combined_dcd = glob.glob('1-concat/eda/combined-*.dcd')
- trajectory = parseDCD(combined_dcd[0])
- trajectory.setCoords(structure)
- trajectory.setAtoms(structure_select)
- trajectory.superpose()
- # save aligned dcd
- writeDCD(out_file + '_prody.dcd', trajectory)
- # calculate frame increments
- num_frames = DCDFile.numFrames(trajectory)
- num_systems = len(systems)
- frame_incr = int(num_frames / num_systems - 1)
- res_nums = structure_select.getResnums()
- first_res = res_nums[0]
- last_res = res_nums[-1]
- # calculate covariance and modes
- if os.path.exists(out_file + '.eda.npz'):
- eda_trajectory = loadModel(out_file + '.eda.npz')
- else:
- eda_trajectory = EDA(combined_dcd[0])
- eda_trajectory.buildCovariance(trajectory, aligned=True)
- eda_trajectory.calcModes(n_modes=10)
- saveModel(eda_trajectory, filename=out_file)
-
- for mode in eda_trajectory[:4]:
- print(calcFractVariance(mode))
- # write VMD files
- writeNMD(out_file, eda_trajectory[:10], structure_select)
- # create EDA rmsf figures
- def my_showSqFlucts(modes, *args, **kwargs):
- """Show square fluctuations using :func:`~matplotlib.pyplot.plot`. See
- also :func:`.calcSqFlucts`."""
- import matplotlib.pyplot as plt
- sqf = calcSqFlucts(modes)
- if not 'label' in kwargs:
- kwargs['label'] = str(modes)
- show = plt.plot(res_nums,sqf, *args, **kwargs)
- plt.xlabel('Residue #')
- plt.ylabel('Square fluctuations')
- plt.xlim([first_res,last_res])
- plt.title(str(modes))
- return show
- for i in range(0, 4):
- j = i + 1
- plt.figure(figsize=(8, 6))
- my_showSqFlucts(eda_trajectory[i])
- title('RMSF (EDA Mode ' + str(j) + ')')
- plt.savefig(out_file + '_rmsf_mode_' + str(j) + '.png', dpi=300, format='png')
- plt.close('all[')
- # create cross-corr figure
- def my_showCrossCorr(modes, *args, **kwargs):
- import matplotlib.pyplot as plt
- arange = np.arange(first_res - 1 ,last_res)
- cross_correlations = np.zeros((arange[-1]+2, arange[-1]+2))
- cross_correlations[arange[0]+1:,
- arange[0]+1:] = calcCrossCorr(modes)
- kwargs['interpolation'] = 'bilinear'
- kwargs['origin'] = 'lower'
- show = plt.imshow(cross_correlations, *args, **kwargs), plt.colorbar()
- plt.axis([arange[0]+0.5, arange[-1]+1.5, arange[0]+0.5, arange[-1]+1.5])
- plt.title('Cross-correlations for {0}'.format(str(modes)))
- plt.xlabel('Residue')
- plt.ylabel('Residue')
- return show
- plt.figure(figsize=(8, 6))
- my_showCrossCorr(eda_trajectory)
- title('Cross-correlation matrix')
- plt.savefig(out_file + '_corr.png', dpi=300, format='png')
- plt.close('all')
- # create projection figures
- plt.figure(figsize=(8, 6))
- showProjection(trajectory[:frame_incr], eda_trajectory[0,1], color='red', marker='.', label=systems[0])
- showProjection(trajectory[frame_incr + 1:frame_incr * 2 + 1], eda_trajectory[0,1], color='green', marker='.', label=systems[1]);
- legend(markerscale=2, numpoints=1, handletextpad=0.25)
- title('EDA')
- plt.savefig(out_file + '_proj1_2.png', dpi=300, format='png')
- plt.close('all')
- plt.figure(figsize=(8, 6))
- showProjection(trajectory[:frame_incr], eda_trajectory[2,3], color='red', marker='.', label=systems[0])
- showProjection(trajectory[frame_incr + 1:frame_incr * 2 + 1], eda_trajectory[2,3], color='green', marker='.', label=systems[1]);
- legend(markerscale=2, numpoints=1, handletextpad=0.25)
- title('EDA')
- plt.savefig(out_file + '_proj3_4.png', dpi=300, format='png')
- plt.close('all')
-
|