acqpFound= true;
else
acqpFound = false; // user passed a 'non study' directory; Hope it's a 'set of studies' directory!
-
- int type;
+
+ 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);
+ //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;
// 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: {
- std::cout << " user passed a 'non study' directory; Hope it's a 'set of studies' directory!, not yet dealt with" << std::endl;
- }
+ }
+
+ case 3: {
+ std::cout << " user passed a 'non study' directory; Hope it's a *non recursive* 'set of studies' directory! (recursive 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;
if (subjectFound)
{
+
+ std::cout << "===================================--===========nom dir [" << tempStringPatDir << "] subjectFound, studyName : " << subject_study_name<< std::endl;
BrukerFieldData b_entry=br_subject.GetFieldData("SUBJECT_entry");
subject_entry = b_entry.GetStringValue()[0];
//cleanString(subject_entry);
}
else // Desperate trick when file 'subject' is missing
{
+
+ std::cout << "==============================================nom dir [" << tempStringPatDir << "] subjectFound" << std::endl;
subject_entry = "HeadFirst"; // Why not?
subject_position = "Supine"; // Why not?
strStudyTimeDate = "06_06_06_6_June_1666"; // Why not?
// each Directory (name : 1, 2, 3, ...) will be a Dicom Serie
// -----------------------------------------------------
+ /// \TODO better use directory iterator, from boost! // JPR
GDCM_NAME_SPACE::DirListType::iterator it;
for (it = fileNames.begin();
if (verbose)
std::cout << "[" << *it << "] is a directory" << std::endl;
- if((*it) == "AdjStatePerStudy") // avoid trouble with new version 'AdjStatePerStudy' directory
+ //if((*it) == "AdjResult") // avoid trouble with new version 'AdjResult' directory
+ if(GDCM_NAME_SPACE::Util::GetName(*it) == "AdjResult")
continue;
//BrukerDataSet br_acqp;
+ "." + 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() );
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);
+ std::string strOutputDirName(outputDirName);
//br1.PrintSelf();
std::string strMethod;
{
sprintf(currentOutputMhdDirName, "%s%c%s", currentOutputDirName.c_str(),
GDCM_NAME_SPACE::GDCM_FILESEPARATOR, "MhdFiles");
- std::string strCurrentOutputMhdDirName(currentOutputMhdDirName);
+ std::string strCurrentOutputMhdDirName(currentOutputMhdDirName);
res = CreateDirectory( strCurrentOutputMhdDirName );
if (!res) {
std::cout << "[" << currentOutputDirName << "] Directory creation failure " << std::endl;
fprintf(fp, "DimSize = %d %d %d\n", NX, NY, nbSlices );
fprintf(fp, "HeaderSize = %d\n", 0);
//fprintf(fp, "ElementSpacing = %lf %lf %lf\n",fovX/NY, fovY/NY, sliceDistance );
- fprintf(fp, "ElementSpacing = %lf %lf %lf\n", spatResolX, spatResolY, sliceDistance );
+ fprintf(fp, "ElementSpacing = %lf %lf %lf\n", spatResolX, spatResolY, sliceDistance );
fprintf(fp, "Position = 0 0 %d\n", 0 );
fprintf(fp, "Offset = 0 0 0\n" );
fprintf(fp, "CenterOfRotation = 0 0 0\n" );
1, fp);
}
fclose(fp);
+
// std::cout << "end writting[" << output2dseqSliceFileName << "]" << std::endl;
} // end if mhd
GDCM_NAME_SPACE::Util::ReplaceSpecChar(s, repChar);
}
-
-
// ===========================================================================================
-
void Bruker2Dicom::getImhDataType(BrukerFieldData &bDPT, std::string &mhdDataPixelType, int &pixelSize)
{
if(bDPT.GetDataType() == "string")