示例#1
0
文件: utils.py 项目: maxibor/pydamage
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
示例#2
0
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
示例#3
0
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)