/*! * \file OxCalculator_SameResultsAsDicom_test.cpp * \author Konrad Werys * \date 2018/08/20 */ #include "CmakeConfigForTomato.h" #ifdef USE_ITK #ifdef USE_PRIVATE_NR2 #include "gtest/gtest.h" #include "OxOriginalShmolliDicomReader.h" #include "Tomato.h" ///** // * for pixel after pixel debugging // * TODO: difference of 1, correct it! // */ //TEST(OxCalculator_SameResultsAsDicom, compare_one_pixel) { // // typedef double TYPE; // // Ox::Tomato Tomato_object("testData/Hcmr_Phantom_1916_Shmolli_192i_e11_fileList.yaml"); // // Ox::OriginalShmolliDicomReader originalShmolliDicomReader; // originalShmolliDicomReader._filesMag = Tomato_object._opts->files_magnitude; // originalShmolliDicomReader._filesPha = Tomato_object._opts->files_phase; // originalShmolliDicomReader._filesT1.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_T1MAP_14/IM-0003-0001.dcm"); // originalShmolliDicomReader._filesT1.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_T1MAP_14/IM-0003-0002.dcm"); // originalShmolliDicomReader._filesFitparams.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_FITPARAMS_15/IM-0004-0001.dcm"); // originalShmolliDicomReader._filesFitparams.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_FITPARAMS_15/IM-0004-0002.dcm"); // originalShmolliDicomReader._filesFitparams.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_FITPARAMS_15/IM-0004-0003.dcm"); // originalShmolliDicomReader._filesFitparams.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_FITPARAMS_15/IM-0004-0004.dcm"); // originalShmolliDicomReader._filesFitparams.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_FITPARAMS_15/IM-0004-0005.dcm"); // originalShmolliDicomReader._filesFitparams.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_FITPARAMS_15/IM-0004-0006.dcm"); // originalShmolliDicomReader._filesFitparams.push_back("testData/dicom/Hcmr_Phantom_1916_260C/Konrad_Shmolli/ShMOLLI_192i_e11_FITPARAMS_15/IM-0004-0007.dcm"); // // originalShmolliDicomReader.readAndSort(); // // int nSamples = originalShmolliDicomReader._nSamples; // TYPE *invTimes = originalShmolliDicomReader._invTimes; // // Ox::OriginalShmolliDicomReader::Image2dType::IndexType index2d; //// index2d[0] = 41-1; //// index2d[1] = 199-1; // // index2d[0] = 87; // index2d[1] = 103; // // Ox::OriginalShmolliDicomReader::Image3dType::IndexType index3d; // index3d[0] = index2d[0]; // index3d[1] = index2d[1]; // index3d[2] = 0; // // TYPE *sigMag = new TYPE[nSamples]; // TYPE *sigPha = new TYPE[nSamples]; // // originalShmolliDicomReader.copyFromImage(sigMag, originalShmolliDicomReader._imageMag, index3d); // originalShmolliDicomReader.copyFromImage(sigPha, originalShmolliDicomReader._imagePha, index3d); // // // init the necessary objects // Ox::FunctionsT1Shmolli functionsObject; // Ox::FitterAmoebaPrivateNr2 fitter; // Ox::SignCalculatorShmolli signCalculator; // Ox::StartPointCalculatorShmolli startPointCalculator; // Ox::CalculatorT1Shmolli calculatorT1Shmolli; // // //fitter.setTrace(true); // //fitter.setVerbose(true); // // // configure // calculatorT1Shmolli.setFunctionsT1(&functionsObject); // calculatorT1Shmolli.setFitter(&fitter); // calculatorT1Shmolli.setSignCalculator(&signCalculator); // calculatorT1Shmolli.setStartPointCalculator(&startPointCalculator); // // // set the data // calculatorT1Shmolli.setNSamples(nSamples); // calculatorT1Shmolli.setInvTimes(invTimes); // calculatorT1Shmolli.setSigMag(sigMag); // calculatorT1Shmolli.setSigPha(sigPha); // calculatorT1Shmolli.setMeanCutOff(10); // // //fitter.setTrace(true); // //fitter.setVerbose(true); // std::cout << std::endl; // std::cout << "calculatorT1Shmolli: " << std::endl; // calculatorT1Shmolli.calculate(); // // // init the necessary objects // Ox::CalculatorT1ShmolliOriginal calculatorT1ShmolliOriginal; // // // set the data // calculatorT1ShmolliOriginal.setNSamples(nSamples); // calculatorT1ShmolliOriginal.setInvTimes(invTimes); // calculatorT1ShmolliOriginal.setSigMag(sigMag); // calculatorT1ShmolliOriginal.setSigPha(sigPha); // calculatorT1ShmolliOriginal.setMeanCutOff(10); // // std::cout << std::endl; // std::cout << "calculatorT1ShmolliOriginal: " << std::endl; // calculatorT1ShmolliOriginal.calculate(); // // Ox::FunctionsT1Shmolli functionsObject2; // TYPE params[3] = {19.00019, 59.03927, 96.74255}; // TYPE signal5[5] = {-2, 19, 19, 19, 19 }; // TYPE invTimes5[5] = {100, 1100, 2100, 3100, 4100 }; // //TYPE invTimes5[5] = {0, 0, 0, 0, 0 }; // functionsObject2.setInvTimes(invTimes5); // functionsObject2.setSignal(signal5); // functionsObject2.setNSamples(5); // // std::cout << std::endl; // for (int i = 0; i < 5; ++i){ // TYPE temp1 = functionsObject2.calcModelValue(params, invTimes5[i]); // std::cout << temp1 << std::endl; // } // // for (int i = 0; i < 5; ++i){ // TYPE temp1 = functionsObject2.calcModelValue(params, invTimes5[i]); // std::cout << temp1 - signal5[i] << std::endl; // } // // TYPE temp2 = functionsObject2.calcCostValue(params); // std::cout << temp2 << std::endl; // // functionsObject2.disp(); // // OxOld::MOLLI_amoeba_fit FitData( 1.e-12, 4000, true); // //FitData.sdMolliSign = calculatorT1Shmolli.getSignal(); // //TYPE temp2 = FitData.func(params); // // //std::cout << temp2 << std::endl; //// calculatorT1ShmolliOriginal. // // TYPE A = originalShmolliDicomReader._imageA->GetPixel(index2d); // TYPE B = originalShmolliDicomReader._imageB->GetPixel(index2d); // TYPE T1star = originalShmolliDicomReader._imageT1star->GetPixel(index2d); // TYPE T1 = originalShmolliDicomReader._imageT1color->GetPixel(index2d); // // if ((int)calculatorT1Shmolli.getResults().A != A // || (int)calculatorT1Shmolli.getResults().B != B // || (int)calculatorT1Shmolli.getResults().T1star != T1star // || (int)calculatorT1Shmolli.getResults().T1 != T1) { // // printf("\nT1s calc new = %f\nT1s calc old = %f\nT1s dicom = %f", calculatorT1Shmolli.getResults().T1star, calculatorT1ShmolliOriginal.getResults().T1star, T1star); // printf("\nT1 calc new = %f\nT1 calc old = %f\nT1 dicom = %f", calculatorT1Shmolli.getResults().T1, calculatorT1ShmolliOriginal.getResults().T1, T1); // // KWUtil::printArray(nSamples, sigMag, (char *)"\nsigMag: "); // KWUtil::printArray(nSamples, sigPha, (char *)"\nsigPha: "); // KWUtil::printArray(nSamples, invTimes, (char *)"\ninvTimes: "); // printf("\n"); // } // // EXPECT_DOUBLE_EQ((int)calculatorT1Shmolli.getResults().A, A); // EXPECT_DOUBLE_EQ((int)calculatorT1Shmolli.getResults().B, B); // EXPECT_DOUBLE_EQ((int)calculatorT1Shmolli.getResults().T1star, T1star); // EXPECT_DOUBLE_EQ((int)calculatorT1Shmolli.getResults().T1, T1); // // delete [] sigMag; // delete [] sigPha; // //// originalShmolliDicomReader._visualise = true; //// originalShmolliDicomReader.visualise(); // //} #endif // USE_PRIVATE_NR2 #endif // USE_ITK