예제 #1
0
 @Override
 public int compare(Pair<Integer, File> p1, Pair<Integer, File> p2) {
   int startPositionP1 = p1.getFirst();
   int startPositionP2 = p2.getFirst();
   if (startPositionP1 == startPositionP2) return 0;
   return startPositionP1 < startPositionP2 ? -1 : 1;
 }
예제 #2
0
파일: BAQ.java 프로젝트: haiyangheart/gatk
  // we need to pad ref by at least the bandwidth / 2 on either side
  public BAQCalculationResult calcBAQFromHMM(SAMRecord read, byte[] ref, int refOffset) {
    // todo -- need to handle the case where the cigar sum of lengths doesn't cover the whole read
    Pair<Integer, Integer> queryRange = calculateQueryRange(read);
    if (queryRange == null) return null; // read has Ns, or is completely clipped away

    int queryStart = queryRange.getFirst();
    int queryEnd = queryRange.getSecond();

    BAQCalculationResult baqResult =
        calcBAQFromHMM(ref, read.getReadBases(), read.getBaseQualities(), queryStart, queryEnd);

    // cap quals
    int readI = 0, refI = 0;
    for (CigarElement elt : read.getCigar().getCigarElements()) {
      int l = elt.getLength();
      switch (elt.getOperator()) {
        case N: // cannot handle these
          return null;
        case H:
        case P: // ignore pads and hard clips
          break;
        case S:
          refI += l; // move the reference too, in addition to I
        case I:
          // todo -- is it really the case that we want to treat I and S the same?
          for (int i = readI; i < readI + l; i++) baqResult.bq[i] = baqResult.rawQuals[i];
          readI += l;
          break;
        case D:
          refI += l;
          break;
        case M:
          for (int i = readI; i < readI + l; i++) {
            int expectedPos = refI - refOffset + (i - readI);
            baqResult.bq[i] =
                capBaseByBAQ(
                    baqResult.rawQuals[i], baqResult.bq[i], baqResult.state[i], expectedPos);
          }
          readI += l;
          refI += l;
          break;
        default:
          throw new ReviewedGATKException(
              "BUG: Unexpected CIGAR element " + elt + " in read " + read.getReadName());
      }
    }
    if (readI != read.getReadLength()) // odd cigar string
    System.arraycopy(baqResult.rawQuals, 0, baqResult.bq, 0, baqResult.bq.length);

    return baqResult;
  }
예제 #3
0
 /**
  * General interval reduce routine called after all of the traversals are done
  *
  * @param results interval reduce results
  */
 public void onTraversalDone(List<Pair<GenomeLoc, ReduceType>> results) {
   for (Pair<GenomeLoc, ReduceType> result : results) {
     logger.info(String.format("[INTERVAL REDUCE RESULT] at %s ", result.getFirst()));
     this.onTraversalDone(result.getSecond());
   }
 }