diff --git a/app/src/main/java/com/example/refactoredapp/domain/ResultCalculationWithAvgImpl.kt b/app/src/main/java/com/example/refactoredapp/domain/ResultCalculationWithAvgImpl.kt new file mode 100644 index 0000000..771a1b2 --- /dev/null +++ b/app/src/main/java/com/example/refactoredapp/domain/ResultCalculationWithAvgImpl.kt @@ -0,0 +1,103 @@ +package com.example.refactoredapp.domain + +import com.example.refactoredapp.data.constant.Constants +import com.example.refactoredapp.data.model.TestRightCalculationData +import com.example.refactoredapp.data.model.TestRightResultType + +class ResultCalculationWithAvgImpl : TestRightResultCalculation { + + val testRightCalculationData = TestRightCalculationData( + null, + null, + null, + null, + null, + null, + null, + TestRightResultType.UNDEFINED + ) + + override fun getResults(wavelengthToAbsorbance: ArrayList>): TestRightCalculationData { + + val startWavelengthOne = + Constants.WAVELENGTH_OF_INTEREST_ONE - Constants.RANGE_IN_RESULT_CALCULATIONS + val endWavelengthOne = + Constants.WAVELENGTH_OF_INTEREST_ONE + Constants.RANGE_IN_RESULT_CALCULATIONS + 1 + var sumOfAbsorbanceAtOne = 0.0 + var noOfAbsorbanceRecordedOne = 0 + + val startWavelengthTwo = + Constants.WAVELENGTH_OF_INTEREST_TWO - Constants.RANGE_IN_RESULT_CALCULATIONS + val endWavelengthTwo = + Constants.WAVELENGTH_OF_INTEREST_TWO + Constants.RANGE_IN_RESULT_CALCULATIONS + 1 + var sumOfAbsorbanceAtTwo = 0.0 + var noOfAbsorbanceRecordedTwo = 0 + + for (each in wavelengthToAbsorbance) { + if (each[0] >= startWavelengthOne && each[0] < endWavelengthOne) { + sumOfAbsorbanceAtOne += each[1] + noOfAbsorbanceRecordedOne++ + } + if (each[0] >= startWavelengthTwo && each[0] < endWavelengthTwo) { + sumOfAbsorbanceAtTwo += each[1] + noOfAbsorbanceRecordedTwo++ + } + } + + val avgAbsorbanceOne = (sumOfAbsorbanceAtOne / noOfAbsorbanceRecordedOne) + val avgAbsorbanceTwo = (sumOfAbsorbanceAtTwo / noOfAbsorbanceRecordedTwo) + + testRightCalculationData.absorbanceOne = avgAbsorbanceOne + testRightCalculationData.absorbanceTwo = avgAbsorbanceTwo + + testRightCalculationData.result = calculateResultsAndRatio(avgAbsorbanceOne, avgAbsorbanceTwo) + return testRightCalculationData + } + + private fun calculateResultsAndRatio( + absorbanceAtWaveOne: Double, + absorbanceAtWaveTwo: Double + ): TestRightResultType { + + if (absorbanceAtWaveOne != Double.MIN_VALUE && absorbanceAtWaveTwo != Double.MIN_VALUE && absorbanceAtWaveOne != 0.0) { + val value = absorbanceAtWaveTwo / absorbanceAtWaveOne + testRightCalculationData.ratioValue = value + + if (value < 0.24 || value == 0.0) { + testRightCalculationData.ratioMinRange = 0.0 + testRightCalculationData.ratioMaxRange = 0.24 + return TestRightResultType.NORMAL + } else if (value >= 0.24 && value < 0.30) { + testRightCalculationData.ratioMinRange = 0.24 + testRightCalculationData.ratioMaxRange = 0.30 + return TestRightResultType.SICKLECELLTRAIT + } else if (value >= 0.30) { + testRightCalculationData.ratioMinRange = 0.30 + testRightCalculationData.ratioMaxRange = 999.0 + return TestRightResultType.SICKLECELLDISEASE + } + } + + return TestRightResultType.UNDEFINED + +// if (absorbanceAtWaveOne != Double.MIN_VALUE && absorbanceAtWaveTwo != Double.MIN_VALUE && absorbanceAtWaveOne != 0.0) { +// val value = absorbanceAtWaveTwo / absorbanceAtWaveOne +// +// if (value < 0.24 || value == 0.0) { +// return TestRightResultType.NORMAL +// } else if (value >= 0.24 && value < 0.30) { +// return TestRightResultType.SICKLECELLTRAIT +// } else if (value >= 0.30) { +// return TestRightResultType.SICKLECELLDISEASE +// } +// +// } + +// return TestRightResultType.UNDEFINED +// Log.d(TAG, "value = $value") +// println("value = $value") + + } + + +} \ No newline at end of file