code: def run_preprocessing(self, num_threads):
      if os.path.isdir(
          join_paths(
              self.preprocessed_output_folder, "gt_segmentations"
          )
      ):
          shutil.rmtree(
              join_paths(
                  self.preprocessed_output_folder, "gt_segmentations"
              )
          )
      shutil.copytree(
          join_paths(self.folder_with_cropped_data, "gt_segmentations"),
          join_paths(
              self.preprocessed_output_folder, "gt_segmentations"
          ),
      )
      normalization_schemes = self.plans["normalization_schemes"]
      use_nonzero_mask_for_normalization = self.plans[
          "use_mask_for_norm"
      ]
      intensityproperties = self.plans["dataset_properties"][
          "intensityproperties"
      ]
      preprocessor_class = self.preprocessor_name
      assert preprocessor_class is not None
      preprocessor = preprocessor_class(
          normalization_schemes,
          use_nonzero_mask_for_normalization,
          self.transpose_forward,
          intensityproperties,
      )
      target_spacings = [
          i["current_spacing"] for i in self.plans_per_stage.values()
      ]
      if self.plans["num_stages"] > 1 and not isinstance(
          num_threads, (list, tuple)
      ):
          num_threads = (8, num_threads)
      elif self.plans["num_stages"] == 1 and isinstance(
          num_threads, (list, tuple)
      ):
          num_threads = num_threads[-1]
      preprocessor.run(
          target_spacings,
          self.folder_with_cropped_data,
          self.preprocessed_output_folder,
          self.plans["data_identifier"],
          num_threads,
      )
  
imports: import os
  import pickle
  import shutil
  from collections import OrderedDict
  from .image_crop import get_case_identifier_from_npz
  from .preprocessing import GenericPreprocessor, PreprocessorFor2D
  from .experiment_utils import *
  from .path_utils import join_paths
label_desc: Use image node_id 12 for calling the ExperimentPlanner obj's underlying member method code with example usage: obj.run_preprocessing(num_threads) without return types