source: rotdif/bin/main_elm.py @ 1700

Last change on this file since 1700 was 1700, checked in by yuexi, 2 years ago

rename file

  • Property svn:executable set to *
File size: 7.3 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
28import shutil
29from get_elm_tensor import elm_tensor
30
31def message_box(text,icon):
32   
33    _message = {}
34    _message['icon'] = icon
35    _message['text'] = text
36   
37    UDP_IP = json_variables['_udphost']
38    UDP_PORT = json_variables['_udpport']
39    sock = socket.socket(socket.AF_INET, # Internet
40                         socket.SOCK_DGRAM) # UDP
41   
42    socket_dict={}
43    socket_dict['_uuid'] = json_variables['_uuid']
44    socket_dict['_message'] = _message
45
46    doc_string = json.dumps(socket_dict)
47    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
48   
49    return
50
51def rotdif(Pdbfilename,sub_dir):
52    output_res = {}
53    json_variables = " "
54    InitialDirectoryStr = os.path.abspath(os.path.dirname(sys.argv[0]))
55    argv_io_string = StringIO(sys.argv[1])
56    json_variables = json.load(argv_io_string)
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    ProcessToCallRotdif.append('-elm')
75    ProcessToCallRotdif.append('-temp')
76    ProcessToCallRotdif.append(json_variables['temperature'])
77    ProcessToCallRotdif.append('-out')
78    ProcessToCallRotdif.append('out')
79    #ProcessToCallRotdif.append('-axes')
80    #ProcessToCallRotdif.append('-axesl')
81    #ProcessToCallRotdif.append(json_variables['axeslength'])
82    ProcessToCallRotdif.append('-pdb')
83    ProcessToCallRotdif.append(Pdbfilename)
84    ProcessToCallRotdif.append('-model')
85    ProcessToCallRotdif.append(json_variables['model'])
86    #if advanced button is checked:
87    if 'adv_option' in json_variables:
88        ProcessToCallRotdif.append('-sr')
89        ProcessToCallRotdif.append(json_variables['hydro'])
90        ProcessToCallRotdif.append('-wr')
91        ProcessToCallRotdif.append(json_variables['water'])
92   
93## RUN ROTDIF MD  ##########################################################
94    socket_dict["_textarea"] = 'Starting ELM...\n\n'
95    if socket_dict:
96        doc_string = json.dumps(socket_dict)
97        sock.sendto(doc_string,(UDP_IP,UDP_PORT))
98    master_rotdif, slave_rotdif = pty.openpty()
99    ProcessRotdif = subprocess.Popen( ProcessToCallRotdif,stdout=slave_rotdif,stdin=PIPE,bufsize=0,close_fds=True)   
100    stdout_rotdif = os.fdopen(master_rotdif, 'r', 0)
101    rotdif_log = open('all_prediction','w')
102    path_to_live_log = join(str(base_dir),join(str(sub_dir),'all_prediction'))
103    error_string_md = ''
104    timeout = 4 # seconds
105
106    while True:
107        ready, _, _ = select.select([master_rotdif], [], [], timeout)
108        if ready:
109            output = stdout_rotdif.readline()
110        #output = stdout_rotdif.read(10)
111            if not output:
112                break
113            if output:
114                socket_dict["_textarea"] = output#.strip()
115                print >> rotdif_log, output.rstrip()
116                rotdif_log.flush()
117                if "Percent" in output:
118                    output_strip = output.strip()
119                    OutArr = re.split(r'[\s]*', output_strip)
120                    percent = OutArr[1][:-1]
121                    socket_dict['progress_output'] = float(percent)/float(100)
122                    socket_dict['progress_text'] = 'ELM calculation progress: ' + str(int (float( percent ))) + '%'
123                if socket_dict:
124                    doc_string = json.dumps(socket_dict)
125                    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
126        elif ProcessRotdif.poll() is not None: 
127            break
128             
129    ProcessRotdif.wait()
130    os.close(slave_rotdif)
131    os.close(master_rotdif)
132    output_res[ 'progress_output' ] = str(1.0)
133    output_res[ 'progress_text' ] =  'ELM calculation progress: ' + '100%'                         
134    socket_dict["_textarea"] = '\nELM Calculations Completed...\n\n'
135
136    if socket_dict:
137        doc_string = json.dumps(socket_dict)
138        sock.sendto(doc_string,(UDP_IP,UDP_PORT))
139                                                   
140    output_res[ 'progress_output' ] = str(1.0)
141    output_res[ 'progress_text' ] =  'ELM calculation progress: ' + '100%' 
142    return output_res, base_dir
143
144def clean_up():
145    for CleanUp in glob.glob('./2d_*'):                           
146        os.remove(CleanUp)
147
148    for CleanUp in glob.glob('./3d_*'):                           
149        os.remove(CleanUp)
150
151    for CleanUp in glob.glob('./*.txt'): 
152        if not CleanUp.endswith(Relaxfilename):
153            os.remove(CleanUp)
154    for CleanUp in glob.glob('./*.out'): 
155        os.remove(CleanUp)
156
157    for CleanUp in glob.glob('./*.pdb'):
158        if not CleanUp.endswith(Pdbfilename):
159            os.remove(CleanUp)
160
161if __name__ == "__main__":
162    output_res = {}
163    json_variables = " " 
164    InitialDirectoryStr = os.path.abspath(os.path.dirname(sys.argv[0]))
165    argv_io_string = StringIO(sys.argv[1])
166    json_variables = json.load(argv_io_string)
167    pdb_location   = json_variables['pdb_location']
168    PdbStr = pdb_location[0]
169    Pdbfilename = os.path.basename(PdbStr)
170    run_name = json_variables['run_name']
171    sub_dir = run_name + "_ELM"
172    #output_res,base_dir = rotdif(sub_dir)
173    if os.path.isdir(sub_dir):
174        sys.stderr.write("Run name already existed!")
175    else:   
176        os.mkdir(sub_dir)
177    new_pdb = join(sub_dir,Pdbfilename)
178    shutil.move(Pdbfilename,new_pdb)
179    os.chdir(sub_dir)
180    output_res,base_dir = rotdif(Pdbfilename, sub_dir)
181    #save elm
182    #elm_out = [join(str(base_dir),join(sub_dir,'ELM_prediction'))]       
183    #save params
184    with open(join(str(base_dir),join(sub_dir,"all_prediction"))) as in_f:
185        tmp = in_f.readlines()
186    tmp[0]="Parameters\n"
187    with open(join(str(base_dir),join(sub_dir,"ELM_params")),'w') as out_f:
188        for items in tmp[:17]:
189            out_f.write(items)
190    with open(join(str(base_dir),join(sub_dir,"ELM_prediction")),'w') as out_f2:
191        for item in tmp[17:]:
192            out_f2.write(item)
193    elm_out = [join(str(base_dir),join(sub_dir,'ELM_prediction'))]
194    elm_params = [join(str(base_dir),join(sub_dir,"ELM_params"))]
195    output_res[ 'elm_out' ] = elm_out
196    output_res['elm_params'] = elm_params
197    pdb = join(str(base_dir),join(sub_dir,Pdbfilename))
198    elm_tensor(pdb)
199    output_res['elm_tensor'] = [join(str(base_dir), join(sub_dir,'ELM_tensor.py'))]
200    print(json.dumps(output_res))
Note: See TracBrowser for help on using the repository browser.