code: def _run_cnvkit_population(items, background):
      
      if background and len(background) > 0:
          inputs = items
      else:
          inputs, background = shared.find_case_control(items)
  
      # if we have case/control organized background or a single sample
      if len(inputs) == 1 or len(background) > 0:
          ckouts = _run_cnvkit_shared(inputs, background)
          return _associate_cnvkit_out(ckouts, inputs) + background
      # otherwise run each sample with the others in the batch as background
      else:
          out = []
          for cur_input in items:
              background = [d for d in items if dd.get_sample_name(d) != dd.get_sample_name(cur_input)]
              ckouts = _run_cnvkit_shared([cur_input], background)
              out.extend(_associate_cnvkit_out(ckouts, [cur_input]))
          return out
docs: Run CNVkit on a population of samples.
  
      Tries to calculate background based on case/controls, otherwise
      uses samples from the same batch as background.