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])")
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())
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)
def test(): from MDSplus import Tree, DateToQuad, ZERO, Int32, Int32Array, Int64Array, Range with Tree('seg_tree', self.shot, 'NEW') as ptree: node = ptree.addNode('S') node.compress_on_put = False ptree.write() ptree.normal() ptree.compressDatafile() te = DateToQuad("now") sampperseg = 50 data = ZERO(Int32Array([sampperseg]), Int32(0)) for i in range(513): 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 + 1) Tree.compressDatafile(self.tree, self.shot + 1) ptree1 = Tree(self.tree, self.shot + 1) node1 = ptree1.S self.assertEqual(True, (node.record == node1.record).all()) self.assertEqual( True, ptree.getDatafileSize() > ptree1.getDatafileSize()) for i in range(node.getNumSegments()): str, end = node.getSegmentLimits(i) node.updateSegment(str, end, Range(str, end), i) ptree.close() ptree.compressDatafile() ptree.readonly() self.assertEqual( True, ptree.getDatafileSize() < ptree1.getDatafileSize()) for i in range(node1.getNumSegments()): self.assertEqual( node.getSegmentDim(i).data().tolist(), node1.getSegmentDim(i).data().tolist())
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") 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()) ptree.close() ptree.compressDatafile( ) # this will break the functionality of updateSegment ptree.open() trig.record = 0 for i in range(int(length / seglen)): raw.updateSegment(i * seglen, i * seglen - 1, None, 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())