Class ExperimentExplorer

java.lang.Object
net.sf.basedb.clients.web.ExperimentExplorer

public class ExperimentExplorer
extends Object
A class for storing settings and doing work related to the experiment explorer tool in the web interface. The JSP pages that uses this class are located in the www/views/experiments/explorer directory and it's subdirectory.

This class is used two things:

  • Storing the settings
  • Creating the queries that retrieves the data according to the settings

Most of the settings are stored in regular ItemContext: objects. This means that they will be saved to the database when the user logs out and loaded again the next time they are needed. Each experiment explorer uses two ItemContext objects. One for storing the settings for the reporter search page and one for the view page. The reporter search settings are stored in the context SessionControl.getCurrentContext(Item.REPORTER, "explorer.id") and the view page settings are stored in SessionControl.getCurrentContext(Item.SPOTDATA, "explorer.id") where "id" is replaced by the bioassayset's id.

Version:
2.0
Author:
nicklas
Last modified
$Date: 2021-06-03 13:47:50 +0200 (Thu, 03 Jun 2021) $
  • Field Details

    • SPOT_ALL

      public static final int SPOT_ALL
      Special value to use in the setPositionIndex(int) method to show all positions.
      See Also:
      Constant Field Values
    • SPOT_AVG

      public static final int SPOT_AVG
      Special value to use in the setPositionIndex(int) method to calculate the average for each bioassay.
      See Also:
      Constant Field Values
    • COLORS

      public static final String[] COLORS
      Predefined colors for annotation groups
    • defaultReporterContext

      private static final ItemContext defaultReporterContext
      The default context for the reporter search page.
    • defaultSpotContexts

      private static final Map<RawDataType,​ItemContext> defaultSpotContexts
      Stores default context for the spot data list on the view page. Different defaults for each raw data type since they can have different number of channels.
    • bioAssaySet

      private final BioAssaySet bioAssaySet
      The bioassay set we are exploring.
    • experiment

      private final Experiment experiment
    • snapshotManager

      private SnapshotManager snapshotManager
      The snapshot manager that loads annotation values.
    • bioAssays

      private final Map<Short,​Integer> bioAssays
      Maps a bioassays cube column number to it's id for fast loading by the getBioAssay(DbControl, short) method.
    • posCache

      private int[] posCache
    • cache

      The cache of reporter ids matching the current reporter filter.
    • reporterIndex

      private int reporterIndex
      The index of the current reporter on the view page.
      See Also:
      getReporterIndex()
    • positionIndex

      private int positionIndex
      The index of the curren position on the view page.
      See Also:
      getPositionIndex()
    • matchingReporters

      private int matchingReporters
      Number of reporter that match the reporter search.
    • annotationTypeIds

      private Set<Integer> annotationTypeIds
      The currently selected annotation types on the view page.
    • summaryCache

      Caches annotation summaries.
  • Constructor Details

    • ExperimentExplorer

      private ExperimentExplorer​(BioAssaySet bioAssaySet)
      Create a new experiment explorer.
  • Method Details

    • getExplorer

      public static ExperimentExplorer getExplorer​(BioAssaySet bioAssaySet)
      Get the existing experiment explorer for a bioassayset or create a new one if none exist yet. The returned object is cached in the SessionControl:s session settings.
      Parameters:
      bioAssaySet - The bioassay set to get an experiment explorer for
      Returns:
      An ExperimentExplorer object
    • getBioAssaySet

      public BioAssaySet getBioAssaySet​(DbControl dc)
      Get the bioassay set that is currently beeing explored.
      Parameters:
      dc - The DbControl used for access the database
      Returns:
      The BioAssaySet object
      See Also:
      BioAssaySet.getById(DbControl, int)
    • getExperiment

      public Experiment getExperiment​(DbControl dc)
      Get the experiment that is currently beeing explored.
      Parameters:
      dc - The DbControl used for access the database
      Returns:
      The Experiment object
    • getSnapshotManager

      public SnapshotManager getSnapshotManager()
      Get the snapshot manager that is used to load annotation values.
      Since:
      2.14
    • getNumBioAssays

      public int getNumBioAssays()
      Get the number of bioassays in the bioassayset.
    • getBioAssay

      public BioAssay getBioAssay​(DbControl dc, short columnNo)
      Get the bioassay with the specified column number in the data cube. This method is useful since spot queries (see getSpotQuery(DbControl, int, int, List)) can only return the column number, but we usually want to display the name, etc.
      Parameters:
      dc - The DbControl object used to get the bioassay
      columnNo - The colum number
      Returns:
      The bioassay with the specified column number or null if no bioassay is found
    • getCacheSize

      public int getCacheSize()
      The number of reporter id'd to cache. For performance reasons the id's of the reporters matching the reporter search are cached. This means we can step forwards and backwards more quickly on the view page since we don't have to execute the reporter search each time. This method should return the same value as getMatchingReporters(DbControl) unless the cache hasn't been initialized.
      Returns:
      The size of the cache, or 0 if the cache has not been initialized
    • getNumReporters

      public int getNumReporters()
      Get the total number of unique reporters found in the bioassayset.
      See Also:
      BioAssaySet.getNumReporters()
    • getNumSpots

      public int getNumSpots()
      Get the total number of spots in the bioassayset.
      See Also:
      BioAssaySet.getNumSpots()
    • getSubContext

      public String getSubContext()
      Get the subcontext name used for the ItemContext objects related to this explorer. The name is created like this: explorer.id where id is replaced with the id of the bioassayset we are exploring.
      Returns:
      The subcontext name
    • getDefaultSpotContext

      public ItemContext getDefaultSpotContext()
      Get the default spot context that is used to initialise the actual context.
      Returns:
      An ItemContext object
    • getDefaultReporterContext

      public ItemContext getDefaultReporterContext()
      Get the default reporter context that is used to initialise the actual context.
      Returns:
      An ItemContext object
    • getAndSetSpotContext

      public ItemContext getAndSetSpotContext​(SessionControl sc, PageContext pageContext)
      Get and update the current settings for the spot context. The spot context is used on the view page for the list with spot data.
      Parameters:
      sc - The SessionControl of the logged in user
      pageContext - The PageContext containing the updated settings, or null to not update the settings
      Returns:
      An ItemContext object
      See Also:
      Base.getAndSetCurrentContext(SessionControl, Item, PageContext, ItemContext)
    • getAndSetReporterContext

      public ItemContext getAndSetReporterContext​(SessionControl sc, PageContext pageContext)
      Get and update the current settings for the reporter context. The reporter context is used on the reporter search page.
      Parameters:
      sc - The SessionControl of the logged in user
      pageContext - The PageContext containing the updated settings, or null to not update the settings
      Returns:
      An ItemContext object
      See Also:
      Base.getAndSetCurrentContext(SessionControl, Item, PageContext, ItemContext)
    • getAnnotationTypeIds

      public Set<Integer> getAnnotationTypeIds()
      Get the selected annotation types.
      Returns:
      A set with the id's of the selected annotation types
      Since:
      2.14
    • setAnnotationTypeIds

      public void setAnnotationTypeIds​(Collection<Integer> ids)
      Update the selected annotation types.
      Parameters:
      ids - A collection containing the id's of all annotation types that should currently be selected, all other annotation types are automatically deselected
      Since:
      2.14
    • getAnnotationTypes

      public List<AnnotationType> getAnnotationTypes​(DbControl dc, boolean includeBioAssayAnnotations)
      Get the annotation types that are of interest in this experiment. Ie. the experimental factors of the experiment the bioassayset we are exploring belongs to. Optionally, you can also get annotations for bioassays.
      Parameters:
      dc - The DbControl for database access
      includeBioAssayAnnotations - If bioassay annotation should be included even if they are not experimental factors
      Returns:
      A list of annotation types, null may be returned if no annotation types exists
      See Also:
      Experiment.getExperimentalFactors()
    • getAnnotationSummary

      public ExperimentExplorer.AnnotationSummary getAnnotationSummary​(DbControl dc, AnnotationType annotationType)
      Get an AnnotationSummary object which can be used to calculate means and other values for each annotation group. When the annotation summary object is create each bioassay is placed in one annotation group based on which annotatations it have. Each annotation group is unique and is the only one with the same combination of annotation values. More than one bioassay may be placed in the same group if they are annotated with the same values.
      Parameters:
      dc - The DbControl for database access
      annotationType - The annotation type, mustn't be null
      Returns:
      An AnnotationSummary object
      See Also:
      ExperimentExplorer.AnnotationGroup.getAnnotationValues()
    • getMatchingReporters

      public int getMatchingReporters​(DbControl dc)
      Get the number of reporters matching the current reporter filter.
      Parameters:
      dc - The DbControl for database access
      Returns:
      an int of matching reporters
    • getReporterIndex

      public int getReporterIndex()
      Get the index of the current reporter. It should be a value between 0 and getMatchingReporters(DbControl)-1.
      See Also:
      getReporter(DbControl, int)
    • setReporterIndex

      public void setReporterIndex​(int reporterIndex)
      Set the index of the currently viewed reporter. If the index is below zero or greater than or equal to getMatchingReporters(DbControl) it is set to the nearest index.
      Parameters:
      reporterIndex - The new index
      See Also:
      getReporter(DbControl, int)
    • getReporter

      public ReporterData getReporter​(DbControl dc, int index)
      Get the reporter for the specified index. The index should be between 0 and the number of matching reporters minus 1. The returned reporter information is taken from the cloned table if that is present in the current experiment.
      Parameters:
      dc - The DbControl to use for database access
      index - The index
      Returns:
      The reporter or null if no reporter is found at the specified index
      See Also:
      getMatchingReporters(DbControl)
    • getReporterId

      public int getReporterId​(int index)
      Get the reporter id for the specified index. The index should be between 0 and the number of matching reporters minus 1. This method assumed that the reporter/position cache has already been initialized.
      Parameters:
      index - The index
      Returns:
      The internal id of the reporter, or 0 if the cache is not initialized or if the index is outside the allowed range
      Since:
      3.0
      See Also:
      getMatchingReporters(DbControl)
    • getNumPositions

      public int getNumPositions​(DbControl dc, int index)
      Get the number of unique positions the reporter of the specifed index is present in among all the bioassays in the bioassay set. The index should be between 0 and the number of matching reporters minus 1.
      Parameters:
      dc - The DbControl to use for database access
      index - The reporter index
      Returns:
      The number of positions, or 0 if the index is outside the valid range
      Since:
      2.11
      See Also:
      getReporter(DbControl, int), getMatchingReporters(DbControl)
    • getPositionIndex

      public int getPositionIndex()
      Get the index of the current position. It should be a value between 0 and getNumPositions(DbControl, int)-1, or one of the SPOT_ALL or SPOT_AVG special values (negative).
      Returns:
      The current index
      See Also:
      getPosition(DbControl, int, int)
    • setPositionIndex

      public void setPositionIndex​(int positionIndex)
      Set the index of the curren position.
      Parameters:
      positionIndex - The new index
      See Also:
      getPositionIndex(), getPosition(DbControl, int, int)
    • getPosition

      public int getPosition​(DbControl dc, int reporterIndex, int positionIndex)
      Get the position number of the position specified by the given reporter and position index. For a given reporter the positions are sorted in ascending order. The reporter index should be a value between 0 and the number of matching reporter minus 1. The position index should be a value between 0 and the number of positions for the given reporter minus 1.
      Parameters:
      reporterIndex - The reporter index
      positionIndex - The position index
      Returns:
      The position number or -1 if no position can be found with the given indexes
      Since:
      2.11
      See Also:
      getMatchingReporters(DbControl), getNumPositions(DbControl, int)
    • getReporterQuery

      public DynamicReporterQuery getReporterQuery​(DbControl dc, List<String> selectionList)
      Get a query returning the reporter data used by the reporter search page. Note that the query is DynamicReporterQuery and not a DataQuery. This means that we don't get ReporterData objects as a result and that we must specify the properties to select (see ItemContext.configureQuery(DbControl, SqlQuery, List)).

      The reporter id is always included as the first selected property so it doesn't have to be in the selection list.

      NOTE! The query is restricted using information in the reporter/position cache to only return the exactly the reporter information that is displayed on the current page. Thus, some things do not work in the same way as most other queries used when listing items.

      Parameters:
      dc - The DbControl for database access
      selectionList - The properties that the query should select
      Returns:
      A query
      See Also:
      ItemContext.configureQuery(DbControl, SqlQuery, List)
    • getSpotQuery

      public DynamicSpotQuery getSpotQuery​(DbControl dc, int reporterIndex, int positionIndex, List<TableColumn> selectionList)
      Get a query returning spot data for a given reporter and position. This query is used by the view page to list the spot data for each bioassay.

      The column number is always included as the first selected property. If the SPOT_AVG is specified for positionIndex a count of the number of positions is included as the second selected property. Otherwise, the position number is included as the second selected property.

      Then, all channel intensities are selected.

      See ItemContext.getDynamicExpression(DbControl, SqlQuery, String) for more information about how to specify additional selection properties.

      Parameters:
      dc - The DbControl for database access
      reporterIndex - The index of the reporter
      positionIndex - The index of the position, or one the special values SPOT_ALL or SPOT_AVG
      selectionList - The data that the query should select
      Returns:
      A query
      Since:
      2.11
    • initReporterCache

      private void initReporterCache​(DbControl dc)