From: jean-pierre roux Date: Thu, 22 Apr 2010 22:23:13 +0000 (+0000) Subject: Deal with multi study directory X-Git-Tag: CREATOOLS.2-0-3~11 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=creaBruker.git;a=commitdiff_plain;h=2da5837d36be6ef2a73036715343d436231556ff Deal with multi study directory --- diff --git a/lib/src1/bruker2dicom.cxx b/lib/src1/bruker2dicom.cxx index 66d2c9e..05695f4 100644 --- a/lib/src1/bruker2dicom.cxx +++ b/lib/src1/bruker2dicom.cxx @@ -73,20 +73,19 @@ bool Bruker2Dicom::Execute() if (subjectFound ) type = 1; // user passed a 'study else if (acqpFound) type = 2; // user passed a 'serie' else type = 3; // user passed a 'non study' directory; Hope it's a 'set of studies' directory! -/* */ + /* */ // 1 : if subjectFound : user passed a Single Study Directory // 2 : if NOT subjectFound and acqpFound : user passed a Serie Directory // 3 : if NOT subjectFound and NOT acqpFound : user passed a 'non Study Directory' (Hope it's a set of Single Study Directories) - // int type = CheckUserDirectory(InputDirName); + //int type = CheckUserDirectory(InputDirName); switch (type) { case 1: { - bool canOpen; - canOpen =br_subject.LoadFile(subject); + bool canOpen = br_subject.LoadFile(subject); if (!canOpen) { std::cout << "Hopeless! 'subject' found / cannot be open" << std::endl; @@ -100,27 +99,86 @@ bool Bruker2Dicom::Execute() // get info for 'Study Description' - BrukerFieldData b_name=br_subject.GetFieldData("SUBJECT_name_string"); - subject_name = b_name.GetStringValue()[0]; - strPatientName = subject_name; - cleanString(subject_name); - DealWithSingleStudyDirectory (fileNames); - break; - } + BrukerFieldData b_name=br_subject.GetFieldData("SUBJECT_name_string"); + subject_name = b_name.GetStringValue()[0]; + strPatientName = subject_name; + cleanString(subject_name); + DealWithSingleStudyDirectory (fileNames); + break; + } - case 2: { + case 2: { subject_name = "defaultPatName"; strPatientName = subject_name; DealWithSingleStudyDirectory (fileNames); break; - } + } - case 3: { + case 3: { std::cout << " user passed a 'non study' directory; Hope it's a 'set of studies' directory!, not yet dealt with" << std::endl; - } + DealWithMultiStudyDirectory (fileNames); + break; + } } } +// ---------------------------------------------------------------------------------------------------------- + +void Bruker2Dicom::DealWithMultiStudyDirectory (GDCM_NAME_SPACE::DirListType &dirNames) +{ + GDCM_NAME_SPACE::DirListType::iterator it; + + for (it = dirNames.begin(); + it != dirNames.end(); + ++it) + { + if ( boost::filesystem::is_directory(*it) ) + { + if (verbose) + std::cout << "[" << *it << "] is a directory" << std::endl; + + GDCM_NAME_SPACE::DirList dirList(*it, false, true); // DON'T get recursively the list of files + GDCM_NAME_SPACE::DirListType fileNames; + fileNames = dirList.GetFilenames(); + + std::string path = GDCM_NAME_SPACE::Util::GetPath(*(fileNames.begin())); + std::string subject = path + + GDCM_NAME_SPACE::GDCM_FILESEPARATOR + + "subject"; + if (! boost::filesystem::is_regular(subject) ) + { + std::cout << "no [" << subject << "] file found" << std::endl; + continue; + } + + bool canOpen = br_subject.LoadFile(subject); + if (!canOpen) + { + std::cout << "Hopeless! 'subject' found / cannot be open" << std::endl; + throw ( BrukerHopelessException ("Hopeless! 'subject' found in root input directory / cannot be open")); + } + else + { + br_subject.FillMap(); + } + + BrukerFieldData b_name=br_subject.GetFieldData("SUBJECT_name_string"); + subject_name = b_name.GetStringValue()[0]; + strPatientName = subject_name; + cleanString(subject_name); + + DealWithSingleStudyDirectory(fileNames); + } + else + { + if (verbose) + std::cout << "[" << *it << "] is NOT a directory; skipped!" << std::endl; + } + } +} + +// ---------------------------------------------------------------------------------------------------------- + void Bruker2Dicom::DealWithSingleStudyDirectory (GDCM_NAME_SPACE::DirListType &fileNames) { bool res; @@ -246,7 +304,7 @@ void Bruker2Dicom::DealWithSingleStudyDirectory (GDCM_NAME_SPACE::DirListType &f + "." + acqp_scan_name + "." + acqp_method.c_str(); - sprintf(outputDirName, "%s%c%s", tempStringStudyDir.c_str(), //OutputDirName.c_str(), + sprintf(outputDirName, "%s%c%s", tempStringStudyDir.c_str(), //OutputDirName.c_str(), GDCM_NAME_SPACE::GDCM_FILESEPARATOR, strSerieDescr.c_str() ); @@ -900,6 +958,7 @@ void Bruker2Dicom::DealWithNiveau3(std::string &level3Directory, std::string &cu 1, fp); } fclose(fp); + // std::cout << "end writting[" << output2dseqSliceFileName << "]" << std::endl; } // end if mhd @@ -1233,11 +1292,8 @@ void Bruker2Dicom::cleanString(std::string &s) GDCM_NAME_SPACE::Util::ReplaceSpecChar(s, repChar); } - - // =========================================================================================== - void Bruker2Dicom::getImhDataType(BrukerFieldData &bDPT, std::string &mhdDataPixelType, int &pixelSize) { if(bDPT.GetDataType() == "string") diff --git a/lib/src1/bruker2dicom.h b/lib/src1/bruker2dicom.h index 76290d6..3146026 100644 --- a/lib/src1/bruker2dicom.h +++ b/lib/src1/bruker2dicom.h @@ -76,7 +76,7 @@ void cleanString(std::string &s); bool CreateDirectory(std::string &dirNameout); int CheckUserDirectory(std::string &userDirName); - +void DealWithMultiStudyDirectory(GDCM_NAME_SPACE::DirListType &fileNames); void DealWithSingleStudyDirectory(GDCM_NAME_SPACE::DirListType &fileNames); void DealWithNiveau1(std::string &level1Directory, std::string ¤tOutputDirName); void DealWithNiveau2(std::string &level2Directory, std::string ¤tOutputDirName);