class_docstr: The plate data is the data store for the image files
  
  plate_well_site is a 3-level dictionary where the first level
  dictionary has keys that are plate names and whose values are
  dictionaries of wells.
  The second level has keys that are well names and values that are
  dictionaries of sites. The third level has site name as key and
  a list of files at that site as values.
class_docstr_tok: ["The","plate","data","is","the","data","store","for","the","image","files","plate_well_site","is","a","3-level","dictionary","where","the","first","level","dictionary","has","keys","that","are","plate","names","and","whose","values","are","dictionaries","of","wells",".","The","second","level","has","keys","that","are","well","names","and","values","that","are","dictionaries","of","sites",".","The","third","level","has","site","name","as","key","and","a","list","of","files","at","that","site","as","values","."]
docstr: Add files to the plate model
  
  filenames - a sequence of image file names
  platenames - a sequence of plate names, one per file
  wellnames - a sequence of well names, one per file
  sites - a sequence of site indexes, one per file
  plane_indexes - if present, gives the index of the planar image within
                  the file.
  channel_names - if present, the name of the associated channel for
  the planar image
  z_indexes - if present, the Z index of the plane
  t_indexes - if present, the time index of the plane
code: def add_files(
      self,
      filenames,
      platenames,
      wellnames,
      sites,
      plane_indexes=None,
      channel_names=None,
      z_indexes=None,
      t_indexes=None,
  ):
      """Add files to the plate model
  
      filenames - a sequence of image file names
      platenames - a sequence of plate names, one per file
      wellnames - a sequence of well names, one per file
      sites - a sequence of site indexes, one per file
      plane_indexes - if present, gives the index of the planar image within
                      the file.
      channel_names - if present, the name of the associated channel for
      the planar image
      z_indexes - if present, the Z index of the plane
      t_indexes - if present, the time index of the plane
      """
      self.has_channel_names |= channel_names is not None
      self.has_z_indexes |= z_indexes is not None
      self.has_t_indexes |= t_indexes is not None
      for i, (filename, platename, wellname, site) in enumerate(
          zip(filenames, platenames, wellnames, sites)
      ):
          if platename not in self.plate_well_site:
              self.plate_well_site[platename] = {}
          pd = self.plate_well_site[platename]
          if wellname not in pd:
              pd[wellname] = {}
          wd = pd[wellname]
          if site not in wd:
              wd[site] = []
          sd = wd[site]
          fd = {self.D_FILENAME: filename}
          if plane_indexes is not None:
              fd[self.D_PLANE_INDEX] = plane_indexes[i]
          if channel_names is not None:
              fd[self.D_CHANNEL] = channel_names[i]
          if z_indexes is not None:
              fd[self.D_Z] = z_indexes[i]
          if t_indexes is not None:
              fd[self.D_T] = t_indexes[i]
          sd.append(fd)
      self.on_update()
  
imports: import multiprocessing
  import threading
  import traceback
  import matplotlib
  import matplotlib.backends.backend_wx
  import matplotlib.backends.backend_wxagg
  import matplotlib.cm
  import matplotlib.figure
  import numpy
  import wx
  import wx.grid
  import scyjava
label_desc: Use image node_id 4 for calling the PlateData obj's underlying member method code with example usage: obj.add_files(filenames, platenames, wellnames, sites, plane_indexes, channel_names, z_indexes, t_indexes) without return types