package picard.sam; import htsjdk.samtools.BamFileIoUtils; import htsjdk.samtools.SAMFileHeader; import htsjdk.samtools.SAMFileReader; import htsjdk.samtools.util.IOUtil; import picard.PicardException; import picard.cmdline.CommandLineProgram; import picard.cmdline.CommandLineProgramProperties; import picard.cmdline.Option; import picard.cmdline.StandardOptionDefinitions; import picard.cmdline.programgroups.SamOrBam; import java.io.File; import java.util.List; /** * A tool to add comments to a BAM file header. Effectively copies the BAM file except for the addition of the @CO records * in the header. This tool does not support SAM files. * * @author jgentry */ @CommandLineProgramProperties( usage = "Adds one or more comments to the header of a specified BAM file. Copies the file with the " + "modified header to a specified output file. Note that a block copying method is used to ensure efficient transfer to the " + "output file. SAM files are not supported", usageShort = "Adds comments to the header of a BAM file", programGroup = SamOrBam.class ) public class AddCommentsToBam extends CommandLineProgram { @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input BAM file to add a comment to the header") public File INPUT; @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output BAM file to write results") public File OUTPUT; @Option(shortName="C", doc="Comments to add to the BAM file") public List<String> COMMENT; public static void main(final String[] args) { new AddCommentsToBam().instanceMainWithExit(args); } protected int doWork() { IOUtil.assertFileIsReadable(INPUT); IOUtil.assertFileIsWritable(OUTPUT); if (INPUT.getAbsolutePath().endsWith(".sam")) { throw new PicardException("SAM files are not supported"); } final SAMFileHeader samFileHeader = new SAMFileReader(INPUT).getFileHeader(); for (final String comment : COMMENT) { if (comment.contains("\n")) { throw new PicardException("Comments can not contain a new line"); } samFileHeader.addComment(comment); } BamFileIoUtils.reheaderBamFile(samFileHeader, INPUT, OUTPUT, CREATE_MD5_FILE, CREATE_INDEX); return 0; } }