 			if (doCDLayoutFlag) setClassDiscriminationAnchorsLocations();
 		}
 		
+		private function getNorm(column:IAttributeColumn, key:IQualifiedKey):Number
+		{
+			var stats:IColumnStatistics = WeaveAPI.StatisticsCache.getColumnStatistics(column);
+			var _absNorm:Boolean = absNorm.value;
+			var _normMin:Number = normMin.value;
+			var _normMax:Number = normMax.value;
+			
+			if (!_absNorm && _normMin == 0 && _normMax == 1)
+				return stats.getNorm(key);
+			
+			var value:Number = column.getValueFromKey(key, Number);
+			var statsMin:Number = stats.getMin();
+			var statsMax:Number = stats.getMax();
+			var min:Number = Math.min(statsMin, statsMax);
+			var max:Number = Math.max(statsMin, statsMax);
+			
+			return StandardLib.scale(value, min, max, _normMin, _normMax);
+		}
 		
 		public function setclassDiscriminationMetric(tandpMapping:Dictionary,tandpValuesMapping:Dictionary):void
 		{

				for (i = 0; i < annCols.length; i++)
				{
					column = annCols[i];
					stats = WeaveAPI.StatisticsCache.getColumnStatistics(column);
					value = normArray ? normArray[i] : stats.getNorm(key);
					if(isNaN(value))
					{
						value = 0

		private var pointSensitivityColumns:Array = [];
		private var annCenterColumns:Array = [];
		public const showAnnulusCenter:LinkableBoolean = registerLinkableChild(this, new LinkableBoolean(false));
		
		public const absNorm:LinkableBoolean = registerSpatialProperty(new LinkableBoolean(false));
		public const normMin:LinkableNumber = registerSpatialProperty(new LinkableNumber(0));
		public const normMax:LinkableNumber = registerSpatialProperty(new LinkableNumber(1));
		
		private function verifyThresholdValue(value:*):Boolean
		{
