class_docstr: The PlateViewer class lets the user view the files associated with plates
  
  The idea here is that the PlateViewer is given a list of image files
  with plate, well and site metadata. The plate viewer organizes the
  files and lets the user browse individual plates.
class_docstr_tok: ["The","PlateViewer","class","lets","the","user","view","the","files","associated","with","plates","The","idea","here","is","that","the","PlateViewer","is","given","a","list","of","image","files","with","plate",",","well","and","site","metadata",".","The","plate","viewer","organizes","the","files","and","lets","the","user","browse","individual","plates","."]
docstr: Return the row and column of the well or None if not hit
  
  x, y - coordinates of pixel on plate panel surface
code: def plate_hit_test(self, x, y):
      """Return the row and column of the well or None if not hit
  
      x, y - coordinates of pixel on plate panel surface
      """
      side = self.get_well_side()
      col = (
          float(x) - self.get_border_width() - float(side) / 2
      ) / side
      row = (
          float(y) - self.get_border_height() - float(side) / 2
      ) / side
      irow, icol = [int(v + 0.5) for v in (row, col)]
      d = numpy.sqrt((row - irow) ** 2 + (col - icol) ** 2) * side
      if d > self.get_radius():
          return None
      if (
          irow < 0
          or irow >= self.data.plate_layout[0]
          or icol < 0
          or icol >= self.data.plate_layout[1]
      ):
          return None
      return irow, icol
  
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 18 for calling the PlateViewer obj's underlying member method code with example usage: obj.plate_hit_test(x, y) and returns: irow,  icol, None, None