Package net.sf.samtools

Examples of net.sf.samtools.CigarElement


    int readPos = 0;
    int refPosInRead = read.getAlignmentStart();
    int cigarElementIdx = 0;
   
    while (refPosInRead <= refPos && cigarElementIdx < read.getCigar().numCigarElements() && readPos < read.getReadLength()) {
      CigarElement elem = read.getCigar().getCigarElement(cigarElementIdx++);
     
      switch(elem.getOperator()) {
        case H: //NOOP
          break;
        case S:
        case I:
          readPos += elem.getLength();
          break;
        case D:
        case N:
          refPosInRead += elem.getLength();
          break;
        case M:
          if (refPos < (refPosInRead + elem.getLength())) {
            readPos += refPos - refPosInRead;
            if (readPos < read.getReadLength()) {
              // Found the base.  Return it
              return new Object[] { read.getReadString().charAt(readPos) , (int) read.getBaseQualities()[readPos] };
            }
          } else {
            readPos += elem.getLength();
            refPosInRead += elem.getLength();
          }
          break;
        default:
          throw new IllegalArgumentException("Invalid Cigar Operator: " + elem.getOperator() + " for read: " + read.getSAMString());         
      }
    }
   
    return new Object[] { 'N', (int) 0 };
  }
View Full Code Here


       
        //TODO: Why would cigar length be zero here?
        if ((bases.length() >= assemblerSettings.getMinContigLength()) &&
          (contigRead.getCigarLength() > 0)) {
         
          CigarElement first = contigRead.getCigar().getCigarElement(0);
          CigarElement last = contigRead.getCigar().getCigarElement(contigRead.getCigarLength()-1);
         
          if ((first.getOperator() == CigarOperator.M) &&
            (last.getOperator() == CigarOperator.M)) {
           
            String prefix = "";
            String suffix = "";

            if (!contigRead.getReferenceName().startsWith("uc0")) {
           
              // Pull in read length bases from reference to the beginning and end of the contig.
              prefix = c2r.getSequence(contigRead.getReferenceName(),
                  contigRead.getAlignmentStart()-readLength, readLength);
              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));
              }
View Full Code Here

   */
  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 {
View Full Code Here

   */
  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);
      }
     
View Full Code Here

        int elemStop  = len + elemLength;
       
        if ((startIdx >= elemStart) && (startIdx < elemStop)) {
          elemIdx = startIdx - elemStart;
          int elemLen = Math.min(elem.getLength()-elemIdx, endIdx-startIdx+1);
          CigarElement newElem = new CigarElement(elemLen, elem.getOperator());
          subElements.add(newElem);
        }
       
        len += elemLength;
       
      } else if ((len + elemLength) <= endIdx) {
        // Add this entire element
        subElements.add(elem);
        len += elemLength;
      } else if (len <= endIdx) {
        // Add part of last sub element (should never be a deletion)
        CigarElement newElem = new CigarElement(endIdx-len+1, elem.getOperator());
        subElements.add(newElem);
        break;
      } else {
        break;
      }
View Full Code Here

      (origRead.getReadNegativeStrandFlag() == updatedRead.getReadNegativeStrandFlag()) &&
      (origRead.getCigarLength() > 1)) {
     
      // Compare start positions
      int nonClippedOrigStart = origRead.getAlignmentStart();
      CigarElement firstElem = origRead.getCigar().getCigarElement(0);
      if (firstElem.getOperator() == CigarOperator.S) {
        nonClippedOrigStart -= firstElem.getLength();
      }
     
      if (nonClippedOrigStart == updatedRead.getAlignmentStart()) {
        // Compare cigars
        List<CigarElement> elems = new ArrayList<CigarElement>(origRead.getCigar().getCigarElements());
       
        CigarElement first = elems.get(0);
       
        // If first element is soft clipped, lengthen the second element
        if (first.getOperator() == CigarOperator.S) {
          CigarElement second = elems.get(1);
          CigarElement newElem = new CigarElement(first.getLength() + second.getLength(), second.getOperator());
          elems.set(1,  newElem);
        }
       
        CigarElement last = elems.get(elems.size()-1);
        if (last.getOperator() == CigarOperator.S) {
          CigarElement nextToLast = elems.get(elems.size()-2);
          CigarElement newElem = new CigarElement(last.getLength() + nextToLast.getLength(), nextToLast.getOperator());
          elems.set(elems.size()-2, newElem);
        }
       
        List<CigarElement> newElems = new ArrayList<CigarElement>();
View Full Code Here

      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) ||
View Full Code Here

      throw new RuntimeException(e);
    }
  }
 
  private int trimRightmostElement(List<CigarElement> elements, int trimLength) {
    CigarElement toTrim = elements.get(elements.size()-1);
    int newLength = toTrim.getLength() - trimLength;
    CigarElement replacement = new CigarElement(newLength, toTrim.getOperator());
    elements.set(elements.size()-1, replacement);
   
    return newLength;
  }
View Full Code Here

   
    return newLength;
  }
 
  private int padLeftmostElement(List<CigarElement> elements, int padLength) {
    CigarElement toPad = elements.get(0);
    int newLength = toPad.getLength() + padLength;
    CigarElement replacement = new CigarElement(newLength, toPad.getOperator());
    elements.set(0, replacement);
   
    return newLength;
  }
View Full Code Here

    int readPos = 0;
    int refPosInRead = read.getAlignmentStart();
    int cigarElementIdx = 0;
   
    while (refPosInRead <= refPos && cigarElementIdx < read.getCigar().numCigarElements() && readPos < read.getReadLength()) {
      CigarElement elem = read.getCigar().getCigarElement(cigarElementIdx++);
     
      switch(elem.getOperator()) {
        case H: //NOOP
          break;
        case S:
        case I:
          readPos += elem.getLength();
          break;
        case D:
        case N:
          refPosInRead += elem.getLength();
          break;
        case M:
          if (refPos < (refPosInRead + elem.getLength())) {
            readPos += refPos - refPosInRead;
            if (readPos < read.getReadLength()) {
              // Found the base.  Return it
              return read.getReadString().charAt(readPos);
            }
          } else {
            readPos += elem.getLength();
            refPosInRead += elem.getLength();
          }
          break;
        default:
          throw new IllegalArgumentException("Invalid Cigar Operator: " + elem.getOperator() + " for read: " + read.getSAMString());         
      }
    }
   
    return null;
  }
View Full Code Here

TOP

Related Classes of net.sf.samtools.CigarElement

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.