예제 #1
0
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)
예제 #2
0
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)