Open Don-Isdale opened 5 years ago
the above comment describes block.inFilter['feature']; probably computed function is better. implementation : computed function, uses the enabled filters' parameters, returns datasets and blocks; display is the union of those datasets and blocks, i.e. if dataset is in result, show it and its child blocks if block is in list, show that block and its parent. some filters :
to get some discussion going around how this would work, I've prototyped a possible GUI, in branch feature/explorer-filters. Here are some screen-shots :
from feedback :
rather than manually selecting chr and sub-genome, i'd have that as a "filter on already loaded" filter based on what's loaded so if you have a dataset with scope 7A loaded, filter for only those that's why scope is important, because in GMs, there are blocks with names like 7A2, but scope 7A at least should be you could have "filter by scope" and list all the scopes seen but with some genomes, the chromosome is just in as 1, 2, 3 feature name filter is the most important now and ability to populate that list from the brush as well which then replaces the current feature search function ... maybe a keyword as well which can be in metadata eg: 90k
Changes implemented in prototype GUI : change Chromosome to scope; add keyword input to search metadata; add button to copy selection to Feature Names to search for. Move Filter by sub-Genome into the group of filters which can be added via +, and are not initially displayed.
The scope list would be derived from the datasets-available list which is loaded when connecting to the BE (because 1A makes sense for wheat, but not rice for example).
The "filter on already loaded" shows all blocks which have same scope as already loaded.. or several if more than one eg: if you load 7A and 7D physical it shows all genomes with 7A, 7D, and any genetic maps with 7A or 7D scope
filtering by chromosome and subgenome can be presented as a 2d matrix of checkboxes e.g. sub-genome as columns, and chromosomes as columns Should enable user to toggle a whole row or column, or individual cells. This would be the top-most filter, after the datasource selection.
Thad would be neat, but if at all possible I would opt for a solution which does not explicitly rely on sub-genome as a defined property - this is quite specific to our genomes of interest so not broadly applicable.
I wonder if simple free text based filters would not be best.
see also #67
To guide new users and improve work-flow when starting : wizard in middle of screen when start : select species, parent, scope, map type,
Next tasks for data explorer
Toggle between simple and detailed filter-group; down arrow toggles to up arrow.
block filtering by scope
filter to current scopes displayed in graph : button in filter group (detail) sets pattern to space-separated list of scopes from currently displayed maps, and sets checkboxes : scope + filter.
When filtering by scope, ie. User clicks scope checkbox, name and meta checkboxes should be cleared because scope is so short it will match too broadly in name and meta.
this also avoids the task of combining results from data set grouping and block grouping (which seems fairly simple anyway - traverse the hash and recursively merge values).
Block filtering and grouping traverse the blocks and map them into type, parent and scope.
(done in 8f47532 : Change tab title Parent/Scope -> Genomes, GMs -> Genetic Maps); use dataset meta.type when available.
use dataset meta.type for tab headings. at the top level of the tree, group all datasets by type. Each type is presented in a separate tab. use the current algorithm to assign de facto types to datasets which don't have type.
Also when filtering by scope, expand all.
May need to use compute action for levelComponent of value.
ability to delete a filter-grouping; perhaps connect the 2nd, and subsequent FGs
retain the scroll position when swapping from Explorer tab to another tab (e.g. View) and back again; at the moment it auto-scrolls up to the top Some additional info for this in #132
the 2nd & 3rd tabs show multiple scopes on a single row; this can also be done in the 1st tab (formerly called "Parent/Scope"), - when the scopes are not expanded they can be shown multiple on a single row.
Set block.inFilter['feature'] to true if block is in blocksOfFeatures, false otherwise. Other filters can do the same, adding a named field in .inFilter[] of each block. filteredBlocks() can select those blocks which have only true values in their .inFilter[] Main requirement would likely be for intersection (logical AND) of the filters. filteredDatasets() would be the parents of filteredBlocks(). May also have filters which apply to datasets ... for that can add a .inFilter[] to dataset also; then filteredBlocks() will exclude a block if its parent is filtered out. and filteredDatasets() will include a dataset if it has children which are filtered in. The data explorer would display:none for datasets & blocks which are not in filteredDatasets() and filteredBlocks() respectively.