Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions core/webapp/vis/src/plot.js
Original file line number Diff line number Diff line change
Expand Up @@ -1612,7 +1612,7 @@ boxPlot.render();
* @param {Number} [config.properties.boundType] Either 'absolute' or 'stddev', to describe how to interpret the upperBound and lowerBound.
* Used by LeveyJennings only. Defaults to 'stddev'.
* @param {String} [config.properties.valueConversion] The data property name for the conversion of the plot to either percent
* of the mean ('percentDeviation') or standard deviations ('standardDeviation').
* of the mean ('percentDeviation'), standard deviations ('standardDeviation') or delta from mean ('deltaFromMean').
* Used by LeveyJennings and Moving Range only.
* @param {String} [config.properties.defaultGuideSets] The data property name for default std dev and mean needed for percentDeviation
* or standardDeviation conversion.
Expand Down Expand Up @@ -1784,22 +1784,26 @@ boxPlot.render();
config.properties.TrailingMeanRight ||
config.properties.TrailingCVRight;

var convertToPercentDeviation = function(value, mean) {
let convertToPercentDeviation = function(value, mean) {
var calc = Math.round(((value / mean) * 100) * 100) / 100;
if (isNaN(calc))
return 100;

return calc;
};

var convertToStandardDeviation = function(value, mean, stddev) {
let convertToStandardDeviation = function(value, mean, stddev) {
var calc = Math.round(((value - mean) / stddev) * 100) / 100;
if (isNaN(calc))
return 0;

return calc;
};

let convertToDeltaFromMean = function(value, mean) {
return (value - mean);
};

var convertValues = function(conversion) {
if (!conversion)
return;
Expand All @@ -1813,6 +1817,9 @@ boxPlot.render();
if (conversion === LABKEY.vis.PlotProperties.ValueConversion.PercentDeviation) {
row[valProp] = convertToPercentDeviation(row[valProp], row[meanProp]);
}
else if (conversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
row[valProp] = convertToDeltaFromMean(row[valProp], row[meanProp]);
}
else {
row[valProp] = convertToStandardDeviation(row[valProp], row[meanProp], row[sdProp]);
}
Expand All @@ -1822,6 +1829,9 @@ boxPlot.render();
if (conversion === LABKEY.vis.PlotProperties.ValueConversion.PercentDeviation) {
row[valRightProp] = convertToPercentDeviation(row[valRightProp], row[meanProp]);
}
else if (conversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
row[valRightProp] = convertToDeltaFromMean(row[valRightProp], row[meanProp]);
}
else {
row[valRightProp] = convertToStandardDeviation(row[valRightProp], row[meanProp], row[sdProp]);
}
Expand All @@ -1843,6 +1853,10 @@ boxPlot.render();
maxValue = config.properties.upperBound + cushion;
minValue = config.properties.lowerBound - cushion;
}
else if (config.properties.valueConversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
maxValue = config.properties.upperBound + mean + cushion;
minValue = config.properties.lowerBound - mean - cushion;
}
else {
maxValue = mean + ((config.properties.upperBound + cushion) * stddev);
minValue = mean + ((config.properties.lowerBound - cushion) * stddev);
Expand Down Expand Up @@ -1981,7 +1995,6 @@ boxPlot.render();
// Handle value conversions
convertValues(config.properties.valueConversion);
if (config.qcPlotType === LABKEY.vis.TrendingLinePlotType.LeveyJennings) {

if (config.properties.boundType === LABKEY.vis.PlotProperties.BoundType.Absolute) {
row.upperBound = config.properties.upperBound;
row.lowerBound = config.properties.lowerBound;
Expand Down Expand Up @@ -2028,6 +2041,11 @@ boxPlot.render();
}
}

else if (config.properties.valueConversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
row.upperBound = convertToDeltaFromMean(row.upperBound, row[meanProp]);
row.lowerBound = convertToDeltaFromMean(row.lowerBound, row[meanProp]);
}

if (config.properties.yAxisDomain) {
if (config.properties.yAxisDomain[0] > row.lowerBound) {
config.properties.yAxisDomain[0] = row.lowerBound - cushion;
Expand All @@ -2045,6 +2063,10 @@ boxPlot.render();
row[sdProp] = 1;
row[meanProp] = 0;
}
else if (config.properties.valueConversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
row[sdProp] = 0;
row[meanProp] = 0;
}

if (!config.properties.valueRight &&
!config.properties.valueRightMR &&
Expand Down
3 changes: 2 additions & 1 deletion core/webapp/vis/src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ if (!LABKEY.vis.PlotProperties) {
if (!LABKEY.vis.PlotProperties.ValueConversion) {
LABKEY.vis.PlotProperties.ValueConversion = {
StandardDeviation: 'standardDeviation',
PercentDeviation: 'percentDeviation'
PercentDeviation: 'percentDeviation',
DeltaFromMean: 'deltaFromMean'
}
}
}
Expand Down