class_docstr: The containing dialog and controller for the embedding
  and the image viewer that together make up an analysis
  (i.e. a user selection at an hSNE scale). It also
  iterates over the embedding once the analysis is created
  and this is dynamically displayed in the embedding gui.
docstr: analysis_selection is a list of indexes at this analysis scale
  If make_new_analysis is true start a new analysis controller
docstr_tok: ["analysis_selection","is","a","list","of","indexes","at","this","analysis","scale","If","make_new_analysis","is","true","start","a","new","analysis","controller"]
code: def on_selection(self, analysis_selection, make_new_analysis):
      """analysis_selection is a list of indexes at this analysis scale
      If make_new_analysis is true start a new analysis controller"""
      landmark_indexes = self.landmark_index_from_selection(
          analysis_selection
      )
      if self.demo_type == DemoType.HYPERSPECTRAL_DEMO:
          # Pass area influenced to the hyperspectral viewer
          self.data_gui.set_static_mask(
              self.analysis.get_area_of_influence(landmark_indexes)
          )
  
      if make_new_analysis:
          self.make_new_analysis(self.analysis, analysis_selection)
      else:
          if self.demo_type == DemoType.LABELLED_DEMO:
              # Pass data indexes to labelled viewer
              self.data_gui.set_image_indexes(
                  self.data_index_from_selection(analysis_selection)
              )
  
imports: import time
  import numpy
  from PyQt5 import QtWidgets
  from EmbeddingGui import EmbeddingViewer
  from ModelGui import DemoType
  from CompositeImageViewer import CompositeImageViewer
  from HyperspectralImageViewer import HyperspectralImageViewer
  from MetaDataViewer import MetaDataViewer
label_desc: Use image node_id 8 for calling the AnalysisController obj's underlying member method code with example usage: obj.on_selection(analysis_selection, make_new_analysis) without return types