From bc44fc75154847637a0bd24efea6338db738e4da Mon Sep 17 00:00:00 2001 From: jean-pierre roux Date: Thu, 22 Apr 2010 17:19:28 +0000 Subject: [PATCH] First stage to allow user to pass a 'multi study' directory --- lib/src1/bruker2dicom.cxx | 197 +++++++++++++++++++++++++------------- lib/src1/bruker2dicom.h | 23 +++-- 2 files changed, 145 insertions(+), 75 deletions(-) diff --git a/lib/src1/bruker2dicom.cxx b/lib/src1/bruker2dicom.cxx index bfdb802..66d2c9e 100644 --- a/lib/src1/bruker2dicom.cxx +++ b/lib/src1/bruker2dicom.cxx @@ -35,68 +35,95 @@ bool Bruker2Dicom::Execute() throw ( BrukerHopelessException ("Output directory creation failure ")); } - std::string strDirNamein(InputDirName); - GDCM_NAME_SPACE::DirList dirList(strDirNamein, false, true); // DON'T get recursively the list of files - std::string strDirNameout(OutputDirName); - -/* - if (listonly) - { - std::cout << "------------List of found files ------------" << std::endl; - dirList.Print(); - std::cout << std::endl; - return 1; - } -*/ - // // e.g : at level 0, in : B67d1.Bp1 // // 1 2 3 4 5 6 AdjStatePerStudy subject // + std::string strDirNamein(InputDirName); + +/* */ + GDCM_NAME_SPACE::DirList dirList(strDirNamein, false, true); // DON'T get recursively the list of files + GDCM_NAME_SPACE::DirListType fileNames; fileNames = dirList.GetFilenames(); - bool canOpen; - std::string outputFileName; - // BrukerDataSet br_subject; - std::string subject; - subject = GDCM_NAME_SPACE::Util::GetPath(*(fileNames.begin()))+ - GDCM_NAME_SPACE::GDCM_FILESEPARATOR + - "subject"; - if (verbose) - std::cout << " Subject : [" << subject << "]" << std::endl; - - bool subjectFound; - canOpen =br_subject.LoadFile(subject); - if (!canOpen) - { - //std::cout << "Hopeless! no 'subject' found" << std::endl; - //throw ( BrukerHopelessException ("Hopeless! no 'subject' found in root input directory ")); + std::string path = GDCM_NAME_SPACE::Util::GetPath(*(fileNames.begin())); + + std::string subject = path + + GDCM_NAME_SPACE::GDCM_FILESEPARATOR + + "subject"; + + std::string acqp = path + + GDCM_NAME_SPACE::GDCM_FILESEPARATOR + + "acqp"; + + if ( boost::filesystem::is_regular(subject) ) + subjectFound = true; + else + subjectFound = false; // user passed only a 'serie', not a 'study + + if ( boost::filesystem::is_regular(acqp) ) + acqpFound= true; + else + acqpFound = false; // user passed a 'non study' directory; Hope it's a 'set of studies' directory! - std::cout << "Not too much hope! no 'subject' found (Desperate try will be performed -default values- )" << std::endl; - subjectFound = false; - } - else - { - br_subject.FillMap(); - subjectFound = true; - } + int type; + 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); + + switch (type) + { + case 1: { + bool canOpen; + 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(); + } //br_subject.PrintSelf(); // get info for 'Study Description' - if (subjectFound) - { - BrukerFieldData b_name=br_subject.GetFieldData("SUBJECT_name_string"); - subject_name = b_name.GetStringValue()[0]; - strPatientName = subject_name; - cleanString(subject_name); - } - else - subject_name ="defaultPatName"; - + 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: { + subject_name = "defaultPatName"; + strPatientName = subject_name; + DealWithSingleStudyDirectory (fileNames); + break; + } + + case 3: { + std::cout << " user passed a 'non study' directory; Hope it's a 'set of studies' directory!, not yet dealt with" << std::endl; + } + } +} + +void Bruker2Dicom::DealWithSingleStudyDirectory (GDCM_NAME_SPACE::DirListType &fileNames) +{ + bool res; // creation directory : 'nom du patient' std::string tempStringPatDir(OutputDirName); tempStringPatDir = tempStringPatDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR + subject_name; @@ -105,13 +132,8 @@ bool Bruker2Dicom::Execute() if (!res) { std::cout << "[" << tempStringPatDir << "] Directory creation failure " << std::endl; throw ( BrukerHopelessException ("Patient directory creation failure ")); - } + } - std::string subject_entry; - std::string subject_position; - std::string subject_date; - std::string subject_study_name; - if (subjectFound) { BrukerFieldData b_entry=br_subject.GetFieldData("SUBJECT_entry"); @@ -232,11 +254,11 @@ bool Bruker2Dicom::Execute() << " === [" << GDCM_NAME_SPACE::Util::GetName(*it) << "] -> [" << strSerieDescr << "]\n" << " ================================================================================" << std::endl; - + std::string strOutputDirName(outputDirName); if (verbose) - printf ("outputDirName [%s]\n", outputDirName); + printf ("outputDirName [%s]\n", outputDirName); try { - DealWithNiveau1(*it, outputDirName); + DealWithNiveau1(*it, strOutputDirName); } catch (BrukerHopelessException &e) { @@ -249,7 +271,7 @@ bool Bruker2Dicom::Execute() // ===================================================================== -void Bruker2Dicom::DealWithNiveau1(std::string level1Directory, std::string currentOutputDirName) { +void Bruker2Dicom::DealWithNiveau1(std::string &level1Directory, std::string ¤tOutputDirName) { // // e.g. : at level 1, in B67d1.Bp1/6 // @@ -308,6 +330,7 @@ void Bruker2Dicom::DealWithNiveau1(std::string level1Directory, std::string curr sprintf(outputDirName, "%s%c%s", currentOutputDirName.c_str(), GDCM_NAME_SPACE::GDCM_FILESEPARATOR, GDCM_NAME_SPACE::Util::GetName(*it).c_str()); + std::string strOutputDirName(outputDirName); //br1.PrintSelf(); std::string strMethod; @@ -350,7 +373,7 @@ void Bruker2Dicom::DealWithNiveau1(std::string level1Directory, std::string curr 7 1 */ try { - DealWithNiveau2(*it, outputDirName); + DealWithNiveau2(*it, strOutputDirName); } catch (BrukerHopelessException &e) { @@ -363,7 +386,7 @@ void Bruker2Dicom::DealWithNiveau1(std::string level1Directory, std::string curr // ===================================================================== -void Bruker2Dicom::DealWithNiveau2(std::string level2Directory, std::string currentOutputDirName) { +void Bruker2Dicom::DealWithNiveau2(std::string &level2Directory, std::string ¤tOutputDirName) { // e.g. : at level 2 in B67d1.Bp1/6/pdata // @@ -447,8 +470,9 @@ void Bruker2Dicom::DealWithNiveau2(std::string level2Directory, std::string curr GDCM_NAME_SPACE::Util::GetName(*it).c_str(), str_isa_func_name.c_str()); } + std::string strOutputDirName(outputDirName); try { - DealWithNiveau3(*it, outputDirName); + DealWithNiveau3(*it, strOutputDirName); } catch (BrukerHopelessException &e) { @@ -470,7 +494,7 @@ void Bruker2Dicom::DealWithNiveau2(std::string level2Directory, std::string curr // ===================================================================== // -void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string currentOutputDirName){ +void Bruker2Dicom::DealWithNiveau3(std::string &level3Directory, std::string ¤tOutputDirName){ // // e.g. at level 3, in @@ -670,7 +694,9 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr { sprintf(currentOutputMhdDirName, "%s%c%s", currentOutputDirName.c_str(), GDCM_NAME_SPACE::GDCM_FILESEPARATOR, "MhdFiles"); - res = CreateDirectory( currentOutputMhdDirName ); + std::string strCurrentOutputMhdDirName(currentOutputMhdDirName); + + res = CreateDirectory( strCurrentOutputMhdDirName ); if (!res) { std::cout << "[" << currentOutputDirName << "] Directory creation failure " << std::endl; throw ( BrukerHopelessException ("Hopeless!FillMap failed on 'reco'")); @@ -1108,9 +1134,47 @@ void Bruker2Dicom::dealWithCarto(GDCM_NAME_SPACE::DirListType &fileNames, int NX } // end method +// ========================================================================================================== + +int Bruker2Dicom::CheckUserDirectory(std::string &userDirName) +{ + GDCM_NAME_SPACE::DirList dirList(userDirName, 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"; + + std::string acqp = path + + GDCM_NAME_SPACE::GDCM_FILESEPARATOR + + "acqp"; + + if ( boost::filesystem::is_regular(subject) ) + subjectFound = true; // user passed a 'study + else + subjectFound = false; // user didnt' pass a 'study + + if ( boost::filesystem::is_regular(acqp) ) + acqpFound= true; // user passes a 'serie', not a 'study' + else + acqpFound = false; // user passed a 'non study' directory; Hope it's a 'set of studies' directory! + + int type; + 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! + + return type; +} + + // ========================================================================================================== -bool Bruker2Dicom::CreateDirectory(std::string OutputDirName) +bool Bruker2Dicom::CreateDirectory(std::string &OutputDirName) { std::string systemCommand; @@ -1119,8 +1183,7 @@ bool Bruker2Dicom::CreateDirectory(std::string OutputDirName) <