code: def _hybrid_select_metrics(self, dup_bam, bait_file, target_file):
          
          metrics = self._check_metrics_file(dup_bam, "hs_metrics")
          if not file_exists(metrics):
              with bed_to_interval(bait_file, dup_bam) as ready_bait:
                  with bed_to_interval(target_file, dup_bam) as ready_target:
                      with file_transaction(metrics) as tx_metrics:
                          opts = [("BAIT_INTERVALS", ready_bait),
                                  ("TARGET_INTERVALS", ready_target),
                                  ("INPUT", dup_bam),
                                  ("OUTPUT", tx_metrics)]
                          try:
                              self._picard.run("CollectHsMetrics", opts)
                          # HsMetrics fails regularly with memory errors
                          # so we catch and skip instead of aborting the
                          # full process
                          except subprocess.CalledProcessError:
                              return None
          return metrics
docs: Generate metrics for hybrid selection efficiency.