source: rotdif/bin/rotdif_bokeh.py @ 1471

Last change on this file since 1471 was 1471, checked in by alexey, 2 years ago

ROTDIF

  • Property svn:executable set to *
File size: 11.2 KB
Line 
1#!/usr/bin/python
2
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
21
22from bokeh.plotting import figure
23from bokeh.embed import components
24
25from itertools import groupby
26
27
28from StringIO import StringIO
29#from math import exp, expm1, log10, log, log1p
30from subprocess import Popen, PIPE, STDOUT
31
32if (len(sys.argv) < 1):
33    print "\{\"error\":\"module called with no arguments\"\}\n";
34
35##############################################################################
36def FileNameArr():
37    ExpArr       = []
38    FitArr_upper = []
39    FitArr_lower = []
40   
41    for root, dirs, files in os.walk('./'):
42        for name in files:
43            filename = os.path.join(root, name)
44           
45            if '2d_fit_upper' in filename:
46                FitArr_upper.append(filename)
47
48            if '2d_fit_lower' in filename:
49                FitArr_lower.append(filename)
50               
51            if '2d_exp_' in filename:
52                ExpArr.append(filename)
53
54    return ExpArr, FitArr_upper, FitArr_lower
55
56################################################################################
57def GetData(filename):
58    file = open(filename, 'rU')
59    data = file.readlines()
60    file.close()
61       
62    xData = []
63    yData = []
64    eData = []
65   
66    for line in data:
67        xData.append(re.split(r'[\s]*', line)[0])
68        yData.append(re.split(r'[\s]*', line)[1])
69        if '2d_exp_' in filename:
70            eData.append(re.split(r'[\s]*', line)[2]) 
71
72    return xData, yData, eData
73   
74
75##################################################################################
76def message_box(text,icon):
77   
78    _message = {}
79    _message['icon'] = icon
80    _message['text'] = text
81   
82    UDP_IP = json_variables['_udphost']
83    UDP_PORT = json_variables['_udpport']
84    sock = socket.socket(socket.AF_INET, # Internet
85                         socket.SOCK_DGRAM) # UDP
86   
87    socket_dict={}
88    socket_dict['_uuid'] = json_variables['_uuid']
89    socket_dict['_message'] = _message
90
91    doc_string = json.dumps(socket_dict)
92    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
93   
94    return
95
96#### MAIN ####################################################################
97
98output_res = {}
99json_variables = " "
100
101
102InitialDirectoryStr = os.path.abspath(os.path.dirname(sys.argv[0]))
103#InputDir = InitialDirectoryStr + '/willitfit_source/Source'
104
105argv_io_string = StringIO(sys.argv[1])
106json_variables = json.load(argv_io_string)
107
108relax_location = json_variables['relax_location']
109RelaxStr = relax_location[0]
110Relaxfilename = os.path.basename(RelaxStr)
111
112
113pdb_location   = json_variables['pdb_location']
114PdbStr = pdb_location[0]
115Pdbfilename = os.path.basename(PdbStr)
116
117## UDP messaging ##################################################
118UDP_IP = json_variables['_udphost']
119UDP_PORT = json_variables['_udpport']
120sock = socket.socket(socket.AF_INET, # Internet
121        socket.SOCK_DGRAM) # UDP
122
123socket_dict={}
124socket_dict['_uuid'] = json_variables['_uuid']
125
126
127base_dir = json_variables[ '_base_directory' ]
128
129ExecutableFileLocationRotdif = '/opt/genapp/rotdif/bin/rotdif-1.1.jar'
130######################################################################
131ProcessToCallRotdif = []
132ProcessToCallRotdif.append('/usr/bin/java')
133ProcessToCallRotdif.append('-jar')
134#ProcessToCallRotdif.append('rotdif-1.1.jar')
135ProcessToCallRotdif.append(ExecutableFileLocationRotdif)
136
137ProcessToCallRotdif.append('-nogui')
138#ProcessToCallRotdif.append('-nodynamics')
139
140ProcessToCallRotdif.append('-pdb')
141ProcessToCallRotdif.append(Pdbfilename)
142
143ProcessToCallRotdif.append('-relax')
144ProcessToCallRotdif.append(Relaxfilename)
145
146if 'stat' not in json_variables:
147    ProcessToCallRotdif.append('-nostat')
148
149#print ProcessToCallRotdif
150#exit()
151## RUN ROTDIF MD  ##########################################################
152
153socket_dict["_textarea"] = 'Starting ROTDIF...\n\n'
154if socket_dict:
155    doc_string = json.dumps(socket_dict)
156    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
157
158master_rotdif, slave_rotdif = pty.openpty()
159ProcessRotdif = subprocess.Popen( ProcessToCallRotdif,stdout=slave_rotdif,stdin=PIPE,bufsize=0,close_fds=True)
160   
161stdout_rotdif = os.fdopen(master_rotdif, 'r', 0)
162rotdif_log = open('rotdif_log.out','w')
163path_to_live_log = str(base_dir) + "/" + 'rotdif_log.out'
164
165#html_base  = json_variables['_osroot']
166##application= json_variables['_application']
167#path_updated = path_to_live_log.replace(html_base + "/", "")
168##path_updated_1 = application + path_updated
169#path_updated_1 =  path_updated
170##print "Webroot: " + html_base + ", application: " + application +  ", pathupdated: " + path_updated + ", pathupdated_1: " + path_updated_1
171##exit()
172#socket_dict['live_log'] =  "<a href=" + path_updated_1 + " target='_blank'>" + "Output Log File" + "</a>"
173##socket_dict['live_log'] = path_updated_1
174
175
176error_string_md = ''
177timeout = .04 # seconds
178
179
180while True:
181    ready, _, _ = select.select([master_rotdif], [], [], timeout)
182    if ready:
183        output = stdout_rotdif.readline()
184        #output = stdout_rotdif.read(10)
185        if not output:
186            break
187        if output:
188            socket_dict["_textarea"] = output#.strip()
189            print >> rotdif_log, output.rstrip()
190            rotdif_log.flush()
191           
192            if "Percent" in output:
193                output_strip = output.strip()
194                OutArr = re.split(r'[\s]*', output_strip)
195                percent = OutArr[1][:-1]
196                socket_dict['progress_output'] = float(percent)/float(100)
197                socket_dict['progress_text'] = 'ROTDIF calculation progress: ' + str(int (float( percent ))) + '%'
198               
199            if socket_dict:
200                doc_string = json.dumps(socket_dict)
201                sock.sendto(doc_string,(UDP_IP,UDP_PORT))
202                #time.sleep(0.002)
203    elif ProcessRotdif.poll() is not None: 
204        break
205             
206ProcessRotdif.wait()
207os.close(slave_rotdif)
208os.close(master_rotdif)
209                           
210socket_dict["_textarea"] = '\nROTDIF Calculations Completed...\n\n'
211
212if socket_dict:
213    doc_string = json.dumps(socket_dict)
214    sock.sendto(doc_string,(UDP_IP,UDP_PORT))
215                           
216                           
217output_res[ 'progress_output' ] = str(1.0)
218output_res[ 'progress_text' ] =  'ROTDIF calculation progress: ' + '100%' 
219### PLOT ##############################################################
220
221output_plot_2d_fit_upper = []
222output_plot_2d_fit_lower = []
223output_plot_2d_exp       = []
224
225min_data_x = []
226min_data_y = []
227max_data_x = []
228max_data_y = []
229
230num_exp       = len(FileNameArr()[0])
231num_fit_upper = len(FileNameArr()[1])
232num_fit_lower = len(FileNameArr()[2])
233
234# resizing
235for i in range(num_exp):
236    output_plot_2d_exp.append([])
237for i in range(num_fit_upper):
238    output_plot_2d_fit_upper.append([])
239for i in range(num_fit_lower):
240    output_plot_2d_fit_lower.append([])
241
242
243#Exp - providing numbers of Exp and Fit sets ARE the same ...
244for i in range(num_exp):
245    print "Filename: " + FileNameArr()[0][i]
246
247    xExpArr = GetData(FileNameArr()[0][i])[0]
248    yExpArr = GetData(FileNameArr()[0][i])[1]
249    eExpArr = GetData(FileNameArr()[0][i])[2]   
250
251    xFupArr = GetData(FileNameArr()[1][i])[0]
252    yFupArr = GetData(FileNameArr()[1][i])[1]
253    eFupArr = GetData(FileNameArr()[1][i])[2]   
254
255    xFloArr = GetData(FileNameArr()[2][i])[0]
256    yFloArr = GetData(FileNameArr()[2][i])[1]
257    eFloArr = GetData(FileNameArr()[2][i])[2] 
258
259    #xFupArrsorted = xFupArr.sort()
260    #yFupArrsorted = yFupArr.sort()
261       
262    min_data_x.append( min(ii for ii in xFupArr ) )
263    min_data_y.append( min(ii for ii in yExpArr ) )
264    max_data_x.append( max(ii for ii in xFupArr ) )
265    max_data_y.append( max(ii for ii in yExpArr ) )
266       
267    numpoints_exp = len(xExpArr)
268    numpoints_fup = len(xFupArr)
269    numpoints_flo = len(xFloArr)
270           
271    for j in range(numpoints_exp):
272        output_plot_2d_exp[i].append([xExpArr[j],yExpArr[j],eExpArr[j]])     
273    for j in range(numpoints_fup):
274        output_plot_2d_fit_upper[i].append([xFupArr[j],yFupArr[j]])     
275    for j in range(numpoints_fup):
276        output_plot_2d_fit_lower[i].append([xFloArr[j],yFloArr[j]])     
277               
278
279## Plotting with FLOT #####################################################
280
281min_x = min(min_data_x)
282min_y = min(min_data_y)
283max_x = max(max_data_x)
284max_y = max(max_data_y)
285
286min_y1 = float(min_y) - 0.2
287max_y1 = float(max_y) + 0.2
288
289#output_res[ 'error' ] = min_x + " " + max_x + " " + str(min_y1) + " " + str(max_y1)
290#print "max_y: ", max_data_y
291
292xscale = ''
293yscale = ''
294
295flot_data = {
296    "options": 
297    {
298        "title"  : "Experimental &#961;",
299        #"xscale" : "log",
300        #"yscale" : "log",
301        #"xmin"   : min_x,
302        #"xmax"   : max_x,
303        "ymin"   : min_y1,
304        "ymax"   : max_y1,
305        "xlabel" : "&#952;",
306        "ylabel" : "&#961;(Exp.)",
307        "legend" :
308        {           
309            "position"            : "ne",
310            "margin"              : [-70, -1],
311            "backgroundColor"     : "null",
312            "labelBoxBorderColor" : "#000000",
313         },
314        "grid" : 
315        {
316            "backgroundColor" : "#ffffff",
317            "margin"    : 
318                              { 
319                                  "top"    : 0, 
320                                  "left"   : 0,
321                                  "bottom" : 0,
322                                  "right"  : 70
323                              }
324        },
325    },
326    "data": [ ]
327}
328
329for i in range(num_exp):
330    data_label = "Data" + str(i+1)
331    current_set_data = {
332        "points"  : { "show"      : "true", 
333                      "radius"    : 2,
334                      "errorbars" : "y", 
335                      "yerr"      : { "lowerCap" : "-",
336                                      "upperCap" : "-", 
337                                      "show"     : "true", 
338                                      #"color"    : "red",
339                                      "radius"   : 3 
340                                  }
341                  },
342        "label"  : data_label,
343        "data"   : output_plot_2d_exp[i]
344    }
345    flot_data['data'].append(current_set_data)
346
347
348for i in range(num_exp):
349    fit_label = "Fit" + str(i+1)
350    current_set_fit = {
351        "lines"  : { "show" : "true" },
352        #"label"  : fit_label,
353        "data"   : output_plot_2d_fit_upper[i]
354    }
355    flot_data['data'].append(current_set_fit)
356
357for i in range(num_exp):
358    fit_label = "Fit" + str(i+1)
359    current_set_fit = {
360        "lines"  : { "show" : "true" },
361        #"label"  : fit_label,
362        "data"   : output_plot_2d_fit_lower[i]
363    }
364    flot_data['data'].append(current_set_fit)
365
366
367##########################################################################
368
369outputmd_arr_files = []
370namdlog = str(base_dir) + "/" + 'rotdif_log.out'
371#namdlog = str(base_dir) + "/" + 'output'
372
373if os.path.exists(namdlog):
374    outputmd_arr_files.append(namdlog)
375
376
377output_res[ 'outputrotdif' ] = outputmd_arr_files
378
379#output_res[ 'fit_plot' ] = flot_data
380
381## BOKEH PLOT ########################################
382plot = figure()
383plot.circle([0,1,2,3,4],[3,6,7,9,14])
384#plot.circle(xFupArr, yFupArr)
385
386script, div = components(plot)
387
388output_res[ 'bokehid' ] = script
389#####################################################
390print json.dumps( output_res )
Note: See TracBrowser for help on using the repository browser.