]> Creatis software - creaBruker.git/blobdiff - lib/src1/bruker2dicom.cxx
Try double check
[creaBruker.git] / lib / src1 / bruker2dicom.cxx
index b41186ac00488acc07e8ebf5373c8a687ae51ab9..737131192fa455e3b24bcd6484f30d1331931bd0 100644 (file)
@@ -1,14 +1,21 @@
 #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
+#endif 
 
 
 
 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;
@@ -73,7 +80,7 @@ bool Bruker2Dicom::Execute()
 
   // 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);
@@ -103,7 +110,7 @@ bool Bruker2Dicom::Execute()
         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];
 
@@ -112,6 +119,7 @@ bool Bruker2Dicom::Execute()
    // -----------------------------------------------------
    // 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;
@@ -120,7 +128,8 @@ bool Bruker2Dicom::Execute()
          it != fileNames.end();
        ++it)
    {
-      if ( GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+      if ( !boost::filesystem::is_regular(*it) ) // check twice !
+      if ( boost::filesystem::is_directory(*it) )
       { 
          if (verbose)
             std::cout << "[" << *it << "] is a directory" << std::endl;
@@ -156,14 +165,20 @@ bool Bruker2Dicom::Execute()
          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()
@@ -172,7 +187,7 @@ bool Bruker2Dicom::Execute()
                    << "]\n"
                    << " ================================================================================"
                    << std::endl;
-
+*/
         if (verbose)
            printf ("outputDirName [%s]\n", outputDirName);   
 
@@ -208,7 +223,8 @@ void Bruker2Dicom::DealWithNiveau1(std::string level1Directory, std::string curr
         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;
@@ -222,7 +238,8 @@ void Bruker2Dicom::DealWithNiveau1(std::string level1Directory, std::string curr
         it != fileNames.end();
       ++it)
    {
-      if ( GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+      if ( !boost::filesystem::is_regular(*it) ) // check twice !  
+      if ( boost::filesystem::is_directory(*it) )
       {
          // will be always "pdata" ...
          if (verbose)
@@ -318,7 +335,8 @@ void Bruker2Dicom::DealWithNiveau2(std::string level2Directory, std::string curr
         it != fileNames.end();
       ++it)
    {
-      if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+      if ( !boost::filesystem::is_regular(*it) ) 
+      //if ( ! boost::filesystem::is_directory(*it) )
       { 
          std::cout << "--- --- [" << *it << "] is a file" << std::endl;
       }
@@ -329,7 +347,8 @@ void Bruker2Dicom::DealWithNiveau2(std::string level2Directory, std::string curr
          it != fileNames.end();
        ++it)
    {
-      if ( GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+      if ( !boost::filesystem::is_regular(*it) ) // check twice !
+      if ( boost::filesystem::is_directory(*it) )
       { 
   
          if (verbose)
@@ -365,7 +384,7 @@ void Bruker2Dicom::DealWithNiveau2(std::string level2Directory, std::string curr
              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());
@@ -551,7 +570,7 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr
       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);
 
@@ -565,7 +584,7 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr
        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)
@@ -587,10 +606,10 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr
                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)
@@ -606,7 +625,7 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr
        }  // 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  ---------------*/
@@ -635,7 +654,7 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr
           // 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++)
@@ -802,7 +821,8 @@ void Bruker2Dicom::dealWithCarto(GDCM_NAME_SPACE::DirListType &fileNames, int NX
         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;
@@ -920,15 +940,15 @@ bool Bruker2Dicom::CreateDirectory(std::string OutputDirName)
    
    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;