Package net.sf.samtools

Examples of net.sf.samtools.Cigar


              suffix = c2r.getSequence(contigRead.getReferenceName(), contigRead.getAlignmentEnd()+1, readLength);
             
              bases = prefix.toUpperCase() + bases + suffix.toUpperCase();
            }
           
            Cigar cigar = new Cigar();
            if (contigRead.getCigarLength() == 1) {
              CigarElement elem = new CigarElement(first.getLength() + prefix.length() + suffix.length(), first.getOperator());
              cigar.add(elem);
            } else {
              CigarElement firstNew = new CigarElement(first.getLength() + prefix.length(), first.getOperator());
              CigarElement lastNew = new CigarElement(last.getLength() + suffix.length(), last.getOperator());
             
              cigar.add(firstNew);
              for (int i=1; i<contigRead.getCigarLength()-1; i++) {
                cigar.add(contigRead.getCigar().getCigarElement(i));
              }
             
              cigar.add(lastNew);
            }
           
            contigRead.setCigar(cigar);
            contigRead.setAlignmentStart(contigRead.getAlignmentStart()-prefix.length());
View Full Code Here


  /**
   * Replace hard clips with soft clips.
   */
  public static void replaceHardClips(SAMRecord read) {
    Cigar cigar = read.getCigar();
   
    if (cigar.getCigarElements().size() > 0) {
      CigarElement firstElement = cigar.getCigarElement(0);
      CigarElement lastElement  = cigar.getCigarElement(cigar.numCigarElements()-1);
     
      if ((firstElement.getOperator() == CigarOperator.H) ||
        (lastElement.getOperator() == CigarOperator.H)) {
       
        Cigar newCigar = new Cigar();
       
        boolean isFirst = true;
       
        for (CigarElement element : cigar.getCigarElements()) {
          if (element.getOperator() != CigarOperator.H) {
            newCigar.add(element);
          } else {
            CigarElement softClip = new CigarElement(element.getLength(), CigarOperator.S);
            newCigar.add(softClip);
           
            if (isFirst) {
              read.setReadString(padBases(element.getLength()) + read.getReadString());
            } else {
              read.setReadString(read.getReadString() + padBases(element.getLength()));             
View Full Code Here

   * Remove leading or trailing soft clips from the input read.
   * Does not modify a read entirely comprised of soft clips.
   */
  public static void removeSoftClips(SAMRecord read) {
   
    Cigar cigar = read.getCigar();
   
    CigarElement firstElement = cigar.getCigarElement(0);
    CigarElement lastElement  = cigar.getCigarElement(cigar.numCigarElements()-1);
   
    if ((firstElement.getOperator() == CigarOperator.S) ||
      (lastElement.getOperator() == CigarOperator.S)) {
   
      Cigar newCigar = new Cigar();
     
      String bases = read.getReadString();
      //String qualities = read.getBaseQualityString();
         
      if (firstElement.getOperator() == CigarOperator.S) {
        bases = bases.substring(firstElement.getLength(), bases.length());
        //qualities = qualities.substring(firstElement.getLength(), qualities.length()-1);
      } else {
        newCigar.add(firstElement);
      }
     
      for (int i=1; i<cigar.numCigarElements()-1; i++) {
        newCigar.add(cigar.getCigarElement(i));
      }
     
      if (lastElement.getOperator() == CigarOperator.S) {
        bases = bases.substring(0, bases.length() - lastElement.getLength());
        //qualities = qualities.substring(0, qualities.length() - lastElement.getLength() - 1);
      } else {
        newCigar.add(lastElement);
      }
     
      read.setCigar(newCigar);
      read.setReadString(bases);
      //read.setBaseQualityString(qualities);
View Full Code Here

      } else {
        break;
      }
    }
   
    return new Cigar(subElements);
  }
View Full Code Here

          if (elem.getOperator() != CigarOperator.S) {
            newElems.add(elem);
          }
        }
       
        Cigar convertedCigar = new Cigar(newElems);
       
        if (convertedCigar.equals(updatedRead.getCigar())) {
          isEquivalent = true;
        }
      }
    }
   
View Full Code Here

      return length;
    }
   
    //TODO - Move elsewhere and make non-static
    public static List<ReadBlock> getReadBlocks(SAMRecord read) {   
        final Cigar cigar = read.getCigar();
        if (cigar == null) return Collections.emptyList();

        final List<ReadBlock> readBlocks = new ArrayList<ReadBlock>();
        int readBase = 1;
        int refBase  = read.getAlignmentStart();

        for (final CigarElement e : cigar.getCigarElements()) {
           
            readBlocks.add(new ReadBlock(readBase, refBase, e.getLength(), e.getOperator()));
           
            int[] basePositions = updateBasePositions(readBase, refBase, e.getOperator(), e.getLength());
            readBase = basePositions[0];
View Full Code Here

    } else {
      left = read2;
      right = read1;
    }
   
    Cigar leftCigar = left.getCigar();
    Cigar rightCigar = right.getCigar();
   
    SAMRecord topHit = getTopHit(read1, read2);
   
    if ((rightCigar.getCigarElement(0).getOperator() == CigarOperator.S) &&
      (leftCigar.getCigarElement(left.getCigarLength()-1).getOperator() == CigarOperator.S) &&
      (topHit != null)) {
     
      List<CigarElement> leftElements = new ArrayList<CigarElement>();
      List<CigarElement> rightElements = new ArrayList<CigarElement>();
     
      // Drop trailing S on left side
      for (int i=0; i<left.getCigar().numCigarElements()-1; i++) {
        leftElements.add(leftCigar.getCigarElement(i));
      }

      // Drop leading S on right side
      for (int i=1; i<rightCigar.numCigarElements(); i++) {
        rightElements.add(rightCigar.getCigarElement(i));
      }
     
      // Encountered in dream test data at: chr20  22137016.  Not clear how to interpret.
      if (rightElements.get(0).getOperator() == CigarOperator.INSERTION) {
        return null;
      }
     
      // If total element length is longer than the read, then trim first element
      // on the left side of the indel (this is likely a deletion??)
//      if (totalLength > read1.getReadLength()) {
//        // Trim from the right side of the rightmos block of the left elements
//        int trimLength = totalLength - read1.getReadLength();
//        trimmedElemLength = trimRightmostElement(rightElements, trimLength);
//      }
//     
//      if (trimmedElemLength < 0) {
//        // We don't currently handle the case where we need to trim more
//        // than the length of the element
//        return null;
//      }
     
      List<ReadBlock> leftBlocks = ReadBlock.getReadBlocks(left);
      ReadBlock lastLeftBlock = leftBlocks.get(leftBlocks.size()-2);
     
      List<ReadBlock> rightBlocks = ReadBlock.getReadBlocks(right);
      ReadBlock firstRightBlock = rightBlocks.get(1);
     
      // Confirm no shared bases in read
//      int leftStop = lastLeftBlock.getReadStart() + lastLeftBlock.getLength() - 1;
//      int rightStart = firstRightBlock.getReadStart();
     
      int leftStop = lastLeftBlock.getReferenceStop();
      int rightStart = firstRightBlock.getReferenceStart();
     
      int leftReadStop = lastLeftBlock.getReadStart() + lastLeftBlock.getLength() - 1;
      int rightReadStart = firstRightBlock.getReadStart();

     
      int trimLength = 0;
      if ((leftStop >= rightStart) || (leftReadStop >= rightReadStart)) {
        trimLength = Math.max(leftStop - rightStart + 1, leftReadStop - rightReadStart + 1);
        int trimmedElemLength = trimRightmostElement(leftElements, trimLength);
        if (trimmedElemLength < 1) {
          // This isn't really an indel.  Just alternate mappings.
//          System.out.println("Element trimmed too far. read1: [" + read1.getSAMString() +
//              "] read2: [" + read2.getSAMString() + "]");
          return null;
        }
      }
     
      // Build indel
      int leftAlignmentStop = lastLeftBlock.getReferenceStop();
      leftAlignmentStop -= trimLength;
      int rightAlignmentStart = firstRightBlock.getReferenceStart();
     
      leftReadStop -= trimLength;
     
      int alignmentGap = rightAlignmentStart - leftAlignmentStop - 1;
      int readGap = rightReadStart - leftReadStop - 1;
     
      CigarElement indelElement;
      if ((alignmentGap > 0) && (readGap == 0)) {
        // Deletion
        indelElement = new CigarElement(alignmentGap, CigarOperator.DELETION);
      } else {
        int totalLength = this.getTotalLength(leftElements, rightElements);
//        int insertLen = read1.getReadLength() - totalLength;
        int insertLen = read1.getReadLength() - totalLength - alignmentGap;
        int insertLen2 = readGap - alignmentGap;
       
        if (insertLen != insertLen2) {
          // Not really an insert
          return null;
        }
       
        //TODO: Take a closer look at this
        if (insertLen < 1) {
          return null;
        }
       
        // Right side may have skipped SNPs, so pad it.
        if (alignmentGap > 0) {
          this.padLeftmostElement(rightElements, alignmentGap);
        }
       
        //TODO: Necessary for mismatches?
        /*
        if ((readGap > 0) && ((totalLength + insertLen) < read1.getReadLength())) {
          if (readGap != read1.getReadLength() - totalLength - insertLen) {
            System.out.println("WARNING: Invalid read gap padding: " + read1.getSAMString());
          }
          this.padLeftmostElement(rightElements, readGap);
        }
        */
       
        indelElement = new CigarElement(insertLen, CigarOperator.INSERTION);
      }
     
      // Check to see if the indel is surrounded by non-clipped bases
      if (minIndelBuffer > 0) {
        if ((getNonSoftClippedLength(leftElements) < minIndelBuffer) ||
          (getNonSoftClippedLength(rightElements) < minIndelBuffer)) {
          return null;
        }
      }
     
      List<CigarElement> elements = new ArrayList<CigarElement>();
      elements.addAll(leftElements);
      elements.add(indelElement);
      elements.addAll(rightElements);
     
      // Create combined read
      SAMRecord combinedRead = cloneRead(topHit);
      combinedRead.setAlignmentStart(leftBlocks.get(0).getReferenceStart());
      combinedRead.setCigar(new Cigar(elements));
      combinedRead.setMappingQuality((read1.getMappingQuality() + read2.getMappingQuality()) / 2);
//      combinedRead.setMappingQuality(Math.min(read1.getMappingQuality(), read2.getMappingQuality()));

      //TODO: Any other ancilliary info to set?
     
View Full Code Here

    String contigInfo = read.getStringAttribute("YA");
    if (contigInfo != null) {
      // Get assembled contig info.
      String[] fields = contigInfo.split(":");
      int contigPos = Integer.parseInt(fields[1]);
      Cigar contigCigar = TextCigarCodec.getSingleton().decode(fields[2]);
     
      // Check to see if contig contains indel at current locus
      elem = checkForIndelAtLocus(contigPos, contigCigar, refPos);
     
      if (elem != null) {
View Full Code Here

      // 0 based
      int startIdx = actualPos - contig.getAlignmentStart();
      endIdx = Math.min(startIdx + readLength*2, contig.getReadLength()-1);
//      int endIdx = Math.min(end - contig.getAlignmentStart(), startIdx+contig.getReadLength()-1); // inclusive
      String bases = contig.getReadString().substring(startIdx, endIdx+1);
      Cigar cigar = SAMRecordUtils.subset(contig.getCigar(), startIdx, endIdx);
     
      SAMRecord chunk = cloneRead(contig);
      // Using a static variable because contigs may overlap multiple regions and cause dupes
      chunk.setReadName(chunk.getReadName() + "_" + chunkIdx++);
      chunk.setAlignmentStart(actualPos + calcIndelOffset(startIdx, contig.getCigar()));
View Full Code Here

 
  private BaseInfo getBaseAtReferencePosition(SAMRecord read, int refPos) {
    boolean isNearEdge = false;
    boolean isIndel = false;
    int alignmentStart = read.getAlignmentStart();
    Cigar cigar = read.getCigar();
   
    char base = 'N';
   
    int readIdx = 0;
    int currRefPos = alignmentStart;
   
    for (CigarElement element : cigar.getCigarElements()) {
           
      if (element.getOperator() == CigarOperator.M) {
        readIdx += element.getLength();
        currRefPos += element.getLength();
       
View Full Code Here

TOP

Related Classes of net.sf.samtools.Cigar

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.