예제 #1
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)
예제 #2
0
    def arrayDimensionOrder(self):
        from numpy import int16, zeros
        from random import randint
        ptree = Tree('seg_tree', -1, 'NEW')
        ptree.addNode('IMM')
        ptree.write()
        ptree = Tree('seg_tree', -1)
        ptree.createPulse(1)
        ptree = Tree('seg_tree', 1)
        node = ptree.getNode('IMM')
        WIDTH = 640
        HEIGHT = 480
        currFrame = zeros(WIDTH * HEIGHT, dtype=int16)
        currTime = float(0)
        for i in range(0, WIDTH):
            for j in range(0, HEIGHT):
                currFrame[i * HEIGHT + j] = randint(0, 255)
        currTime = float(0)
        startTime = Float32(currTime)
        endTime = Float32(currTime)
        dim = Float32Array(currTime)
        segment = Int16Array(currFrame)
        segment.resize([1, HEIGHT, WIDTH])
        shape = segment.getShape()
        node.makeSegment(startTime, endTime, dim, segment)
        retShape = node.getShape()

        self.assertEqual(shape[0], retShape[0])
        self.assertEqual(shape[1], retShape[1])
        self.assertEqual(shape[2], retShape[2])
예제 #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)
예제 #4
0
 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)
예제 #5
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])
예제 #6
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())
예제 #7
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())
예제 #8
0
 def openTrees(self):
     with Tree('pytree',self.shot+1,'new'): pass
     filepath = ('%s/pytree_%03d.tree'%(self.tmpdir,self.shot+1)).replace(os.sep,'/')
     self.assertEqual(Tree.getFileName('pytree',self.shot+1), filepath)
     pytree = Tree('pytree',self.shot+1)
     self.assertEqual(pytree.getFileName(), filepath)
     self.assertEqual(str(pytree),'Tree("PYTREE",%d,"Normal")'%(self.shot+1,))
     pytree.createPulse(self.shot+2)
     self.assertEqual(pytree.number_opened,1)
     if not Tests.inThread:
         Tree.setCurrent('pytree',self.shot+2)
         pytree2=Tree('pytree',0)
         self.assertEqual(str(pytree2),'Tree("PYTREE",%d,"Normal")'%(self.shot+2,))
         self.assertEqual(pytree2.incrementCurrent(1000),self.shot+1002)
         self.assertEqual(pytree2.getCurrent(),self.shot+1002)
         pytree2.setCurrent()
         self.assertEqual(Tree.getCurrent('pytree'),self.shot+2)
     else:
         pytree2=Tree('pytree',self.shot+2)
     self.assertEqual(pytree2.number_opened,1)
     self.assertEqual(pytree.shotid,pytree.shot)
     self.assertEqual(pytree.tree,pytree.expt)
     self.assertEqual(pytree.max_open,8)
     try:  pytree.versions_in_model = True
     except TreeNOEDIT: pass
     else: self.assertEqual("TreeSUCCESS","TreeNOEDIT")
     try:  pytree.versions_in_pulse = True
     except TreeNOEDIT: pass
     else: self.assertEqual("TreeSUCCESS","TreeNOEDIT")
예제 #9
0
 def test():
     from MDSplus import Tree, Float32, Float32Array, Int16Array
     from numpy import int16, zeros
     from random import randint
     with Tree(self.tree, self.shot, 'NEW') as ptree:
         node = ptree.addNode('IMM')
         ptree.write()
     node.tree = Tree(self.tree, self.shot)
     WIDTH = 64
     HEIGHT = 48
     currFrame = zeros(WIDTH * HEIGHT, dtype=int16)
     currTime = float(0)
     for i in range(0, WIDTH):
         for j in range(0, HEIGHT):
             currFrame[i * HEIGHT + j] = randint(0, 255)
     currTime = float(0)
     startTime = Float32(currTime)
     endTime = Float32(currTime)
     dim = Float32Array(currTime)
     segment = Int16Array(currFrame)
     segment.resize([1, HEIGHT, WIDTH])
     shape = segment.getShape()
     node.makeSegment(startTime, endTime, dim, segment)
     retShape = node.getShape()
     self.assertEqual(shape[0], retShape[0])
     self.assertEqual(shape[1], retShape[1])
     self.assertEqual(shape[2], retShape[2])
예제 #10
0
def copy_tree(shot):
    tree_raw = Tree('exl50', shot)
    tree_cop = Tree('exl50_copy', shot, 'NEW')
    pools = ["AI", "FBC"]

    for pool in pools:
        # nodes_list = []
        nodes_array = tree_raw.getNode(pool).getDescendants()
        # nodes_list.extend(nodes_array)
        pool_nodes = [node.getNodeName() for node in nodes_array]

        tree_raw.setDefault(tree_raw.getNode(pool))
        tree_cop.setDefault(tree_cop.addNode(pool, "STRUCTURE"))
        for node in pool_nodes:
            tree_cop.addNode(node, "SIGNAL").addTags(node)
            # print(node)
            try:
                data = tree_raw.getNode(node).getData()
                tree_cop.getNode(node).putData(data)
                print(str(shot) + ':' + node)
            except Exception as e:
                pass
        tree_raw.setDefault(tree_raw.getNode(r"\EXL50::TOP"))
        tree_cop.setDefault(tree_cop.getNode(r"\EXL50_COPY::TOP"))
        # tree_raw.setDefault(node.getParent())
        # tree_cop.setDefault(node.getParent())
    tree_cop.write()
예제 #11
0
 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])")
예제 #12
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')
예제 #13
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)
예제 #14
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()
예제 #15
0
 def openTrees(self):
     pytree = Tree('pytree', self.shot)
     self.assertEqual(str(pytree),
                      'Tree("PYTREE",%d,"Normal")' % (self.shot, ))
     pytree.createPulse(self.shot + 1)
     if not treeTests.inThread:
         Tree.setCurrent('pytree', self.shot + 1)
         pytree2 = Tree('pytree', 0)
         self.assertEqual(str(pytree2),
                          'Tree("PYTREE",%d,"Normal")' % (self.shot + 1, ))
예제 #16
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)
예제 #17
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)
예제 #18
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')
예제 #19
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)
예제 #20
0
 def test():
     filepath = ('%s/pytree_%03d.tree' %
                 (self.tmpdir, self.shot)).replace(os.sep, '/')
     self.assertEqual(Tree.getFileName('pytree', self.shot), filepath)
     pytree = Tree('pytree', self.shot)
     self.assertEqual(pytree.getFileName(), filepath)
     self.assertEqual(str(pytree),
                      'Tree("PYTREE",%d,"Normal")' % (self.shot, ))
     pytree.createPulse(self.shot + 1)
     if not Tests.inThread:
         Tree.setCurrent('pytree', self.shot + 1)
         pytree2 = Tree('pytree', 0)
         self.assertEqual(
             str(pytree2),
             'Tree("PYTREE",%d,"Normal")' % (self.shot + 1, ))
예제 #21
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()
예제 #22
0
 def open(self):
     shot1 = self.shot + 1
     shot2 = shot1 + 1
     with Tree('pytree', shot1, 'new') as pytree:
         a = pytree.addNode('A', 'TEXT')
         pytree.write()
     pytree.open()
     a.record = 'a' * 64
     self.assertEqual(pytree.getDatafileSize(), 84)
     pytree.close()
     with Tree('pytree', shot1, 'new') as pytree:
         # new should clear datafile (O_TRUNC)
         self.assertEqual(pytree.getDatafileSize(), 0)
     filepath = ('%s/pytree_%03d.tree' % (self.tmpdir, shot1)).replace(
         os.sep, '/')
     self.assertEqual(Tree.getFileName('pytree', shot1), filepath)
     pytree = Tree('pytree', shot1)
     self.assertEqual(pytree.getFileName(), filepath)
     self.assertEqual(str(pytree), 'Tree("PYTREE",%d,"Normal")' % (shot1, ))
     pytree.createPulse(shot2)
     self.assertEqual(pytree.number_opened, 1)
     if not Tests.inThread:
         Tree.setCurrent('pytree', shot2)
         pytree2 = Tree('pytree', 0)
         self.assertEqual(str(pytree2),
                          'Tree("PYTREE",%d,"Normal")' % (shot2, ))
         self.assertEqual(pytree2.incrementCurrent(1000), shot2 + 1000)
         self.assertEqual(pytree2.getCurrent(), shot2 + 1000)
         pytree2.setCurrent()
         self.assertEqual(Tree.getCurrent('pytree'), shot2)
     else:
         pytree2 = Tree('pytree', shot2)
     self.assertEqual(pytree2.number_opened, 1)
     self.assertEqual(pytree.shotid, pytree.shot)
     self.assertEqual(pytree.tree, pytree.expt)
     self.assertEqual(pytree.max_open, 8)
     try:
         pytree.versions_in_model = True
     except TreeNOEDIT:
         pass
     else:
         self.assertEqual("TreeSUCCESS", "TreeNOEDIT")
     try:
         pytree.versions_in_pulse = True
     except TreeNOEDIT:
         pass
     else:
         self.assertEqual("TreeSUCCESS", "TreeNOEDIT")
예제 #23
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])
예제 #24
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])
예제 #25
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])"
     )
예제 #26
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)
예제 #27
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
예제 #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])
예제 #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())
예제 #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)