source: rotdif/bin/run_rotdif_elmdock.py @ 1647

Last change on this file since 1647 was 1647, checked in by yuexi, 3 years ago

update

  • Property svn:executable set to *
File size: 6.2 KB
Line 
1#!/usr/bin/python
2import os
3import glob
4import re
5import shutil
6import sys
7import subprocess
8import json
9import cStringIO
10import shlex 
11import socket
12import time
13import pty
14import select
15import atexit
16import signal
17import functools
18import itertools
19import math
20import pandas as pd
21import numpy as np
22from itertools import groupby
23from matplotlib import cm, colors
24from StringIO import StringIO
25from math import exp, expm1, log10, log, log1p
26from subprocess import Popen, PIPE, STDOUT
27
28def message_box(text,icon):
29   
30    _message = {}
31    _message['icon'] = icon
32    _message['text'] = text
33   
34    UDP_IP = json_variables['_udphost']
35    UDP_PORT = json_variables['_udpport']
36    sock = socket.socket(socket.AF_INET, # Internet
37                         socket.SOCK_DGRAM) # UDP
38   
39    socket_dict={}
40    socket_dict['_uuid'] = json_variables['_uuid']
41    socket_dict['_message'] = _message
42
43    doc_string = json.dumps(socket_dict)
44    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
45   
46    return
47
48def rotdif(in_dock):
49    output_res = {}
50    json_variables = " "
51    InitialDirectoryStr = os.path.abspath(os.path.dirname(sys.argv[0]))
52    argv_io_string = StringIO(sys.argv[1])
53    json_variables = json.load(argv_io_string)
54    relax_location = json_variables['relax_location']
55    RelaxStr = relax_location[0]
56    Relaxfilename = os.path.basename(RelaxStr)
57    pdb_location   = json_variables['pdb_location']
58    PdbStr = pdb_location[0]
59    Pdbfilename = os.path.basename(PdbStr)
60## UDP messaging ##################################################
61    UDP_IP = json_variables['_udphost']
62    UDP_PORT = json_variables['_udpport']
63    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
64    socket_dict={}
65    socket_dict['_uuid'] = json_variables['_uuid']
66    base_dir = json_variables[ '_base_directory' ]
67    optimization_method_list = json_variables[ 'optimization_method' ]
68    ExecutableFileLocationRotdif = '/opt/genapp/rotdif/bin/rotdif-1.1.jar'
69    ProcessToCallRotdif = []
70    ProcessToCallRotdif.append('/usr/bin/java')
71    ProcessToCallRotdif.append('-jar')
72    ProcessToCallRotdif.append(ExecutableFileLocationRotdif)
73    ProcessToCallRotdif.append('-nogui')
74    dyna_flag = True
75    if 'run_dyna' not in json_variables:
76        ProcessToCallRotdif.append('-nodynamics')
77        dyna_flag = False
78    elm_flag = False
79    if 'run_elm' in json_variables:
80        ProcessToCallRotdif.append('-elm')
81        elm_flag = True
82    elmdock_flag = False
83    if in_dock == True:
84        ProcessToCallRotdif.append('-dock')
85        elmdock_flag = True
86    ProcessToCallRotdif.append('-temp')
87    ProcessToCallRotdif.append(json_variables['temperature'])
88    ProcessToCallRotdif.append('-out')
89    ProcessToCallRotdif.append('out')
90    #ProcessToCallRotdif.append('-axes')
91    #ProcessToCallRotdif.append('-axesl')
92    #ProcessToCallRotdif.append(json_variables['axeslength'])
93    ProcessToCallRotdif.append('-pdb')
94    ProcessToCallRotdif.append(Pdbfilename)
95    ProcessToCallRotdif.append('-model')
96    ProcessToCallRotdif.append(json_variables['model'])
97    if optimization_method_list == 'robust':
98        ProcessToCallRotdif.append('-robust')
99    ProcessToCallRotdif.append('-relax')
100    ProcessToCallRotdif.append(Relaxfilename)
101    ProcessToCallRotdif.append('-nostat')
102    if 'adv_option' in json_variables:
103        ProcessToCallRotdif.append('-sr')
104        ProcessToCallRotdif.append(json_variables['hydro'])
105        ProcessToCallRotdif.append('-wr')
106        ProcessToCallRotdif.append(json_variables['water'])
107   
108## RUN ROTDIF MD  ##########################################################
109    socket_dict["_textarea"] = 'Starting ELMDOCK...\n\n'
110    if socket_dict:
111        doc_string = json.dumps(socket_dict)
112        sock.sendto(doc_string,(UDP_IP,UDP_PORT))
113    master_rotdif, slave_rotdif = pty.openpty()
114    ProcessRotdif = subprocess.Popen( ProcessToCallRotdif,stdout=slave_rotdif,stdin=PIPE,bufsize=0,close_fds=True)   
115    stdout_rotdif = os.fdopen(master_rotdif, 'r', 0)
116    rotdif_log = open('elmdock_log.out','w')
117    path_to_live_log = str(base_dir) + "/" + 'elmdock_log.out'
118    error_string_md = ''
119    timeout = 30 # seconds
120
121    while True:
122        ready, _, _ = select.select([master_rotdif], [], [], timeout)
123        if ready:
124            output = stdout_rotdif.readline()
125        #output = stdout_rotdif.read(10)
126            if not output:
127                break
128            if output:
129                socket_dict["_textarea"] = output#.strip()
130                print >> rotdif_log, output.rstrip()
131                rotdif_log.flush()
132                if "Percent" in output:
133                    output_strip = output.strip()
134                    OutArr = re.split(r'[\s]*', output_strip)
135                    percent = OutArr[1][:-1]
136                    socket_dict['progress_output'] = float(percent)/float(100)
137                    socket_dict['progress_text'] = 'ELMDOCK calculation progress: ' + str(int (float( percent ))) + '%'
138                if socket_dict:
139                    doc_string = json.dumps(socket_dict)
140                    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
141        elif ProcessRotdif.poll() is not None: 
142            break
143             
144    ProcessRotdif.wait()
145    os.close(slave_rotdif)
146    os.close(master_rotdif)
147    output_res[ 'progress_output' ] = str(1.0)
148    output_res[ 'progress_text' ] =  'ELMDOCK calculation progress: ' + '100%'                         
149    socket_dict["_textarea"] = '\nELMDOCK Calculations Completed...\n\n'
150
151    if socket_dict:
152        doc_string = json.dumps(socket_dict)
153        sock.sendto(doc_string,(UDP_IP,UDP_PORT))
154                                                   
155    output_res[ 'progress_output' ] = str(1.0)
156    output_res[ 'progress_text' ] =  'ELMDOCK calculation progress: ' + '100%' 
157    return output_res, base_dir, dyna_flag, elm_flag, elmdock_flag
158
159def clean_up():
160    for CleanUp in glob.glob('./2d_*'):                           
161        os.remove(CleanUp)
162
163    for CleanUp in glob.glob('./3d_*'):                           
164        os.remove(CleanUp)
165
166    for CleanUp in glob.glob('./*.txt'): 
167        if not CleanUp.endswith(Relaxfilename):
168            os.remove(CleanUp)
169    for CleanUp in glob.glob('./*.out'): 
170        os.remove(CleanUp)
171
172    for CleanUp in glob.glob('./*.pdb'):
173        if not CleanUp.endswith(Pdbfilename):
174            os.remove(CleanUp)
175
Note: See TracBrowser for help on using the repository browser.