code: def _project_to_part_level(hist: Hist, outliers_removal_axis: OutliersRemovalAxis) -> Hist:
      
      # Setup the projector
      import ROOT
      if isinstance(hist, (ROOT.TH2, ROOT.TH3)):
          projection_information: Dict[str, Any] = {}
          output_object = _OutputObject(None)
          projector = projectors.HistProjector(
              observable_to_project_from = hist,
              output_observable = output_object,
              output_attribute_name = "output",
              projection_name_format = "outliers_removal_hist",
              projection_information = projection_information,
          )
          # No additional_axis_cuts or projection_dependent_cut_axes
          # Projection axis
          projector.projection_axes.append(
              projectors.HistAxisRange(
                  axis_type = outliers_removal_axis,
                  axis_range_name = "outliers_removal_axis",
                  min_val = projectors.HistAxisRange.apply_func_to_find_bin(None, 1),
                  max_val = projectors.HistAxisRange.apply_func_to_find_bin(ROOT.TAxis.GetNbins),
              )
          )
  
          # Perform the actual projection and return the output.
          projector.project()
          return output_object.output
  
      # If we already have a 1D hist, just return that existing hist.
      return hist
docs: Project the input histogram to the particle level axis.
  
      Args:
          hist: Histogram to check for outliers.
          outliers_removal_axis: Axis along which outliers removal will be performed. Usually
              the particle level aixs.
      Returns:
          The histogram to check for outliers.