# -*- coding: utf-8 -*- # :noTabs=true: import sys, os, os.path, subprocess, shutil, commands import json args = json.load( file('.arguments.py') ) input_ = json.load( file('input.json') ) essential = [] # list of essential files for this jobs, rest of files will be deleted in ~30 days after the job finish. , Files in this list should NOT include 'output/' prefix ignore = [] # list of files to ignore [do not store in DB]. Files in this list should NOT include 'output/' prefix print 'Erraser analyze script, running with args:', json.dumps(args, sort_keys=True, indent=2) print 'input options:', json.dumps(input_, sort_keys=True, indent=2) def execute(message, commandline, return_=False): print message print commandline (res, output) = commands.getstatusoutput(commandline) print output if return_ == 'tuple': return(res, output) if res: print "\nEncounter error while executing: ", commandline if return_: return True, else: sys.exit(1) return False #Run ERRASER os.chdir('output') if input_['protocol_variant'] == 'erraser_standard': status1, output1 = execute('Running ERRASER script...', '%(erraser_root)s/ErraserStandard-Run.sh -pdb ./../input/model.pdb -map ./../input/density_map.ccp4 -map_reso %(map_resolution)s -fixed_res %(fixed_residues)s ' % dict(args.items() + input_.items()), return_ = 'tuple') #Analyze status2, output2 = execute('Running ERRASER Analyze script...', '%(erraser_root)s/ErraserStandard-Analyze.sh ./../input/model.pdb ./model_erraser.pdb' % dict(args.items() + input_.items()), return_ = 'tuple') out_analyze = open('erraser_analyze.out', 'w') for line in output2 : out_analyze.write(line) os.chdir('../') ############################# if status1 : essential.append('model_erraser.pdb') if status2 : essential.append('erraser_analyze.out') output = dict(status=status1, essential=essential, ignore=ignore) else: # erraser_single_residue status1, output1 = execute('Running ERRASER Single-res script...', '%(erraser_root)s/ErraserSingleResidue-Run.sh -pdb ./../input/model.pdb -map ./../input/density_map.ccp4 -map_reso %(map_resolution)s -rebuild_res %(rebuild_residue)s ' % dict(args.items() + input_.items()), return_ = 'tuple') #Analyze status2, output2 = execute('Running Erraser Single-res Analyze script...', '%(erraser_root)s/ErraserSingleResidue-Analyze.sh -prefix model -res %(rebuild_residue)s' % dict(args.items() + input_.items()), return_ = 'tuple') os.chdir('../') ############################# models = [] if not status1 : essential.append('model_start_min.pdb') for i in xrange(0,9) : if os.path.exists('./output/model_%d.pdb' % i) : models.append('model_%d.pdb' % i) essential.append('model_%d.pdb' % i) if not status2 : essential.append('erraser_single_res.analysis') # Create a single archive for all models execute("Archive the models", "cd output && tar -cvzf final_models.tgz *.pdb erraser_single_res.analysis", return_='tuple') #essential.append('final_models.tgz') output = dict(status=status1, essential=essential, models=models, ignore=ignore) json.dump(output, file('output.json', 'w') )