= MatrixModule = Update 7 jan 2011: == Joris' Matrix == HIGHLIGHT === Implementation === ADD HERE === GUI === ADD HERE === Regression test === ADD HERE === Demo === ADD HERE == Erik's Matrix == HIGHLIGHT === Implementation === ADD HERE === GUI === ADD HERE === Regression test === ADD HERE === Demo === ADD HERE == Joeri's Matrix == The clever thing is the abstract class. This takes care of most matrix abilities, because it runs on a set of basic core functions that have to be implemented by each specific backend. (ie. retrieving elements) === Implementation === Interface: http://www.molgenis.org/svn/gcc/trunk/handwritten/java/matrix/DataMatrixInstance.java Abstract: http://www.molgenis.org/svn/gcc/trunk/handwritten/java/matrix/AbstractDataMatrixInstance.java Backend implementations: http://www.molgenis.org/svn/gcc/trunk/handwritten/java/matrix/implementations/ TODO: Queries on values, matrix operations such as join/union/intersect etc. === GUI === Several plugins that make use of the matrix: http://www.molgenis.org/svn/gcc/trunk/handwritten/java/plugins/matrix/ An important intermediate is the Browser, this enables paging through a matrix. Code at: http://www.molgenis.org/svn/gcc/trunk/handwritten/java/plugins/matrix/manager/Browser.java TODO: Add advanced actions such as filters, queries, operations. === Regression test === A JUnit test for all 4 implementations. Created matrices filled with random data. Makes all kinds of combinations of annotations, datatypes, dimension sizes, etc. Then tests every possible way to extract data from the matrix. TODO: proper tests for queries. Test main class at: http://www.molgenis.org/svn/gcc/trunk/handwritten/java/matrix/test/implementations/RunTestMatrix.java === Demo === See the plugins in action at: http://vm7.target.rug.nl:8080/xqtldemo/molgenis.do?__target=Investigationmenu&select=Data == Older stuff == This is the page describing everything surrounding the Matrix module to be developed. This includes: * !MatrixInterface - backend to deal with matrix-like data with implementations for database, file, binary file, plink, and so on. What methods should this interface at least provide? * Matrix !LoadDataFromPhenoModel(DB) * !MatrixViewer - MOLGENIS user interface plugin to interact with matrices in a useful manner (edit, filter, extract, linkout, annotate, etc) * List !GetColumnHeaders() * List !GetRowHeaders(!StartRowNr = 0, !EndRowNr = null) * !GetValue(Column, Row, Version) * !GetValueTimestampStart(Column, Row, Version) * !GetValueTimestampEnd(Column, Row, Version) * !GetCurrentValueVersion(Column, Row) * !SetValue(Column, Row) * !SetValueTimestampStart(Column, Row) * !SetValueTimestampEnd(Column, Row) * !SortOnColumn(!ColumnNr, !StartRowNr = 0, !EndRowNr = null) * List !RestrictOnEventtype(List) * List !RestrictOnFeature(!SearchString) * Tuple Search(!SearchString) * !MatrixDisplay - Extensions upon the !MatrixViewer that allow users to make sense of the data like heatmap, pointcloud, network At the backend, we want a class that loads data from a Pheno OM style data model into a Matrix object. We then want to be able to interact with this Matrix, getting column headers, row headers, and cell values with different versions, each with its own timestamp. In addition, we want to be able to: * Sort on columns * Restrict the returned row set * Restrict the columns (Features), based on * A search term * One or more Eventtypes of which the Features have to be part. If a Feature is part of more than one Eventtype, the corresponding column should be returned more than once, one time for each Eventtype (true?). * Search the Matrix for a specific search string. Old design * MatrixInterface: Interface class with function definitions and all documentation. * Matrix: Abstract class with most functions implemented. * xxxMatrix: Regular class which is a flavour of Matrix. Functions implemented here work together with the Abstract functions but are specific for this flavour. {{{ #!graphviz digraph components { MatrixInterface -> Matrix Matrix -> DatabaseMatrix Matrix -> BinaryMatrix Matrix -> FileMatrix Matrix -> MemoryMatrix } }}} New design: * ReadOnlyMatrix: Interface class of the simplest Matrix, so no dependancies and only getter functions. * EntityMatrix: Interface class of typed ReadOnlyMatrix, uses org.molgenis.util.Entity to type its rows/colums. * EditableMatrix: Interface class of read/writeable Matrix, has add and remove functions for manipulation. * MatrixInterface: XGAP specific stuff and complex functions?? * AbstractMatrix: Other complex functions?? * AbstractEntityMatrix: Integrates functionality of high level functions with Entities?? * xxxMatrix: Regular class which is a flavour of Matrix. Functions implemented here work together with the Abstract functions but are specific for this flavour. Current design in xgap_1_4_distro_hax: {{{ #!graphviz digraph components { ReadonlyMatrix -> EditableMatrix ReadonlyMatrix -> EntityMatrix EditableMatrix -> MatrixInterface ReadonlyMatrix -> AbstractMatrix AbstractMatrix -> AbstractEntityMatrix EntityMatrix -> AbstractEntityMatrix AbstractEntityMatrix -> DatabaseMatrix AbstractEntityMatrix -> BinaryMatrix AbstractEntityMatrix -> FileMatrix AbstractEntityMatrix -> MemoryMatrix } }}} Corrected new design?? {{{ #!graphviz digraph components { ReadonlyMatrix -> EditableMatrix ReadonlyMatrix -> EntityMatrix EditableMatrix -> MatrixInterface EntityMatrix -> MatrixInterface ReadonlyMatrix -> AbstractMatrix AbstractMatrix -> AbstractEntityMatrix EntityMatrix -> AbstractEntityMatrix AbstractEntityMatrix -> DatabaseMatrix AbstractEntityMatrix -> BinaryMatrix AbstractEntityMatrix -> FileMatrix AbstractEntityMatrix -> MemoryMatrix EditableMatrix -> MemoryMatrix EditableMatrix -> DatabaseMatrix MatrixInterface -> DatabaseMatrix MatrixInterface -> BinaryMatrix MatrixInterface -> FileMatrix MatrixInterface -> MemoryMatrix } }}} Back to [wiki:Modules]