Skip to content

Commit

Permalink
Add basic test of mainer_short.
Browse files Browse the repository at this point in the history
  • Loading branch information
benmwebb committed Nov 12, 2016
1 parent 94173a9 commit 3ce0505
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 17 deletions.
35 changes: 18 additions & 17 deletions lib/cryptosite/mainer_short.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

from __future__ import print_function, absolute_import
import sys
from cryptosite.cleaning import *
from cryptosite.seq_conservation import *
from cryptosite.hyd_chr_sse import *
from cryptosite.bmi_feature_parser import *
from cryptosite.res_parser_bmi import *
from cryptosite.patch_mapper import *
import cryptosite.cleaning
import cryptosite.seq_conservation
import cryptosite.hyd_chr_sse
import cryptosite.bmi_feature_parser
import cryptosite.res_parser_bmi
import cryptosite.patch_mapper
import os
import glob

Expand Down Expand Up @@ -58,7 +58,7 @@ def main():
output = open('input.seq','w')
querySeqs = {}
for chain in chains:
querySeq = get_pdb_seq(pdb+'.pdb', chain)
querySeq = cryptosite.cleaning.get_pdb_seq(pdb+'.pdb', chain)
querySeqs[chain] = querySeq
output.write('>'+chain+'\n'+querySeq+'\n')
output.close()
Expand All @@ -82,7 +82,8 @@ def main():
sbjctSeq = querySeq

# --- refine the structure (Modeller)
strcsq, seqsq = muscleAlign(querySeq, sbjctSeq, pdb, chain)
strcsq, seqsq = cryptosite.cleaning.muscleAlign(querySeq, sbjctSeq,
pdb, chain)
SubjectSeqList[chain] = seqsq
QuerySeqList[chain] = strcsq

Expand All @@ -93,11 +94,10 @@ def main():
output = open('test.seq','w')
output.write('>%s%sq\n' % (pdb, chain) + sbjctSeq)
output.close()
run_blast(pdb+chain)

parse_blast(pdb+chain+'.blast', pdb+chain, sbjctSeq)

cryptosite.seq_conservation.run_blast(pdb+chain)

cryptosite.seq_conservation.parse_blast(pdb+chain+'.blast', pdb+chain,
sbjctSeq)

# --- change ali to pir
out = open('alignment.pir','w')
Expand All @@ -122,7 +122,7 @@ def main():
print(PDBChainOrder)
print(ChainLenghts)

build_model(pdb, PDBChainOrder)
cryptosite.cleaning.build_model(pdb, PDBChainOrder)

# --- Map SeqConservation to new residue numbering calculate HydChrSSE

Expand All @@ -143,19 +143,20 @@ def main():
L+=len(SubjectSeqList[chain])
seqdat.close()
# -- hydrophobicity, charge, SSEs
HydChrSSE(pdb+'_mdl', mchains[PDBChainOrder.index(chain)])
cryptosite.hyd_chr_sse.HydChrSSE(pdb+'_mdl',
mchains[PDBChainOrder.index(chain)])


# --- calculate PatchMap feature
patchmap_feature(pdb+'_mdl')
cryptosite.patch_mapper.patchmap_feature(pdb+'_mdl')


# --- gather residue-based BMI features
gather_features(pdb+'_mdl',mchains)
cryptosite.bmi_feature_parser.gather_features(pdb+'_mdl',mchains)


#for chain in PDBChainOrder:
res_parser(pdb+'_mdl')
cryptosite.res_parser_bmi.res_parser(pdb+'_mdl')


# --- prepare AllosMod file
Expand Down
69 changes: 69 additions & 0 deletions test/test_mainer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import unittest
import utils
import os
import sys
import re
import subprocess
import shutil

TOPDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
utils.set_search_paths(TOPDIR)
import cryptosite.mainer_short

# Simply copy pre-built outputs at each step, rather than running BLAST,
# fpocket, etc. (these are tested elsewhere)
def mock_muscle_align(query, sbjct, pdb, chain):
return ('YVTEPCI', 'YVTEPCI')

def mock_run_blast(pdbchain):
pass

def mock_parse_blast(infile, pdbchain, seq):
shutil.copy(os.path.join(TOPDIR, 'test', 'input', 'XXX_mdlA.sqc'),
'XXXA.sqc')

def mock_build_model(pdb, chains):
shutil.copy('XXX.pdb', 'XXX_mdl.pdb')

def mock_HydChrSSE(pdb, chain):
shutil.copy(os.path.join(TOPDIR, 'test', 'input', 'XXX_mdlA.hcs'), '.')

def mock_patchmap_feature(pdb):
shutil.copy(os.path.join(TOPDIR, 'test', 'input', 'XXX_mdl.pdb.ptm'), '.')

def mock_gather_features(pdb, chain_order):
shutil.copy(os.path.join(TOPDIR, 'test', 'input', 'XXX_mdlA.feat'), '.')

def mock_res_parser(fil):
shutil.copy(os.path.join(TOPDIR, 'test', 'input', 'XXX_mdl.bmiftr'), '.')

class Tests(unittest.TestCase):
def test_main(self):
"""Test of complete run of mainer"""
with utils.temporary_working_directory() as tmpdir:
shutil.copy(os.path.join(TOPDIR, 'test', 'input', 'test.pdb'),
'input.pdb')
with open('param.txt', 'w') as fh:
fh.write("dummy\ndummy\nA\n")
with utils.mocked_objects(
[(cryptosite.cleaning, 'muscleAlign', mock_muscle_align),
(cryptosite.seq_conservation, 'run_blast', mock_run_blast),
(cryptosite.seq_conservation, 'parse_blast',
mock_parse_blast),
(cryptosite.cleaning, 'build_model', mock_build_model),
(cryptosite.hyd_chr_sse, 'HydChrSSE', mock_HydChrSSE),
(cryptosite.patch_mapper, 'patchmap_feature',
mock_patchmap_feature),
(cryptosite.bmi_feature_parser, 'gather_features',
mock_gather_features),
(cryptosite.res_parser_bmi, 'res_parser',
mock_res_parser)]):
cryptosite.mainer_short.main()
# Verify that AllosMod inputs were created
os.unlink('XXX/align.ali')
os.unlink('XXX/XXX.pdb')
os.unlink('XXX/input.dat')
os.unlink('XXX/list')

if __name__ == '__main__':
unittest.main()
12 changes: 12 additions & 0 deletions test/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,18 @@ def mocked_object(parent, objname, replacement):
yield
setattr(parent, objname, oldobj)

@contextlib.contextmanager
def mocked_objects(objs):
"""Like mocked_object() but for a list of such tuples."""
oldobjs = []
for parent, objname, replacement in objs:
oldobjs.append(getattr(parent, objname))
setattr(parent, objname, replacement)
yield
for obj, oldobj in zip(objs, oldobjs):
parent, objname, replacement = obj
setattr(parent, objname, oldobj)

if 'coverage' in sys.modules:
import atexit
# Collect coverage information from subprocesses
Expand Down

0 comments on commit 3ce0505

Please sign in to comment.