Пример #1
0
  public void testCompare() {
    final AlignmentResult ar1 = new AlignmentResult(new byte[0], new int[3], new byte[0]);
    ar1.setIdentifyingInfo(false, true);
    ar1.setRemainingOutput(-2, 0);

    final AlignmentResult ar2 = new AlignmentResult(new byte[0], new int[3], new byte[0]);
    ar2.setIdentifyingInfo(false, true);
    ar2.setRemainingOutput(-2, 0);

    // assertEquals(0, ar1.compareTo(ar2));
    assertTrue(ar1.equals(ar2));

    ar2.setIdentifyingInfo(false, false);
    // assertTrue(ar1.compareTo(ar2) > 0);
    assertFalse(ar1.equals(ar2));

    ar2.setIdentifyingInfo(false, true);
    ar2.setRemainingOutput(-2, 1);
    // assertTrue(ar1.compareTo(ar2) < 0);
    assertFalse(ar1.equals(ar2));

    final AlignmentResult ar3 =
        new AlignmentResult(new byte[0], ActionsHelper.build("", 2, 3), new byte[0]);
    ar3.setIdentifyingInfo(false, true);
    ar3.setRemainingOutput(-2, 0);

    // assertTrue(ar1.compareTo(ar3) < 0);
    assertFalse(ar1.equals(ar3));

    assertNotNull(ar1);
  }
Пример #2
0
 public void testOverlapCigarConsistencyRev() {
   final byte[] read =
       DnaUtils.encodeString(
           DnaUtils.reverseComplement(
               "TAGGCGGGTTGCCAA TTAACTTGTA      GTCCTTGACA".replaceAll(" ", "")));
   final byte[] tmpl =
       DnaUtils.encodeString("TAGGG   TGGCCAA TTAACTTGTAGTGTGCGTCCTTGACA".replaceAll(" ", ""));
   final int[] actions = ActionsHelper.build("==========NNNNNN===============X====BBBX====", 0, 3);
   final AlignmentResult ar = new AlignmentResult(read, actions, tmpl);
   ar.setIdentifyingInfo(false, true);
   // System.out.println("cigar:" + ar.getCigarString(1, true) + " readString:" + ar.readString());
   final SAMRecord samrec = new SAMRecord(null);
   samrec.setCigarString(ar.getCigarString(true, false));
   samrec.setReadString(DnaUtils.reverseComplement(ar.readString()));
   samrec.setAttribute(SamUtils.ATTRIBUTE_NUM_MISMATCHES, 2);
   samrec.setAlignmentStart(1);
   samrec.setFlags(179);
   final NgsParams params =
       new NgsParamsBuilder()
           .gapOpenPenalty(EditDistanceFactory.DEFAULT_GAP_OPEN_PENALTY)
           .gapExtendPenalty(EditDistanceFactory.DEFAULT_GAP_EXTEND_PENALTY)
           .substitutionPenalty(EditDistanceFactory.DEFAULT_SUBSTITUTION_PENALTY)
           .unknownsPenalty(0)
           .create();
   try (MemoryPrintStream mps = new MemoryPrintStream()) {
     final SamValidator sv =
         new SamValidator(
             mps.printStream(), mps.printStream(), true, false, false, false, params, false);
     assertEquals(
         2 * EditDistanceFactory.DEFAULT_SUBSTITUTION_PENALTY,
         sv.isAtExpectedRef(tmpl, samrec, null));
   }
 }
Пример #3
0
  private void runSAMPairedEnd(
      AlignmentResult mate, int pos, String complement, String expected, boolean first)
      throws Exception {
    final AlignmentResult ar =
        new AlignmentResult(
            getSequence(SAM_SEQ),
            ActionsHelper.build("==========NNNNN=========================", pos - 1, 1),
            getSequence(SAM_SEQ + "aaaaaaa"));
    ar.setIdentifyingInfo(first, complement.equals("R"));
    ar.mReferenceId = 7;
    final File f = File.createTempFile("junit", "sam");
    try {
      final BinaryTempFileRecord sam = ar.toRecord(mate != null, mate, 0, false, false);

      final String x = bcarToSamString(sam).replace('\t', '#');
      assertEquals(x, expected, x);

      assertEquals(complement.equals("R"), sam.isReverseStrand());
      assertEquals((sam.getSamFlags() & SamBamConstants.SAM_READ_IS_PAIRED) == 0, mate == null);

      if (mate != null) {
        assertTrue(sam.isReadPaired());
        assertEquals(mate.getStart(), sam.getMatePosition() - 1);
        assertEquals(first, sam.isFirstOfPair());
        assertEquals(!first, sam.isSecondOfPair());
      } else {
        assertFalse(sam.isReadPaired());
        assertEquals(0, sam.getMatePosition());
        assertFalse(sam.isFirstOfPair());
        assertFalse(sam.isSecondOfPair());
      }
    } finally {
      assertTrue(f.delete());
    }
  }
Пример #4
0
  public void testCgTripleInsertRev() {
    final String read =
        "                           tagacaaatg        ttacaagaccacaggaggggaa".replaceAll(" ", "");
    final String temp =
        DnaUtils.reverseComplement(
            "tagacaaatgtgactggattacaag ccacaggagggggaaa".replaceAll(" ", ""));

    final String actions = "==========NNNNNNND=======I============X=";
    final AlignmentResult alignment2 =
        new AlignmentResult(
            DnaUtils.encodeString(read),
            ActionsHelper.build(actions, 2, 0),
            DnaUtils.encodeString(temp));

    alignment2.setIdentifyingInfo(false, true);
    alignment2.setRemainingOutput(-2, 1);

    assertEquals(0, alignment2.getScore());
    assertFalse(alignment2.isFirst());
    assertEquals(2, alignment2.getStart());
    assertEquals(-2, alignment2.getReadId());
    assertEquals(1, alignment2.getReferenceId());
    assertEquals(actions, alignment2.getActionsString());
    assertEquals(30, alignment2.getMatchCount());
    assertEquals(1, alignment2.getDeletionsFromReadCount());
    //    assertEquals(1, alignment2.getSubstitutionsCount());
    assertTrue(alignment2.isReverse());
    //    assertEquals(3, alignment2.mismatches());
    assertEquals("TAGACAAATGTTACAAGACCACAGGAGGGGAA", alignment2.readString());

    final String cigar2 = alignment2.getCigarString(true, false);
    assertEquals("1=1X12=1I7=1D7N10=", cigar2);
  }
Пример #5
0
  public void testInvalidSoftClipping() {
    final byte[] read =
        DnaUtils.encodeString("GAGGGTTAGG     GTGAGGGTTTGGGTTAGGGTATTAG".replaceAll(" ", ""));
    byte[] tmpl = DnaUtils.encodeString("GAGGGTTAGGGTTAGGGTGAGGGTTAGGGTTAGGG".replaceAll(" ", ""));
    int[] actions = ActionsHelper.build("==========NNNNNN=========X==========B=====", 0, 3);
    AlignmentResult ar = new AlignmentResult(read, actions, tmpl);
    assertEquals("10=6N9=1X9=5S", ar.getCigarString(false, false));

    //                            GAGGGTTAGG     .GTGAGGGTTTGGGTTAGGGTATTAG
    tmpl =
        DnaUtils.encodeString("AAAAAAAAAAGAGGGTTAGGGTTAGGGTGAGGGTTAGGGTTAGGG".replaceAll(" ", ""));
    actions = ActionsHelper.build("==========NNNNNN=========X==========B=====", 10, 3);
    ar = new AlignmentResult(read, actions, tmpl);
    assertEquals("10=6N9=1X9=5S", ar.getCigarString(false, false));
    //
    // assertEquals("gagggttagg......gtgagggtttgggttagggattag\tgagggttagggttagggtgagggttagggttagggnnnnn\t||||||||||      ||||||||| |||||||||     ", ar.tabularString());
  }
Пример #6
0
 public void testBug867() {
   final AlignmentResult ar =
       new AlignmentResult(
           getSequence("taaataatggcaatatctgcaggga     aaactataag"),
           ActionsHelper.build("", 0, 0),
           getSequence("taa...atggcaatatctgcagggaacaggaaactataag"));
   assertEquals(0, ar.mismatches());
 }
Пример #7
0
 public void testSAMPEDeletion() throws Exception {
   final AlignmentResult mate =
       new AlignmentResult(
           getSequence("ACGT"), ActionsHelper.build("", 12, 2), getSequence("AC-T"));
   mate.mReferenceId = 7;
   mate.setIdentifyingInfo(false, true);
   runSAMPairedEnd(mate, 1, "F", "0#163#7#1#*#10=5N25=#=#13#40#*#*#AS:i:1#NM:i:0", false);
 }
Пример #8
0
 private void runSAM(final String complement, final String expected) throws Exception {
   runSAMPairedEnd(
       new AlignmentResult(null, ActionsHelper.build("", 0, 0), null),
       1,
       complement,
       expected,
       false);
 }
Пример #9
0
 public void testSAMPESoftLeftClip() throws Exception {
   final AlignmentResult mate =
       new AlignmentResult(
           getSequence("ACGT"), ActionsHelper.build("", 12, 2), getSequence(SAM_SEQ));
   mate.mReferenceId = 0;
   mate.setIdentifyingInfo(false, true);
   // SAI: The ISIZE below may be wrong if we are supposed to use the inferred start of 1
   runSAMPairedEnd(mate, -2, "F", "0#163#7#1#*#3S7=5N25=#=#13#40#*#*#AS:i:1#NM:i:0", false);
 }
Пример #10
0
  public void testMismatches() {
    AlignmentResult ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgta"),
            ActionsHelper.build("=========", 0, 0),
            DnaUtils.encodeString("acgtacgta"));
    assertEquals(0, ar.mismatches());
    assertEquals("ACGTACGTA", ar.readString());
    ar.setIdentifyingInfo(false, true);
    assertEquals("ACGTACGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgta"),
            ActionsHelper.build("X=======X", 0, 0),
            DnaUtils.encodeString("atgttcgta"));
    assertEquals(2, ar.mismatches());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgta"),
            ActionsHelper.build("=X==X====", 0, 0),
            DnaUtils.encodeString("atgttcgta"));
    assertEquals(2, ar.mismatches());
    assertEquals("ACGTACGTA", ar.readString());
    ar.setIdentifyingInfo(false, true);
    assertEquals("ACGTACGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgcgta"),
            ActionsHelper.build("===DD====", 0, 3),
            DnaUtils.encodeString("acgtacgta"));
    assertEquals(2, ar.mismatches());
    assertEquals("ACGCGTA", ar.readString());
    ar.setIdentifyingInfo(false, true);
    assertEquals("ACGCGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgcgta"),
            ActionsHelper.build("===DD====", 0, 3),
            DnaUtils.encodeString("acgt"));
    assertEquals(6, ar.mismatches());
    assertEquals("ACGCGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgcgta"),
            ActionsHelper.build("===DD====", 0, 3),
            DnaUtils.encodeString("acgtacgt"));
    assertEquals(3, ar.mismatches());
    assertEquals("ACGCGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgcgta"),
            ActionsHelper.build("===DD====", 0, 3),
            DnaUtils.encodeString("acgtacgt"));
    assertEquals(3, ar.mismatches());
    assertEquals("ACGCGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgta"),
            ActionsHelper.build("===II====", 0, 3),
            DnaUtils.encodeString("acgcgta"));
    assertEquals(2, ar.mismatches());
    assertEquals("ACGTACGTA", ar.readString());
    ar.setIdentifyingInfo(false, true);
    assertEquals("ACGTACGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgta"),
            ActionsHelper.build("===II====", 0, 3),
            DnaUtils.encodeString("acg"));
    assertEquals(4, ar.mismatches());
    assertEquals("ACGTACGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgta"),
            ActionsHelper.build("===II====", 0, 3),
            DnaUtils.encodeString("acgcgt"));
    assertEquals(3, ar.mismatches());
    assertEquals("ACGTACGTA", ar.readString());
  }
Пример #11
0
  public void testCGAttrNew() {
    final byte[] qualityScores = new byte[35];
    for (int i = 0; i < qualityScores.length; i++) {
      qualityScores[i] = (byte) i;
    }
    String read, acts, tmpl;
    AlignmentResult ar;
    BinaryTempFileRecord sr;

    // First arm, !rc
    read = "tcatg   a ggcacatcg gcattacagc       cagactgtcg";
    acts = "=====BBB=D=X======= ========== NNNN  ==========".replaceAll(" ", "");
    tmpl = "tcatg      acacatcg gcattacagc aggc  cagactgtcg";
    ar = new AlignmentResult(getSequence(read), ActionsHelper.build(acts, 0, 0), getSequence(tmpl));
    ar.setIdentifyingInfo(true, false);
    ar.setRemainingOutput(1, 0);
    //
    // assertEquals("tcatggcacatcggcattacagc....cagactgtcg\ttcatgacacatcggcattacagcaggccagactgtcg\t||||| |||||||||||||||||    ||||||||||", ar.tabularString());

    sr = ar.toRecord(true, null, 0, false, false);
    assertEquals("5=1X17=4N10=", new String(sr.getCigarString()));
    assertEquals("5=3B1=1D1=1X17=4N10=", new String(sr.getSuperCigarString()));
    assertEquals("G", new String(sr.getReadDeltaString()));
    assertEquals("TCATGGCACATCGGCATTACAGCCAGACTGTCG", new String(sr.getCgReadString()));
    assertEquals(33, sr.getCgReadString().length);
    // first arm, !rc again, but with no errors.
    read = "tcatg   atgcacatcg gcattacagc       cagactgtcg";
    acts = "=====BBB========== ========== NNNN  ==========".replaceAll(" ", "");
    tmpl = "tcatg      cacatcg gcattacagc aggc  cagactgtcg";
    ar = new AlignmentResult(getSequence(read), ActionsHelper.build(acts, 0, 0), getSequence(tmpl));
    ar.setIdentifyingInfo(true, false);
    ar.setRemainingOutput(1, 0);
    sr = ar.toRecord(true, null, 0, false, false);
    assertEquals("22=4N10=", new String(sr.getCigarString()));
    assertEquals("5=3B20=4N10=", new String(sr.getSuperCigarString()));
    assertEquals(0, sr.getReadDeltaString().length);
    assertEquals("TCATGCACATCGGCATTACAGCCAGACTGTCG", new String(sr.getCgReadString()));

    // First arm, rc
    read = "tattt   ttcgaggact tattttaatt       ctcaaacgcg";
    // tmprc tattt        ggact tattttaatt aattg ctcaaacgct
    acts = "=====BBB==IIX===== ========== NNNNN =========X".replaceAll(" ", "");
    tmpl =
        "agcgtttgag caatt aattaaaata agtcc aaata         agagagagagagaga"; // is reverse complement
                                                                           // compared to the read
    ar = new AlignmentResult(getSequence(read), ActionsHelper.build(acts, 0, 0), getSequence(tmpl));
    // ====D===================================          ====D===================================
    ar.setIdentifyingInfo(true, true);
    ar.setRemainingOutput(1, 0);
    //
    // assertEquals("tatttggacttattttaatt.....ctcaaacgcg\ttatttggacttattttaattaattgctcaaacgct\t||||||||||||||||||||     ||||||||| ", ar.tabularString());

    assertEquals("TATTT" + "GGACT" + "TATTTTAATT" + "CTCAAACGCG", ar.readString());
    sr = ar.toRecord(true, null, 0, false, false);
    assertEquals("1X9=5N20=", new String(sr.getCigarString()));
    assertEquals("1X9=5N15=1X2I2=3B5=", new String(sr.getSuperCigarString()));
    assertEquals("CTCG", new String(sr.getReadDeltaString()));
    assertEquals("CGCGTTTGAGAATTAAAATAAGTCCAAATA", new String(sr.getCgReadString()));
    assertEquals(30, sr.getCgReadString().length);

    // second arm, rc
    read = "ctgctgaccc          gacctactgg cggactcgag  agtta";
    acts = "========== NNNNNNNN ========== ========X=BBX====".replaceAll(" ", "");
    tmpl = "ctgctgaccc agagccgg gacctactgg cggactcg    ggtta";
    ar = new AlignmentResult(getSequence(read), ActionsHelper.build(acts, 0, 0), getSequence(tmpl));
    ar.setIdentifyingInfo(false, true);
    ar.setRemainingOutput(1, 0);

    sr = ar.toRecord(true, null, 0, false, false);
    assertEquals("4=1X18=8N10=", new String(sr.getCigarString()));
    assertEquals("4=1X2B1=1X18=8N10=", new String(sr.getSuperCigarString()));
    assertEquals("TT", new String(sr.getReadDeltaString()));
    assertEquals("TAACTCGAGTCCGCCAGTAGGTCGGGTCAGCAG", new String(sr.getCgReadString()));
    assertEquals(33, sr.getCgReadString().length);

    // second arm, !rc
    read = "ttccggtctt         ctctctatcc cgctggtttt  acagg";
    acts = "========== NNNNNNN ========== ========XXBB=I===".replaceAll(" ", "");
    tmpl = "ttccggtctt tgtcttt ctctctatcc cgctggtt    a agg                  attatatatat";
    ar = new AlignmentResult(getSequence(read), ActionsHelper.build(acts, 0, 0), getSequence(tmpl));
    ar.setIdentifyingInfo(false, false);
    ar.setRemainingOutput(1, 0);

    sr = ar.toRecord(true, null, 0, false, false);
    assertEquals("10=7N19=1I3=", new String(sr.getCigarString()));
    assertEquals("10=7N18=2X2B1=1I3=", new String(sr.getSuperCigarString()));
    assertEquals("TTC", new String(sr.getReadDeltaString()));
    assertEquals("TTCCGGTCTTCTCTCTATCCCGCTGGTTACAGG", new String(sr.getCgReadString()));
    assertEquals(33, sr.getCgReadString().length);

    // second arm, !rc  (again, but with the whole overlap counteracted by insertions)
    read = "ttccggtctt         ctctctatcc cgctggtttt    atagg";
    acts = "========== NNNNNNN ========== ==========DDBB=I===".replaceAll(" ", "");
    tmpl =
        "ttccggtctt tgtcttt ctctctatcc cgctggtttt    a agg                              atatatatat";
    ar = new AlignmentResult(getSequence(read), ActionsHelper.build(acts, 0, 0), getSequence(tmpl));
    ar.setIdentifyingInfo(false, false);
    ar.setRemainingOutput(1, 0);

    sr = ar.toRecord(true, null, 5, false, false);
    assertEquals("10=7N21=1I3=", new String(sr.getCigarString()));
    assertNotNull(sr.getSuperCigarString());
    assertEquals("10=7N20=2D2B1=1I3=", new String(sr.getSuperCigarString()));
    assertNotNull(sr.getReadDeltaString());
    assertEquals("T", new String(sr.getReadDeltaString()));
    assertEquals("TTCCGGTCTTCTCTCTATCCCGCTGGTTTTATAGG", new String(sr.getCgReadString()));
    assertEquals(35, sr.getCgReadString().length);
    assertEquals(6, sr.getStartPosition());
  }
Пример #12
0
  public void testReadString() {
    AlignmentResult ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgta"),
            ActionsHelper.build("=========", 0, 0),
            "".getBytes());
    ar.setIdentifyingInfo(true, false);
    assertEquals("ACGTACGTA", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacg"),
            ActionsHelper.build("==BB==R==", 0, 3),
            "".getBytes());
    ar.setIdentifyingInfo(true, false);
    assertEquals("ACACG", ar.readString());
    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgt"),
            ActionsHelper.build("==BB=I==T=", 0, 3),
            "".getBytes());
    ar.setIdentifyingInfo(true, false);
    assertEquals("ACCGT", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacg"),
            ActionsHelper.build("===BB====", 0, 3),
            "".getBytes());
    ar.setIdentifyingInfo(false, false);
    assertEquals("ATACG", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacgt"),
            ActionsHelper.build("==I=BBN==N==", 0, 3),
            "".getBytes());
    ar.setIdentifyingInfo(false, false);
    assertEquals("AACGT", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacg"),
            ActionsHelper.build("==D=BB====", 0, 3),
            "".getBytes());
    ar.setIdentifyingInfo(false, false);
    assertEquals("ACTACG", ar.readString());

    ar =
        new AlignmentResult(
            DnaUtils.encodeString("acgtacg"),
            ActionsHelper.build("==N=BB====", 0, 3),
            "".getBytes());
    ar.setIdentifyingInfo(false, false);
    assertEquals("ACTACG", ar.readString());

    final int[] actions = ActionsHelper.build("==I=========D==", 0, 3);
    ActionsHelper.softClip(actions, true, 3, 0);
    ActionsHelper.softClip(actions, false, 2, 1);
    ar = new AlignmentResult(DnaUtils.encodeString("AATAAAAAAAAAGG"), actions, "".getBytes());
    ar.setIdentifyingInfo(false, false);
    assertEquals("AATAAAAAAAAAGG", ar.readString());
  }