Exemple #1
0
def archive_program(node, time=None):
    """ use time if tree is archive """
    """ else use TIME node """
    print('archive_program')
    try:
        from archive import base, interface
        from MDSplus import TreeNode, Tree
        if not isinstance(node, (TreeNode)):
            node = Tree('archive', -1).getNode(node)
        """ use _time variable if Tree is ARCHIVE """
        if node.tree.shot == -1:
            try:
                time = base.TimeInterval(time)
            except:
                time = base.TimeInterval([-1800., 0, 0])
        else:
            time = base.TimeInterval(node.getNode('\TIME').data())
        prog = interface.get_program(time)[-1]
        return prog[node.node_name.lower()]
    except:
        """ generate dummy signal with error message as help text """
        import getpass, sys
        user = getpass.getuser()
        e = sys.exc_info()
        help = user + ': ' + str(e[1]) + ', %d' % e[2].tb_lineno
        print(help)
        return help
 def dclInterface(self):
     Tree('pytree',-1,'ReadOnly').createPulse(self.shot)
     self.assertEqual(dcl('help set verify',1,1,0)[1],None)
     self.assertEqual(tcl('help set tree',1,1,0)[1],None)
     self.assertEqual(ccl('help set xandq',1,1,0)[1],None)
     self.assertEqual(cts('help addcrate',1,1,0)[1],None)
     """ tcl commands """
     self._doTCLTest('type test','test\n')
     self._doTCLTest('close/all')
     self._doTCLTest('show db','\n')
     self._doTCLTest('set tree pytree/shot=%d'%(self.shot,))
     self._doTCLTest('show db','000  PYTREE        shot: %d [\\PYTREE::TOP]   \n\n'%self.shot)
     self._doTCLTest('edit PYTREE/shot=%d'%(self.shot,))
     self._doTCLTest('add node TCL_NUM/usage=numeric')
     self._doTCLTest('add node TCL_PY_DEV/model=TESTDEVICE')
     self._doTCLTest('do TESTDEVICE:TASK_TEST')
     self._doExceptionTest('do TESTDEVICE:TASK_ERROR',Exc.DevUNKOWN_STATE)
     if not sys.platform.startswith('win'): # Windows does not support timeout yet
         self._doExceptionTest('do TESTDEVICE:TASK_TIMEOUT',Exc.TdiTIMEOUT)
     self._doExceptionTest('close',Exc.TreeWRITEFIRST)
     self._doTCLTest('write')
     self._doTCLTest('close')
     self._doTCLTest('show db','\n')
     """ context """
     self._doTCLTest('set tree pytree')
     pytree = Tree()
     self.assertEqual(str(pytree),'Tree("PYTREE",-1,"Normal")')
     self._doTCLTest('close pytree')
     self.assertEqual(str(pytree),'Tree("PYTREE",-1,"Closed")')
     """ tcl exceptions """
     self._doExceptionTest('close',Exc.TreeNOT_OPEN)
     self._doExceptionTest('dispatch/command/server=xXxXxXx type test',Exc.ServerPATH_DOWN)
     self._doExceptionTest('dispatch/command/server type test',Exc.MdsdclIVVERB)
Exemple #3
0
 def test():
     pytree = Tree('pytree', self.shot)
     testing = Tree('testing', -1)
     for node in testing.getNodeWild(".compression:*"):
         pytree.SIG_CMPRS.record = node.record
         self.assertTrue((pytree.SIG_CMPRS.record == node.record).all(),
                         msg="Error writing compressed signal%s" % node)
Exemple #4
0
def archive_program(node, time=None):
    """ use time if tree is archive """
    """ else use TIME node """
    print('archive_program')
    try:
        from archive import base, interface
        from MDSplus import TreeNode, Tree
        if not isinstance(node, (TreeNode)):
            node = Tree('archive',-1).getNode(node)
        """ use _time variable if Tree is ARCHIVE """
        if node.tree.shot == -1:
            try:    time = base.TimeInterval(time)
            except: time = base.TimeInterval([-1800.,0,0])
        else:
            time = base.TimeInterval(node.getNode('\TIME').data())
        prog = interface.get_program(time)[-1]
        return prog[node.node_name.lower()]
    except:
        """ generate dummy signal with error message as help text """
        import getpass,sys
        user = getpass.getuser()
        e = sys.exc_info()
        help = user+': '+str(e[1])+', %d' % e[2].tb_lineno
        print(help)
        return help
Exemple #5
0
    def init(self):
        eventStr = "SETUP " + str(self.id.data()) + " " + Tree.getTree().name
        eventStr = eventStr + " " + str(Tree.getTree().shot)
        try:
            eventStr = eventStr + " " + str(self.frequency.data())
        except:
            Data.execute('DevLogErr($1,$2)', self.nid, 'Cannot read frequency')
            raise mdsExceptions.TclFAILED_ESSENTIAL
        try:
            eventStr = eventStr + " " + str(self.trig_source.data())
        except:
            Data.execute('DevLogErr($1,$2)', self.nid,
                         'Cannot read trigger source')
            raise mdsExceptions.TclFAILED_ESSENTIAL
        try:
            eventStr = eventStr + " " + str(self.sampl_start.data())
        except:
            Data.execute('DevLogErr($1,$2)', self.nid,
                         'Cannot read Sampling start')
            raise mdsExceptions.TclFAILED_ESSENTIAL
        try:
            eventStr = eventStr + " " + str(self.sampl_end.data())
        except:
            Data.execute('DevLogErr($1,$2)', self.nid,
                         'Cannot read Sampling end')
            raise mdsExceptions.TclFAILED_ESSENTIAL
        try:
            eventStr = eventStr + " " + str(self.offset_start.data())
        except:
            Data.execute('DevLogErr($1,$2)', self.nid,
                         'Cannot read Offset start')
            raise mdsExceptions.TclFAILED_ESSENTIAL
        try:
            eventStr = eventStr + " " + str(self.offset_end.data())
        except:
            Data.execute('DevLogErr($1,$2)', self.nid,
                         'Cannot read Offset end')
            raise mdsExceptions.TclFAILED_ESSENTIAL
        try:
            eventStr = eventStr + " " + str(self.duration.data())
        except:
            Data.execute('DevLogErr($1,$2)', self.nid, 'Cannot read Duration')
            raise mdsExceptions.TclFAILED_ESSENTIAL

        eventStr = eventStr + " " + str(self.params.getNid())
        eventStr = eventStr + " " + str(self.wave_params.getNid())
        eventStr = eventStr + " " + str(self.input_cal.getNid())
        eventStr = eventStr + " " + str(self.output_cal.getNid())
        try:
            eventStr = eventStr + " " + self.control.data()
        except:
            Data.execute('DevLogErr($1,$2)', self.nid, 'Cannot read Control')
            raise mdsExceptions.TclFAILED_ESSENTIAL
        eventStr = eventStr + " " + str(self.signals_adc_in.getNid())
        eventStr = eventStr + " " + str(self.signals_dac_out.getNid())
        eventStr = eventStr + " " + str(self.signals_user.getNid())
        print(eventStr)
        Event.setevent(self.getEventName(), eventStr)
        sleep(3)
        return
Exemple #6
0
 def test():
     from MDSplus import Tree, Opaque
     with Tree(self.tree, self.shot, 'NEW') as ptree:
         ptree.addNode('JPGS')
         ptree.addNode('JPG')
         ptree.write()
     ptree = Tree(self.tree, self.shot)
     node = ptree.JPG
     root = os.path.dirname(os.path.realpath(__file__))
     node.record = Opaque.fromFile(root + '/images/mdsplus_logo.jpg')
     opq = node.record
     try:
         opq.image
     except ImportError as e:
         print(e)  # Image module not found
     node = ptree.JPGS
     node.makeSegment(
         None, None, None,
         Opaque.fromFile(root + '/images/mdsplus_logo.jpg'))
     node.makeSegment(None, None, None,
                      Opaque.fromFile(root + '/images/test-mpeg.mpg'))
     node.makeSegment(None, None, None,
                      Opaque.fromFile(root + '/images/test-mpeg.gif'))
     self.assertEqual(len(node.record), 3)
     lens = (54851, 706564, 77013)
     for i in range(3):
         seg = node.getSegment(i)
         self.assertEqual(len(seg.value.value.data()), lens[i])
Exemple #7
0
 def test():
     from MDSplus import Tree, Int32, Int64, Dimension, Range, Window, DIVIDE, ADD, MULTIPLY
     from numpy import arange, ones, int16, int64
     slp = 3.3
     off = 1.1
     trg = -1000000
     clk = 1000000
     with Tree(self.tree, self.shot, 'NEW') as ptree:
         sig = ptree.addNode('SIG').record = ADD(
             MULTIPLY(ptree.addNode('RAW'), ptree.addNode('SLP')),
             ptree.addNode('OFF'))
         ptree.addNode('TRG').record = Int64(trg)
         ptree.addNode('CLK').record = Int32(clk)
         ptree.write()
     ptree = Tree(self.tree, self.shot)
     trig = ptree.TRG
     raw = ptree.RAW
     sig = ptree.SIG
     dt = DIVIDE(Int64(1e9), ptree.CLK)
     rng = Range(None, None, dt)
     wnd = Window(None, None, trig)
     ptree.SLP.record = slp
     ptree.OFF.record = off
     length, seglen = 100, 10
     dat = ones(seglen, dtype=int16)
     for i0 in range(0, length, seglen):
         i1 = i0 + seglen - 1
         wnd[0], wnd[1] = Int64(i0), Int64(i1)
         dim = Dimension(wnd, rng)
         d0 = Int64(i0 * dt + trig)
         d1 = Int64(i1 * dt + trig)
         self.assertEqual(dim.data()[0], d0.data())
         self.assertEqual(dim.data()[-1], d1.data())
         raw.makeSegment(d0, d1, dim, dat)
     self.assertEqual(
         str(raw.getSegment(0)),
         "Build_Signal(Word([1,1,1,1,1,1,1,1,1,1]), *, Build_Dim(Build_Window(0Q, 9Q, TRG), * : * : 1000000000Q / CLK))"
     )
     self.assertEqual(str(sig.record), "RAW * SLP + OFF")
     self.assertTrue(sig.dim_of().tolist(),
                     (arange(0, length, dtype=int64) * int(1e9 / clk) +
                      trg).tolist())
     self.assertTrue(
         (abs(sig.data() -
              (ones(length, dtype=int16) * slp + off)) < 1e-5).all(),
         "Stored data does not match expected array")
     #        ptree.close()
     #        ptree.compressDatafile() # this will break the functionality of updateSegment
     #        ptree.open()
     trig.record = 0
     for i in range(int(length / seglen)):
         dim = raw.getSegmentDim(i)
         raw.updateSegment(dim.data()[0], dim.data()[-1], dim, i)
     self.assertEqual(
         str(raw.getSegment(0)),
         "Build_Signal(Word([1,1,1,1,1,1,1,1,1,1]), *, Build_Dim(Build_Window(0Q, 9Q, TRG), * : * : 1000000000Q / CLK))"
     )
     self.assertTrue(sig.dim_of().tolist(),
                     (arange(0, length, dtype=int64) *
                      int(1e9 / clk)).tolist())
Exemple #8
0
 def extAttr(self):
     with Tree('pytree',self.shot+0,'new') as pytree:
         if pytree.shot != self.shot+0:
             raise Exception("Shot number changed! tree.shot=%d, thread.shot=%d" % (pytree.shot, self.shot+0))
         pytree.default.addNode('pytreesub','subtree').include_in_pulse=True
         pytree.write()
         self.assertEqual(pytree.versions_in_model,False)
         self.assertEqual(pytree.versions_in_pulse,False)
         pytree.versions_in_model = True
         self.assertEqual(pytree.versions_in_model,True)
         self.assertEqual(pytree.versions_in_pulse,False)
         pytree.versions_in_pulse = 1
         self.assertEqual(pytree.versions_in_model,True)
         self.assertEqual(pytree.versions_in_pulse,True)
     with Tree('pytreesub',self.shot+0,'new') as pytreesub:
         if pytreesub.shot != self.shot+0:
             raise Exception("Shot number changed! tree.shot=%d, thread.shot=%d" % (pytreesub.shot, self.shot+0))
         node=pytreesub.addNode('node','signal')
         node.setExtendedAttribute('ATT1',100)
         node.setExtendedAttribute('ATT2',Range(1,200))
         node.setExtendedAttribute('ATT3','this is ip')
         node.setExtendedAttribute('ATT3','this is plasma current')
         pytreesub.write()
     pytree.readonly()
     node = pytree.getNode(".PYTREESUB:NODE")
     self.assertEqual(str(node.getExtendedAttribute('ATT1')),'100')
     self.assertEqual(str(node.getExtendedAttribute('ATT2')),'1 : 200 : *')
     self.assertEqual(str(node.getExtendedAttribute('ATT3')),'this is plasma current')
     exattr = node.getExtendedAttributes()
     self.assertEqual(exattr['ATT1'],100)
     self.assertEqual(str(exattr['ATT2']),'1 : 200 : *')
     self.assertEqual(exattr['ATT3'],'this is plasma current')
Exemple #9
0
 def attr(self):
     shot = self.shot + 0
     with Tree('pytree', shot, 'new') as pytree:
         self.assertEqual(pytree.shot, shot)
         pytree.default.addNode('pytreesub',
                                'subtree').include_in_pulse = True
         pytree.write()
         self.assertEqual(pytree.versions_in_model, False)
         self.assertEqual(pytree.versions_in_pulse, False)
         pytree.versions_in_model = True
         self.assertEqual(pytree.versions_in_model, True)
         self.assertEqual(pytree.versions_in_pulse, False)
         pytree.versions_in_pulse = 1
         self.assertEqual(pytree.versions_in_model, True)
         self.assertEqual(pytree.versions_in_pulse, True)
     with Tree('pytreesub', shot, 'new') as pytreesub:
         self.assertEqual(pytreesub.shot, shot)
         node = pytreesub.addNode('node', 'signal')
         node.setExtendedAttribute('ATT1', 100)
         node.setExtendedAttribute('ATT2', Range(1, 200))
         node.setExtendedAttribute('ATT3', 'this is ip')
         node.setExtendedAttribute('ATT3', att3)
         pytreesub.write()
     pytree.readonly()
     node = pytree.getNode(".PYTREESUB:NODE")
     self.assertEqual(str(node.getExtendedAttribute('ATT1')), '100')
     self.assertEqual(str(node.getExtendedAttribute('ATT2')), att2)
     self.assertEqual(str(node.getExtendedAttribute('ATT3')), att3)
     exattr = node.getExtendedAttributes()
     self.assertEqual(exattr['ATT1'], 100)
     self.assertEqual(str(exattr['ATT2']), att2)
     self.assertEqual(exattr['ATT3'], att3)
Exemple #10
0
 def master(self):
     from MDSplus import Tree, TreeFILE_NOT_FOUND,TreeFOPENR
     path = self.master_path.record
     expt = str(path).split('::',2)[0].strip('\\')
     try:
         return Tree(expt,self.tree.shot,'ReadOnly').getNode(path)
     except (TreeFOPENR,TreeFILE_NOT_FOUND):
         return Tree(expt,-1,'ReadOnly').getNode(path)
Exemple #11
0
 def test():
     with Tree('pytree', self.shot, 'new') as pytree:
         if pytree.shot != self.shot:
             raise Exception(
                 "Shot number changed! tree.shot=%d, thread.shot=%d" %
                 (pytree.shot, self.shot))
         pytree.default.addNode('pytreesub',
                                'subtree').include_in_pulse = True
         for i in range(10):
             node = pytree.addNode('val%02d' % (i, ), 'numeric')
             node.record = i
             node = pytree.top.addNode('sig%02d' % (i, ), 'signal')
             node.record = Signal(i, None, i)
             node = pytree.top.addNode('child%02d' % (i, ), 'structure')
             node.addNode('text', 'text')
             node.addNode('child', 'structure')
         node = pytree.addNode('SIG_CMPRS', 'signal')
         node.compress_on_put = True
         Device.PyDevice('TestDevice').Add(pytree, 'TESTDEVICE')
         Device.PyDevice('CYGNET4K').Add(pytree, 'CYGNET4K').on = False
         pytree.write()
     with Tree('pytreesub', self.shot, 'new') as pytreesub:
         if pytreesub.shot != self.shot:
             raise Exception(
                 "Shot number changed! tree.shot=%d, thread.shot=%d" %
                 (pytreesub.shot, self.shot))
         pytreesub_top = pytreesub.default
         node = pytreesub_top.addNode('.rog', 'structure')
         for i in range(10):
             node = node.addNode('.child', 'structure')
         node = node.addNode('rogowski', 'structure')
         node.tag = 'MAG_ROGOWSKI'
         node = node.addNode('signals', 'structure')
         node = node.addNode('rog_fg', 'signal')
         node.record = Signal(Range(1., 1000.), None,
                              Range(1., 100., .1))
         node = pytreesub_top.addNode('btor', 'signal')
         node.tag = 'BTOR'
         node.compress_on_put = True
         node.record = Signal(Range(2., 2000., 2.), None,
                              Range(1., 1000.))
         ip = pytreesub_top.addNode('ip', 'signal')
         rec = pytreesub.tdiCompile(
             "Build_Signal(Build_With_Units(\\MAG_ROGOWSKI.SIGNALS:ROG_FG + 2100. * \\BTOR, 'ampere'), *, DIM_OF(\\BTOR))"
         )
         ip.record = rec
         ip.tag = 'MAG_PLASMA_CURRENT'
         ip.tag = 'MAGNETICS_PLASMA_CURRENT'
         ip.tag = 'MAG_IP'
         ip.tag = 'MAGNETICS_IP'
         ip.tag = 'IP'
         for i in range(10):
             node = pytreesub_top.addNode('child%02d' % (i, ),
                                          'structure')
             node.addDevice('dt200_%02d' % (i, ), 'dt200').on = False
         pytreesub.write()
Exemple #12
0
    def __init__(self, dbname, shot, ):
        self.tree = Tree(dbname, shot)

        # 节点列表 {'AI':[...], 'FBC':[...]}
        subtrees = ['AI', 'FBC',]
        self.channel_dic = {}
        for subtree in subtrees:
            nodes_array = self.tree.getNode(subtree).getDescendants()
            nodes_name = [node.getNodeName() for node in nodes_array]
            self.channel_dic[subtree] = nodes_name
Exemple #13
0
 def run(self):
     """Run test1.test() function"""
     Tree.usePrivateCtx()
     stream = StringIO()
     try:
         self.result = TextTestRunner(stream=stream,verbosity=2).run(self.test)
     finally:
         stream.seek(0)
         self.stream = stream.read()
         stream.close()
Exemple #14
0
 def getCompression(self):
     with Tree('pytree',self.shot+10,'new') as pytree:
         node = pytree.addNode('SIG_CMPRS', 'signal')
         node.compress_on_put = True
         pytree.write()
     pytree.normal()
     testing = Tree('testing', -1)
     for node in testing.getNodeWild(".compression:*"):
         pytree.SIG_CMPRS.record=node.record
         self.assertTrue((pytree.SIG_CMPRS.record == node.record).all(),
                          msg="Error writing compressed signal%s"%node)
Exemple #15
0
 def test():
     pytree = Tree('pytree', self.shot, 'ReadOnly')
     ip = pytree.getNode('\\ip')
     self.assertEqual(str(ip), '\\PYTREESUB::IP')
     self.assertEqual(ip.nid, pytree._IP.nid)
     self.assertEqual(ip.nid, pytree.__PYTREESUB.IP.nid)
     self.assertEqual(ip.nid, pytree.__PYTREESUB__IP.nid)
     self.assertEqual(pytree.TESTDEVICE.__class__,
                      Device.PyDevice('TESTDEVICE'))
     self.assertEqual(pytree.CYGNET4K.__class__,
                      Device.PyDevice('CYGNET4K'))
Exemple #16
0
 def test():
     pytree = Tree('pytree', self.shot, 'ReadOnly')
     ip = pytree.getNode('\\ip')
     pytree.setDefault(ip)
     self.assertEqual(
         str(ip.record),
         'Build_Signal(Build_With_Units(\\MAG_ROGOWSKI.SIGNALS:ROG_FG + 2100. * \\BTOR, "ampere"), *, DIM_OF(\\BTOR))'
     )
     self.assertEqual(str(ip.record), str(ip.getData()))
     self.assertEqual(ip.segmented, ip.isSegmented())
     self.assertEqual(ip.versions, ip.containsVersions())
     self.assertEqual(ip.getNumSegments(), 0)
     self.assertEqual(ip.getSegment(0), None)
Exemple #17
0
 def openTree(self,tree,shot):
     Tree.usePrivateCtx()
     try:
         shot=int(shot)
     except Exception:
         raise Exception("Invalid shot specified, must be an integer value: %s<br /><br />Error: %s" % (shot,sys.exc_info()))
     try:
         t=Tree(tree,shot)
         self.tree=t.tree
         self.shot=str(t.shot)
         self.treeObj=t
     except Exception:
         raise Exception("Error opening tree named %s for shot %d<br /><br />Error: %s" % (tree,shot,sys.exc_info()))
Exemple #18
0
def archive_log(node, time=None, cache=None):
    """ use time if tree is archive """
    """ else use TIME node """
    print('archive_log')
    try:
        from archive import base, interface
        from MDSplus import TreeNode, Tree
        if not isinstance(node, (TreeNode)):
            node = Tree('archive',-1).getNode(node)
        """ use _time variable if Tree is ARCHIVE """
        try:
            node.getNode('$CFGLOG')
            url = base.Path(node.getNode('$URL').data()).url_cfglog()
        except:
          try:
            node.getNode('$PARLOG')
            url = base.Path(node.getNode('$URL').data()).url_parlog()
          except:
              raise Exception('could not specify log type. No Member named $CFGLOG or $PARLOG')
        if node.tree.shot == -1:
            try:    time = base.TimeInterval(time)
            except: time = base.TimeInterval(['now'])
        else:
            time = base.TimeInterval(node.getNode('\TIME').data())
        """ request signal """
        return str(interface._get_json(url, time=time).read())
    except:
        """ generate error message"""
        import getpass,sys
        user = getpass.getuser()
        e = sys.exc_info()
        help = user+': '+str(e[1])+', %d' % e[2].tb_lineno
        print(help)
        return help
Exemple #19
0
 def getNode(self):
     with Tree('pytree',self.shot+3,'new') as pytree:
         pytree.addNode('pytreesub','subtree').include_in_pulse=True
         pytree.write()
     with Tree('pytreesub',self.shot+3,'new') as pytreesub:
         ip=pytreesub.addNode('ip','signal')
         ip.tag='IP'
         pytreesub.write()
     pytree=Tree('pytree',self.shot+3,'ReadOnly')
     ip = pytree.getNode('\\ip')
     self.assertEqual(str(ip),'\\PYTREESUB::IP')
     self.assertEqual(ip.nid,pytree._IP.nid)
     self.assertEqual(ip.nid,pytree.__PYTREESUB.IP.nid)
     self.assertEqual(ip.nid,pytree.__PYTREESUB__IP.nid)
Exemple #20
0
 def setDefault(self):
     with Tree('pytree',self.shot+5,'new') as pytree:
         pytree.default.addNode('pytreesub','subtree').include_in_pulse=True
         pytree.write()
     with Tree('pytreesub',self.shot+5,'new') as pytreesub:
         pytreesub.default.addNode('mynode','numeric').addTag("mytag")
         pytreesub.write()
     pytree.readonly()
     pytree2 = Tree('pytree',self.shot+5,"ReadOnly")
     pytree.setDefault(pytree._MYTAG)
     self.assertEqual(str(pytree.getDefault()),'\\PYTREESUB::MYTAG')
     self.assertEqual(str(pytree2.getDefault()),'\\PYTREE::TOP')
     pytree.getNode("\\PYTREESUB::TOP").setDefault()
     self.assertEqual(str(pytree.getDefault()),'\\PYTREESUB::TOP')
 def segments(self):
     pytree = Tree('pytree', self.shot)
     signal = pytree.SIG01
     signal.record = None
     signal.compress_on_put = False
     for i in range(2000):
         signal.putRow(100, Range(1, 1000).data(), DateToQuad("now"))
     pytree.createPulse(self.shot + 2)
     signal.compress_segments = True
     pytree3 = Tree('pytree', self.shot + 2)
     pytree3.compressDatafile()
     self.assertEqual((signal.record == pytree3.SIG01.record).all(), True)
     signal.deleteData()
     # beginning a block set next_row to 0
     signal.beginTimestampedSegment(Int32Array([0, 7]))
     self.assertEqual(str(signal.record), "Build_Signal([], *, [])")
     self.assertEqual(str(signal.getSegment(0)), "Build_Signal([], *, [])")
     # beginning adding row increments next_row to 1
     signal.putRow(1, Int32Array([1]), -1)
     self.assertEqual(str(signal.record), "Build_Signal([1], *, [-1Q])")
     self.assertEqual(str(signal.getSegment(0)),
                      "Build_Signal([1], *, [-1Q])")
     # beginning a new block set next_row back to 0 of the new block
     # the previous block is assumed to be full as the tailing zero could be valid data
     signal.beginTimestampedSegment(Int32Array([0]))
     self.assertEqual(str(signal.record),
                      "Build_Signal([1,7], *, [-1Q,0Q])")
     self.assertEqual(str(signal.getSegment(0)),
                      "Build_Signal([1,7], *, [-1Q,0Q])")
Exemple #22
0
 def getCurrentShot(self):
     """ 获取当前炮号 """
     try:
         shot_num = self.tree.getCurrent()
         new_tree = Tree(self.dbname, shot_num)
         shot_num = shot_num if new_tree.getNode(
             'FBC:DUPS1').getLength() else shot_num - 1
     except mdsExceptions.TreeNNF:
         # MDSplus.mdsExceptions.TreeNNF: %TREE-W-NNF, Node Not Found
         shot_num = shot_num if new_tree.getNode(
             'FBC:IP').getLength() else shot_num - 1
     except mdsExceptions.TreeNOCURRENT:
         # MDSplus.mdsExceptions.TreeNOCURRENT: %TREE-E-NOCURRENT, No current shot number set for this tree.
         shot_num = None
     return shot_num
Exemple #23
0
    def treeCtx(self):
        from gc import collect
        from time import sleep

        def check(n):
            self.assertEqual(n, len(list(tree._TreeCtx.ctxs.items())[0][1]))

        self.assertEqual(tree._TreeCtx.ctxs,
                         {})  # neither tcl nor tdi has been called yet
        tcl('edit pytree/shot=%d/new' % self.shot)
        check(1)
        Data.execute('$EXPT')
        check(1)
        t = Tree()
        check(2)
        Data.execute('tcl("dir", _out)')
        check(2)
        del (t)
        collect(2)
        sleep(.1)
        check(1)
        Data.execute('_out')
        check(1)
        t = Tree('pytree', self.shot + 1, 'NEW')
        self.assertEqual(len(tree._TreeCtx.ctxs[tree._TreeCtx.local.tctx.ctx]),
                         1)
        self.assertEqual(len(tree._TreeCtx.ctxs[t.ctx.value]), 1)
        Data.execute('tcl("close")')
        self.assertEqual(len(tree._TreeCtx.ctxs[tree._TreeCtx.local.tctx.ctx]),
                         1)
        self.assertEqual(len(tree._TreeCtx.ctxs[t.ctx.value]), 1)
        self.assertEqual(str(t),
                         'Tree("PYTREE",%d,"Edit")' % (self.shot + 1, ))
        self.assertEqual(str(Data.execute('tcl("show db", _out);_out')), "\n")
        del (t)
        collect(2)
        sleep(.01)
        check(1)
        # tcl/tdi context remains until end of session
        t = Tree('pytree', self.shot + 1, 'NEW')
        self.assertEqual(len(tree._TreeCtx.ctxs[tree._TreeCtx.local.tctx.ctx]),
                         1)
        self.assertEqual(len(tree._TreeCtx.ctxs[t.ctx.value]), 1)
        del (t)
        collect(2)
        sleep(.01)
        check(1)
        self.cleanup()
Exemple #24
0
 def scaled(self):
     with Tree(self.tree, self.shot + 7, 'NEW') as ptree:
         node = ptree.addNode('S')
         ptree.write()
     ptree.normal()
     srt, end, dt = -1000, 1000, 1000
     d = Int64Array(range(srt, end + 1, dt))
     v = Int16Array(range(srt, end + 1, dt))
     node.makeSegment(srt, end, d, v)
     self.assertEqual(True, (node.getSegment(0).data() == v.data()).all())
     node.setSegmentScale(Int64(2))
     self.assertEqual(node.getSegmentScale().decompile(), "$VALUE * 2Q")
     self.assertEqual(
         ptree.tdiExecute("GetSegmentScale(S)").decompile(), "$VALUE * 2Q")
     self.assertEqual(True, (node.record.data() == v.data() * 2).all())
     node.setSegmentScale(Int16Array([1, 2]))
     self.assertEqual(True, (node.record.data() == v.data() * 2 + 1).all())
     self.assertEqual(True, (node.getSegment(0) == v * 2 + 1).all())
     self.assertEqual(
         ptree.tdiExecute("GetSegment(S,0)").decompile(),
         "Build_Signal($VALUE * 2W + 1W, Word([-1000,0,1000]), [-1000Q,0Q,1000Q])"
     )
     ptree.tdiExecute("SetSegmentScale(S,as_is($VALUE+1D0))")
     self.assertEqual(
         ptree.tdiExecute("S").decompile(),
         "Build_Signal($VALUE + 1D0, Word([-1000,0,1000]), [-1000Q,0Q,1000Q])"
     )
Exemple #25
0
def plotdata(path='\\ARCHIVESB::DMD10195:CH1',
             treename='sandbox',
             shot=5,
             server=None):
    from MDSplus import Connection
    from pylab import plot, title, xlabel, ylabel
    if server is not None:
        Con = Connection(server)
        Con.openTree(treename, shot)
        name = Con.get('{}:$NAME'.format(path))
        data = Con.get('DATA({})'.format(path))
        time = Con.get('DIM_OF({})'.format(path))
        unit = Con.get('UNITS_OF({})'.format(path))
    else:
        with Tree(treename, shot) as tree:
            Node = tree.getNode(path)
            Data = Node.getData()
            name = Node.getNode('$NAME').data()
            data = Data.data()
            time = Data.dim_of().data()
            unit = Data.getUnits()
    plot(time, data)
    xlabel('time (s)')
    ylabel(unit)
    title(name)
Exemple #26
0
 def DimensionlessSegments(self):
     from MDSplus import Tree,Int32Array,numpy,TreeBUFFEROVF
     with Tree(self.tree,self.shot+8,'NEW') as ptree:
         ptree.addNode('S')
         ptree.write()
     ptree.normal()
     node = ptree.S
     len = 10
     seg0 = Int32Array(numpy.array(range(len)))
     for i in range(10):
         seg = seg0 + i*len
         start, end = seg[0],seg[len-1]
         node.makeSegment(start, end, None, seg)
     seg = seg0 + 10*len
     start, end = seg[0],seg[len-1]
     node.beginSegment(start, end, None, seg)
     node.putSegment(seg[0:1])
     self.assertEqual(node.record.data()[-5:].tolist(),[96,97,98,99,100])
     node.putSegment(seg[1:2])
     self.assertEqual(node.record.data()[-5:].tolist(),[97,98,99,100,101])
     self.assertEqual(node.getSegment(0).data().tolist(),seg0.tolist())
     self.assertEqual(node.record.data()[:10].tolist(),seg0.tolist())
     ptree.compressDatafile()
     ptree.normal()
     self.assertEqual(node.record.data()[-5:].tolist(),[97,98,99,100,101])
     try:   node.putSegment(seg[2:3]) # compress finalizes last segment, putSegment cannot put
     except TreeBUFFEROVF: pass
     else:  self.assertEqual(None,TreeBUFFEROVF)
     ptree.setTimeContext(17,21,None) # interval contained in segment 1 and 2
     self.assertEqual(node.record.data().tolist(),[17,18,19,20,21])
Exemple #27
0
 def opaque(self):
     with Tree(self.tree, self.shot + 3, 'NEW') as ptree:
         ptree.addNode('JPGS')
         ptree.addNode('JPG')
         ptree.write()
     ptree.normal()
     node = ptree.JPG
     root = os.path.dirname(os.path.realpath(__file__))
     node.record = Opaque.fromFile(root + '/images/test.jpg')
     opq = node.record
     try:
         opq.image
     except ImportError as e:
         print(e)  # Image module not found
     node = ptree.JPGS
     node.makeSegment(None, None, None,
                      Opaque.fromFile(root + '/images/test.jpg'))
     node.makeSegment(None, None, None,
                      Opaque.fromFile(root + '/images/test.mpg'))
     node.makeSegment(None, None, None,
                      Opaque.fromFile(root + '/images/test.gif'))
     self.assertEqual(len(node.record), 3)
     lens = (5977, 10240, 4292)
     for i in range(3):
         seg = node.getSegment(i)
         self.assertEqual(len(seg.value.value.data()), lens[i])
Exemple #28
0
 def dispatcher(self):
     shot = self.shot+1
     with Tree(self.tree,shot,'new') as pytree:
         Device.PyDevice('TestDevice').Add(pytree,'TESTDEVICE_I')
         Device.PyDevice('TestDevice').Add(pytree,'TESTDEVICE_S',add_source=True)
         pytree.write()
     monitor,monitor_port = self._setup_mdsip('ACTION_MONITOR','MONITOR_PORT',7010+self.index,False)
     monitor_opt = "/monitor=%s"%monitor if monitor_port>0 else ""
     server ,server_port  = self._setup_mdsip('ACTION_SERVER', 'ACTION_PORT',7000+self.index,True)
     pytree.normal()
     pytree.TESTDEVICE_I.ACTIONSERVER.no_write_shot = False
     pytree.TESTDEVICE_I.ACTIONSERVER.record = server
     pytree.TESTDEVICE_S.ACTIONSERVER.no_write_shot = False
     pytree.TESTDEVICE_S.ACTIONSERVER.record = server
     """ using dispatcher """
     mon,mon_log,svr,svr_log = (None,None,None,None)
     try:
         mon,mon_log = self._start_mdsip(monitor,monitor_port,'monitor')
         svr,svr_log = self._start_mdsip(server ,server_port ,'dispatcher')
         try:
             if mon: self.assertEqual(mon.poll(),None)
             if svr: self.assertEqual(svr.poll(),None)
             #Connection(server).get("""py("MDSplus.Device.PyDevice('TestDevice')","None")""")
             """ tcl dispatch """
             self._testDispatchCommand(server,'type test')
             self._doTCLTest('set tree pytree/shot=%d'%shot)
             #if not self.in_valgrind:
             #    self._doTCLTest('dispatch TESTDEVICE_S:ACTIONSERVER:MANUAL')
             #    self._waitIdle(server,3)
             #else:
             #    sys.stdout.write("VALGRIND: skipping 'dispatch TESTDEVICE_S:ACTIONSERVER:MANUAL'\n")
             #    sys.stdout.flush()
             self._doTCLTest('dispatch/build%s'%monitor_opt)
             self._doTCLTest('dispatch/phase%s INIT'%monitor_opt)
             self._waitIdle(server,3)
             self._doTCLTest('dispatch/phase%s PULSE'%monitor_opt)
             self._waitIdle(server,3)
             self._doTCLTest('dispatch/phase%s STORE'%monitor_opt)
             self._waitIdle(server,3)
             """ tcl exceptions """
             self._doExceptionTest('dispatch/command/server=%s '%server,Exc.MdsdclIVVERB)
             """ tcl check if still alive """
             if mon: self.assertEqual(mon.poll(),None)
             if svr: self.assertEqual(svr.poll(),None)
         finally:
             self._stop_mdsip((svr,server),(mon,monitor))
     finally:
         if svr_log: svr_log.close()
         if mon_log: mon_log.close()
         self._doTCLTest('close/all')
     pytree.readonly()
     #if not self.in_valgrind:
     #    self.assertTrue(pytree.TESTDEVICE_S.MANUAL_DONE.record<= pytree.TESTDEVICE_S.INIT1_DONE.record)
     self.assertTrue(pytree.TESTDEVICE_I.INIT1_DONE.record <= pytree.TESTDEVICE_I.INIT2_DONE.record)
     self.assertTrue(pytree.TESTDEVICE_S.INIT1_DONE.record <= pytree.TESTDEVICE_S.INIT2_DONE.record)
     self.assertTrue(pytree.TESTDEVICE_I.INIT2_DONE.record <= pytree.TESTDEVICE_I.STORE_DONE.record)
     self.assertTrue(pytree.TESTDEVICE_S.INIT2_DONE.record <= pytree.TESTDEVICE_S.STORE_DONE.record)
     self.assertEqual(pytree.TESTDEVICE_I.CHANNEL.data().tolist(),[0,1,2,3,4,5,6,7,8,9])
     self.assertEqual(pytree.TESTDEVICE_S.CHANNEL.data().tolist(),[0,1,2,3,4,5,6,7,8,9])
Exemple #29
0
 def data(self):
     shot = self.shot + 7
     with Tree('pytree', shot, 'new') as pytree:
         pytree.default.addNode('pytreesub',
                                'subtree').include_in_pulse = True
         pytree.write()
     with Tree('pytreesub', shot, 'new') as pytreesub:
         node = pytreesub.addNode('.rog', 'structure')
         for i in range(10):
             node = node.addNode('.child', 'structure')
         node = node.addNode('rogowski', 'structure')
         node.tag = 'MAG_ROGOWSKI'
         node = node.addNode('signals', 'structure')
         node = node.addNode('rog_fg', 'signal')
         node.record = Signal(Range(1., 1000.), None, Range(1., 100., .1))
         node = pytreesub.addNode('btor', 'signal')
         node.tag = 'BTOR'
         node.compress_on_put = True
         node.record = Signal(Range(2., 2000., 2.), None, Range(1., 1000.))
         ip = pytreesub.addNode('ip', 'signal')
         ip.tag = "IP"
         rec = pytreesub.tdiCompile(
             "Build_Signal(Build_With_Units(\\MAG_ROGOWSKI.SIGNALS:ROG_FG + 2100. * \\BTOR, 'ampere'), *, DIM_OF(\\BTOR))"
         )
         ip.record = rec
         pytreesub.versions_in_pulse = True
         pytreesub.write()
     pytree.readonly()
     ip = pytree.getNode('\\IP')
     pytree.setDefault(ip)
     self.assertEqual(
         str(ip.record),
         'Build_Signal(Build_With_Units(\\MAG_ROGOWSKI.SIGNALS:ROG_FG + 2100. * \\BTOR, "ampere"), *, DIM_OF(\\BTOR))'
     )
     self.assertEqual(str(ip.record), str(ip.getData()))
     self.assertEqual(ip.segmented, ip.isSegmented())
     self.assertEqual(ip.versions, ip.containsVersions())
     self.assertEqual(ip.versions, False)
     self.assertEqual(ip.getNumSegments(), 0)
     self.assertEqual(ip.getSegment(0), None)
     pytree.normal()
     ip.record = ADD(1, COMPILE("\\BTOR"))
     self.assertEqual(ip.versions, True)
     self.assertEqual(ip.record.decompile(), '1 + COMPILE("\\\\BTOR")')
     self.assertEqual(ip.record.data().tolist(),
                      (pytree.getNode("\\BTOR").data() + 1).tolist())
Exemple #30
0
 def DevicesTests(self, package):
     with Tree('devtree', -1, 'new') as t:
         devices = __import__(package).__dict__
         for model in sorted(devices.keys()):
             cls = devices[model]
             if isinstance(cls, type) and issubclass(cls, Device):
                 node, name = self.getNodeName(t, model)
                 cls.Add(node, name)
Exemple #31
0
 def test():
     from MDSplus import Tree, DateToQuad, Range
     with Tree('seg_tree', self.shot, 'NEW') as ptree:
         ptree.addNode('S').compress_on_put = False
         ptree.write()
     ptree = Tree(self.tree, self.shot)
     node = ptree.S
     for i in range(200):
         node.putRow(100, Range(1, 100).data(), DateToQuad("now"))
     ptree.createPulse(self.shot + 1)
     node.compress_segments = True
     ptree1 = Tree(self.tree, self.shot + 1)
     ptree1.compressDatafile()
     self.assertEqual((node.record == ptree1.S.record).all(), True)
Exemple #32
0
 def CompressSegments(self):
     from MDSplus import Tree,DateToQuad,ZERO,Int32,Int32Array,Int64Array,Range
     with Tree(self.tree,self.shot+9,'NEW') as ptree:
         node = ptree.addNode('S')
         node.compress_on_put = False
         ptree.write()
     ptree.cleanDatafile()
     ptree.normal()
     te = DateToQuad("now")
     sampperseg = 50
     data = ZERO(Int32Array([sampperseg]),Int32(0))
     numsegs = 128
     for i in range(numsegs):
         t0=te+1;te=t0+sampperseg-1
         node.makeSegment(t0,te,Int64Array(range(t0,te+1)),data+Int32(i))
     node.compress_segments=True
     ptree.createPulse(self.shot+11)
     Tree.compressDatafile(self.tree,self.shot+11)
     ptree1 = Tree(self.tree,self.shot+11)
     node1  = ptree1.S
     self.assertEqual(True,(node.record==node1.record).all())
     self.assertEqual(True,ptree.getDatafileSize()>ptree1.getDatafileSize())
     for i in range(numsegs):
         srt,end = node.getSegmentLimits(i)
         dim = Range(srt,end)
         node.updateSegment(srt,end,dim,i)
         if i%16==0:
             self.assertEqual(dim.decompile(),node.getSegmentDim(i).decompile())
     ptree.compressDatafile()
     ptree.readonly()
     self.assertEqual(numsegs,node1.getNumSegments())
     self.assertEqual(True,ptree.getDatafileSize()<ptree1.getDatafileSize())
     for i in range(numsegs):
         self.assertEqual(node.getSegmentDim(i).data().tolist(),node1.getSegmentDim(i).data().tolist())
Exemple #33
0
def archive_image(node, time=None):
    """ use time if tree is archive """
    """ else use TIME node """
    print('archive_image')
    try:
        from archive import base, interface
        from MDSplus import TreeNode, Tree
        if not isinstance(node, (TreeNode)):
            node = Tree('archive',-1).getNode(node)
        """ use _time variable if Tree is ARCHIVE """
        if node.tree.shot == -1:
            try:    time = base.TimeInterval(time)
            except: time = base.TimeInterval([-1800.,0,0])
        else:
            time = base.TimeInterval(node.getNode('\TIME').data())
        url = base.Path(node.getNode('$URL').data()).url_datastream()
        """ request signal """
        signal = interface.read_pngs_url(url, time, 3)
        """ generate help text (HELP, DESCRIPTION, $NAME) """
        try:        help = node.getNode('HELP').data()
        except:
            try:    help = node.getNode('DESCRIPTION').data()
            except: help = node.getNode('$NAME').data()
        signal.setHelp(str(help))
        return signal
    except:
        local = locals()
        """ generate dummy signal with error message as help text """
        import getpass,sys
        e = sys.exc_info()
        user = getpass.getuser()
        help = user+': %s, %d' % (repr(e[1]), e[2].tb_lineno)
        print(help)
        print(local)
        try:
            from MDSplus import Signal
            signal = Signal([6,66,666])
            signal.setHelp(help.split('\n')[-1])
            return(signal)
        except:
            return help
Exemple #34
0
ERRORn
"""

def doScopepanel(self):
    def getStringExp(self,name,response_headers):
        if name in self.args:
            try:
                response_headers.append((name,str(Data.execute(self.args[name][-1]).data())))
            except Exception,e:
                response_headers.append((name,str(e)))

    response_headers=list()
    response_headers.append(('Cache-Control','no-store, no-cache, must-revalidate'))
    response_headers.append(('Pragma','no-cache'))
    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)

    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,)
Exemple #35
0
def archive_signal(node, time=None, cache=None):
    """ use time if tree is archive """
    """ else use TIME node """
    print('archive_signal')
    try:
        from archive import base, interface
        from MDSplus import TreeNode, Tree, Data, mdsExceptions
        if not isinstance(node, (TreeNode)):
            node = Tree('archive',-1).getNode(node)
        """ use _time variable if Tree is ARCHIVE """
        if node.tree.shot == -1:
            try:    time = base.TimeInterval(time)
            except: time = base.TimeInterval([-1800.,0,0])
        else:
            time = base.TimeInterval(node.getNode('\TIME').data())
        """handle arguments"""
        kwargs = {}
        if str(node.node_name)[0]=='$':
            kwargs['scaled'] = str(node.node_name)[1:].lower()
            node = node.getParent()
        else:
            try:    kwargs['scaling'] = node.getNode('AIDEVSCALING').data()
            except: pass
            try:
                kwargs['value'] = node.getNode('$VALUE').data()
            except:
                try:
                    gain = node.getNode('GAIN').data()
                    zero = node.getNode('ZEROOFFSET').data()
                    if gain!=1. or zero!=0.:
                        kwargs['value'] = Data.compile('$VALUE*$+$',(gain,zero))
                except Exception as exc:
                    if not isinstance(exc,mdsExceptions.TreeNNF):
                        print(exc)
        if cache is not None: kwargs['cache'] = cache
        try: # load channels by datastream + index
            kwargs['channel'] = node.getNode('$IDX').data()
            url = node.getParent().getNode('$URL').data()
        except:
            url = node.getNode('$URL').data()
        """ request signal """
        signal = interface.read_signal(url, time, **kwargs)
        """ generate help text (HELP, DESCRIPTION, $NAME) """
        try:        help = node.getNode('HELP').data()
        except:
            try:    help = node.getNode('DESCRIPTION').data()
            except: help = node.getNode('$NAME').data()
        signal.setHelp(str(help))
        return(signal)
    except:
        local = locals()
        """ generate dummy signal with error message as help text """
        import getpass,sys
        e = sys.exc_info()
        user = getpass.getuser()
        help = user+': %s, %d' % (repr(e[1]), e[2].tb_lineno)
        print(help)
        print(local)
        try:
            from MDSplus import Signal
            signal = Signal([6,66,666])
            signal.setHelp(help.split('\n')[-1])
            return(signal)
        except:
            return help
Exemple #36
0
def doScopepanel(self):
    def getStringExp(self,name,response_headers):
        if name in self.args:
            try:
                response_headers.append((name,str(Data.execute(self.args[name][-1]).data())))
            except Exception:
                response_headers.append((name,str(sys.exc_info()[1])))

    response_headers=list()
    response_headers.append(('Cache-Control','no-store, no-cache, must-revalidate'))
    response_headers.append(('Pragma','no-cache'))
    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)

    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()[1])))
                    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()[1])))
                        continue
                try:
                    sig=Data.execute(expr)
                    y=makeData(sig.data())
                except Exception:
                    response_headers.append(('ERROR' + sig_idx_s,'Error evaluating expression: "%s", error: %s' % (expr,sys.exc_info()[1])))
                    continue
                if 'x'+x_idx_s in self.args:
                    expr=self.args['x'+x_idx_s][-1]
                    try:
                        x=Data.execute(expr)
                        x=makeData(x.data())
                    except Exception:
                        response_headers.append(('ERROR'+sig_idx_s,'Error evaluating expression: "%s", error: %s' % (expr,sys.exc_info()[1])))
                        continue
                else:
                    try:
                        x=makeData(sig.dim_of().data())
                    except Exception:
                        response_headers.append(('ERROR'+sig_idx_s,'Error getting x axis of %s: "%s", error: %s' % (expr,sys.exc_info()[1])))
                        continue
                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:
                sig=Data.execute(expr)
                y=makeData(sig.data())
            except Exception:
                response_headers.append(('ERROR' + sig_idx_s,'Error evaluating expression: "%s", error: %s' % (expr,sys.exc_info()[1])))
                continue
            if 'x'+x_idx_s in self.args:
                expr=self.args['x'+x_idx_s][-1]
                try:
                    x=Data.execute(expr)
                    x=makeData(x.data())
                except Exception:
                    response_headers.append(('ERROR'+sig_idx_s,'Error evaluating expression: "%s", error: %s' % (expr,sys.exc_info()[1])))
                    continue
            else:
                try:
                    x=makeData(sig.dim_of().data())
                except Exception:
                    response_headers.append(('ERROR'+sig_idx_s,'Error getting x axis of %s: "%s", error: %s' % (expr,sys.exc_info()[1])))
                    continue
            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)
Exemple #37
0
"""
Created on Wed Aug 12 00:30:33 2015

@author: Cloud
"""
from MDSplus import Tree


def setRecord(node, istop=True):
    from MDSplus import TdiCompile
    for dec in node.getDescendants():
        if dec.getNodeName() == '$URL' and ~istop:
            dec.record = TdiCompile('codac_url($)', (node,))
        elif dec.usage == 'ANY' and dec.getNodeName() == '$PARLOG':
            dec.record = TdiCompile('archive_parlog($,_time)', (node,))
        elif dec.getNodeName() == '$CFGLOG':
            dec.record = TdiCompile('archive_cfglog($,_time)', (node,))
        elif dec.usage == 'SIGNAL':
            dec.record = TdiCompile('archive_signal($,_time)', (dec,))
        setRecord(dec, False)

tree = Tree('ARCHIVESB', -1)
setRecord(tree.getNode('\TOP'))