@Test (expectedExceptions = SAMException.class) public static void testGetFirstBinInLevelFail1() { csi.getFirstBinInLevelForCSI(6); }
@Test (expectedExceptions = SAMException.class) public static void testGetFirstBinInLevelFail2() { ucsi.getFirstBinInLevelForCSI(7); }
@Test public static void testGetFirstBinInLevelOK() { Assert.assertEquals(csi.getFirstBinInLevelForCSI(0), 0); Assert.assertEquals(csi.getFirstBinInLevelForCSI(1), 1); Assert.assertEquals(csi.getFirstBinInLevelForCSI(2), 9); Assert.assertEquals(csi.getFirstBinInLevelForCSI(3), 73); Assert.assertEquals(csi.getFirstBinInLevelForCSI(4), 585); Assert.assertEquals(csi.getFirstBinInLevelForCSI(5), 4681); Assert.assertEquals(ucsi.getFirstBinInLevelForCSI(0), 0); Assert.assertEquals(ucsi.getFirstBinInLevelForCSI(1), 1); Assert.assertEquals(ucsi.getFirstBinInLevelForCSI(2), 9); Assert.assertEquals(ucsi.getFirstBinInLevelForCSI(3), 73); Assert.assertEquals(ucsi.getFirstBinInLevelForCSI(4), 585); Assert.assertEquals(ucsi.getFirstBinInLevelForCSI(5), 4681); Assert.assertEquals(ucsi.getFirstBinInLevelForCSI(6), 37449); }
@Override public int getLevelForBin(Bin bin) { if(bin == null || bin.getBinNumber() > getMaxBins()) { throw new SAMException("Tried to get level for invalid bin: " + bin); } for (int i = getBinDepth()-1; i > -1 ; i--) { if (bin.getBinNumber() >= getFirstBinInLevelForCSI(i)) { return i; } } throw new SAMException("Unable to find correct level for bin: " + bin); }
/** * The maximum possible bin number for this reference sequence. * This is based on the maximum coordinate position of the reference * which is based on the size of the reference */ private int getMaxBinNumberForReference(final int reference) { try { final int sequenceLength = getBamDictionary().getSequence(reference).getSequenceLength(); return getFirstBinInLevelForCSI(getBinDepth() - 1) + (sequenceLength >> getMinShift()); } catch (final Exception e) { return getMaxBins(); } }
@Override public int getFirstLocusInBin(Bin bin) { if(bin == null || bin.getBinNumber() > getMaxBins()) { throw new SAMException("Tried to get first locus for invalid bin: " + bin); } int level = getLevelForBin(bin); int firstBinOnLevel = getFirstBinInLevelForCSI(level); int levelSize = getLevelSize(level); return (bin.getBinNumber() - firstBinOnLevel)*(getMaxSpan()/levelSize) + 1; }
@Override public int getLastLocusInBin(Bin bin) { if(bin == null || bin.getBinNumber() > getMaxBins()) { throw new SAMException("Tried to get last locus for invalid bin: " + bin); } int level = getLevelForBin(bin); int firstBinOnLevel = getFirstBinInLevelForCSI(level); int levelSize = getLevelSize(level); return (bin.getBinNumber() - firstBinOnLevel + 1)*(getMaxSpan()/levelSize); }
final int binStart = getFirstBinInLevelForCSI(currentBinLevel); final int binWidth = getMaxSpan()/getLevelSize(currentBinLevel); final int parentBinNumber = firstLocusInBin/binWidth + binStart;
@Override public BAMFileSpan getSpanOverlapping(int referenceIndex, int startPos, int endPos) { final BAMIndexContent queryResults = query(referenceIndex, startPos, endPos); int initialBinNumber = getFirstBinInLevelForCSI(getBinDepth() - 1) + (startPos - 1 >> getMinShift()); long minimumOffset = 0L; Bin targetBin;