def METHOD_NAME(self, chromosome, variants, sample, *, read_vcf=True, regions=None):
    """
    Return a pair (readset, vcf_source_ids) where readset is a sorted ReadSet.
    Set read_vcf to False to not read phased blocks from the VCFs
    """
    readset_reader = self._readset_reader
    for_sample = f"for sample {sample!r} " if not self._ignore_read_groups else ""
    logger.debug(
        "Reading alignments %son chromosome %s and detecting alleles ...",
        for_sample,
        chromosome,
    )
    try:
        reference = self._fasta[chromosome] if self._fasta else None
    except KeyError:
        raise CommandLineError(
            f"Chromosome {chromosome!r} present in VCF file, "
            f"but not in the reference FASTA {self._fasta.filename!r}"
        )
    bam_sample = None if self._ignore_read_groups else sample
    try:
        readset = readset_reader.METHOD_NAME(chromosome, variants, bam_sample, reference, regions)
    except SampleNotFoundError:
        logger.warning("Sample %r not found in any BAM/CRAM file.", bam_sample)
        readset = ReadSet()
    except ReadSetError as e:
        raise CommandLineError(e)
    except ReferenceNotFoundError:
        if chromosome.startswith("chr"):
            alternative = chromosome[3:]
        else:
            alternative = "chr" + chromosome
        message = f"The chromosome {chromosome!r} was not found in the BAM/CRAM file."
        if readset_reader.has_reference(alternative):
            message += f" Found {alternative!r} instead"
        raise CommandLineError(message)
    vcf_source_ids = set()
    if read_vcf:
        # TODO this is a bit clumsy
        if self._vcfs is None:
            raise ValueError("call PhasedInputReader.read_vcfs() first")
        # Add phasing information from VCF files, if present
        sample_id = self._numeric_sample_ids[sample]
        for i, vcf in enumerate(self._vcfs):
            if chromosome in vcf:
                variant_table = vcf[chromosome]
                source_id = readset_reader.n_paths + i
                vcf_source_ids.add(source_id)
                for METHOD_NAME in variant_table.phased_blocks_as_reads(
                    sample, variants, source_id, sample_id
                ):
                    readset.add(METHOD_NAME)
    # TODO is this necessary?
    for METHOD_NAME in readset:
        METHOD_NAME.sort()
    readset.sort()
    logger.info(
        "Found %d reads covering %d variants", len(readset), len(readset.get_positions())
    )
    return readset, vcf_source_ids