source: rotdif/bin/run_rotdif.py @ 1699

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

before ellipsoid

  • Property svn:executable set to *
File size: 6.4 KB
Line 
1#!/usr/bin/python
2from os.path import join
3import os
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
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(in_dock,Pdbfilename,Relaxfilename,sub_dir):
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    #relax_location = json_variables['relax_location']
56    #RelaxStr = relax_location[0]
57    #Relaxfilename = os.path.basename(RelaxStr)
58    #pdb_location   = json_variables['pdb_location']
59    #PdbStr = pdb_location[0]
60    #Pdbfilename = os.path.basename(PdbStr)
61## UDP messaging ##################################################
62    UDP_IP = json_variables['_udphost']
63    UDP_PORT = json_variables['_udpport']
64    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
65    socket_dict={}
66    socket_dict['_uuid'] = json_variables['_uuid']
67    #json_variables['_base_directory'] = sub_dir
68    base_dir = json_variables[ '_base_directory' ]
69    optimization_method_list = json_variables[ 'optimization_method' ]
70    ExecutableFileLocationRotdif = '/opt/genapp/rotdif/bin/rotdif-1.1.jar'
71    ProcessToCallRotdif = []
72    ProcessToCallRotdif.append('/usr/bin/java')
73    ProcessToCallRotdif.append('-jar')
74    ProcessToCallRotdif.append(ExecutableFileLocationRotdif)
75    ProcessToCallRotdif.append('-nogui')
76    dyna_flag = True
77    if 'run_dyna' not in json_variables:
78        ProcessToCallRotdif.append('-nodynamics')
79        dyna_flag = False
80    elm_flag = False
81    if 'run_elm' in json_variables:
82        ProcessToCallRotdif.append('-elm')
83        elm_flag = True
84    elmdock_flag = False
85    if ('run_elmdock' in json_variables) and (in_dock == True) :
86        ProcessToCallRotdif.append('-dock')
87        elmdock_flag = True
88    #ProcessToCallRotdif.append('-temp')
89    #ProcessToCallRotdif.append(json_variables['temperature'])
90    ProcessToCallRotdif.append('-out')
91    ProcessToCallRotdif.append('out')
92    ProcessToCallRotdif.append('-axes')
93    ProcessToCallRotdif.append('-axesl')
94    ProcessToCallRotdif.append(json_variables['axeslength'])
95    ProcessToCallRotdif.append('-pdb')
96    ProcessToCallRotdif.append(Pdbfilename)
97    ProcessToCallRotdif.append('-model')
98    ProcessToCallRotdif.append(json_variables['model'])
99    if optimization_method_list == 'robust':
100        ProcessToCallRotdif.append('-robust')
101    ProcessToCallRotdif.append('-relax')
102    ProcessToCallRotdif.append(Relaxfilename)
103    if 'stat' not in json_variables:
104        ProcessToCallRotdif.append('-nostat')
105    #ProcessToCallRotdif.append('-sr')
106    #ProcessToCallRotdif.append(json_variables['hydro'])
107    #ProcessToCallRotdif.append('-wr')
108    #ProcessToCallRotdif.append(json_variables['water'])
109   
110## RUN ROTDIF MD  ##########################################################
111    socket_dict["_textarea"] = 'Starting ROTDIF...\n\n'
112    if socket_dict:
113        doc_string = json.dumps(socket_dict)
114        sock.sendto(doc_string,(UDP_IP,UDP_PORT))
115    master_rotdif, slave_rotdif = pty.openpty()
116    ProcessRotdif = subprocess.Popen( ProcessToCallRotdif,stdout=slave_rotdif,stdin=PIPE,bufsize=0,close_fds=True)   
117    stdout_rotdif = os.fdopen(master_rotdif, 'r', 0)
118    rotdif_log = open('rotdif_log.out','w')
119    path_to_live_log = join(str(base_dir),join(sub_dir,'rotdif_log.out'))
120    error_string_md = ''
121    timeout = 4 # seconds
122
123    while True:
124        ready, _, _ = select.select([master_rotdif], [], [], timeout)
125        if ready:
126            output = stdout_rotdif.readline()
127        #output = stdout_rotdif.read(10)
128            if not output:
129                break
130            if output:
131                socket_dict["_textarea"] = output#.strip()
132                print >> rotdif_log, output.rstrip()
133                rotdif_log.flush()
134                if "Percent" in output:
135                    output_strip = output.strip()
136                    OutArr = re.split(r'[\s]*', output_strip)
137                    percent = OutArr[1][:-1]
138                    socket_dict['progress_output'] = float(percent)/float(100)
139                    socket_dict['progress_text'] = 'ROTDIF calculation progress: ' + str(int (float( percent ))) + '%'
140                if socket_dict:
141                    doc_string = json.dumps(socket_dict)
142                    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
143        elif ProcessRotdif.poll() is not None: 
144            break
145             
146    ProcessRotdif.wait()
147    os.close(slave_rotdif)
148    os.close(master_rotdif)
149    output_res[ 'progress_output' ] = str(1.0)
150    output_res[ 'progress_text' ] =  'ROTDIF calculation progress: ' + '100%'                         
151    socket_dict["_textarea"] = '\nROTDIF Calculations Completed...\n\n'
152
153    if socket_dict:
154        doc_string = json.dumps(socket_dict)
155        sock.sendto(doc_string,(UDP_IP,UDP_PORT))
156                                                   
157    output_res[ 'progress_output' ] = str(1.0)
158    output_res[ 'progress_text' ] =  'ROTDIF calculation progress: ' + '100%' 
159    return output_res, base_dir, dyna_flag, elm_flag, elmdock_flag
160
161def clean_up():
162    for CleanUp in glob.glob('./2d_*'):                           
163        os.remove(CleanUp)
164
165    for CleanUp in glob.glob('./3d_*'):                           
166        os.remove(CleanUp)
167
168    for CleanUp in glob.glob('./*.txt'): 
169        if not CleanUp.endswith(Relaxfilename):
170            os.remove(CleanUp)
171    for CleanUp in glob.glob('./*.out'): 
172        os.remove(CleanUp)
173
174    for CleanUp in glob.glob('./*.pdb'):
175        if not CleanUp.endswith(Pdbfilename):
176            os.remove(CleanUp)
177
Note: See TracBrowser for help on using the repository browser.