code: def _evaluate_one(caller, svtype, size_range, ensemble, truth, data):
      
      def cnv_matches(name):
          return cnv_to_event(name, data) == svtype
      def is_breakend(name):
          return name.startswith("BND")
      def in_size_range(max_buffer=0):
          def _work(feat):
              minf, maxf = size_range
              buffer = min(max_buffer, int(((maxf + minf) / 2.0) / 10.0))
              size = feat.end - feat.start
              return size >= max([0, minf - buffer]) and size < maxf + buffer
          return _work
      def is_caller_svtype(feat):
          for name in feat.name.split(","):
              if ((name.startswith(svtype) or cnv_matches(name) or is_breakend(name))
                    and (caller == "sv-ensemble" or name.endswith(caller))):
                  return True
          return False
      minf, maxf = size_range
      efeats = pybedtools.BedTool(ensemble).filter(in_size_range(0)).filter(is_caller_svtype).saveas().sort().merge()
      tfeats = pybedtools.BedTool(truth).filter(in_size_range(0)).sort().merge().saveas()
      etotal = efeats.count()
      ttotal = tfeats.count()
      match = efeats.intersect(tfeats, u=True).sort().merge().saveas().count()
      return {"sensitivity": _stat_str(match, ttotal),
              "precision": _stat_str(match, etotal)}
docs: Compare a ensemble results for a caller against a specific caller and SV type.