// ----- Check input directory name -----
bool bigEndian = GDCM_NAME_SPACE::Util::IsCurrentProcessorBigEndian();
-
+
//if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(InputDirName) )
if ( ! boost::filesystem::is_directory(InputDirName) )
{
//
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();
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)
else
{
br_subject.FillMap();
- }
- //br_subject.PrintSelf();
-
- // 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);
+ // 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;
}
case 2: {
- subject_name = "defaultPatName";
- strPatientName = subject_name;
- DealWithSingleStudyDirectory (fileNames);
- break;
+ subject_name = "defaultPatName";
+ strPatientName = subject_name;
+ DealWithSingleStudyDirectory (fileNames);
+ break;
}
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;
+ 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;
}
{
if ( boost::filesystem::is_directory(*it) )
{
+ subjectFound = false;
if (verbose)
- std::cout << "[" << *it << "] is a directory" << std::endl;
+ std::cout << "in 'DealWithMultiStudyDirectory' [" << *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 +
std::cout << "no [" << subject << "] file found" << std::endl;
continue;
}
-
+
bool canOpen = br_subject.LoadFile(subject);
if (!canOpen)
{
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);
+ subjectFound = true; // Hope so! (full checking needed!)
+
+ BrukerFieldData b_name=br_subject.GetFieldData("SUBJECT_name_string");
+ subject_name = b_name.GetStringValue()[0];
+ strPatientName = subject_name;
+ cleanString(subject_name);
+ DealWithSingleStudyDirectory(fileNames);
+ }
}
else
{
// creation directory : 'nom du patient'
std::string tempStringPatDir(OutputDirName);
tempStringPatDir = tempStringPatDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR + subject_name;
-
+
res=CreateDirectory(tempStringPatDir);
if (!res) {
std::cout << "[" << tempStringPatDir << "] Directory creation failure " << std::endl;
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?
}
// subject_name is already in 'Patient Name'
strStudyDescr = /*subject_name + "." + */ subject_study_name + "." + subject_entry + "." + subject_position + "." + subject_date;
-
+
// creation directory : 'nom de la Study'
-
+
std::string tempStringStudyDir(OutputDirName);
tempStringStudyDir = tempStringPatDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR + strStudyDescr;
-
+
res=CreateDirectory(tempStringStudyDir);
if (!res) {
std::cout << "[" << tempStringStudyDir << "] Directory creation failure " << std::endl;
throw ( BrukerHopelessException ("Study directory creation failure "));
}
-
+
char outputDirName[(unsigned int) PATH_MAX+2];
strStudyUID = GDCM_NAME_SPACE::Util::CreateUniqueUID();
// (this is level ZERO)
// 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;
BrukerFieldData b_method=br_acqp.GetFieldData("ACQ_method");
b_method.PrintSelf();
acqp_method = b_method.GetStringValue()[0];
-
+
cleanString(acqp_method);
//std::cout << "out of br_acqp.FillMap 3" << std::endl;
BrukerFieldData b_list_size = br_acqp.GetFieldData("ACQ_O1_list_size");
//std::cout << "out of br_acqp.FillMap 4" << std::endl;
//b_list_size.PrintSelf(); //JP
-
+
nbSlices = b_list_size.GetIntValue()[0];
//std::cout << "out of br_acqp.FillMap 5" << std::endl;
strSerieDescr = GDCM_NAME_SPACE::Util::GetName(*it)
sprintf(outputDirName, "%s%c%s", tempStringStudyDir.c_str(), //OutputDirName.c_str(),
GDCM_NAME_SPACE::GDCM_FILESEPARATOR,
strSerieDescr.c_str() );
-
+
std::cout << " ================================================================================\n"
<< " === [" << GDCM_NAME_SPACE::Util::GetName(*it) << "] -> [" << strSerieDescr << "]\n"
<< " ================================================================================"
##$PVM_NSPacks=2
##$PVM_SPackArrNSlices=( 2 )
7 1
- */
+ */
try {
DealWithNiveau2(*it, strOutputDirName);
}
std::cout << "--- --- [" << *it << "] is a file.." << std::endl;
}
}
-
+
for (it = fileNames.begin();
it != fileNames.end();
++it)
// "d3proc";
if (verbose)
std::cout << "reco: --- => [" << char_reco << "]" << std::endl;
-
+
std::string str_reco(char_reco);
canOpen = br_reco.LoadFile(str_reco);
if (verbose)
std::cout << "[" << str_reco << "] successfully Loaded " << std::endl;
}
-
+
canOpen = br_reco.FillMap();
if (!canOpen)
{
if (verbose)
std::cout << "[" << str_reco << "] successfully Mapped" << std::endl;
}
-
+
//std::cout << "------------------------------------------------------------------------------------------------" << std::cout;
// br_reco.PrintSelf();
// std::cout << "------------------------------------------------------------------------------------------------" << std::cout;
double spatResolY = spatResol.GetDoubleValue()[1];
if (verbose)
std::cout << "SpatResol (ds method) " << spatResolX << " " << spatResolY << std::endl;
-
+
*/
/* ------ */
BrukerFieldData size = br_reco.GetFieldData("RECO_size");
double sizeX = size.GetDoubleValue()[0];
double sizeY = size.GetDoubleValue()[1];
-
+
if (verbose)
std::cout << "SIZE (ds reco) " << sizeX << " " << sizeY << std::endl;
-
+
double spatResolX = fovX / sizeX;
double spatResolY = fovY / sizeY;
-
+
if (verbose)
std::cout << "spatResol (ds reco : fov/size) " << spatResolX << " " << spatResolY << std::endl;
/// \TODO probabely a more sophisticated accessor will be necessary :
/// (cf : non contiguous slices, overlapping, slice thickness, space between slices, etc)
-
+
BrukerFieldData bsliceDistance = br_method.GetFieldData("PVM_SPackArrSliceDistance");
double sliceDistance = bsliceDistance.GetDoubleValue()[0];
-
+
if (verbose)
std::cout << "SPackArrSliceDistance (ds method) " << sliceDistance << std::endl;
1, fp);
}
fclose(fp);
-
+
// std::cout << "end writting[" << output2dseqSliceFileName << "]" << std::endl;
} // end if mhd
1, fp);
}
fclose(fp);
-
+
fp=fopen(output2dseqSliceFileName, "rb");
if (!fp)
{
*/
/* ----------- Write Dicom Image ---------------*/
-
+
int frameSize = NX*NY*pixelSize;
for (instantNb=0; instantNb<nbInstants; instantNb++)
{
copyFile, currentOutputDirName, outputMhdFileName, output2dseqCartoName);
}
-
// ===========================================================================================
void Bruker2Dicom::dealWithCarto(GDCM_NAME_SPACE::DirListType &fileNames, int NX, int NY, int nbSlices,
// -----------------------------------------------------
// deal with MatLab-generated Carto file.
// -----------------------------------------------------
-
+
const char *code[] = { "ADC", "adc", "TTP", "ttp", "PEAK", "peak", "" }; // add more carto file name identifiers if necessary; end with ""
const char *separator[] = { "_", ".", "-", "" }; // add more, if necessary, to ckeck for 2dseq.ADC, 2dseq_ADC, 2dseq-ADC, etc; end with ""
int icode;
if (verbose)
std::cout << "--- End writing Carto DICOM file [" << output2dseqCartoName << "]" << std::endl;
break; // don't check for more ident on same file name!
-
+
} // end deal with _ADC, -adc, etc
iseparator ++;
} // end iterate speparators
} // end iterate on all objects (files, dir, etc)
} // end method
-
// ==========================================================================================================
int Bruker2Dicom::CheckUserDirectory(std::string &userDirName)
return type;
}
-
// ==========================================================================================================
-
+
bool Bruker2Dicom::CreateDirectory(std::string &OutputDirName)
{
std::string systemCommand;
return 1;
}
-
// ===========================================================================================
/// \TODO move cleanString to 'crea' ?
// Cross your fingers !!!
// pb : found values : 2, 3, 5
-
+
if (brukerDataPixelType == 2) {
mhdDataPixelType = "MET_USHORT";
pixelSize = 2;
std::map<std::string, BrukerFieldData> map = br_acqp.GetBrukerHeaderMap();
bool result = br_acqp.ObjectVaryingProperties.init(map,tempVect);
-
+
if (result == false)
{
throw ( BrukerInitException ("ObjectVaryingProperties.init() failure in Bruker2Dicom::CreateImageSet()") );
BrukerImage image(br_acqp,br_reco);
image.Init(br_acqp,br_reco,1);
-
+
for(int i=0;i<brukerImageList.size();i++)
{
image.Init(br_acqp,br_reco,i);
imageSet.push_back(image);
}
-
+
// Just for checking
/*
-
+
std::vector<std::vector <double> > imageOrientation;
std::vector <double> imagePosition;
for(int i=0;i<brukerImageList.size();i++)
{
// fread(buffer_2dseq, NX*NY*pixelSize*nbSlices*nbInstants, 1, fp);
-
+
imagePosition = imageSet[i].getTranslationVectorRPS2XYZ();
std::cout << "Position " << imagePosition[0] << " "
<< imagePosition[1] << " " << imagePosition[2] ;
std::cout << "\t Orientation " ;
for(int i1=0; i1<3;i1++)for(int i2=0; i2<3;i2++)
std::cout << imageOrientation[i1][i2] << " ";CreateImageSet
-
+
//std::cout << "\t Abs Time " << imageSet[i].getAbsoluteTimePosition();
std::cout << "\t Relat Time " << imageSet[i].getRelativeTimePosition();
std::string &serieDescr,
std::string &strStudyTimeDate,
int imgNum,
- GDCM_NAME_SPACE::ImageContentType contentType
+ GDCM_NAME_SPACE::ImageContentType contentType
)
{
std::ostringstream str;