code: def handle_multiple_callers(data, key, default=None, require_bam=True):
      
      callers = get_variantcaller(data, key, default, require_bam=require_bam)
      if isinstance(callers, six.string_types):
          return [data]
      elif not callers:
          return []
      else:
          out = []
          for caller in callers:
              base = copy.deepcopy(data)
              if not base["config"]["algorithm"].get("orig_%s" % key):
                  base["config"]["algorithm"]["orig_%s" % key] = \
                    base["config"]["algorithm"][key]
              base["config"]["algorithm"][key] = caller
              # if splitting by variant caller, also split by jointcaller
              if key == "variantcaller":
                  jcallers = get_variantcaller(data, "jointcaller", [])
                  if isinstance(jcallers, six.string_types):
                      jcallers = [jcallers]
                  if jcallers:
                      base["config"]["algorithm"]["orig_jointcaller"] = jcallers
                      jcallers = [x for x in jcallers if x.startswith(caller)]
                      if jcallers:
                          base["config"]["algorithm"]["jointcaller"] = jcallers[0]
                      else:
                          base["config"]["algorithm"]["jointcaller"] = False
              out.append(base)
          return out
docs: Split samples that potentially require multiple variant calling approaches.