@@ -1612,7 +1612,7 @@ boxPlot.render();
16121612 * @param {Number } [config.properties.boundType] Either 'absolute' or 'stddev', to describe how to interpret the upperBound and lowerBound.
16131613 * Used by LeveyJennings only. Defaults to 'stddev'.
16141614 * @param {String } [config.properties.valueConversion] The data property name for the conversion of the plot to either percent
1615- * of the mean ('percentDeviation') or standard deviations ('standardDeviation').
1615+ * of the mean ('percentDeviation'), standard deviations ('standardDeviation') or delta from mean ('deltaFromMean ').
16161616 * Used by LeveyJennings and Moving Range only.
16171617 * @param {String } [config.properties.defaultGuideSets] The data property name for default std dev and mean needed for percentDeviation
16181618 * or standardDeviation conversion.
@@ -1784,22 +1784,26 @@ boxPlot.render();
17841784 config . properties . TrailingMeanRight ||
17851785 config . properties . TrailingCVRight ;
17861786
1787- var convertToPercentDeviation = function ( value , mean ) {
1787+ let convertToPercentDeviation = function ( value , mean ) {
17881788 var calc = Math . round ( ( ( value / mean ) * 100 ) * 100 ) / 100 ;
17891789 if ( isNaN ( calc ) )
17901790 return 100 ;
17911791
17921792 return calc ;
17931793 } ;
17941794
1795- var convertToStandardDeviation = function ( value , mean , stddev ) {
1795+ let convertToStandardDeviation = function ( value , mean , stddev ) {
17961796 var calc = Math . round ( ( ( value - mean ) / stddev ) * 100 ) / 100 ;
17971797 if ( isNaN ( calc ) )
17981798 return 0 ;
17991799
18001800 return calc ;
18011801 } ;
18021802
1803+ let convertToDeltaFromMean = function ( value , mean ) {
1804+ return ( value - mean ) ;
1805+ } ;
1806+
18031807 var convertValues = function ( conversion ) {
18041808 if ( ! conversion )
18051809 return ;
@@ -1813,6 +1817,9 @@ boxPlot.render();
18131817 if ( conversion === LABKEY . vis . PlotProperties . ValueConversion . PercentDeviation ) {
18141818 row [ valProp ] = convertToPercentDeviation ( row [ valProp ] , row [ meanProp ] ) ;
18151819 }
1820+ else if ( conversion === LABKEY . vis . PlotProperties . ValueConversion . DeltaFromMean ) {
1821+ row [ valProp ] = convertToDeltaFromMean ( row [ valProp ] , row [ meanProp ] ) ;
1822+ }
18161823 else {
18171824 row [ valProp ] = convertToStandardDeviation ( row [ valProp ] , row [ meanProp ] , row [ sdProp ] ) ;
18181825 }
@@ -1822,6 +1829,9 @@ boxPlot.render();
18221829 if ( conversion === LABKEY . vis . PlotProperties . ValueConversion . PercentDeviation ) {
18231830 row [ valRightProp ] = convertToPercentDeviation ( row [ valRightProp ] , row [ meanProp ] ) ;
18241831 }
1832+ else if ( conversion === LABKEY . vis . PlotProperties . ValueConversion . DeltaFromMean ) {
1833+ row [ valRightProp ] = convertToDeltaFromMean ( row [ valRightProp ] , row [ meanProp ] ) ;
1834+ }
18251835 else {
18261836 row [ valRightProp ] = convertToStandardDeviation ( row [ valRightProp ] , row [ meanProp ] , row [ sdProp ] ) ;
18271837 }
@@ -1843,6 +1853,10 @@ boxPlot.render();
18431853 maxValue = config . properties . upperBound + cushion ;
18441854 minValue = config . properties . lowerBound - cushion ;
18451855 }
1856+ else if ( config . properties . valueConversion === LABKEY . vis . PlotProperties . ValueConversion . DeltaFromMean ) {
1857+ maxValue = config . properties . upperBound + mean + cushion ;
1858+ minValue = config . properties . lowerBound - mean - cushion ;
1859+ }
18461860 else {
18471861 maxValue = mean + ( ( config . properties . upperBound + cushion ) * stddev ) ;
18481862 minValue = mean + ( ( config . properties . lowerBound - cushion ) * stddev ) ;
@@ -1981,7 +1995,6 @@ boxPlot.render();
19811995 // Handle value conversions
19821996 convertValues ( config . properties . valueConversion ) ;
19831997 if ( config . qcPlotType === LABKEY . vis . TrendingLinePlotType . LeveyJennings ) {
1984-
19851998 if ( config . properties . boundType === LABKEY . vis . PlotProperties . BoundType . Absolute ) {
19861999 row . upperBound = config . properties . upperBound ;
19872000 row . lowerBound = config . properties . lowerBound ;
@@ -2028,6 +2041,11 @@ boxPlot.render();
20282041 }
20292042 }
20302043
2044+ else if ( config . properties . valueConversion === LABKEY . vis . PlotProperties . ValueConversion . DeltaFromMean ) {
2045+ row . upperBound = convertToDeltaFromMean ( row . upperBound , row [ meanProp ] ) ;
2046+ row . lowerBound = convertToDeltaFromMean ( row . lowerBound , row [ meanProp ] ) ;
2047+ }
2048+
20312049 if ( config . properties . yAxisDomain ) {
20322050 if ( config . properties . yAxisDomain [ 0 ] > row . lowerBound ) {
20332051 config . properties . yAxisDomain [ 0 ] = row . lowerBound - cushion ;
@@ -2045,6 +2063,10 @@ boxPlot.render();
20452063 row [ sdProp ] = 1 ;
20462064 row [ meanProp ] = 0 ;
20472065 }
2066+ else if ( config . properties . valueConversion === LABKEY . vis . PlotProperties . ValueConversion . DeltaFromMean ) {
2067+ row [ sdProp ] = 0 ;
2068+ row [ meanProp ] = 0 ;
2069+ }
20482070
20492071 if ( ! config . properties . valueRight &&
20502072 ! config . properties . valueRightMR &&
0 commit comments