code: def get_input(source, files, threads=4, readtype="1D",
                combine="simple", names=None, barcoded=False):
      proc_functions = {
          'fastq': ex.process_fastq_plain,
          'fasta': ex.process_fasta,
          'bam': ex.process_bam,
          'summary': ex.process_summary,
          'fastq_rich': ex.process_fastq_rich,
          'fastq_minimal': ex.process_fastq_minimal,
          'cram': ex.process_cram,
          'ubam': ex.process_ubam, }
      filethreads = min(len(files), threads)
      threadsleft = threads - filethreads
      with cfutures.ProcessPoolExecutor(max_workers=filethreads) as executor:
          extration_function = partial(proc_functions[source],
                                       threads=threadsleft,
                                       readtype=readtype,
                                       barcoded=barcoded)
          datadf = combine_dfs(
              dfs=[out for out in executor.map(extration_function, files)],
              names=names or files,
              method=combine)
      if "readIDs" in datadf and pd.isna(datadf["readIDs"]).any():
          datadf.drop("readIDs", axis='columns', inplace=True)
      datadf = calculate_start_time(datadf)
      logging.info("Nanoget: Gathered all metrics of {} reads".format(len(datadf)))
      if len(datadf) == 0:
          logging.critical("Nanoget: no reads retrieved.".format(len(datadf)))
          sys.exit("Fatal: No reads found in input.")
      else:
          return datadf