source: rotdif/bin/main_elm.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.1 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
27from os.path import join
28
29def message_box(text,icon):
30   
31    _message = {}
32    _message['icon'] = icon
33    _message['text'] = text
34   
35    UDP_IP = json_variables['_udphost']
36    UDP_PORT = json_variables['_udpport']
37    sock = socket.socket(socket.AF_INET, # Internet
38                         socket.SOCK_DGRAM) # UDP
39   
40    socket_dict={}
41    socket_dict['_uuid'] = json_variables['_uuid']
42    socket_dict['_message'] = _message
43
44    doc_string = json.dumps(socket_dict)
45    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
46   
47    return
48
49def rotdif():
50    output_res = {}
51    json_variables = " "
52    InitialDirectoryStr = os.path.abspath(os.path.dirname(sys.argv[0]))
53    argv_io_string = StringIO(sys.argv[1])
54    json_variables = json.load(argv_io_string)
55    pdb_location   = json_variables['pdb_location']
56    PdbStr = pdb_location[0]
57    Pdbfilename = os.path.basename(PdbStr)
58## UDP messaging ##################################################
59    UDP_IP = json_variables['_udphost']
60    UDP_PORT = json_variables['_udpport']
61    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
62    socket_dict={}
63    socket_dict['_uuid'] = json_variables['_uuid']
64    base_dir = json_variables[ '_base_directory' ]
65    #optimization_method_list = json_variables[ 'optimization_method' ]
66    ExecutableFileLocationRotdif = '/opt/genapp/rotdif/bin/rotdif-1.1.jar'
67    ProcessToCallRotdif = []
68    ProcessToCallRotdif.append('/usr/bin/java')
69    ProcessToCallRotdif.append('-jar')
70    ProcessToCallRotdif.append(ExecutableFileLocationRotdif)
71    ProcessToCallRotdif.append('-nogui')
72    ProcessToCallRotdif.append('-elm')
73    ProcessToCallRotdif.append('-temp')
74    ProcessToCallRotdif.append(json_variables['temperature'])
75    ProcessToCallRotdif.append('-out')
76    ProcessToCallRotdif.append('out')
77    #ProcessToCallRotdif.append('-axes')
78    #ProcessToCallRotdif.append('-axesl')
79    #ProcessToCallRotdif.append(json_variables['axeslength'])
80    ProcessToCallRotdif.append('-pdb')
81    ProcessToCallRotdif.append(Pdbfilename)
82    ProcessToCallRotdif.append('-model')
83    ProcessToCallRotdif.append(json_variables['model'])
84    #if advanced button is checked:
85    if 'adv_option' in json_variables:
86        ProcessToCallRotdif.append('-sr')
87        ProcessToCallRotdif.append(json_variables['hydro'])
88        ProcessToCallRotdif.append('-wr')
89        ProcessToCallRotdif.append(json_variables['water'])
90   
91## RUN ROTDIF MD  ##########################################################
92    socket_dict["_textarea"] = 'Starting ELM...\n\n'
93    if socket_dict:
94        doc_string = json.dumps(socket_dict)
95        sock.sendto(doc_string,(UDP_IP,UDP_PORT))
96    master_rotdif, slave_rotdif = pty.openpty()
97    ProcessRotdif = subprocess.Popen( ProcessToCallRotdif,stdout=slave_rotdif,stdin=PIPE,bufsize=0,close_fds=True)   
98    stdout_rotdif = os.fdopen(master_rotdif, 'r', 0)
99    rotdif_log = open('ELM_prediction','w')
100    path_to_live_log = str(base_dir) + "/" + 'ELM_prediction'
101    error_string_md = ''
102    timeout = 4 # seconds
103
104    while True:
105        ready, _, _ = select.select([master_rotdif], [], [], timeout)
106        if ready:
107            output = stdout_rotdif.readline()
108        #output = stdout_rotdif.read(10)
109            if not output:
110                break
111            if output:
112                socket_dict["_textarea"] = output#.strip()
113                print >> rotdif_log, output.rstrip()
114                rotdif_log.flush()
115                if "Percent" in output:
116                    output_strip = output.strip()
117                    OutArr = re.split(r'[\s]*', output_strip)
118                    percent = OutArr[1][:-1]
119                    socket_dict['progress_output'] = float(percent)/float(100)
120                    socket_dict['progress_text'] = 'ELM calculation progress: ' + str(int (float( percent ))) + '%'
121                if socket_dict:
122                    doc_string = json.dumps(socket_dict)
123                    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
124        elif ProcessRotdif.poll() is not None: 
125            break
126             
127    ProcessRotdif.wait()
128    os.close(slave_rotdif)
129    os.close(master_rotdif)
130    output_res[ 'progress_output' ] = str(1.0)
131    output_res[ 'progress_text' ] =  'ELM calculation progress: ' + '100%'                         
132    socket_dict["_textarea"] = '\nELM Calculations Completed...\n\n'
133
134    if socket_dict:
135        doc_string = json.dumps(socket_dict)
136        sock.sendto(doc_string,(UDP_IP,UDP_PORT))
137                                                   
138    output_res[ 'progress_output' ] = str(1.0)
139    output_res[ 'progress_text' ] =  'ELM calculation progress: ' + '100%' 
140    return output_res, base_dir
141
142def clean_up():
143    for CleanUp in glob.glob('./2d_*'):                           
144        os.remove(CleanUp)
145
146    for CleanUp in glob.glob('./3d_*'):                           
147        os.remove(CleanUp)
148
149    for CleanUp in glob.glob('./*.txt'): 
150        if not CleanUp.endswith(Relaxfilename):
151            os.remove(CleanUp)
152    for CleanUp in glob.glob('./*.out'): 
153        os.remove(CleanUp)
154
155    for CleanUp in glob.glob('./*.pdb'):
156        if not CleanUp.endswith(Pdbfilename):
157            os.remove(CleanUp)
158
159if __name__ == "__main__":
160    output_res,base_dir = rotdif()   
161    #save elm
162    elm_out = [str(base_dir) + "/" + 'ELM_prediction']   
163    #save params
164    with open(join(str(base_dir),"ELM_prediction")) as in_f:
165        tmp = in_f.readlines()
166    tmp[0]="Parameters\n"
167    with open(join(str(base_dir),"ELM_params"),'w') as out_f:
168        for items in tmp[:17]:
169            out_f.write(items)
170    elm_params = [str(base_dir)+"/"+"ELM_params"]
171    output_res[ 'elm_out' ] = elm_out
172    output_res['elm_params'] = elm_params
173    print(json.dumps(output_res))
174
Note: See TracBrowser for help on using the repository browser.