Exemple #1
0
 def __init__(self, theDfsr, theFileId, xAxisIndex=0):
     """Constructed with an EFLR i.e. a DFSR
     
     theDfsr - The DFSR.
 
     theFileId - The ID of the file, this will be checked against any File object passed to me.
 
     xAxisIndex - The index of the DSB block that describes the X axis, if indirect X this is ignored.
     """
     # Check input. We take a strict view here of what a LogPass can support
     # The DFSR must have at least one DSB even if indirect X otherwise
     # a LogPass does not make a lot of sense when there are zero channels.
     if len(theDfsr.dsbBlocks) == 0:
         raise ExceptionLogPassCtor('LogPass.__init__(): xAxisIndex no channels to process')
     if xAxisIndex < 0 or xAxisIndex >= len(theDfsr.dsbBlocks):
         raise ExceptionLogPassCtor('LogPass.__init__(): xAxisIndex {:s} out of range when number of DSB blocks={:d}'.format(str(xAxisIndex), len(theDfsr.dsbBlocks)))
     self._dfsr = theDfsr
     self._fileId = theFileId
     self._plan = Type01Plan.FrameSetPlan(self._dfsr)
     self._xAxisIndex = xAxisIndex
     # This is a map of {MNEM : (extCh, sub_ch), ...}
     # Warnings are produced for duplicates which are ignored. In principle
     # as a PRES table (for example) can only identify a channel by MNEM
     # then we assume here that the MNEM is unique.
     self._chMap = self._retChMap()
     # A map of {Mnem.Mnem(MNEM) : Mnem.Mnem(UNITS), ...} from the DFSR
     self._unitMap = self._retUnitMap()
     # Populated by setFrameSet() when the time comes
     self._frameSet = None
     # Set up RLE object
     if self.isIndirectX:
         self._rle = Rle.RLEType01(self._dfsr.ebs.depthUnits)
     else:
         assert(self._xAxisIndex >= 0 and self._xAxisIndex < len(self._dfsr.dsbBlocks))
         self._rle = Rle.RLEType01(self._dfsr.dsbBlocks[self._xAxisIndex].units)
Exemple #2
0
 def setUp(self):
     """Set up."""
     self._dfsr = MockDFSR(
         MockEntryBlockSet(1, 73),
         [MockDsb(4), MockDsb(8), MockDsb(2), MockDsb(16), MockDsb(2)],
     )
     self._tp = Type01Plan.FrameSetPlan(self._dfsr)
     # 4+8+2+16+2=32
     self.assertEqual(self._tp.frameSize, 4+8+2+16+2)
Exemple #3
0
 def test_07(self):
     """TestType01Plan.test_07(): Multiple channels, __str__()."""
     myDfsr = MockDFSR(
         MockEntryBlockSet(1, 73),
         [MockDsb(4), MockDsb(8), MockDsb(2), MockDsb(16), MockDsb(2)],
     )
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     print()
     print(str(myTp))
Exemple #4
0
 def test_11(self):
     """TestType01Plan.test_11(): _checkChIdx() two channels."""
     myDfsr = MockDFSR(
         MockEntryBlockSet(1, 73),
         [MockDsb(4), MockDsb(4)],
     )
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     self.assertEqual(myTp._checkChIdx([1, 0]), [0,1])
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanNegLen, myTp._checkChIdx, [-1, 1])
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanOverrun, myTp._checkChIdx, [1, 2])
Exemple #5
0
 def test_10(self):
     """TestType01Plan.test_10(): _checkChIdx()."""
     myDfsr = MockDFSR(
         MockEntryBlockSet(1, 73),
         [MockDsb(4), MockDsb(8), MockDsb(2), MockDsb(16), MockDsb(2)],
     )
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     self.assertEqual(myTp._checkChIdx([3, 1, 2]), [1,2,3])
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanNegLen, myTp._checkChIdx, [-1, 2])
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanOverrun, myTp._checkChIdx, [1, 7])
Exemple #6
0
 def test_01(self):
     """TestType01Plan.test_01(): Single channel, indirect X axis."""
     myDfsr = MockDFSR(MockEntryBlockSet(1, 68), [MockDsb(4), ])
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     # Test numFrames()
     self.assertEqual(myTp.numFrames(8), 1)
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanNegLen, myTp.numFrames, -1024)
     self.assertRaises(Type01Plan.ExceptionFrameSetPlan, myTp.numFrames, 1023)
     # Test chOffset
     self.assertEqual(myTp.chOffset(0, 0), 4)
     self.assertEqual(myTp.chOffset(ch=0, frame=1), 8)
     self.assertEqual(myTp.chOffset(ch=0, frame=2), 12)
     self.assertRaises(IndexError, myTp.chOffset, 0, 1)
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanNegLen, myTp.chOffset, 0, -1)
Exemple #7
0
 def test_00(self):
     """TestType01Plan_Perf.test_00(): Construction, 8192 channels."""
     myDfsr = MockDFSR(
         MockEntryBlockSet(0, 73),
         [MockDsb(4) for i in range(8192)],
     )
     start = time.perf_counter()
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     execTime = time.perf_counter() - start
     self.assertEqual(myTp.frameSize, 4*8192)
     sys.stderr.write(' Time: {:.3f} (s)'.format(execTime))
     #sys.stderr.write(' Rate: {:.3f} (MB/s)'.format(myReadSize /(1024*1024*execTime)))
     sys.stderr.write(' Cost (on frame size): {:.3f} (ms/MB)'.format((execTime*1024)/(myTp.frameSize/(1024*1024))))
     sys.stderr.write(' ')
Exemple #8
0
 def test_06(self):
     """TestType01Plan.test_06(): Multiple channel, genOffsets() failures."""
     myDfsr = MockDFSR(
         MockEntryBlockSet(1, 73),
         [MockDsb(4), MockDsb(8), MockDsb(2), MockDsb(16), MockDsb(2)],
     )
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     myG = myTp.genOffsets([-1, 1, 2])
     #print('There')
     try:
         next(myG)
         self.fail('Type01Plan.ExceptionFrameSetPlanNegLen not raised.')
     except Type01Plan.ExceptionFrameSetPlanNegLen:
         pass
     myG.close()
Exemple #9
0
 def _timeEvents(self, theFrameSlice, theChRange):
     """Time genEvents() from frame slice and channel range."""
     myDfsr = MockDFSR(
         MockEntryBlockSet(0, 73),
         [MockDsb(4) for i in range(8192)],
     )
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     self.assertEqual(myTp.frameSize, 4*8192)
     myReadSize = 0
     numEvents = 0
     start = time.perf_counter()
     for e in myTp.genEvents(theFrameSlice, theChRange):
         if e[0] == Type01Plan.EVENT_READ:
             myReadSize += e[1]
         numEvents += 1
     self.writeCostToStderr(start, myReadSize, 'Events', numEvents)
Exemple #10
0
 def test_03(self):
     """TestType01Plan.test_03(): Multiple channel, indirect X axis."""
     myDfsr = MockDFSR(
         MockEntryBlockSet(1, 73),
         [MockDsb(4),
          MockDsb(8),
          MockDsb(2),
          MockDsb(16),
          MockDsb(2)],
     )
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     # 32
     self.assertEqual(myTp.frameSize, 4 + 8 + 2 + 16 + 2)
     # Test numFrames()
     self.assertEqual(myTp.numFrames(1028), 32)
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanNegLen,
                       myTp.numFrames, -1024)
     self.assertRaises(Type01Plan.ExceptionFrameSetPlan, myTp.numFrames,
                       1027)
     # Test chOffset
     self.assertEqual(myTp.chOffset(ch=0, frame=0), 4)
     self.assertEqual(myTp.chOffset(ch=0, frame=1), 4 + 32 * 1)
     self.assertEqual(myTp.chOffset(ch=0, frame=2), 4 + 32 * 2)
     self.assertEqual(myTp.chOffset(ch=1, frame=0), 8)
     self.assertEqual(myTp.chOffset(ch=1, frame=1), 8 + 32 * 1)
     self.assertEqual(myTp.chOffset(ch=1, frame=2), 8 + 32 * 2)
     self.assertEqual(myTp.chOffset(ch=2, frame=0), 16)
     self.assertEqual(myTp.chOffset(ch=2, frame=1), 16 + 32 * 1)
     self.assertEqual(myTp.chOffset(ch=2, frame=2), 16 + 32 * 2)
     self.assertEqual(myTp.chOffset(ch=3, frame=0), 18)
     self.assertEqual(myTp.chOffset(ch=3, frame=1), 18 + 32 * 1)
     self.assertEqual(myTp.chOffset(ch=3, frame=2), 18 + 32 * 2)
     self.assertEqual(myTp.chOffset(ch=4, frame=0), 34)
     self.assertEqual(myTp.chOffset(ch=4, frame=1), 34 + 32 * 1)
     self.assertEqual(myTp.chOffset(ch=4, frame=2), 34 + 32 * 2)
     self.assertRaises(IndexError, myTp.chOffset, 0, 5)
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanNegLen,
                       myTp.chOffset, 0, -1)
     # skipToEndOfFrame()
     self.assertEqual(myTp.skipToEndOfFrame(ch=0), 28)
     self.assertEqual(myTp.skipToEndOfFrame(ch=1), 20)
     self.assertEqual(myTp.skipToEndOfFrame(ch=2), 18)
     self.assertEqual(myTp.skipToEndOfFrame(ch=3), 2)
     self.assertEqual(myTp.skipToEndOfFrame(ch=4), 0)
     self.assertRaises(IndexError, myTp.skipToEndOfFrame, 5)
     self.assertRaises(Type01Plan.ExceptionFrameSetPlanNegLen,
                       myTp.skipToEndOfFrame, -1)
Exemple #11
0
 def test_05(self):
     """TestType01Plan.test_05(): Multiple channel, genOffsets() unsorted."""
     myDfsr = MockDFSR(
         MockEntryBlockSet(1, 73),
         [MockDsb(4), MockDsb(8), MockDsb(2), MockDsb(16), MockDsb(2)],
     )
     myTp = Type01Plan.FrameSetPlan(myDfsr)
     myOrigChS = [0, 4, 2]
     myChS = sorted(myOrigChS)
     myOffS = [0, 12, 30]
     myG = myTp.genOffsets(myOrigChS)
     for myF in range(4):
         for myCidx in range(len(myChS)):
             myTuple = next(myG)
             #print(myTuple)
             self.assertEqual(myTuple, (myF, myChS[myCidx], 4+myOffS[myCidx]+32*myF))
     myG.close()