Example #1
0
  public boolean processString() {
    String value = "";
    SequenceReader r = new SequenceReader(true);
    r.indexFASTAFile(hitFilename, null, true);
    int l = (3 * querySeq.length()) / 2;
    String hitSeq = r.getSubSequence(hitReference.getId(), hitStart, hitStart + l);
    int hitPtr = 0;
    int queryPtr = 0;
    boolean displayResult = false;
    boolean donePreClipping = false;
    int tagCtr = 0;
    int i = 0;
    boolean continueParsing = true;
    int totalCount = 0;
    int delCount = 0;
    int insCount = 0;
    int matchCount = 0;
    boolean processed = true;

    // System.out.println("  Hit: "+hitSeq.length()+" "+hitSeq);
    // System.out.println("Query: "+querySeq.length()+" "+querySeq);

    hitAlnSize = 0;
    queryAlnSize = 0;
    hitAlnSize = 0;
    while ((i < cigarString.length()) && (continueParsing)) {
      // for (int i=0; i<cigarString.length(); i++) {
      // System.out.println("hitPtr="+hitPtr+" queryPtr="+queryPtr);
      // System.out.println("Query: " + queryString.toString());
      // System.out.println("  Hit: " + hitString.toString());
      char c = cigarString.charAt(i);
      if (Character.isDigit(c)) {
        value = value + c;
      } else {
        int n = Integer.parseInt(value);
        totalCount += n;
        // System.out.println(n + " " + c);
        switch (c) {
          case 'M':
          case '=':
          case 'X':
            queryString.append(querySeq.substring(queryPtr, queryPtr + n));
            hitString.append(hitSeq.substring(hitPtr, hitPtr + n));
            queryPtr += n;
            hitPtr += n;
            queryAlnSize += n;
            hitAlnSize += n;
            donePreClipping = true;
            matchCount += n;
            break;
          case 'I':
            if (n > 100) {
              System.out.println("");
              System.out.println("Error: large I (" + n + ") - read " + queryID + " ignored");
              processed = false;
              continueParsing = false;
            } else {
              queryString.append(querySeq.substring(queryPtr, queryPtr + n));
              for (int j = 0; j < n; j++) {
                hitString.append('-');
              }
              queryPtr += n;
              queryAlnSize += n;
            }
            donePreClipping = true;
            insCount += n;
            break;
          case 'D':
            if (n > 100) {
              System.out.println("Error: large D (" + n + ") - read " + queryID + " ignored");
              processed = false;
              continueParsing = false;
            } else {
              hitString.append(hitSeq.substring(hitPtr, hitPtr + n));
              for (int j = 0; j < n; j++) {
                queryString.append('-');
              }
              hitPtr += n;
              hitAlnSize += n;
            }
            donePreClipping = true;
            delCount += n;
            break;
          case 'N':
            System.out.println("Warning: encountered N in CIGAR format!");
            System.out.println("");
            displayResult = true;
            hitString.append(hitSeq.substring(hitPtr, hitPtr + n));
            for (int j = 0; j < n; j++) {
              queryString.append('-');
            }
            queryPtr += n;
            hitPtr += n;
            donePreClipping = true;
            break;
          case 'S':
            // System.out.println("Warnning: encountered S in CIGAR format!");
            queryPtr += n;
            if (!donePreClipping) {
              queryStart += n;
            }
            displayResult = true;
            break;
          case 'H':
            // System.out.println("Warning: encountered H in CIGAR format!");
            if (!donePreClipping) {
              queryStart += n;
            } else {
              // System.out.println("Warning: hard clipping at end");
            }
            displayResult = true;
            break;
          case 'P':
            System.out.println("Warning: encountered P in CIGAR format!");
            System.out.println("");
            displayResult = true;
            donePreClipping = true;
            break;
          default:
            System.out.println("Unrecognised character in CIGAR string: " + c);
            processed = false;
            break;
        }
        value = "";
        tagCtr++;
        // System.out.println("qseq="+querySeq.length()+" matchCount="+matchCount+"
        // insCount="+insCount+" delCount="+delCount+" totalCount="+totalCount);
        // System.out.println("Query: "+queryString.toString());
        // System.out.println("  Hit: "+hitString.toString());
      }

      i++;
      // System.out.println("i="+i+" and length="+cigarString.length());
    }

    // if (displayResult) {
    // System.out.println(queryFilename);
    // System.out.println("Query: " + queryString.toString());
    // System.out.println("  Hit: " + hitString.toString());
    // System.exit(1);
    // }
    return processed;
  }