public CRAMFileWriter makeCRAMWriter(
      final SAMFileHeader header, final File outputFile, final File referenceFasta) {

    final boolean createIndex = this.createIndex && IOUtil.isRegularPath(outputFile);
    if (this.createIndex && !createIndex) {
      System.err.println(
          "Cannot create index for CAM because output file is not a regular file: "
              + outputFile.getAbsolutePath());
    }

    try {

      OutputStream indexOS = null;
      if (createIndex) {
        File indexFile = new File(outputFile.getAbsolutePath() + ".bai");
        indexOS = new FileOutputStream(indexFile);
      }
      final CRAMFileWriter writer =
          new CRAMFileWriter(
              new FileOutputStream(outputFile),
              indexOS,
              new ReferenceSource(referenceFasta),
              header,
              null);
      writer.setPreserveReadNames(true);
      writer.setCaptureAllTags(true);
      return writer;
    } catch (final IOException ioe) {
      throw new RuntimeIOException("Error opening file: " + outputFile.getAbsolutePath());
    }
  }
  public CRAMFileWriter makeCRAMWriter(
      final SAMFileHeader header, final OutputStream stream, final File referenceFasta) {

    final CRAMFileWriter writer =
        new CRAMFileWriter(stream, new ReferenceSource(referenceFasta), header, null);
    writer.setPreserveReadNames(true);
    writer.setCaptureAllTags(true);
    return writer;
  }