Package net.sf.samtools

Examples of net.sf.samtools.SAMFileWriter


//    String out = "/home/lmose/dev/abra/la.out.sam";
//    String ref = "/home/lmose/reference/chr1/chr1.fa";
   
    SAMFileReader reader = new SAMFileReader(new File(in));
   
    SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(
        reader.getFileHeader(), false, new File(out));
   
    CompareToReference2 c2r = new CompareToReference2();
    c2r.init(ref);
   
    IndelShifter indelShifter = new IndelShifter();

    for (SAMRecord read : reader) {
      SAMRecord shiftedRead = indelShifter.shiftIndelsLeft(read, c2r);
      writer.addAlignment(shiftedRead);
    }
   
    writer.close();
    reader.close();
  }
View Full Code Here


  }

  public static SAMFileWriter createSAMTextWriter(
      SAMFileWriterFactory factoryOrNull, OutputStream os,
      SAMFileHeader header, boolean printHeader) throws IOException {
    SAMFileWriter writer = null;
    if (printHeader) {
      if (factoryOrNull == null)
        factoryOrNull = new SAMFileWriterFactory();
      writer = factoryOrNull.makeSAMWriter(header, true, os);
    } else {
View Full Code Here

    samFileWriterFactory.setAsyncOutputBufferSize(10000);
    samFileWriterFactory.setCreateIndex(false);
    samFileWriterFactory.setCreateMd5File(false);
    samFileWriterFactory.setUseAsyncIo(true);

    SAMFileWriter writer = createSAMFileWriter(params, cramHeader,
        samFileWriterFactory);

    Container c = null;
    AlignmentSliceQuery location = null;
    if (!params.locations.isEmpty() && params.cramFile != null
        && is instanceof SeekableStream) {
      if (params.locations.size() > 1)
        throw new RuntimeException("Only one location is supported.");

      location = new AlignmentSliceQuery(params.locations.get(0));

      c = skipToContainer(params.cramFile, cramHeader,
          (SeekableStream) is, location);

      if (c == null) {
        log.error("Index file not found. ");
        return;
      }
    }

    long recordCount = 0;
    long readTime = 0;
    long parseTime = 0;
    long normTime = 0;
    long samTime = 0;
    long writeTime = 0;
    long time = 0;
    ArrayList<CramRecord> cramRecords = new ArrayList<CramRecord>(10000);

    CramNormalizer n = new CramNormalizer(cramHeader.samFileHeader);

    byte[] ref = null;
    int prevSeqId = -1;
    while (true) {
//      try {
        time = System.nanoTime();
        // cis = new CountingInputStream(is);
        c = ReadWrite.readContainer(cramHeader.samFileHeader, is);
        if (c == null) break ;
        // c.offset = offset;
        // offset += cis.getCount();
        readTime += System.nanoTime() - time;
//      } catch (EOFException e) {
//        break;
//      }

      // for random access check if the sequence is the one look for:
      if (location != null
          && cramHeader.samFileHeader.getSequence(location.sequence)
              .getSequenceIndex() != c.sequenceId)
        break;

      if (params.countOnly && params.requiredFlags == 0
          && params.filteringFlags == 0) {
        recordCount += c.nofRecords;
        continue;
      }

      try {
        time = System.nanoTime();
        cramRecords.clear();
        BLOCK_PROTO.getRecords(c.h, c, cramHeader.samFileHeader,
            cramRecords);
        parseTime += System.nanoTime() - time;
      } catch (EOFException e) {
        throw e;
      }

      if (c.sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
        ref = new byte[] {};
      } else if (prevSeqId < 0 || prevSeqId != c.sequenceId) {
        SAMSequenceRecord sequence = cramHeader.samFileHeader
            .getSequence(c.sequenceId);
        ReferenceSequence referenceSequence = Utils
            .trySequenceNameVariants(referenceSequenceFile,
                sequence.getSequenceName());
        ref = referenceSequence.getBases();
        {
          // hack:
          int newLines = 0;
          for (byte b : ref)
            if (b == 10)
              newLines++;
          byte[] ref2 = new byte[ref.length - newLines];
          int j = 0;
          for (int i = 0; i < ref.length; i++)
            if (ref[i] == 10)
              continue;
            else
              ref2[j++] = ref[i];
          ref = ref2;
        }
        prevSeqId = c.sequenceId;
      }

      long time1 = System.nanoTime();
      n.normalize(cramRecords, true, ref, c.alignmentStart, c.h.substitutionMatrix, c.h.AP_seriesDelta);
      long time2 = System.nanoTime();
      normTime += time2 - time1;

      Cram2BamRecordFactory c2sFactory = new Cram2BamRecordFactory(
          cramHeader.samFileHeader);

      long c2sTime = 0;
      long sWriteTime = 0;

      boolean enough = false;
      for (CramRecord r : cramRecords) {
        // check if the record ends before the query start:
        if (location != null && r.getAlignmentStart() < location.start)
          continue;

        time = System.nanoTime();
        SAMRecord s = c2sFactory.create(r);

        if (params.requiredFlags != 0
            && ((params.requiredFlags & s.getFlags()) == 0))
          continue;
        if (params.filteringFlags != 0
            && ((params.filteringFlags & s.getFlags()) != 0))
          continue;
        if (params.countOnly) {
          recordCount++;
          continue;
        }

        if (ref != null)
          Utils.calculateMdAndNmTags(s, ref, params.calculateMdTag,
              params.calculateNmTag);
        c2sTime += System.nanoTime() - time;
        samTime += System.nanoTime() - time;

        time = System.nanoTime();
        writer.addAlignment(s);
        sWriteTime += System.nanoTime() - time;
        writeTime += System.nanoTime() - time;
        if (params.outputFile == null && System.out.checkError())
          break;

        // we got all the reads for random access:
        if (location != null && location.end < s.getAlignmentStart()) {
          enough = true;
          break;
        }
      }

      log.info(String
          .format("CONTAINER READ: io %dms, parse %dms, norm %dms, convert %dms, BAM write %dms",
              c.readTime / 1000000, c.parseTime / 1000000,
              (time2 - time1) / 1000000, c2sTime / 1000000,
              sWriteTime / 1000000));

      if (enough
          || (params.outputFile == null && System.out.checkError()))
        break;
    }

    if (params.countOnly)
      System.out.println(recordCount);

    // if (writer instanceof SAMTextWriter)
    // ((SAMTextWriter)writer).getWriter().flush() ;
    writer.close();

    log.warn(String
        .format("TIMES: io %ds, parse %ds, norm %ds, convert %ds, BAM write %ds",
            readTime / 1000000000, parseTime / 1000000000,
            normTime / 1000000000, samTime / 1000000000,
View Full Code Here

      throws IOException {
    /*
     * building sam writer, sometimes we have to go deeper to get to the
     * required functionality:
     */
    SAMFileWriter writer = null;
    if (params.outputFastq) {
      if (params.cramFile == null) {
        writer = new FastqSAMFileWriter(System.out, null,
            cramHeader.samFileHeader);
      } else {
View Full Code Here

    resolveCollisions(list);
    SAMFileHeader header = mergeHeaders(list);
    header.addComment(mergeComment.toString());

    SAMFileWriter writer = null;
    if (params.outFile != null)
      if (!params.samFormat)
        writer = new SAMFileWriterFactory().makeBAMWriter(header, true,
            params.outFile);
      else
        writer = new SAMFileWriterFactory().makeSAMWriter(header, true,
            params.outFile);
    else if (!params.samFormat) {
      // hack to write BAM format to stdout:
      File file = File.createTempFile("bam", null);
      file.deleteOnExit();
      BAMFileWriter bamWriter = new BAMFileWriter(System.out, file);
      header.setSortOrder(SortOrder.coordinate);
      bamWriter.setHeader(header);
      writer = bamWriter;
    }

    else {
      writer = Utils.createSAMTextWriter(null, System.out, header,
          params.printSAMHeader);
    }

    MergedIterator mergedIterator = new MergedIterator(list, header);
    while (mergedIterator.hasNext()) {
      SAMRecord record = mergedIterator.next();
      writer.addAlignment(record);
    }

    mergedIterator.close();
    for (RecordSource source : list)
      source.close();

    // hack: BAMFileWriter may throw this when streaming to stdout, so
    // silently drop the exception if streaming out BAM format:
    try {
      writer.close();
    } catch (net.sf.samtools.util.RuntimeIOException e) {
      if (params.samFormat
          || params.outFile != null
          || !e.getMessage()
              .matches(
View Full Code Here

TOP

Related Classes of net.sf.samtools.SAMFileWriter

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.