def METHOD_NAME(doi_string, paper_name, doi_map):
    download_dir = get_papers_folder_path()
    methods_to_try = [
        ('scihub', [PYTHON_EXECUTABLE, '-m', 'PyPaperBot', '--doi={}'.format(doi_string), '--dwn-dir={}'.format(download_dir)]),
        ('google scholar', [PYTHON_EXECUTABLE, '-m', 'PyPaperBot', '--query={}'.format(paper_name), '--scholar-pages=1', '--scholar-results=1', '--dwn-dir={}'.format(download_dir)])
    ]
    with ListingDiff(download_dir) as listing_diff:
        ignored_files = []
        for method_name, method_args in methods_to_try:
            show_status('trying to download "{}" from {}'.format(paper_name, method_name))
            try:
                subprocess.run(method_args)
            except Exception as e:
                show_status('error in download from {}'.format(method_name))
            pdf_files = listing_diff.new_pdf_files()
            if len(pdf_files) > 0:
                returned_file = download_dir / pdf_files[0]
                if is_file_a_paper_with_name(str(returned_file), paper_name):
                    doi_map[doi_string] = str(returned_file)
                    write_cache_doi_map(doi_map)
                    return returned_file
                else:
                    ignored_files.append(returned_file)
                    listing_diff.reset()
        if len(ignored_files) > 0:
            show_status('could not find a suitable paper, this is a throw in the dark')
            return ignored_files[0]
    return None