class_docstr: Control the creation and navigation of an hSNE manifold model
  using appropriate visualization and interaction GUIs depending on the data.
  This controller assumes that selections are hierarchical and that each
  selection produces a new GUI for viewing and further selection.
docstr: Initiate the embedding iteration in the analysis GUI
docstr_tok: ["Initiate","the","embedding","iteration","in","the","analysis","GUI"]
code: def start_hsne(self, data, data_file, hsne_file, label_file):
      """Initiate the embedding iteration in the analysis GUI"""
      print("Created hSNE")
      hsne = nptsne.HSne(True)
  
      number_of_scales = self.model_gui.scales
      print(f"Number of scales: {number_of_scales}")
      if hsne_file is None:
          print("hSNE from scratch")
          hsne.create_hsne(data, number_of_scales)
          hsne_file = data_file.with_suffix(".hsne")
          hsne.save(str(hsne_file))
      else:
          print("existing hSNE")
          hsne.load_hsne(data, str(hsne_file))
  
      print("start analysis model")
      self.data = data
      self.analysis_model = hsne_analysis.AnalysisModel(
          hsne, self.embedder_type
      )
  
      top_analysis = self.analysis_model.top_analysis
  
      all_analyses_per_scale = {
          top_analysis.scale_id: {top_analysis.id: top_analysis}
      }
  
      self.__set_labels_and_color_norm(label_file)
  
      # The AnalysisGui is non-blocking
      # start with an analysis GUI containing all top scale landmarks
      is_top_level = True
      self.im_size = (0, 0)
      if self.model_gui.demo_type in [
          DemoType.LABELLED_DEMO,
          DemoType.HYPERSPECTRAL_DEMO,
      ]:
          self.im_size = (
              self.model_gui.im_size_x,
              self.model_gui.im_size_y,
          )
      top_analysis_gui = AnalysisController(
          self.model_gui.demo_type,
          self.add_analysis,
          self.remove_analysis,
          self.analysis_stopped,
      )
  
      if self.model_gui.demo_type is DemoType.POINT_DEMO:
          top_analysis_gui.set_metapath(self.labelcolor_filename)
  
      top_analysis_gui.start_embedding(
          self.data,
          top_analysis,
          self.model_gui.iterations,
          self.im_size,
          False,
          self.labels,
          self.color_norm,
      )
      print(f"Top analysis has {top_analysis.number_of_points} points")
      self.analysis_guis[top_analysis.id] = top_analysis_gui
      self.queue_new_analysis(top_analysis)
      # Queue is used to pass changes in the analyses to the ModelGui
      # The ModelGui is blocking
      self.model_gui.set_analysis_model(self.analysis_model)
  
imports: from pathlib import Path
  import queue
  import sys
  from matplotlib import colors
  import nptsne
  from nptsne import hsne_analysis
  import numpy
  from PyQt5.QtWidgets import QApplication
  from AnalysisController import AnalysisController
  from ModelGui import ModelGui, AnalysisEvent, DemoType
label_desc: Use image node_id 12 for calling the ModelController obj's underlying member method code with example usage: obj.start_hsne(data, data_file, hsne_file, label_file) without return types