Mercurial > repos > yufei-luo > s_mart
comparison commons/core/coord/SlidingWindow.py @ 38:2c0c0a89fad7
Uploaded
| author | m-zytnicki |
|---|---|
| date | Thu, 02 May 2013 09:56:47 -0400 |
| parents | 769e306b7933 |
| children |
comparison
equal
deleted
inserted
replaced
| 37:d22fadc825e3 | 38:2c0c0a89fad7 |
|---|---|
| 1 class SlidingWindow(object): | |
| 2 | |
| 3 def __init__( self, length = 1, overlap = 1 ): | |
| 4 self._length = length | |
| 5 self._overlap = overlap | |
| 6 self._start = 1 | |
| 7 self._end = length | |
| 8 self._step = length - overlap | |
| 9 | |
| 10 def slideWindowOnce(self): | |
| 11 self._start = self._start + self._step | |
| 12 self._end = self._end + self._step | |
| 13 | |
| 14 def getStart(self): | |
| 15 return self._start | |
| 16 | |
| 17 def getEnd(self): | |
| 18 return self._end | |
| 19 | |
| 20 def setStart(self, start): | |
| 21 self._start = start | |
| 22 | |
| 23 def setEnd(self, end): | |
| 24 self._end = end | |
| 25 | |
| 26 def getLength(self): | |
| 27 return self._length | |
| 28 | |
| 29 def getOverlap(self): | |
| 30 return self._overlap | |
| 31 | |
| 32 def setLength(self, length): | |
| 33 self._length = length | |
| 34 | |
| 35 def setOverlap(self, overlap): | |
| 36 self._overlap = overlap | |
| 37 | |
| 38 def getSlidingMsg(self): | |
| 39 return "Window is sliding : %s %s" %(self._start, self._end) | |
| 40 | |
| 41 class SlidingWindowToCountMatchingBases(SlidingWindow): | |
| 42 | |
| 43 def getSetLengthOnWindow( self, iSet ): | |
| 44 if self._isSetIncludedInTheWindow(iSet): | |
| 45 return iSet.getLength() | |
| 46 if self._isWindowIncludedInTheSet(iSet): | |
| 47 return self._length | |
| 48 elif self._isSetOverlapTheRightSideOfTheWindow(iSet): | |
| 49 return self._end - iSet.getMin()+1 | |
| 50 elif self._isSetOverlapTheLeftSideOfTheWindow(iSet): | |
| 51 return iSet.getMax() - self._start+1 | |
| 52 | |
| 53 def getCoordSetOnWindow( self, iSet ): | |
| 54 if self._isSetIncludedInTheWindow(iSet): | |
| 55 return iSet.getStart(), iSet.getEnd() | |
| 56 if self._isWindowIncludedInTheSet(iSet): | |
| 57 return self.getStart(), self.getEnd() | |
| 58 elif self._isSetOverlapTheRightSideOfTheWindow(iSet): | |
| 59 return iSet.getStart(), self.getEnd() | |
| 60 elif self._isSetOverlapTheLeftSideOfTheWindow(iSet): | |
| 61 return self.getStart(), iSet.getEnd() | |
| 62 | |
| 63 def _isSetIncludedInTheWindow(self, feature): | |
| 64 return feature.getMin() >= self._start and feature.getMax() <= self._end | |
| 65 | |
| 66 def _isWindowIncludedInTheSet(self, feature): | |
| 67 return self._start >= feature.getMin() and self._end <= feature.getMax() | |
| 68 | |
| 69 def _isSetOverlapTheRightSideOfTheWindow(self, feature): | |
| 70 return feature.getMin() <= self._end and feature.getMin() >= self._start | |
| 71 | |
| 72 def _isSetOverlapTheLeftSideOfTheWindow(self, feature): | |
| 73 return feature.getMax() <= self._end and feature.getMax() >= self._start |
