def changeModel(inFile, prefix, sourceModel): print '\nget ' + os.path.basename(inFile) + '..', model = PDBModel(inFile) model.update() model = model.sort() eq = model.equals(sourceModel) if not eq[0] and eq[1]: raise ConvertError('source and other models are not equal: ' + str(eq)) # model.validSource() model.setSource(sourceModel.validSource()) #model.atomsChanged = 0 for k in model.atoms: model.atoms[k, 'changed'] = N0.all(model[k] == sourceModel[k]) model.xyzChanged = (0 != N0.sum(N0.ravel(model.xyz - sourceModel.xyz))) model.update(updateMissing=1) if model.xyzChanged: doper = PDBDope(model) if 'MS' in sourceModel.atoms.keys(): doper.addSurfaceRacer(probe=1.4) if 'density' in sourceModel.atoms.keys(): doper.addDensity() if 'foldX' in sourceModel.info.keys(): doper.addFoldX() if 'delphi' in sourceModel.info.keys(): doper.addDelphi() outFile = os.path.dirname( inFile ) + '/' + prefix +\ T.stripFilename( inFile ) + '.model' T.dump(model, outFile) print '-> ' + os.path.basename(outFile)
def changeModel( inFile, prefix, sourceModel ): print '\nget ' + os.path.basename( inFile ) + '..', model = PDBModel( inFile ) model.update() model = model.sort() eq = model.equals( sourceModel ) if not eq[0] and eq[1]: raise ConvertError('source and other models are not equal: ' + str(eq)) # model.validSource() model.setSource( sourceModel.validSource() ) #model.atomsChanged = 0 for k in model.atoms: model.atoms[k,'changed'] = N.all( model[k] == sourceModel[k] ) model.xyzChanged = ( 0 != N.sum( N.ravel( model.xyz - sourceModel.xyz)) ) model.update( updateMissing=1 ) if model.xyzChanged: doper = PDBDope( model ) if 'MS' in sourceModel.atoms.keys(): doper.addSurfaceRacer( probe=1.4 ) if 'density' in sourceModel.atoms.keys(): doper.addDensity() if 'foldX' in sourceModel.info.keys(): doper.addFoldX() if 'delphi' in sourceModel.info.keys(): doper.addDelphi() outFile = os.path.dirname( inFile ) + '/' + prefix +\ T.stripFilename( inFile ) + '.model' T.dump( model, outFile ) print '-> ' + os.path.basename( outFile )
def calcProfiles(self, m): """ Calculate needed profiles. @param m: PDBModel to calculate data for @type m: PDBModel """ if self.verbose: print "Initiating PDBDope..." d = PDBDope(m) if not self.profileName in m.atoms.keys(): if self.profileName in ['MS', 'AS', 'curvature', 'relAS', 'relMS']: if self.verbose: print "Adding SurfaceRacer profile...", d.addSurfaceRacer() if self.profileName in ['density']: if self.verbose: print "Adding surface density...", d.addDensity() if not self.profileName in m.residues.keys(): if self.profileName in ['cons_abs', 'cons_max', 'cons_ent']: if self.verbose: print "Adding conservation data...", d.addConservation() if self.verbose: print 'Done.' ## convert atom profiles to average residue profile if self.profileName in m.atoms.keys(): prof = [] aProfile = m.profile(self.profileName) resIdx = m.resIndex().tolist() resIdx += [m.lenAtoms()] for i in range(len(resIdx) - 1): prof += [ N0.average( N0.take(aProfile, range(resIdx[i], resIdx[i + 1]))) ] else: prof = m.profile(self.profileName) return prof
def randomSurfaces( base_folder, label, mask ): """ calculate surfaces for all peptides and return the average and SD """ ## container for results and standard deviations MS, AS = {}, {} MS_sd, AS_sd = {}, {} ## loop over peptide directories for k in MOU.aaAtoms.keys(): dir = base_folder + 'GLY-%s-GLY_pcr/pcr_00'%(k) fLst = glob.glob( dir + '/*.pdb') msLst = [] asLst = [] ## loop over pdb files for each peptide T.flushPrint( '\nNow collecting data in %s'%dir ) for f in fLst: ## load peptide and remove waters and hydrogens m = PDBModel( f ) m = m.compress( m.maskProtein() * m.maskHeavy() ) T.flushPrint( '.') ## add surface data try: d = PDBDope( m ) d.addSurfaceRacer( probe=1.4 ) ## remove tailing GLY m = m.compress( m.res2atomMask(mask) ) ## collect surface data for each peptide msLst += [ m.profile('MS') ] asLst += [ m.profile('AS') ] except: print 'Failed calculating exposure for GLY-%s-GLY'%(k) print '\t and file %s'%f ## get result dictionary for peptide T.flushPrint('\nCollecting data ...\n') msDic = {} asDic = {} msDic_sd = {} asDic_sd = {} j = 0 #atoms = [ a['name'] for a in m.atoms ] for n in m['name']: msDic[n] = N0.average(msLst)[j] asDic[n] = N0.average(asLst)[j] msDic_sd[n] = MAU.SD( msLst )[j] asDic_sd[n] = MAU.SD( asLst )[j] j += 1 MS[ k ] = msDic AS[ k ] = asDic MS_sd[ k ] = msDic_sd AS_sd[ k ] = asDic_sd return MS, AS, MS_sd, AS_sd
def randomSurfaces( base_folder, label, mask ): """ calculate surfaces for all peptides and return the average and SD """ ## container for results and standard deviations MS, AS = {}, {} MS_sd, AS_sd = {}, {} ## loop over peptide directories for k in MOU.aaAtoms.keys(): dir = base_folder + 'GLY-%s-GLY_pcr/pcr_00'%(k) fLst = glob.glob( dir + '/*.pdb') msLst = [] asLst = [] ## loop over pdb files for each peptide T.flushPrint( '\nNow collecting data in %s'%dir ) for f in fLst: ## load peptide and remove waters and hydrogens m = PDBModel( f ) m = m.compress( m.maskProtein() * m.maskHeavy() ) T.flushPrint( '.') ## add surface data try: d = PDBDope( m ) d.addSurfaceRacer( probe=1.4 ) ## remove tailing GLY m = m.compress( m.res2atomMask(mask) ) ## collect surface data for each peptide msLst += [ m.profile('MS') ] asLst += [ m.profile('AS') ] except: print 'Failed calculating exposure for GLY-%s-GLY'%(k) print '\t and file %s'%f ## get result dictionary for peptide T.flushPrint('\nCollecting data ...\n') msDic = {} asDic = {} msDic_sd = {} asDic_sd = {} j = 0 #atoms = [ a['name'] for a in m.atoms ] for n in m['name']: msDic[n] = N.average(msLst)[j] asDic[n] = N.average(asLst)[j] msDic_sd[n] = MAU.SD( msLst )[j] asDic_sd[n] = MAU.SD( asLst )[j] j += 1 MS[ k ] = msDic AS[ k ] = asDic MS_sd[ k ] = msDic_sd AS_sd[ k ] = asDic_sd return MS, AS, MS_sd, AS_sd
def prepareSource(inFile, outFile, wat=1, sort=1, foldx=1, surf=1, dens=1, cons=1, dssp=1, delphi=0): """ Strip waters, add profiles and save as doped source model. """ source = PDBModel(inFile) if wat: source.remove(lambda a: a['residue_name'] in ['HOH', 'WAT', 'TIP3']) if sort: source = source.sort() doper = PDBDope(source) if surf: ## doper.addASA() ## doper.addSurfaceMask() doper.addSurfaceRacer(probe=1.4) if foldx: doper.addFoldX() if dens: doper.addDensity() if dssp: doper.addSecondaryStructure() if delphi: doper.addDelphi() try: if cons: doper.addConservation() except: errWriteln('\n ERROR: Conservation profile could not be added to '\ + str(sourceOut) + '\n' ) source.saveAs(outFile) return source
def prepareSource( inFile, outFile, wat=1, sort=1, surf=1, dens=1, cons=1, dssp=1, delphi=0 ): """ Strip waters, add profiles and save as doped source model. """ source = PDBModel( inFile ) if wat: source.remove( lambda a: a['residue_name'] in ['HOH','WAT','TIP3'] ) if sort: source = source.sort() doper = PDBDope( source ) if surf: ## doper.addASA() ## doper.addSurfaceMask() doper.addSurfaceRacer( probe=1.4 ) ## if foldx: ## doper.addFoldX() if dens: doper.addDensity() if dssp: doper.addSecondaryStructure() if delphi: doper.addDelphi() try: if cons: doper.addConservation( ) except: errWriteln('\n ERROR: Conservation profile could not be added to '\ + str(sourceOut) + '\n' ) source.saveAs( outFile ) return source