def doScopepanel(self): def getStringExp(self, name, response_headers, t): if name in self.args: try: if t == None: response_headers.append( (name, str(Data.execute(self.args[name][-1]).data()))) else: response_headers.append( (name, str(t.tdiExecute(self.args[name][-1]).data()))) except Exception: response_headers.append((name + '_error', str(sys.exc_info()))) def manageContinuousUpdate(self, x): if x.getShape().size == 1: new_max_x = x.data()[-1] else: new_max_x = x.data()[0][-1] curr_max_x = float(self.args['curr_max_x'+x_idx_s][-1]) displayed_width = float(self.args['displayed_width'][-1]) default_num_samples = float(self.args['default_num_samples'][-1]) num_samples = int((new_max_x-curr_max_x) * default_num_samples/displayed_width) if new_max_x > curr_max_x and num_samples > 1: if issubclass(x.dtype.type, integer): min_req_x = floor(curr_max_x+1) else: min_req_x = curr_max_x+finfo(new_max_x).eps update_function = 'MdsMisc->GetXYWave:DSC' infinity = sys.float_info.max if x.__class__.__name__ == 'Uint64Array' or x.__class__.__name__ == 'Int64Array': update_function = 'MdsMisc->GetXYWaveLongTimes:DSC' min_req_x = str(int(min_req_x))+'QU' infinity = str((1 << 63)-1)+'QU' sig = Data.execute(update_function+'(\''+expr.replace('\\', '\\\\').replace( '\'', '\\\'')+'\','+str(min_req_x)+','+str(infinity)+','+str(num_samples)+')') return makeData(sig.dim_of().data()), makeData(sig.data()) else: return Float64Array([]), Float64Array([]) response_headers = list() response_headers.append( ('Cache-Control', 'no-store, no-cache, must-revalidate')) response_headers.append(('Pragma', 'no-cache')) t = None if 'tree' in self.args: Tree.usePrivateCtx() try: t = Tree(self.args['tree'][-1], int(self.args['shot'][-1].split(',')[0])) except: pass for name in ('title', 'xlabel', 'ylabel', 'xmin', 'xmax', 'ymin', 'ymax'): getStringExp(self, name, response_headers, t) continuous_update = 'continuous_update' in self.args sig_idx = 0 output = '' if 'tree' in self.args: shots = self.args['shot'][-1].split(',') for shot in shots: y_idx = 1 y_idx_s = '%d' % (y_idx,) while 'y'+y_idx_s in self.args: x_idx_s = y_idx_s sig_idx = sig_idx+1 sig_idx_s = '%d' % (sig_idx,) expr = self.args['y'+y_idx_s][-1] y_idx = y_idx+1 y_idx_s = '%d' % (y_idx,) try: t = Tree(self.args['tree'][-1], int(shot)) response_headers.append(('SHOT'+sig_idx_s, str(t.shot))) except Exception: response_headers.append( ('ERROR'+sig_idx_s, 'Error opening tree %s, shot %s, error: %s' % (self.args['tree'][-1], shot, sys.exc_info()))) continue if 'default_node' in self.args: try: t.setDefault(t.getNode(self.args['default_node'][-1])) except Exception: response_headers.append(('ERROR'+sig_idx_s, 'Error setting default to %s in tree %s, shot %s, error: %s' % (self.args['default_node'][-1], self.args['tree'][-1], shot, sys.exc_info()))) continue try: if t == None: sig = Data.execute(expr) else: sig = t.tdiExecute(expr) if not continuous_update: y = makeData(sig.data()) except Exception: response_headers.append( ('ERROR' + sig_idx_s, 'Error evaluating expression: "%s", error: %s' % (expr, sys.exc_info()))) continue if 'x'+x_idx_s in self.args: expr = self.args['x'+x_idx_s][-1] try: if t == None: x = Data.execute(expr) else: x = t.tdiEexecute(expr) x = makeData(x.data()) if continuous_update: x, y = manageContinuousUpdate(self, x) except Exception: response_headers.append( ('ERROR'+sig_idx_s, 'Error evaluating expression: "%s", error: %s' % (expr, sys.exc_info()))) continue else: try: x = makeData(sig.dim_of().data()) if continuous_update: x, y = manageContinuousUpdate(self, x) except Exception: response_headers.append( ('ERROR'+sig_idx_s, 'Error getting x axis of %s:, error: %s' % (expr, sys.exc_info()))) continue if x.__class__.__name__ == 'Uint64Array' or x.__class__.__name__ == 'Int64Array': # Javascript doesn't support 64 bit integers x = Float64Array(x) response_headers.append(('X_IS_DATETIME', 'true')) response_headers.append( ('X'+sig_idx_s+'_DATATYPE', x.__class__.__name__)) response_headers.append( ('Y'+sig_idx_s+'_DATATYPE', y.__class__.__name__)) response_headers.append(('X'+sig_idx_s+'_LENGTH', str(len(x)))) response_headers.append(('Y'+sig_idx_s+'_LENGTH', str(len(y)))) output = output+str(x.data().data)+str(y.data().data) else: y_idx = 1 y_idx_s = '%d' % (y_idx,) while 'y'+y_idx_s in self.args: x_idx_s = y_idx_s expr = self.args['y'+y_idx_s][-1] y_idx = y_idx+1 y_idx_s = '%d' % (y_idx,) sig_idx = sig_idx+1 sig_idx_s = '%d' % (sig_idx,) try: if t == None: sig = Data.execute(expr) else: sig = t.tdiExecute(expr) if not continuous_update: y = makeData(sig.data()) except Exception: response_headers.append( ('ERROR' + sig_idx_s, 'Error evaluating expression: "%s", error: %s' % (expr, sys.exc_info()))) continue if 'x'+x_idx_s in self.args: expr = self.args['x'+x_idx_s][-1] try: if t == None: x = Data.execute(expr) else: x = t.tdiExecute(expr) x = makeData(x.data()) if continuous_update: x, y = manageContinuousUpdate(self, x) except Exception: response_headers.append( ('ERROR'+sig_idx_s, 'Error evaluating expression: "%s", error: %s' % (expr, sys.exc_info()))) continue else: try: x = makeData(sig.dim_of().data()) if continuous_update: x, y = manageContinuousUpdate(self, x) except Exception: response_headers.append( ('ERROR'+sig_idx_s, 'Error getting x axis of %s: "%s", error: %s' % (expr, sys.exc_info()))) continue if x.__class__.__name__ == 'Uint64Array' or x.__class__.__name__ == 'Int64Array': # Javascript doesn't support 64 bit integers x = Float64Array(x) response_headers.append(('X_IS_DATETIME', 'true')) response_headers.append( ('X'+sig_idx_s+'_DATATYPE', x.__class__.__name__)) response_headers.append( ('Y'+sig_idx_s+'_DATATYPE', y.__class__.__name__)) response_headers.append(('X'+sig_idx_s+'_LENGTH', str(len(x)))) response_headers.append(('Y'+sig_idx_s+'_LENGTH', str(len(y)))) output = output+str(x.data().data)+str(y.data().data) return ('200 OK', response_headers, output)
def doFrame(self): def getStringExp(self,name,response_headers,t): if name in self.args: try: if t == None: response_headers.append((name,str(Data.execute(self.args[name][-1]).data()))) else: response_headers.append((name,str(t.tdiExecute(self.args[name][-1]).data()))) except Exception: response_headers.append((name,str(sys.exc_info()))) response_headers = list() response_headers.append(('Cache-Control','no-store, no-cache, must-revalidate')) response_headers.append(('Pragma','no-cache')) response_headers.append(('Content-Type','application/octet-stream')) t = None if 'tree' in self.args: Tree.usePrivateCtx() try: t = Tree(self.args['tree'][-1],int(self.args['shot'][-1].split(',')[0])) except: response_headers.append(('ERROR','Error opening tree')) for name in ('title','xlabel','ylabel'): getStringExp(self,name,response_headers,t) if 'frame_idx' in self.args: frame_idx = self.args['frame_idx'][-1] else: frame_idx = '0' expr = self.args['y'][-1] try: if t != None: sig = t.tdiExecute('GetSegment(' + expr + ',' + frame_idx + ')') else: sig = Data.execute('GetSegment(' + expr + ',' + frame_idx + ')') frame_data = makeData(sig.data()) except Exception: response_headers.append(('ERROR','Error evaluating expression: "%s", error: %s' % (expr,sys.exc_info()))) if 'init' in self.args: if 'x' in self.args: expr = self.args['x'][-1] try: if t == None: times = Data.execute(expr) else: times = t.tdiExecute(expr) times = makeData(times.data()) except Exception: response_headers.append(('ERROR','Error evaluating expression: "%s", error: %s' % (expr,sys.exc_info()))) else: try: #times = Data.execute('dim_of(' + expr + ')') times = list() if t == None: numSegments = Data.execute('GetNumSegments(' + expr + ')').data() else: numSegments = t.tdiExecute('GetNumSegments(' + expr + ')').data() for i in range(0, numSegments): if t == None: times.append(Data.execute('GetSegmentLimits(' + expr + ',' + str(i) + ')').data()[0]) else: times.append(t.tdiExecute('GetSegmentLimits(' + expr + ',' + str(i) + ')').data()[0]) times = Float64Array(times) except Exception: response_headers.append(('ERROR','Error getting x axis of: "%s", error: %s' % (expr,sys.exc_info()))) response_headers.append(('FRAME_WIDTH',str(sig.getShape()[0]))) response_headers.append(('FRAME_HEIGHT',str(sig.getShape()[1]))) response_headers.append(('FRAME_BYTES_PER_PIXEL',str(frame_data.data().itemsize))) response_headers.append(('FRAME_LENGTH',str(len(frame_data)))) output = str(frame_data.data().data) if 'init' in self.args: response_headers.append(('TIMES_DATATYPE',times.__class__.__name__)) response_headers.append(('TIMES_LENGTH',str(len(times)))) output = output + str(times.data().data) status = '200 OK' return (status, response_headers, output)