source: rotdif/bin/run_rotdif_elmdock.py @ 1705

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

finish ellipsoid

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