]> Creatis software - creaImageIO.git/commitdiff
improvement in use of gdcm2 and speed database
authorFrederic Cervenansky <Frederic.Cervenansky@creatis.insa-lyon.fr>
Fri, 21 May 2010 14:49:23 +0000 (14:49 +0000)
committerFrederic Cervenansky <Frederic.Cervenansky@creatis.insa-lyon.fr>
Fri, 21 May 2010 14:49:23 +0000 (14:49 +0000)
src/creaImageIODicomImageReader2.cpp
src/creaImageIODicomImageReader2.h
src/creaImageIOGimmickView.cpp
src/creaImageIOSQLiteTreeHandler.cpp
src/creaImageIOWxGimmickView.cpp
src/creaImageIOWxGimmickView.h

index 713655ba46ea1fda179f5681b4b2e0b9bcb98dbe..7ae643b89696b20da733a34c3c9d59337343031c 100644 (file)
@@ -1,5 +1,5 @@
 #include <creaImageIODicomImageReader2.h>
-
+#include "gdcmStringFilter.h"
 
 
 #include <creaImageIOSystem.h>
@@ -126,40 +126,45 @@ namespace creaImageIO
       reader.SetFileName( filename.c_str() );
       if (reader.Read())
       {
-       std::map<std::string,std::string>::iterator i;
-       for (i=attr.begin();i!=attr.end();++i)
-         {
-           if ( i->first == "D0004_1500" )
-             {
-               boost::filesystem::path full_path(filename);
-               std::string f = full_path.leaf();
-               i->second = f;
-             }
-           else if ( i->first == "FullFileName" )
-             {
-               i->second = filename;
-             }
-                 else if ( i->first == "FullFileDirectory" )
-             {
-                         std::string::size_type last_pos = filename.find_last_of("//");
-                         //find first separator
-                         i->second = filename.substr(0, last_pos);
-             }
-           else
+                 gdcm::StringFilter sf;
+                 sf.SetFile(reader.GetFile());
+                 std::map<std::string,std::string>::iterator i;
+                 for (i=attr.begin();i!=attr.end();++i)
              {
-               uint16_t el;
-               uint16_t gr;
-
-               tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
-               if ( ( gr!=0 ) && ( el!=0 ) )
-                 {
-                        
-                          std::string val = GetStringValueFromTag(reader.GetFile().GetDataSet().GetDataElement(gdcm::Tag(gr,el)));
-                   i->second = irclean(val);
+                         if ( i->first == "D0004_1500" )
+                         {
+                                 boost::filesystem::path full_path(filename);
+                                 std::string f = full_path.leaf();
+                                 i->second = f;
+                         }
+                         else if ( i->first == "FullFileName" )
+                         {
+                               i->second = filename;
+                         }
+                         else if ( i->first == "FullFileDirectory" )
+                         {
+                                std::string::size_type last_pos = filename.find_last_of("//");
+                                //find first separator
+                                i->second = filename.substr(0, last_pos);
+                         }
+                         else
+                         {
+                                 uint16_t el;
+                                 uint16_t gr;
+                                 tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
+                                 //if ( ( gr!=0 ) && ( el!=0 ) )
+                                 const gdcm::Tag tag(gr, el);
+                                 if( reader.GetFile().GetDataSet().FindDataElement( tag ) )
+                                 {
+                                         i->second = irclean(sf.ToString(tag));
+                                 }
+                                 else
+                                 {
+                                         i->second = "";
+                                 }
+                         }
                  }
-             }
          }
-      }
   }
 
 void DicomImageReader::ReadAttributes2(const std::string& filename, 
index 0cd90567f235ca9e9e8091df4aacf7a049911390..a267b2993f4ad36d32d772a0f7bb7607ad9644b8 100644 (file)
@@ -7,6 +7,7 @@
 #include <gdcmReader.h>
 #include <vtkGDCMImageReader.h>
 #include <gdcmScanner.h>
+#include <gdcmAttribute.h>
 #endif
 
 class vtkGDCMImageReader;
index 2b7c85b1883a8a8e4a5f4c1cafc903c92eab60ec..2fbc2586920fd133520f917c62c7193345900ef1 100644 (file)
@@ -218,30 +218,11 @@ namespace creaImageIO
        }
        else
        {
-               std::string extentx = (*sel).GetAttribute("D0028_0010");
-               std::string extenty = (*sel).GetAttribute("D0028_0011");
-               std::string extentz = (*sel).GetAttribute("D0028_0012");
-               std::string extentt = (*sel).GetAttribute("D0028_0010");
-               if( extentx == "" && extenty == "" && extentz == "")
-               {
-                       // we try to create a vtkImageData just to get dim informations
-                       // Long method need to improve it!
-                       std::string name = (*sel).GetAttribute("FullFileName");
-                       if (name != "")
-                       {
-                               int dim[3];
-                               char c[5];
-                               mReader.GetImage(name)->GetDimensions(dim);
-                               sprintf(c,"%d", dim[0]);
-                               extentx = c;
-                               sprintf(c,"%d", dim[1]);
-                               extenty = c;
-                               sprintf(c,"%d", dim[2]);
-                               extentz = c;
-                       }
-               }
+                       boost::shared_ptr<ImageExtent> ie=boost::shared_ptr<ImageExtent>(new ImageExtent((*sel).GetAttribute("D0028_0010"),
+                                                                       (*sel).GetAttribute("D0028_0011"),
+                                                                       (*sel).GetAttribute("D0028_0012"), 
+                                                                       ""));
 
-               boost::shared_ptr<ImageExtent> ie=boost::shared_ptr<ImageExtent>(new ImageExtent(extentx, extenty, extentz,extentt));
        if(mImageExtent==0)
        {
                mImageExtent=ie;
index 7a296e65576cbd97fa2d3c0b47b482eab14fd818..478a4be902ed9be5212ca07bf54166c49e2dce97 100644 (file)
@@ -43,7 +43,8 @@ namespace creaImageIO
   //=====================================================================
   bool SQLiteTreeHandler::Open(bool writable)
   {
-    //    std::cout << "***> SQLiteTreeHandler::Open('"<<GetFileName()<<"')"<<std::endl;
+
+         //sqlite3_exec(mDB, "PRAGMA synchronous=OFF ", NULL, 0, &errMsg); 
     SetWritable(writable);
     return DBOpen();
   }
@@ -76,7 +77,8 @@ namespace creaImageIO
 
   //===================================================================== 
   int SQLiteTreeHandler::LoadChildren(tree::Node* parent, int maxlevel)
-  {
+  {     
+       //mDB->execDML("PRAGMA synchronous=ON ");
     if (parent==0) parent = GetTree().GetTree();
     return DBLoadChildren(parent,maxlevel);
   }
@@ -238,6 +240,7 @@ namespace creaImageIO
     try
       {
        mDB->open(GetFileName().c_str());
+       mDB->execDML("pragma synchronous=off;");
       }
     catch (CppSQLite3Exception& e)
       {
@@ -282,7 +285,7 @@ namespace creaImageIO
                     << e.errorMessage() <<std::endl);
        return false;
       }
-    
+    mDB->execDML("pragma synchronous=off;");
      
     // CREATING TABLES
     
index f13c5e01823351ee46f29f898654879d85e07d42..d9f727cc56096b3acadd402892a59e2c1943ea98 100644 (file)
@@ -113,6 +113,7 @@ namespace creaImageIO
     // Sets the current directory to the home dir
     mCurrentDirectory =  std2wx(gimmick->GetHomeDirectory());
 
+
      // Connect the AddProgress callback
     gimmick->ConnectAddProgressObserver 
      ( boost::bind( &WxGimmickView::OnAddProgress , this, _1 ) );
@@ -535,6 +536,7 @@ namespace creaImageIO
     
     if (FD->ShowModal()==wxID_OK)
     {
+                       time(&mstart);
        std::string dirname = wx2std (FD->GetPath());
        bool recurse =  isNeedRecursive(dirname);
        if (recurse)
@@ -1208,6 +1210,9 @@ namespace creaImageIO
     mess << "Files\tscanned\t: " << p.GetNumberScannedFiles() << "\n";
     mess << "Files\thandled\t: " << p.GetNumberHandledFiles() << "\n\n";
     mess << "Files\tadded  \t: " << p.GetNumberAddedFiles()   << "\n\n";
+       time_t end;
+       time(&end);
+       mess << "time to scan :" << difftime(end,mstart) << "sec";
     wxMessageBox(std2wx(mess.str()),_T("Addition result"),wxOK,this);
   }
 
index 63cddad25a342721988633af37b50f96756dcc5f..ad66923cb16cac3a0918e64f731187ae80925161 100644 (file)
@@ -8,6 +8,7 @@
 #include <creaImageIOWxGimmickTools.h>
 #include <creaImageIOListener.h>
 #include <creaWx.h>
+#include <time.h>
 
 #include "wx/progdlg.h"
 
@@ -182,7 +183,7 @@ namespace creaImageIO
     
     /// Display a message box with the last addition statistics
     void DisplayAddSummary();
-
+       time_t  mstart;
        /// Test a directory to know if contains sub-directory to analyze
        bool isNeedRecursive(std::string i_name);