BamHeader PrepareHeader(const OptionParser& parser, int argc, char** argv, const vector<string>& files) { using boost::algorithm::join; ProgramInfo program(parser.prog() + "-" + CCS_VERSION); program.Name(parser.prog()) .CommandLine(parser.prog() + " " + join(vector<string>(argv + 1, argv + argc), " ")) .Description(DESCRIPTION) .Version(CCS_VERSION); BamHeader header; header.PacBioBamVersion("3.0.1").SortOrder("unknown").Version("1.5").AddProgram(program); for (const auto& file : files) { BamFile bam(file); for (const auto& rg : bam.Header().ReadGroups()) { if (rg.ReadType() != "SUBREAD") parser.error("invalid input file, READTYPE must be SUBREAD"); ReadGroupInfo readGroup(rg.MovieName(), "CCS"); readGroup.BindingKit(rg.BindingKit()) .SequencingKit(rg.SequencingKit()) .BasecallerVersion(rg.BasecallerVersion()) .FrameRateHz(rg.FrameRateHz()); header.AddReadGroup(readGroup); } } return header; }