X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vtk%2Ftest4DSplitter.cxx;h=059de647001e64d31b3cb6e3b8188dff60b9ee93;hb=76ac46b16fd92d0fb444f786d4946424d9029315;hp=4fe3410557cb7baf14e710ba0aa34e3bd4cd3a1b;hpb=4b43cc3729743fcf7632e055cabd3f564d1bbe0b;p=gdcm.git diff --git a/vtk/test4DSplitter.cxx b/vtk/test4DSplitter.cxx index 4fe34105..059de647 100644 --- a/vtk/test4DSplitter.cxx +++ b/vtk/test4DSplitter.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: test4DSplitter.cxx,v $ Language: C++ - Date: $Date: 2011/03/31 16:12:33 $ - Version: $Revision: 1.2 $ + Date: $Date: 2011/04/20 15:03:54 $ + Version: $Revision: 1.7 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -49,18 +49,26 @@ typedef std::map SortedFiles; bool myCompareFunction(GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2) { return atof(file1->GetEntryString(0x0018,0x1060).c_str()) < atof(file2->GetEntryString(0x0018,0x1060).c_str()); + } + +bool myCompareFunction0008_0032(GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2) + { + return atof(file1->GetEntryString(0x0008,0x0032).c_str()) < atof(file2->GetEntryString(0x0008,0x0032).c_str()); } - int main(int argc, char *argv[]) { - std::cout << "... inside " << argv[0] << std::endl; + std::cout << "... inside : " << argv[0] << std::endl; - +// 3D +//std::string strDirName("/home/jpr/Desktop/Patients_Emilie/Patient.3T/AUB Jos/AUBERTIN JOSEPH/PROSTATE - 305629373/dSSh_DWISENSE_602"); -std::string strDirName("/home/jpr/Desktop/Patients_Emilie/Patient.3T/AUB Jos/AUBERTIN JOSEPH/PROSTATE - 305629373/DYN7INJDYN6_901"); - +// 4D +//std::string strDirName("/home/jpr/Desktop/Patients_Emilie/Patient.3T/AUB Jos/AUBERTIN JOSEPH/PROSTATE - 305629373/DYN7INJDYN6_901"); + +// n directories +std::string strDirName("/home/jpr/Desktop/patient Andrei Dyn/dyn"); // ----- Begin Processing ----- @@ -74,24 +82,36 @@ std::string strDirName("/home/jpr/Desktop/Patients_Emilie/Patient.3T/AUB Jos/AUB // en sortie, chaque vtkImageData contiendra une coupe au cours du temps // n * 2D+T -std::vector *output; + std::vector *output; + std::vector::iterator it; + +// ======================================== +// Split on Position (IPP) +// Sort on UserFunction (use 0008|0032 : Aquisition Time ) +// +// Should give a vector of 2D+T vtkImageData* +// ======================================== + +//vtkGdcm4DSplitter *spl = new vtkGdcm4DSplitter(); + +if (1) { + + std::cout << "Try with : Split on Position (IPP) / Sort on UserFunction (use 0008|0032 : Aquisition Time )" << std::endl; - if (1) { vtkGdcm4DSplitter *spl = new vtkGdcm4DSplitter(); + spl->setFlipY(false); spl->setDirName(strDirName); - spl->setRecursive(false); + spl->setRecursive(true); + spl->setSplitOnPosition(); - - // Time triger : 0018|1060 - grSort=0x0018; - elSort=0x1060; - // ==> Big troubles with SortOnTag - //spl->setSortOnTag(grSort, elSort); - //spl->setSortConvertToFloat(true); + // Time triger : 0018|1060 + //grSort=0x0018; + //elSort=0x1060; // ==> use SortOnUserFunction ! - spl->setSortOnUserFunction(myCompareFunction); + spl->setSortOnUserFunction(myCompareFunction0008_0032); + std::cout << "Everything set" << std::endl; bool res=spl->Go(); @@ -103,23 +123,84 @@ std::vector *output; } output = spl->GetImageDataVector(); -} + + +std::cout << "--------------------------------" << std::endl; +std::cout << "Vector size " << output->size() << std::endl; +std::cout << "--------------------------------" << std::endl; + +// Print the first one (why not?) +//(*output)[0]->PrintSelf(std::cout, vtkIndent(2)); + + for(it=output->begin(); it!=output->end(); ++it) { + //std::cout << "========================================" << std::endl; + //(*it)->PrintSelf(std::cout, vtkIndent(2)); + } + //delete spl; +} + + +for(int i=0; i<3; i++) + std::cout << "---------------------------------------------" << std::endl; + + + +// ======================================== +// Split on Tag 0008|0032 (Aquisition Time) +// Sort on Position (IPP) +// +// Should give a vector of 'true 3D' vtkImageData* +// ======================================== + + if (1) { + + std::cout << "Try with : Split on Tag 0008|0032 (Aquisition Time) / Sort on Position (IPP)" << std::endl; + + vtkGdcm4DSplitter *spl = new vtkGdcm4DSplitter(); + spl->setFlipY(false); + spl->setDirName(strDirName); + spl->setRecursive(true); + + // Time triger : 0018|1060 + //grSort=0x0018; + //elSort=0x1060; + + // Aquisition Time : 0008|0032 +spl->setSplitOnTag(0x0008, 0x0032); + +spl->setSortOnPosition(); + + std::cout << "Everything set" << std::endl; + bool res=spl->Go(); + + std::cout << "GO() done, status " << res << std::endl; + if(!res) + { + std::cout << "plantage!" << std::endl; + } + + output = spl->GetImageDataVector(); + std::cout << "--------------------------------" << std::endl; std::cout << "Vector size " << output->size() << std::endl; std::cout << "--------------------------------" << std::endl; -std::vector::iterator it; // Print the first one (why not?) -it=output->begin(); -(*it)->PrintSelf(std::cout, vtkIndent(2)); +//(*output)[0]->PrintSelf(std::cout, vtkIndent(2)); + for(it=output->begin(); it!=output->end(); ++it) { + //std::cout << "========================================" << std::endl; + //(*it)->PrintSelf(std::cout, vtkIndent(2)); + } + + // delete spl; +} + // Pour un directory '4D' // en sortie, chaque vtkImageData contiendra un volume au cours du temps. // 3D + T -} - - +}