/*! * \file OxCalculatorT1Molli_test.cpp * \author Konrad Werys * \date 2018/08/01 */ #include #include "gtest/gtest.h" #include "OxTestData.h" #include "CmakeConfigForTomato.h" #include "OxFunctionsT1TwoParam.h" #include "OxFunctionsT1ThreeParam.h" #include "OxFitterAmoebaVnl.h" #include "OxSignCalculatorNoSign.h" #include "OxStartPointCalculatorDefault3Dims.h" #include "OxStartPointCalculatorDefault2Dims.h" #include "OxCalculatorT1Molli.h" #ifdef USE_ITK #include "itkTimeProbe.h" #endif #ifdef USE_VNL TEST(OxCalculatorT1_saturation_recovery, twoParam) { typedef double TYPE; char filePath [] = "testData/saturation_recovery.yaml"; Ox::TestData testData(filePath); int nSamples = testData.getNSamples(); // init the necessary objects Ox::FunctionsT1TwoParam functionsObject; Ox::FitterAmoebaVnl fitterAmoebaVnl; Ox::SignCalculatorNoSign signCalculator; Ox::StartPointCalculatorDefault2Dims startPointCalculator; Ox::CalculatorT1Molli calculatorT1Molli; // configure calculatorT1Molli.setFunctionsT1(&functionsObject); calculatorT1Molli.setFitter(&fitterAmoebaVnl); calculatorT1Molli.setSignCalculator(&signCalculator); calculatorT1Molli.setStartPointCalculator(&startPointCalculator); // set the data calculatorT1Molli.setNSamples(nSamples); calculatorT1Molli.setInvTimes(testData.getInvTimesPtr()); calculatorT1Molli.setSigMag(testData.getSignalMagPtr()); calculatorT1Molli.calculate(); EXPECT_NEAR(calculatorT1Molli.getResults().A, testData.getResultsTwoParam()[0], 1e-2); EXPECT_NEAR(calculatorT1Molli.getResults().B, testData.getResultsTwoParam()[1], 1e-2); } #endif #ifdef USE_VNL TEST(OxCalculatorT1_saturation_recovery, threeParam) { typedef double TYPE; char filePath [] = "testData/saturation_recovery.yaml"; Ox::TestData testData(filePath); int nSamples = testData.getNSamples(); // init the necessary objects Ox::FunctionsT1ThreeParam functionsObject; Ox::FitterAmoebaVnl fitterAmoebaVnl; Ox::SignCalculatorNoSign signCalculator; Ox::StartPointCalculatorDefault3Dims startPointCalculator; Ox::CalculatorT1Molli calculatorT1Molli; // configure calculatorT1Molli.setFunctionsT1(&functionsObject); calculatorT1Molli.setFitter(&fitterAmoebaVnl); calculatorT1Molli.setSignCalculator(&signCalculator); calculatorT1Molli.setStartPointCalculator(&startPointCalculator); // set the data calculatorT1Molli.setNSamples(nSamples); calculatorT1Molli.setInvTimes(testData.getInvTimesPtr()); calculatorT1Molli.setSigMag(testData.getSignalMagPtr()); calculatorT1Molli.calculate(); EXPECT_NEAR(calculatorT1Molli.getResults().A, testData.getResultsThreeParam()[0], 1e-2); EXPECT_NEAR(calculatorT1Molli.getResults().B, testData.getResultsThreeParam()[1], 1e-2); EXPECT_NEAR(calculatorT1Molli.getResults().T1star, testData.getResultsThreeParam()[2], 1e-2); } #endif // //#ifdef USE_VNL //TEST(OxCalculatorT1Molli, calculate_WithSigns) { // // typedef double TYPE; // // char filePath [] = "testData/blood.yaml"; // Ox::TestData testData(filePath); // int nSamples = testData.getNSamples(); // // // init the necessary objects // Ox::FunctionsT1ThreeParam functionsObject; // Ox::FitterAmoebaVnl fitterAmoebaVnl; // Ox::SignCalculatorRealImag signCalculator; // Ox::StartPointCalculatorDefault3Dims startPointCalculator; // Ox::CalculatorT1Molli calculatorT1Molli; // // // configure // calculatorT1Molli.setFunctionsT1(&functionsObject); // calculatorT1Molli.setFitter(&fitterAmoebaVnl); // calculatorT1Molli.setSignCalculator(&signCalculator); // calculatorT1Molli.setStartPointCalculator(&startPointCalculator); // // // set the data // calculatorT1Molli.setNSamples(nSamples); // calculatorT1Molli.setInvTimes(testData.getInvTimesPtr()); // calculatorT1Molli.setSigPha(testData.getSignalPhaPtr()); // calculatorT1Molli.setSigMag(testData.getSignalMagPtr()); // // calculatorT1Molli.calculate(); // // EXPECT_NEAR(calculatorT1Molli.getResults().A, testData.getResultsMolli()[0], 1e-2); // EXPECT_NEAR(calculatorT1Molli.getResults().B, testData.getResultsMolli()[1], 1e-2); // EXPECT_NEAR(calculatorT1Molli.getResults().T1star, testData.getResultsMolli()[2], 1e-2); //} //#endif // //#ifdef USE_VNL //TEST(OxCalculatorT1Molli, copyConstructor) { // // typedef double TYPE; // // char filePath [] = "testData/blood.yaml"; // Ox::TestData testData(filePath); // int nSamples = testData.getNSamples(); // // // init the necessary objects // Ox::FunctionsT1ThreeParam functionsObject; // Ox::FitterAmoebaVnl fitterAmoebaVnl; // Ox::SignCalculatorRealImag signCalculator; // Ox::StartPointCalculatorDefault3Dims startPointCalculator; // Ox::CalculatorT1Molli calculatorT1Molli; // // // configure // calculatorT1Molli.setFunctionsT1(&functionsObject); // calculatorT1Molli.setFitter(&fitterAmoebaVnl); // calculatorT1Molli.setSignCalculator(&signCalculator); // calculatorT1Molli.setStartPointCalculator(&startPointCalculator); // // // set the data // calculatorT1Molli.setNSamples(nSamples); // calculatorT1Molli.setInvTimes(testData.getInvTimesPtr()); // calculatorT1Molli.setSigPha(testData.getSignalPhaPtr()); // calculatorT1Molli.setSigMag(testData.getSignalMagPtr()); // // calculatorT1Molli.setMeanCutOff(123); // // Ox::CalculatorT1Molli calculatorT1MolliCopy = calculatorT1Molli; // // EXPECT_EQ( calculatorT1Molli.getMeanCutOff(), calculatorT1MolliCopy.getMeanCutOff()); // EXPECT_EQ( calculatorT1Molli.getNSamples(), calculatorT1MolliCopy.getNSamples()); // EXPECT_EQ( calculatorT1Molli.getNDims(), calculatorT1MolliCopy.getNDims()); // // // empty object pointers // EXPECT_THROW(calculatorT1MolliCopy.getFunctionsT1(), std::runtime_error); // EXPECT_THROW(calculatorT1MolliCopy.getFitter(), std::runtime_error); // EXPECT_THROW(calculatorT1MolliCopy.getSignCalculator(), std::runtime_error); // EXPECT_THROW(calculatorT1MolliCopy.getStartPointCalculator(), std::runtime_error); // // // empty array pointers // EXPECT_THROW(calculatorT1MolliCopy.getInvTimes(), std::runtime_error); // EXPECT_FALSE(calculatorT1MolliCopy.getRepTimes()); // EXPECT_FALSE(calculatorT1MolliCopy.getRelAcqTimes()); // EXPECT_THROW(calculatorT1MolliCopy.getSigMag(), std::runtime_error); // EXPECT_FALSE(calculatorT1MolliCopy.getSigPha()); // // // non-empty pointers of internal arrays // EXPECT_TRUE(calculatorT1MolliCopy.getSignal()); // EXPECT_TRUE(calculatorT1MolliCopy.getSigns()); // EXPECT_TRUE(calculatorT1MolliCopy.getStartPoint()); // //} //#endif // //#ifdef USE_VNL // //TEST(OxCalculatorT1Molli, correctSDs) { // // typedef double TYPE; // // char filePath [] = "testData/blood.yaml"; // Ox::TestData testData(filePath); // int nSamples = testData.getNSamples(); // // // init the necessary objects // Ox::FunctionsT1ThreeParam functionsObject; // Ox::FitterAmoebaVnl fitterAmoebaVnl; // Ox::SignCalculatorRealImag signCalculator; // Ox::StartPointCalculatorDefault3Dims startPointCalculator; // Ox::CalculatorT1Molli calculatorT1Molli; // // // configure // calculatorT1Molli.setFunctionsT1(&functionsObject); // calculatorT1Molli.setFitter(&fitterAmoebaVnl); // calculatorT1Molli.setSignCalculator(&signCalculator); // calculatorT1Molli.setStartPointCalculator(&startPointCalculator); // calculatorT1Molli.setDoCalculateSDMap(true); // // // set the data // calculatorT1Molli.setNSamples(nSamples); // calculatorT1Molli.setInvTimes(testData.getInvTimesPtr()); // calculatorT1Molli.setSigPha(testData.getSignalPhaPtr()); // calculatorT1Molli.setSigMag(testData.getSignalMagPtr()); // // calculatorT1Molli.calculate(); // // EXPECT_NEAR(calculatorT1Molli.getResults().SD_T1, 48.31, 1e-2); // EXPECT_NEAR(calculatorT1Molli.getResults().SD_A, 1.96, 1e-2); // EXPECT_NEAR(calculatorT1Molli.getResults().SD_B, 2.07, 1e-2); //} // //#endif