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;
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");
<< " === [" << 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)
{
// =====================================================================
-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
//
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;
7 1
*/
try {
- DealWithNiveau2(*it, outputDirName);
+ DealWithNiveau2(*it, strOutputDirName);
}
catch (BrukerHopelessException &e)
{
// =====================================================================
-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
//
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)
{
// =====================================================================
//
-void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string currentOutputDirName){
+void Bruker2Dicom::DealWithNiveau3(std::string &level3Directory, std::string ¤tOutputDirName){
//
// e.g. at level 3, in
{
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'"));
} // 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;
<<std::endl;
if ( ! boost::filesystem::is_directory(OutputDirName) ) // dirout not found
{
- std::string strDirNameout(OutputDirName); // to please gcc 4
- systemCommand = "mkdir " + strDirNameout; // create it!
+ systemCommand = "mkdir " + OutputDirName; // create it!
if (verbose)
std::cout << systemCommand << std::endl;
system (systemCommand.c_str());
if (verbose)
std::cout << "Output Directory [" << OutputDirName << "] already exists; Used as is." << std::endl;
}
-
return 1;
-
}