コード例 #1
0
 def testWriteModeAppend(self):
     dcd = DCDFile(writeDCD(self.dcd, ENSEMBLE), 'a')
     dcd.write(ENSEMBLE.getCoordsets())
     dcd.close()
     e = parseDCD(self.dcd)
     n_csets = len(ENSEMBLE)
     coordsets = e._getCoordsets()
     assert_equal(coordsets, coordsets,
                  'failed to parse DCD file correctly')
     assert_allclose(coordsets[:n_csets], ENSEMBLE._getCoordsets(),
                     rtol=RTOL, atol=ATOL,
                     err_msg='failed to parse DCD file correctly')
コード例 #2
0
ファイル: test_dcdfile.py プロジェクト: anindita85/ProDy
 def testWriteModeAppend(self):
     dcd = DCDFile(writeDCD(self.dcd, ENSEMBLE), 'a')
     dcd.write(ENSEMBLE.getCoordsets())
     dcd.close()
     e = parseDCD(self.dcd)
     n_csets = len(ENSEMBLE)
     coordsets = e._getCoordsets()
     assert_equal(coordsets, coordsets, 
                  'failed to parse DCD file correctly')
     assert_allclose(coordsets[:n_csets], ENSEMBLE._getCoordsets(),
                     rtol=RTOL, atol=ATOL,
                     err_msg='failed to parse DCD file correctly')
コード例 #3
0
 def testParseDCD(self):
     e = parseDCD(writeDCD(self.dcd, ALLATOMS))
     assert_equal(e._getCoordsets(),
                  DCD._getCoordsets(),
                  err_msg='failed to parse DCD file correctly')
コード例 #4
0
 def testWriteDCD(self):
     dcd = writeDCD(self.dcd, ALLATOMS)
     self.assertEqual(dcd, self.dcd, 'failed to write DCD file')
コード例 #5
0
ファイル: test_dcdfile.py プロジェクト: anindita85/ProDy
 def testParseDCD(self):
     e = parseDCD(writeDCD(self.dcd, ALLATOMS))
     assert_equal(e._getCoordsets(), DCD._getCoordsets(),
                  err_msg='failed to parse DCD file correctly')
コード例 #6
0
ファイル: test_dcdfile.py プロジェクト: anindita85/ProDy
 def testWriteDCD(self):
     dcd = writeDCD(self.dcd, ALLATOMS)
     self.assertEqual(dcd, self.dcd, 'failed to write DCD file')
コード例 #7
0
def iENM_deformationE( pdb_obj, ref_pdb_obj, prefix, selstr='calpha', dr=1, nsteps=1, const=1, cutoff=10, path_length=1 ):
	import prody as pd
	import pylab as pb
	import numpy as np
	import random as random

	pdb = pdb_obj.select( selstr )
	natoms = pdb.numAtoms()

	dcd = np.zeros( ( natoms*3, 1 ) )
	dcd = pdb.getCoords().reshape( natoms*3 )

	ensemble = pd.Ensemble()
	ensemble.setCoords(dcd.reshape(natoms,3))

	filename_pdb = '%s.pdb' % prefix
	filename_dcd = '%s.dcd' % prefix
	pd.writePDB( filename_pdb, pdb )

	ref = ref_pdb_obj.select( selstr )

	for i in xrange( 1, nsteps+1 ):
		print 'Calculating coordinates at step %d\n' % i

		# Load coordinates from previous step
		pdb.setCoords( dcd.reshape((natoms,3)) )

		# ANM analysis
		anm = pd.ANM()
		anm.buildHessian( pdb, cutoff=cutoff, gamma=const )
		H = anm.getHessian()
		# N = (np.shape(H)[1] / 3)
		if np.size(selmode) > 1:
			N = max(selmode) + 1
		if np.size(selmode) == 1:
			N = selmode + 1
		anm.calcModes( n_modes=N,zeros=False,turbo=True )
		eVec = anm.getEigvecs()
		eVal = anm.getEigvals()

		# Normalize eigenvectors and generate gaussian if needed
		if np.size(selmode) > 1:
			rvec = np.zeros((np.shape(eVec)[0],np.size(selmode)))
			for i in xrange ( 0, np.size(eVec[1]) ):
				rvec[:,i] = norm_vec( eVec[:,selmode[i]], natoms )
			rvec = gauss_vec(rvec)
		if np.size(selmode) == 1:
			if selmode == 0:
				rvec = norm_vec( eVec, natoms )
			if selmode > 0:
				rvec = norm_vec( eVec[:,selmode], natoms )
		# if np.size(selmode) > 1:
		# 	for i in xrange (0, np.size(eVec[1]) ):
		# 		rvec = norm_vec( eVec[:,selmode[i]], natoms )
		# 	rvec = gauss_vec(rvec[:,selmode])
		# if np.size(selmode) == 1:
		# 	rvec = norm_vec( eVec[:,selmode], natoms )			

		rmag = np.zeros((natoms,3))
		fluct = pd.calcSqFlucts(anm[selmode])
		fluct = fluct / max(fluct)
		rmag[:,0] = fluct
		rmag[:,1] = fluct
		rmag[:,2] = fluct
		rmag = rmag.reshape(natoms*3)
		# rmag = ((-1)**random.randint(0,1)) * path_length * rmag # Commented out to look at positive eigenvector!
		rmag = path_length * rmag

		rmag = rmag.reshape(natoms*3)
		rvec = rvec.reshape(natoms*3)

		rvec = np.multiply(rvec,rmag)

		# Predict new coords
		dcd = rvec + pdb.getCoords().reshape( natoms*3 )
		ensemble.addCoordset(dcd.reshape(natoms,3))

		pd.writeDCD( filename_dcd, ensemble )
コード例 #8
0
def iENM_unconstrained( pdb_obj, prefix, selstr='calpha', dr=1, nsteps=1, const=1, cutoff=10, path_length=1 ):
	import prody as pd
	import pylab as pb
	import numpy as np
	import random as random

	pdb = pdb_obj.select( selstr )
	natoms = pdb.numAtoms()

	dcd = np.zeros( ( natoms*3, 1 ) )
	dcd = pdb.getCoords().reshape( natoms*3 )

	ensemble = pd.Ensemble()
	ensemble.setCoords(dcd.reshape(natoms,3))

	filename_pdb = '%s.pdb' % prefix
	filename_dcd = '%s.dcd' % prefix
	pd.writePDB( filename_pdb, pdb )

	for i in xrange( 1, nsteps+1 ):
		print 'Calculating coordinates at step %d\n' % i

		# Load coordinates from previous step
		pdb.setCoords( dcd.reshape(natoms,3) )

		# # GNM analysis
		# gnm = pd.GNM()
		# gnm.buildKirchhoff( pdb, cutoff=cutoff, gamma=const )
		# K = gnm.getKirchhoff()
		# N = np.shape(K)[1]
		# gnm.calcModes( n_modes=N,zeros=False,turbo=True )
		# fluct = pd.calcSqFlucts( gnm ) / max( pd.calcSqFlucts( gnm ) )

		# ANM analysis
		anm = pd.ANM()
		anm.buildHessian( pdb, cutoff=cutoff, gamma=const )
		H = anm.getHessian()
		N = (np.shape(H)[1] / 3)
		anm.calcModes( n_modes=N,zeros=False,turbo=True )
		eVec = anm.getEigvecs()
		eVal = anm.getEigvals()

		# Normalize vectors
		for i in xrange (0, np.size(eVec[1]) ):
			eVec[:,i] = norm_vec( eVec[:,i], natoms )

		# Randomly sample gaussian distribution of vectors
		gVec = gauss_vec(eVec)

		# Sample motion after given path_length 
		rvec = gVec
		rmag = np.ones((natoms,3))
		rmag = ((-1)**random.randint(0,1)) * path_length * rmag
		rmag = rmag.reshape(natoms*3)
		rvec = rvec.reshape(natoms*3)
		rvec = np.multiply(rvec,rmag)

		# Predict new coords
		dcd = rvec.reshape(natoms*3) + pdb.getCoords().reshape(natoms*3)
		ensemble.addCoordset(dcd.reshape(natoms,3))
		pd.writeDCD( filename_dcd, ensemble )

	return ( pdb, ensemble )
コード例 #9
0
ファイル: prody_anm.py プロジェクト: dww100/zazzie
    def prody_anm(self, variables, txtOutput):
        '''
        PRODY DRIVER is the function to read in variables from GUI input and
        used to run a prody normal mode calculation using the anisotropic network model
        (ANM) on a structure provide in a pdb file.

        INPUT:  variable descriptions:

        pdbfile:          input pdb file (reference)

        OUTPUT:
                        model_anm_extended_bb.nmd
                        model_traverse.dcd
                        model_samp.dcd
                        model_samp.pdb
                        model_anm_sqflucts.txt
                        model_anm_kirchhoff.txt
                        model_anm_hessian.txt
                        model_anm_cross-correlations.hm
                        model_anm_cross-correlations.txt
                        model_anm_covariance.txt
                        model_anm_beta.txt
                        model_anm_evalues.txt
                        model_anm_evectors.txt
                        model_anm_extended_all.nmd
                        model_anm.nmd

        txtOutput:        TK handler for output to GUI textbox

        files stored in ~/runname/prody directory:
        outfile:          output filename

        '''
        log = self.log
        pgui = self.run_utils.print_gui

        # start gui output
        pgui("\n%s \n" % ('=' * 60))
        pgui("DATA FROM RUN: %s \n\n" % time.asctime( time.gmtime( time.time() ) ))

        mvars = self.mvars
        #path = os.path.join(os.getcwd(),mvars.runname, 'prody')
        path = os.path.join(mvars.runname, 'prody')
        direxist = os.path.exists(path)
        if(direxist == 0):
            try:
                result = os.system('mkdir -p ' + path)
            except:
                message = 'can not create project directory: ' + path
                message += '\nstopping here\n'
                print_failure(message, txtOutput)
            if(result != 0):
                message = 'can not create project directory: ' + path
                message += '\nstopping here\n'
                print_failure(message, txtOutput)
        if mvars.advanced_usage == 1:
            run_cmd = prody_exe + mvars.advanced_usage_cmd
            os.system(run_cmd)
            run_cmd = 'mv *.nmd *.txt *.hm prody'
            os.system(run_cmd)
            exit()

        # display progress
        fraction_done = (0 + 1) * 1.0 / 10.0
        report_string = 'STATUS\t%f' % fraction_done
        pgui(report_string)

        prody.confProDy(verbosity='none')  #option to set silent verbosity
        model = mvars.pdbfile[0:len(mvars.pdbfile) - 4]
        run_cmd = prody_exe + ' anm ' + \
            mvars.pdbfile + ' -t all -n ' + str(mvars.number_modes) + ' -a'
        log.info('staring prody_exe %s' % run_cmd)
        prody_run = subprocess.Popen(run_cmd,shell=True,executable='/bin/bash')
        prody_run.wait() 
        #prody.confProDy(verbosity='none')  #option to set silent verbosity
        file_anm = model + '_anm_extended_all.nmd'

        # display progress
        fraction_done = (1 + 1) * 1.0 / 10.0
        report_string = 'STATUS\t%f' % fraction_done
        pgui(report_string)

        # parse nmd file with resuts extended to all atoms
        log.info('staring prody.parseNMD %s' % file_anm)
        mod, ag = prody.parseNMD(file_anm, type=None)
        allatoms = ag.copy()
        # set up to randomly sample number_conformations_samp modes
        log.info('staring prody.sampleModes')
        ensemble = prody.sampleModes(mod[:mvars.number_modes],
                                     ag,
                                     n_confs=mvars.number_conformations_samp,
                                     rmsd=mvars.rmsd_conformations_samp)
        ensemble
        log.info('staring prody ensemble and writing pdb/dcd files')
        allatoms.addCoordset(ensemble)
        prody.writePDB('model_samp.pdb', allatoms)
        prody.writeDCD('model_samp.dcd', allatoms)
        trajectory_names = []
        
        # display progress
        fraction_done = (1 + 2) * 1.0 / 10.0
        report_string = 'STATUS\t%f' % fraction_done
        pgui(report_string)

        log.info('starting prody traverse')
        for i in xrange(0, mvars.number_modes):
            #print i
            # setup to tranverse slowest mode
            traverse = prody.traverseMode(
                mod[i],
                allatoms,
                n_steps=mvars.number_steps_traverse,
                rmsd=mvars.rmsd_traverse)
            traverse
            prody.writeDCD('traverse.dcd', traverse)
            this_dcd = str(os.path.join(path, 'traverse_' + str(i) + '.dcd'))
            cmd = 'mv traverse.dcd ' + this_dcd
            os.system(cmd)
            trajectory_names.append(this_dcd)

        # display progress
        fraction_done = (1 + 7) * 1.0 / 10.0
        report_string = 'STATUS\t%f' % fraction_done
        pgui(report_string)

        m1 = sasmol.SasMol(0)
        m2 = sasmol.SasMol(0)
        m1.read_pdb(mvars.pdbfile)
        m2.read_pdb(mvars.pdbfile,fastread=True)

        mvars.dcdfile = mvars.runname + '.dcd'
        log.info('opening new dcd file to store trajectory: %s' %
                 os.path.join(self.runpath, mvars.dcdfile))

        outfile_name = str(os.path.join(path, mvars.dcdfile))
        dcdoutfile = m2.open_dcd_write(outfile_name)
        count = 0
        coor = numpy.zeros((1,m2.natoms(),3),numpy.float32)
        for this_trajectory_name in trajectory_names:

            dcdfile = m1.open_dcd_read(this_trajectory_name)
            number_of_frames = dcdfile[2]

            for j in xrange(number_of_frames):
                m1.read_dcd_step(dcdfile,j)
                coor[0,:,:] = m1.coor()[0]
                m2.setCoor(coor)
                m2.write_dcd_step(dcdoutfile,0, count + 1)
                count += 1

        m2.close_dcd_write(dcdoutfile)

        log.info('moving files to runname / prody')

        file_anm = model + '_anm.nmd'
        mod, ag = prody.parseNMD(file_anm, type=None)
        mod1 = prody.parsePDB(mvars.pdbfile)
        calphas = mod1.select('calpha')
        bb_anm, bb_atoms = prody.extendModel(mod, calphas, mod1.select(
            'backbone'))  # extend model to backbone atoms
        prody.writeNMD('model_anm_extended_bb.nmd', bb_anm, bb_atoms)

        cmd = 'mv model_samp.pdb ' + path + os.sep + os.path.basename(model) + '_samp.pdb'
        os.system(cmd)

        cmd = 'mv model_samp.dcd ' + path + os.sep + os.path.basename(model) + '_samp.dcd'
        os.system(cmd)

        cmd = 'mv model_anm_extended_bb.nmd ' + \
            model + '_anm_extended_bb.nmd'
        os.system(cmd)

        cmd = 'mv *.hm *.nmd *.txt ' + path + os.sep
        os.system(cmd)
        
        # display progress
        fraction_done = (1 + 9) * 1.0 / 10.0
        report_string = 'STATUS\t%f' % fraction_done
        pgui(report_string)

        return