def prepare_bam(bam: str) -> Tuple[Tuple, str]: """Checks for file extension, and returns tuple of mapped refs Args: bam (str): Path to bam file Returns: Tuple: Tuple of mapped references str: bam opening mode """ mode = check_extension(bam) alf = AlignmentFile(bam, mode) if not alf.has_index(): print(f"BAM file {bam} has no index. Sort BAM file and provide index " "before running pydamage.") sys.exit(1) present_refs = set() for ref_stat in alf.get_index_statistics(): refname = ref_stat[0] nb_mapped_reads = ref_stat[1] if nb_mapped_reads > 0: present_refs.add(refname) alf.close() return tuple(present_refs), mode
def test_set_meta_presorted(): b = Bam() with get_dataset('1.bam') as dataset: b.set_meta(dataset=dataset) assert dataset.metadata.sort_order == "coordinate" bam_file = AlignmentFile( dataset.file_name, mode="rb", index_filename=dataset.metadata.bam_index.file_name) assert bam_file.has_index() is True
def main(): args = parse_args() with args.bam_file: bam_reader = AlignmentFile(args.bam_file) if not bam_reader.has_index(): print('Adding index...') index_args = ['samtools', 'index', args.bam_file.name] run(index_args, check=True) args.bam_file.seek(0) # Go back to start of header. bam_reader = AlignmentFile(args.bam_file) bam_reader.check_index() x = bam_reader.parse_region(region=args.target_region) sequences = sorted(bam_reader.fetch(region=args.target_region), key=attrgetter('qname')) print(len(sequences)) for seq in sequences: print(seq.qname)