]> Creatis software - creaBruker.git/blobdiff - lib/src1/bruker2dicom.cxx
Code cleaning
[creaBruker.git] / lib / src1 / bruker2dicom.cxx
index b41186ac00488acc07e8ebf5373c8a687ae51ab9..710129b778aaac8994e8f5d27330b037def324b2 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;
@@ -30,7 +37,7 @@ bool Bruker2Dicom::Execute()
    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;
@@ -51,6 +58,7 @@ bool Bruker2Dicom::Execute()
    bool canOpen;
    std::string outputFileName;
 
+
   // BrukerDataSet br_subject;
    std::string subject;
    subject = GDCM_NAME_SPACE::Util::GetPath(*(fileNames.begin()))+
@@ -73,11 +81,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);
-*/
+
          BrukerFieldData b_name=br_subject.GetFieldData("SUBJECT_name_string");
          std::string subject_name = b_name.GetStringValue()[0];
         strPatientName = subject_name;
@@ -100,11 +104,11 @@ bool Bruker2Dicom::Execute()
         
          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();
@@ -112,6 +116,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 +125,7 @@ bool Bruker2Dicom::Execute()
          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;
@@ -156,14 +161,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 +183,7 @@ bool Bruker2Dicom::Execute()
                    << "]\n"
                    << " ================================================================================"
                    << std::endl;
-
+*/
         if (verbose)
            printf ("outputDirName [%s]\n", outputDirName);   
 
@@ -208,10 +219,11 @@ 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;
+            std::cout << "--- [" << *it << "] is a file." << std::endl;
       }  
    }
 
@@ -222,7 +234,7 @@ void Bruker2Dicom::DealWithNiveau1(std::string level1Directory, std::string curr
         it != fileNames.end();
       ++it)
    {
-      if ( GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+      if ( boost::filesystem::is_directory(*it) )
       {
          // will be always "pdata" ...
          if (verbose)
@@ -318,9 +330,9 @@ void Bruker2Dicom::DealWithNiveau2(std::string level2Directory, std::string curr
         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;
       }
       
    }
@@ -329,7 +341,7 @@ void Bruker2Dicom::DealWithNiveau2(std::string level2Directory, std::string curr
          it != fileNames.end();
        ++it)
    {
-      if ( GDCM_NAME_SPACE::DirList::IsDirectory(*it) )
+      if ( boost::filesystem::is_directory(*it) )
       { 
   
          if (verbose)
@@ -365,7 +377,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());
@@ -419,7 +431,7 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr
    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);
 
@@ -448,7 +460,7 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr
     //             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);
 
@@ -510,7 +522,7 @@ void Bruker2Dicom::DealWithNiveau3(std::string level3Directory, std::string curr
       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];
 
@@ -551,7 +563,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 +577,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 +599,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 +618,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 +647,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,10 +814,11 @@ 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;
+            std::cout << "--- [" << *it << "] is a file..." << std::endl;
 
          icode = 0;
 
@@ -920,15 +933,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;
@@ -1097,7 +1110,6 @@ std::vector<BrukerImage> Bruker2Dicom::CreateImageSet ( )
    return imageSet;
 }
 
-
 // ===========================================================================================
 
 void Bruker2Dicom::MakeDicomImage(unsigned char *tabPixels,