Newer
Older
// The width of the visualization
var w = 500;
var curveColors = d3.scale.category10().domain([0, 9]);
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
* Abstract superclass for the wrapper classes.
* @constructor
*/
function AbstractThingWrapper() {
this.isDataSet = function() { return false; }
this.isStrain = function() { return false; }
}
/**
* Create a wrapper on a data set designed to be displayed as a data set.
*
* @constructor
*/
function DataSetWrapper(dataSet) {
var strainNames;
if (dataSet.properties[STRAIN_PROP_NAME] != null)
strainNames = dataSet.properties[STRAIN_PROP_NAME].split(",");
else
strainNames = [dataSet.properties["STRAIN_NAME"]];
this.strainNames = strainNames;
this.dataSet = dataSet;
this.dateString = timeformat(new Date(dataSet.registrationDetails.registrationDate));
this.strainString =
(strainNames.length < 3) ?
strainNames.join(" ") :
"" + strainNames.length + " strain(s)";
this.userEmail = dataSet.registrationDetails.userEmail;
this.name = dataSet.code;
}
DataSetWrapper.prototype = new AbstractThingWrapper();
DataSetWrapper.prototype.constructor = DataSetWrapper;
DataSetWrapper.prototype.isDataSet = function() { return true; }
/**
* Create a wrapper that represents a strain to be displayed
*
* @constructor
*/
function StrainWrapper(strainName)
{
this.strainName = strainName;
this.dataSets = [];
}
StrainWrapper.prototype = new AbstractThingWrapper();
StrainWrapper.prototype.constructor = StrainWrapper;
StrainWrapper.prototype.isStrain = function() { return true; }
var presenterModeTypeDataSet = "DATA_SET", presenterModeTypeStrain = "STRAIN";
/**
* An object responsible for managing the view
*/
function AppPresenter() {
this.didCreateVis = false;
this.presenterMode = presenterModeTypeDataSet;
this.visualizationContainers = [];
}
/** Hides the explanation and shows the element to display the explanation again */
AppPresenter.prototype.hideExplanation = function() {
$('#explanation').hide();
$('#explanation-show').show();
}
/** Display the explanation again */
AppPresenter.prototype.showExplanation = function() {
$('#explanation-show').hide();
$('#explanation').show();
}
/** Show the data sets grouped by type */
AppPresenter.prototype.switchToDataSetTypeView = function()
{
this.presenterMode = presenterModeTypeDataSet;
this.hideExplanation();
this.toggleDisplayedVisualizations(dataSetTypeVis);
od600InspectorView.removeAll(250);
dataSetInspectorView.updateView();
}
/** Show the data sets by strain*/
AppPresenter.prototype.switchToStrainView = function()
{
this.presenterMode = presenterModeTypeDataSet;
this.hideExplanation();
this.toggleDisplayedVisualizations(strainVis);
od600InspectorView.removeAll(250);
dataSetInspectorView.updateView();
}
/** Show the data sets by strains with OD600 data*/
AppPresenter.prototype.switchToOD600View = function()
{
this.presenterMode = presenterModeTypeStrain;
this.hideExplanation();
this.toggleDisplayedVisualizations(od600StrainVis);
dataSetInspectorView.removeAll(250);
od600InspectorView.updateView();
/** This view is very similar to the OD600 view, but the data is also divided into two main groups:
* - strains for which there are phenotypes, predictions, and data in the openBIS database
* - strains for which there are phenotypes or predictions, but no data in the openBIS database
* (in this group strains with phenotypes and predictions should be marked green; strains with
* phenotypes only should be marked blue; strains with predictions only should be yellow)
* Information about the phenotypes and predictions is retrieved from UChicago strain database
* (http://pubseed.theseed.org/model-prod/StrainServer.cgi) and cached at the server-side in OpenBIS.
*/
AppPresenter.prototype.switchToOD600WithPhenotypesAndPredictionsView = function()
{
this.presenterMode = presenterModeTypeStrain;
this.hideExplanation();
this.toggleDisplayedVisualizations(od600StrainWithPhenotypesAndPredictionsVis);
dataSetInspectorView.removeAll(250);
od600InspectorView.updateView();
}
/** Utility function to gracefully switch from one visualization to another */
AppPresenter.prototype.toggleDisplayedVisualizations = function(visToShow)
this.visualizationContainers.forEach(function(vis) {
if (vis == visToShow) {
if (od600StrainVis == vis || od600StrainWithPhenotypesAndPredictionsVis == vis) {
// So that scrolling works
vis.style("display", "block");
} else {
vis.style("display", "inline");
}
vis
.transition()
.duration(1000)
.style("opacity", 1);
} else {
// change to "inline" element to eliminate jumping of two "block" elements during transition
vis.style("display","inline");
vis
.transition()
.duration(1000)
.style("opacity", 0)
.style("display", "none")
}
});
}
/**
* Shows the list of data sets retrieved from the openBIS server.
*/
AppPresenter.prototype.showDataSets = function(bisDataSets) {
if (null == bisDataSets) return;
basynthec.dataSetList = bisDataSets.filter(function(dataSet) {
return IGNORED_DATASET_TYPES.indexOf(dataSet.dataSetTypeCode) == -1;
});
// sort data sets
var sortByTypeAndRegistration = function(a, b) {
if (a.dataSetTypeCode == b.dataSetTypeCode) {
return b.registrationDetails.registrationDate - a.registrationDetails.registrationDate;
}
return (a.dataSetTypeCode < b.dataSetTypeCode) ? -1 : 1;
};
basynthec.dataSetList.sort(sortByTypeAndRegistration);
model.initialize(function(){
presenter.refreshDataSetTypeTables();
presenter.refreshStrainTables();
presenter.refreshOd600StrainTables();
presenter.refreshOd600StrainWithPhenotypesAndPredictionsTables();
});
}
AppPresenter.prototype.refreshStrainTables = function() {
this.createVis();
strainView.updateView(1000);
}
AppPresenter.prototype.refreshDataSetTypeTables = function() {
this.createVis();
od600View.updateView();
metabolomicsView.updateView();
transcriptomicsView.updateView();
proteomicsView.updateView();
sequencesView.updateView();
Loading
Loading full blame...