"use strict"; function getCollectionParseFloat(collection) { let result = []; let value; for (let i = 0; i < collection.length; i++) { value = parseFloat(collection[i]); result.push(value); } return result; } function getSum(collection) { let result = 0; if (!collection || collection.length === 0) { result = 0; } else { for (let i = 0; i < collection.length; i++) { result += collection[i]; } } return result; } function getAverage(collection) { let result = null; if (collection == null || collection.length === 0) result = 0; else { let sum = getSum(collection); result = sum / collection.length; } return result; } function getVariance(collection) { let result = null; if (collection == null || collection.length === 0) result = null; else { let variance = 0; let t = collection[0]; for (let i = 1; i < collection.length; i++) { t += collection[i]; const diff = ((i + 1) * collection[i]) - t; variance += diff * diff / ((i + 1.0) * i); } result = variance / (collection.length - 1); } return result; } function getNineEdgeMeanDelta(edge4mmRhoPoints, edge10mmRhoPoints) { let result; const nine4mmEdgeSum = getSum(edge4mmRhoPoints); const nine10mmEdgeSum = getSum(edge10mmRhoPoints); result = (nine4mmEdgeSum - nine10mmEdgeSum) / nine10mmEdgeSum * 100; return result; } function getMax(collection) { let result = collection[0]; for (let i = 1; i < collection.length; i++) { if (collection[i] > result) { result = collection[i]; } } return result; } function getMin(collection) { let result = collection[0]; for (let i = 1; i < collection.length; i++) { if (collection[i] < result) { result = collection[i]; } } return result; } function getNineResRangePercent(criticalRhoPoints) { let result; const nineCriticalPointsAverage = getAverage(criticalRhoPoints); // result = (Math.max(...criticalRhoPoints) - Math.min(...criticalRhoPoints)) / nineCriticalPointsAverage * 100; // let max = criticalRhoPoints.reduce((a, b) => Math.max(a, b)); // let min = criticalRhoPoints.reduce((a, b) => Math.min(a, b)); // result = (max - min) / nineCriticalPointsAverage * 100; // let max = criticalRhoPoints.sort((a, b) => b - a); // let min = criticalRhoPoints.sort((a, b) => a - b); // result = (max[0] - min[0]) / nineCriticalPointsAverage * 100; let max = getMax(criticalRhoPoints); let min = getMin(criticalRhoPoints); result = (max - min) / nineCriticalPointsAverage * 100; return result; } function getValue(allRhoAvg, index) { let result = null; if (index === 8) { if (allRhoAvg != undefined && allRhoAvg.length > 1) { let collection = allRhoAvg[0] === '|' ? allRhoAvg.substring(1).split('|') : allRhoAvg.split('|'); let collectionParseFloat = getCollectionParseFloat(collection); result = average(collectionParseFloat); } } return result; } // 0 1 2 3 4 5 6 7 8 // 1 2 3 4 5 6 7 8 9 const allRhoAvg = getCollectionParseFloat('|2.648|3.076|2.877|2.747|2.821|2.765|2.669|2.814|2.876'.substring(1).split('|')); const edge4mmRhoPoints = getCollectionParseFloat('|2.877|2.747|2.669|2.814'.substring(1).split('|')); const edge10mmRhoPoints = getCollectionParseFloat('|3.076|2.821|2.765|2.876'.substring(1).split('|')); const criticalRhoPoints = getCollectionParseFloat('|2.648|3.076|2.821|2.765|2.876'.substring(1).split('|')); // 0 1 2 3 4 5 6 7 8 // 1 2 3 4 5 6 7 8 9 const allPhase = getCollectionParseFloat('|88.874|88.999|89.085|89.029|89.018|89.007|89.049|89.024|89.007'.substring(1).split('|')); const criticalPhasePoints = getCollectionParseFloat('|88.874|88.999|89.018|89.007|89.007'.substring(1).split('|')); const nineMean = getAverage(allRhoAvg); const nine4mmEdgeMean = getAverage(edge4mmRhoPoints); const nine10mmEdgeMean = getAverage(edge10mmRhoPoints); const nineCriticalPointsAverage = getAverage(criticalRhoPoints); const nineResRangePercent = getNineResRangePercent(criticalRhoPoints); const nineCriticalPointsStdDev = Math.sqrt(getVariance(criticalRhoPoints)); const nineCriticalPointsPhaseAngleAverage = getAverage(criticalPhasePoints); const nineEdgeMeanDelta = getNineEdgeMeanDelta(edge4mmRhoPoints, edge10mmRhoPoints); console.log(nineCriticalPointsStdDev);