#include "bruker2dicom.h"
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
#ifndef PATH_MAX // If not defined yet : do it
#define PATH_MAX 2048
bool Bruker2Dicom::Execute()
{
- // ----- Begin Processing -----
+ // ----- Check input values -----
bool bigEndian = GDCM_NAME_SPACE::Util::IsCurrentProcessorBigEndian();
- if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(InputDirName) )
+ //if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(InputDirName) )
+ if ( ! boost::filesystem::is_directory(InputDirName) )
{
std::cout << "KO : [" << InputDirName << "] is not a Directory." << std::endl;
return 0;
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;
bool canOpen;
std::string outputFileName;
+
// BrukerDataSet br_subject;
std::string subject;
subject = GDCM_NAME_SPACE::Util::GetPath(*(fileNames.begin()))+
// get info for 'Study Description'
- /*
- BrukerFieldData b_protocol_location=br_acqp.GetFieldData("ACQ_protocol_location");
- acqp_protocol_location = b_protocol_location.GetStringValue()[0];
- cleanString(acqp_protocol_location);
-*/
+
BrukerFieldData b_name=br_subject.GetFieldData("SUBJECT_name_string");
std::string subject_name = b_name.GetStringValue()[0];
strPatientName = subject_name;
BrukerFieldData b_study_name=br_subject.GetFieldData("SUBJECT_study_name");
std::string subject_study_name = b_study_name.GetStringValue()[0];
- subject_study_name = subject_study_name.substr(1, subject_study_name.size()-2);
+ subject_study_name = subject_study_name.substr(1, subject_study_name.size()-2);
cleanString(subject_date);
- strStudyDescr = subject_name + "-" + subject_study_name + "-" + subject_entry + "-" + subject_position + "-" + subject_date;
-
+ strStudyDescr = subject_name + "." + subject_study_name + "." + subject_entry + "." + subject_position + "." + subject_date;
+
char outputDirName[(unsigned int) PATH_MAX+2];
strStudyUID = GDCM_NAME_SPACE::Util::CreateUniqueUID();
// -----------------------------------------------------
// Iterate to ALL the objets(files/directories) found in the input directory
// (this is level ZERO)
+ // each Directory (name : 1, 2, 3, ...) will be a Dicom Serie
// -----------------------------------------------------
GDCM_NAME_SPACE::DirListType::iterator it;
it != fileNames.end();
++it)
{
- if ( GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+ if ( boost::filesystem::is_directory(*it) )
{
if (verbose)
std::cout << "[" << *it << "] is a directory" << std::endl;
nbSlices = b_list_size.GetIntValue()[0];
strSerieDescr = GDCM_NAME_SPACE::Util::GetName(*it)
- + "-" + acqp_protocol_location
- + "-" + acqp_scan_name
- + "-" + acqp_method.c_str();
+ + "." + acqp_protocol_location
+ + "." + acqp_scan_name
+ + "." + acqp_method.c_str();
sprintf(outputDirName, "%s%c%s", OutputDirName.c_str(),
GDCM_NAME_SPACE::GDCM_FILESEPARATOR,
strSerieDescr.c_str() );
+ std::cout << " ================================================================================\n"
+ << " === [" << GDCM_NAME_SPACE::Util::GetName(*it) << "] -> [" << strSerieDescr << "]\n"
+ << " ================================================================================"
+ << std::endl;
+
+/*
std::cout << " ================================================================================\n"
<< " ========================= [" << GDCM_NAME_SPACE::Util::GetName(*it).c_str()
<< acqp_protocol_location.c_str()
<< "]\n"
<< " ================================================================================"
<< std::endl;
-
+*/
if (verbose)
printf ("outputDirName [%s]\n", outputDirName);
it != fileNames.end();
++it)
{
- if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+ if ( boost::filesystem::is_regular(*it) )
+ //if ( ! boost::filesystem::is_directory(*it) )
{
if (verbose)
- std::cout << "--- [" << *it << "] is a file" << std::endl;
+ std::cout << "--- [" << *it << "] is a file." << std::endl;
}
}
it != fileNames.end();
++it)
{
- if ( GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+ if ( boost::filesystem::is_directory(*it) )
{
// will be always "pdata" ...
if (verbose)
it != fileNames.end();
++it)
{
- if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+ if ( ! boost::filesystem::is_directory(*it) )
{
- std::cout << "--- --- [" << *it << "] is a file" << std::endl;
+ std::cout << "--- --- [" << *it << "] is a file.." << std::endl;
}
}
it != fileNames.end();
++it)
{
- if ( GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+ if ( boost::filesystem::is_directory(*it) )
{
if (verbose)
str_isa_func_name = b_isa_func_name.GetStringValue()[0];
cleanString(str_isa_func_name);
- sprintf(outputDirName, "%s%c%s-%s", currentOutputDirName.c_str(),
+ sprintf(outputDirName, "%s%c%s.%s", currentOutputDirName.c_str(),
GDCM_NAME_SPACE::GDCM_FILESEPARATOR,
GDCM_NAME_SPACE::Util::GetName(*it).c_str(),
str_isa_func_name.c_str());
sprintf(char_d3proc,"%s%c%s", level3Directory.c_str(), GDCM_NAME_SPACE::GDCM_FILESEPARATOR,"d3proc" );
if (verbose)
- std::cout << "--- => [" << char_d3proc << "]" << std::endl;
+ std::cout << "try d3proc: --- => [" << char_d3proc << "]" << std::endl;
std::string str_d3proc(char_d3proc);
canOpen = br_d3proc.LoadFile(str_d3proc);
// GDCM_NAME_SPACE::GDCM_FILESEPARATOR +
// "d3proc";
if (verbose)
- std::cout << "--- => [" << char_reco << "]" << std::endl;
+ std::cout << "try reco --- => [" << char_reco << "]" << std::endl;
std::string str_reco(char_reco);
canOpen = br_reco.LoadFile(str_reco);
std::cout << "FOV (ds method) " << fovX << " " << fovY << std::endl;
/// \TODO probabely a more sophisticated accessor will be necessary :
- /// (cf : non contiguous slices, overlapping, slice thickness, space between clices, etc)
+ /// (cf : non contiguous slices, overlapping, slice thickness, space between slices, etc)
BrukerFieldData bsliceDistance = br_method.GetFieldData("PVM_SPackArrSliceDistance");
double sliceDistance = bsliceDistance.GetDoubleValue()[0];
exit (0);
}
- unsigned char * buffer_2dseq = new unsigned char[NX*NY*pixelSize*nbSlices*nbInstants];
+ unsigned char *buffer_2dseq = new unsigned char[NX*NY*pixelSize*nbSlices*nbInstants];
///\ TODO : find a safer way to be sure to read everything!
size_t lgr = fread(buffer_2dseq, 1, NX*NY*pixelSize*nbSlices*nbInstants, fp);
std::cout << "Single instant : do not split" << std::endl;
if (mhd)
{
- sprintf(outputMhdFileName, "%s%cMhdData_Toutes_les_Slices.mhd", currentOutputMhdDirName,
+ sprintf(outputMhdFileName, "%s%cMhdData_All_the_Slices.mhd", currentOutputMhdDirName,
GDCM_NAME_SPACE::GDCM_FILESEPARATOR);
fp=fopen(outputMhdFileName, "w");
if (!fp)
fprintf(fp, "CenterOfRotation = 0 0 0\n" );
fprintf(fp, "ElementNumberOfChannels = 1\n" );
fprintf(fp, "ElementType = %s\n", mhdDataPixelType.c_str() );
- fprintf(fp, "ElementDataFile = %s\n", "../2dseq_toutes_les_Slices" );
+ fprintf(fp, "ElementDataFile = %s\n", "../2dseq_All_the_Slices" );
fclose(fp);
}
- sprintf(output2dseqSliceFileName, "%s%c2dseq_toutes_les_Slices",
+ sprintf(output2dseqSliceFileName, "%s%c2dseq_All_the_Slices",
currentOutputDirName.c_str(), GDCM_NAME_SPACE::GDCM_FILESEPARATOR);
fp=fopen(output2dseqSliceFileName, "wb");
if (!fp)
} // end if mhd
if (dicom)
{
- sprintf(output2dseqSliceFileName, "%s%c2dseq_toutes_les_Slices.dcm",
+ sprintf(output2dseqSliceFileName, "%s%c2dseq_All_the_Slices.dcm",
currentOutputDirName.c_str(), GDCM_NAME_SPACE::GDCM_FILESEPARATOR);
/* ----------- Write Dicom Image ---------------*/
// Interleaved !
// it's (slice1,slide2, ...)t1 ; (slice1,slide2, ...)t2 ; ...
- unsigned char * pixelsForCurrentSlice = new unsigned char[NX*NY*pixelSize*nbInstants];
+ unsigned char *pixelsForCurrentSlice = new unsigned char[NX*NY*pixelSize*nbInstants];
k = 0;
for (sliceNb=0; sliceNb<nbSlices; sliceNb++)
it != fileNames.end();
++it)
{
- if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+ if ( boost::filesystem::is_regular(*it) )
+ //if ( ! boost::filesystem::is_directory(*it) )
{
if (verbose)
- std::cout << "--- [" << *it << "] is a file" << std::endl;
+ std::cout << "--- [" << *it << "] is a file..." << std::endl;
icode = 0;
if (verbose)
std::cout << "Check for output directory :[" << OutputDirName << "]."
- <<std::endl;
- if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(OutputDirName) ) // dirout not found
+ <<std::endl;
+ if ( ! boost::filesystem::is_directory(OutputDirName) ) // dirout not found
{
- std::string strDirNameout(OutputDirName); // to please gcc 4
+ std::string strDirNameout(OutputDirName); // to please gcc 4
systemCommand = "mkdir " + strDirNameout; // create it!
if (verbose)
std::cout << systemCommand << std::endl;
system (systemCommand.c_str());
- if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(OutputDirName) ) // be sure it worked
+ if ( ! boost::filesystem::is_directory(OutputDirName) ) // be sure it worked
{
if (verbose)
std::cout << "KO : not a dir : [" << OutputDirName << "] (creation failure ?)" << std::endl;
return imageSet;
}
-
// ===========================================================================================
void Bruker2Dicom::MakeDicomImage(unsigned char *tabPixels,