text: #! /usr/bin/env python
  """Prepares plots for WHEEL tab
  
      Module prepares plots for mnemonics below. Combines plots in a grid and
      returns tab object.
  
      Plot 1 - Filterwheel
      INRSI_FWA_MECH_POS
      INRSI_C_FWA_POSITION
  
      Plot 2 - Gratingwheel X
      INRSI_GWA_MECH_POS
      INRSI_C_GWA_X_POSITION
  
      Plot 3 - Gratingwheel Y
      INRSI_GWA_MECH_POS
      INRSI_C_GWA_Y_POSITION
  
  Authors
  -------
      - Daniel Kühbacher
  
  Use
  ---
      The functions within this module are intended to be imported and
      used by ``dashboard.py``, e.g.:
  
      ::
          from .plots.wheel_ratio_tab import wheel_plots
          tab = wheel_plots(conn, start, end)
  
  Dependencies
  ------------
      User must provide database "miri_database.db"
  
  """
  
  import jwql.instrument_monitors.nirspec_monitors.data_trending.plots.plot_functions as pf
  import jwql.instrument_monitors.nirspec_monitors.data_trending.utils.mnemonics as mn
  from bokeh.plotting import figure
  from bokeh.models.widgets import Panel, Div
  from bokeh.layouts import column
  
  
  def fw(conn, start, end):
      '''Create specific plot and return plot object
      Parameters
      ----------
      conn : DBobject
          Connection object that represents database
      start : time
          Startlimit for x-axis and query (typ. datetime.now()- 4Months)
      end : time
          Endlimit for x-axis and query (typ. datetime.now())
      Return
      ------
      p : Plot object
          Bokeh plot
      '''
  
      # create a new plot with a title and axis labels
      p = figure(tools="pan,wheel_zoom,box_zoom,reset,save",
                 toolbar_location="above",
                 plot_width=1120,
                 plot_height=500,
                 y_range=[-3, 3],
                 x_axis_type='datetime',
                 x_axis_label='Date',
                 y_axis_label='mV (normalized)')
  
      p.grid.visible = True
      p.title.text = "Filterwheel"
      p.title.align = "left"
      pf.add_basic_layout(p)
  
      pf.add_to_plot_normalized(p, "F110W", "INRSI_C_FWA_POSITION_F110W", start, end, conn, mn.fw_nominals['F110W'], color="green")
      pf.add_to_plot_normalized(p, "F100LP", "INRSI_C_FWA_POSITION_F100LP", start, end, conn, mn.fw_nominals['F100LP'], color="red")
      pf.add_to_plot_normalized(p, "F140X", "INRSI_C_FWA_POSITION_F140X", start, end, conn, mn.fw_nominals['F140X'], color="blue")
      pf.add_to_plot_normalized(p, "OPAQUE", "INRSI_C_FWA_POSITION_OPAQUE", start, end, conn, mn.fw_nominals['OPAQUE'], color="orange")
      pf.add_to_plot_normalized(p, "F290LP", "INRSI_C_FWA_POSITION_F290LP", start, end, conn, mn.fw_nominals['F290LP'], color="purple")
      pf.add_to_plot_normalized(p, "F170LP", "INRSI_C_FWA_POSITION_F170LP", start, end, conn, mn.fw_nominals['F170LP'], color="brown")
      pf.add_to_plot_normalized(p, "CLEAR", "INRSI_C_FWA_POSITION_CLEAR", start, end, conn, mn.fw_nominals['CLEAR'], color="chocolate")
      pf.add_to_plot_normalized(p, "F070LP", "INRSI_C_FWA_POSITION_F070LP", start, end, conn, mn.fw_nominals['F070LP'], color="darkmagenta")
  
      p.legend.location = "bottom_right"
      p.legend.click_policy = "hide"
      p.legend.orientation = 'horizontal'
      return p
  
  
  def gwx(conn, start, end):
      '''Create specific plot and return plot object
      Parameters
      ----------
      conn : DBobject
          Connection object that represents database
      start : time
          Startlimit for x-axis and query (typ. datetime.now()- 4Months)
      end : time
          Endlimit for x-axis and query (typ. datetime.now())
      Return
      ------
      p : Plot object
          Bokeh plot
      '''
  
      # create a new plot with a title and axis labels
      p = figure(tools="pan,wheel_zoom,box_zoom,reset,save",
                 toolbar_location="above",
                 plot_width=1120,
                 plot_height=500,
                 y_range=[-4, 4],
                 x_axis_type='datetime',
                 x_axis_label='Date',
                 y_axis_label='mV (normalized)')
  
      p.grid.visible = True
      p.title.text = "Gratingwheel X"
      p.title.align = "left"
      pf.add_basic_layout(p)
  
      pf.add_to_plot_normalized(p, "PRISM", "INRSI_C_GWA_X_POSITION_PRISM", start, end, conn, mn.gwx_nominals['PRISM'], color="green")
      pf.add_to_plot_normalized(p, "MIRROR", "INRSI_C_GWA_X_POSITION_MIRROR", start, end, conn, mn.gwx_nominals['MIRROR'], color="blue")
      pf.add_to_plot_normalized(p, "G140H", "INRSI_C_GWA_X_POSITION_G140H", start, end, conn, mn.gwx_nominals['G140H'], color="red")
      pf.add_to_plot_normalized(p, "G235H", "INRSI_C_GWA_X_POSITION_G235H", start, end, conn, mn.gwx_nominals['G235H'], color="purple")
      pf.add_to_plot_normalized(p, "G395H", "INRSI_C_GWA_X_POSITION_G395H", start, end, conn, mn.gwx_nominals['G395H'], color="orange")
      pf.add_to_plot_normalized(p, "G140M", "INRSI_C_GWA_X_POSITION_G140M", start, end, conn, mn.gwx_nominals['G140M'], color="brown")
      pf.add_to_plot_normalized(p, "G235M", "INRSI_C_GWA_X_POSITION_G235M", start, end, conn, mn.gwx_nominals['G235M'], color="darkmagenta")
      pf.add_to_plot_normalized(p, "G395M", "INRSI_C_GWA_X_POSITION_G395M", start, end, conn, mn.gwx_nominals['G395M'], color="darkcyan")
  
      p.legend.location = "bottom_right"
      p.legend.click_policy = "hide"
      p.legend.orientation = 'horizontal'
  
      return p
  
  
  def gwy(conn, start, end):
      '''Create specific plot and return plot object
      Parameters
      ----------
      conn : DBobject
          Connection object that represents database
      start : time
          Startlimit for x-axis and query (typ. datetime.now()- 4Months)
      end : time
          Endlimit for x-axis and query (typ. datetime.now())
      Return
      ------
      p : Plot object
          Bokeh plot
      '''
  
      # create a new plot with a title and axis labels
      p = figure(tools="pan,wheel_zoom,box_zoom,reset,save",
                 toolbar_location="above",
                 plot_width=1120,
                 plot_height=500,
                 y_range=[-3, 3],
                 x_axis_type='datetime',
                 x_axis_label='Date',
                 y_axis_label='mV (normalized)')
  
      p.grid.visible = True
      p.title.text = "Gratingwheel Y"
      p.title.align = "left"
      pf.add_basic_layout(p)
  
      pf.add_to_plot_normalized(p, "PRISM", "INRSI_C_GWA_Y_POSITION_PRISM", start, end, conn, mn.gwy_nominals['PRISM'], color="green")
      pf.add_to_plot_normalized(p, "MIRROR", "INRSI_C_GWA_Y_POSITION_MIRROR", start, end, conn, mn.gwy_nominals['MIRROR'], color="blue")
      pf.add_to_plot_normalized(p, "G140H", "INRSI_C_GWA_Y_POSITION_G140H", start, end, conn, mn.gwy_nominals['G140H'], color="red")
      pf.add_to_plot_normalized(p, "G235H", "INRSI_C_GWA_Y_POSITION_G235H", start, end, conn, mn.gwy_nominals['G235H'], color="purple")
      pf.add_to_plot_normalized(p, "G395H", "INRSI_C_GWA_Y_POSITION_G395H", start, end, conn, mn.gwy_nominals['G395H'], color="orange")
      pf.add_to_plot_normalized(p, "G140M", "INRSI_C_GWA_Y_POSITION_G140M", start, end, conn, mn.gwy_nominals['G140M'], color="brown")
      pf.add_to_plot_normalized(p, "G235M", "INRSI_C_GWA_Y_POSITION_G235M", start, end, conn, mn.gwy_nominals['G235M'], color="darkmagenta")
      pf.add_to_plot_normalized(p, "G395M", "INRSI_C_GWA_Y_POSITION_G395M", start, end, conn, mn.gwy_nominals['G395M'], color="darkcyan")
  
      p.legend.location = "bottom_right"
      p.legend.click_policy = "hide"
      p.legend.orientation = 'horizontal'
      return p
  
  
  def wheel_pos(conn, start, end):
      '''Combine plots to a tab
      Parameters
      ----------
      conn : DBobject
          Connection object that represents database
      start : time
          Startlimit for x-axis and query (typ. datetime.now()- 4Months)
      end : time
          Endlimit for x-axis and query (typ. datetime.now())
      Return
      ------
      p : tab object
          used by dashboard.py to set up dashboard
      '''
      descr = Div(text=
      """
      <style>
      table, th, td {
        border: 1px solid black;
        background-color: #efefef;
        border-collapse: collapse;
        padding: 5px
      }
      table {
        border-spacing: 15px;
      }
      </style>
  
      <body>
      <table style="width:100%">
        <tr>
          <th><h6>Plotname</h6></th>
          <th><h6>Mnemonic</h6></th>
          <th><h6>Description</h6></th>
        </tr>
  
        <tr>
          <td>Filterwheel</td>
          <td>INRSI_FWA_MECH_POS<br>
              INRSI_C_FWA_POSITION</td>
          <td>Position Sensor Value<br>
              Current Position</td>
        </tr>
  
        <tr>
          <td>Gratingwheel X</td>
          <td>INRSI_GWA_MECH_POS<br>
              INRSI_C_GWA_X_POSITION</td>
          <td>Position X Sensor Value<br>
              Current Position</td>
        </tr>
  
        <tr>
          <td>Gratingwheel Y</td>
          <td>INRSI_GWA_MECH_POS<br>
              INRSI_C_GWA_Y_POSITION</td>
          <td>Position Y Sensor Value<br>
              Current Position</td>
        </tr>
  
      </table>
      </body>
      """, width=1100)
  
      plot1 = fw(conn, start, end)
      plot2 = gwx(conn, start, end)
      plot3 = gwy(conn,  start, end)
  
      layout = column(descr, plot1, plot2, plot3)
      tab = Panel(child=layout, title="FILTER/GRATINGWHEEL")
  
      return tab
  