]> Creatis software - gdcm.git/commitdiff
* FIX : amelioration of code
authorregrain <regrain>
Wed, 4 Feb 2004 13:13:05 +0000 (13:13 +0000)
committerregrain <regrain>
Wed, 4 Feb 2004 13:13:05 +0000 (13:13 +0000)
     * FIX : python bug fix
     * Add python demo

Testing/TestDicomDir.cxx
gdcmPython/__init__.py
gdcmPython/demo/PrintDicomDir.py [new file with mode: 0644]
src/gdcmDicomDir.cxx
src/gdcmDicomDir.h

index a9fceebef3519196c955d3685c428a9187087474..db226de843f79dd1322825962e3428c7c7ddf3e9 100644 (file)
 
 using namespace std;
 
-
-void aff(ListTag::iterator deb, ListTag::iterator fin, int nbFFFE) 
-{
-   int count =0;
-   for (ListTag::iterator i= deb; i!= fin; i++) 
-   {  
-      if( (*i)->GetGroup() == 0xfffe) 
-      {
-         count ++;
-         if (count == nbFFFE) break;
-      }
-      (*i)->SetPrintLevel(0);
-      (*i)->Print();
-   } 
-}
-
-
 int main(int argc, char* argv[])
 {  
    gdcmDicomDir *e1;
@@ -63,127 +46,12 @@ int main(int argc, char* argv[])
       return(1);
    }
 
-// Exemples exploitation de la structure
-// PATIENT
-/*   cout << std::endl << std::endl  
-            << " = Liste des PATIENT ==========================================" 
-            << std::endl<< std::endl;  
-
-
-   itPatient = e1->GetPatients().begin();      
-   while ( itPatient != e1->GetPatients().end() ) {  // on degouline la liste de PATIENT
-      std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name   
-      itPatient ++;    
-   }    
-
-// STUDY
-   cout << std::endl << std::endl  
-        << " = Liste des PATIENT/STUDY ==========================================" 
-        << std::endl<< std::endl;      
-
-   itPatient = e1->GetPatients().begin();      
-   while ( itPatient != e1->GetPatients().end() ) {  // on degouline la liste de PATIENT
-      std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name 
-      itStudy = ((*itPatient)->GetStudies()).begin();  
-      while (itStudy != (*itPatient)->GetStudies().end() ) { // on degouline les STUDY de ce patient   
-         std::cout << "--- "<< (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << std::endl; // Stdy Description
-         ++itStudy;            
-      }
-      itPatient ++;    
-   }
-
-// SERIE
-   cout << std::endl << std::endl  
-            << " = Liste des PATIENT/STUDY/SERIE ==========================================" 
-            << std::endl<< std::endl;  
-   itPatient = e1->GetPatients().begin();      
-   while ( itPatient != e1->GetPatients().end() ) {  // on degouline la liste de PATIENT
-      std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name 
-      itStudy = ((*itPatient)->GetStudies()).begin();  
-      while (itStudy != (*itPatient)->GetStudies().end() ) { // on degouline les STUDY de ce patient   
-         std::cout << "--- "<< (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << std::endl; // Study Description 
-         itSerie = ((*itStudy)->GetSeries()).begin();
-         while (itSerie != (*itStudy)->GetSeries().end() ) { // on degouline les SERIES de cette study    
-            std::cout << "--- ---  "<< (*itSerie)->GetEntryByNumber(0x0008, 0x103e) << std::endl; // Serie Description
-            ++itSerie;   
-         }
-         ++itStudy;            
-      }
-      itPatient ++;    
-   }
-// IMAGE
-   cout << std::endl << std::endl  
-            << " = Liste des PATIENT/STUDY/SERIE/IMAGE ===================================" 
-            << std::endl<< std::endl;
-   itPatient = e1->GetPatients().begin();      
-   while ( itPatient != e1->GetPatients().end() ) {  // on degouline la liste de PATIENT
-      std::cout << (*itPatient)->GetEntryByNumber(0x0010, 0x0010) << std::endl; // Patient's Name
-      itStudy = ((*itPatient)->GetStudies()).begin();  
-      while (itStudy != (*itPatient)->GetStudies().end() ) { // on degouline les STUDY de ce patient   
-         std::cout << "--- "<< (*itStudy)->GetEntryByNumber(0x0008, 0x1030) << std::endl; // Study Description
-         itSerie = ((*itStudy)->GetSeries()).begin();
-         while (itSerie != (*itStudy)->GetSeries().end() ) { // on degouline les SERIES de cette study    
-            std::cout << "--- --- "<< (*itSerie)->GetEntryByNumber(0x0008, 0x103e) << std::endl; // Serie Description
-            itImage = ((*itSerie)->GetImages()).begin();
-            while (itImage != (*itSerie)->GetImages().end() ) { // on degouline les SERIES de cette study         
-               std::cout << "--- --- --- "<< (*itImage)->GetEntryByNumber(0x0004, 0x1500) << std::endl; // File name
-               ++itImage;   
-            }
-            ++itSerie;   
-         }
-         ++itStudy;            
-      }  
-      itPatient ++;    
-   }*/
 // DICOM DIR
    cout << std::endl << std::endl  
         << " = Contenu Complet du DICOMDIR ==========================================" 
         << std::endl<< std::endl;      
    e1->Print();
    
-       
-/*   itPatient = e1->GetPatients().begin();    
-   while ( itPatient != e1->GetPatients().end() ) {  // on degouline la liste de PATIENT
-      cout << " = PATIENT ==========================================" << std::endl;    
-      deb = (*itPatient)->beginObj;    
-      fin =  (*((*itPatient)->GetStudies()).begin())->beginObj;
-      e1->SetPrintLevel(2);
-      aff(deb,fin,1);
-
-      itStudy = ((*itPatient)->GetStudies()).begin();  
-      while (itStudy != (*itPatient)->GetStudies().end() ) { // on degouline les STUDY de ce patient   
-         std::cout << " ==== STUDY ==========================================" <<std::endl;               
-         deb = (*itStudy)->beginObj;   
-         fin = (*((*itStudy)->GetSeries()).begin())->beginObj;
-         //e1->SetPrintLevel(2);
-         aff(deb,fin,1);                                       
-
-         itSerie = ((*itStudy)->GetSeries()).begin();
-         while (itSerie != (*itStudy)->GetSeries().end() ) { // on degouline les SERIES de cette study    
-            cout << " ======= SERIES ==========================================" << std::endl;       
-            deb = (*itSerie)->beginObj;        
-            fin = (*((*itSerie)->GetImages()).begin())->beginObj;
-            //e1->SetPrintLevel(2);
-            aff(deb,fin,1);          
-
-            itImage = ((*itSerie)->GetImages()).begin();
-            while (itImage != (*itSerie)->GetImages().end() ) {  // on degouline les IMAGE de cette serie 
-               cout << " ========== IMAGE ==========================================" << std::endl;    
-               std::cout << "--- --- --- File Name: "<< (*itImage)->GetEntryByNumber(0x0004, 0x1500) << std::endl; // Referenced File 
-
-               ++itImage;
-            }                        
-            ++itSerie;   
-         }     
-         ++itStudy;    
-      }                           
-      itPatient ++;    
-   }*/
-
    std::cout<<std::flush;
    delete e1;
 
index 86929df888e9d0f09192a0b2e6a59556424bce8e..fcfd024ebb1ab4d60ffcd38b4989ed42cedf12a1 100644 (file)
@@ -53,6 +53,7 @@ except KeyError:
       print "Path to dictionaries is mandatory. Exiting"
       sys.exit(1)
    os.environ["GDCM_DICT_PATH"] = Path
+GDCM_DICT_PATH = os.environ["GDCM_DICT_PATH"]
 
 ### Set up the path to the data images for the demos.
 GDCM_DATA_PATH = BuildInstallOrPreinstallPath("Test", "test.acr")
diff --git a/gdcmPython/demo/PrintDicomDir.py b/gdcmPython/demo/PrintDicomDir.py
new file mode 100644 (file)
index 0000000..b953839
--- /dev/null
@@ -0,0 +1,31 @@
+from gdcmPython import *
+import sys
+
+### Get filename from command line or default it
+try:
+   FileName = sys.argv[1]
+except IndexError:
+   FileName = os.path.join(GDCM_DATA_PATH, "DICOMDIR")
+
+try:
+   printLevel = int(sys.argv[2])
+except IndexError:
+   printLevel = 1
+
+### Build the header element list
+toRead = gdcmDicomDir(FileName)
+if not toRead.IsReadable():
+   print "The ", FileName, " DicomDir is not readable with gdcm. Sorry."
+   sys.exit()
+
+print "##############################################################"
+print "### Display all the elements and their respective values"
+print "## found in the ", FileName, " file."
+print "##############################################################"
+toRead.SetPrintLevel(-1)
+toRead.Print()
+
+# ValDict = toRead.GetEntry()
+# for key in ValDict.keys():
+#      print "[%s] = [%s]" %(key, ValDict[key])
+
index e9ea4d7e0933f29640a5ca808344a5b6d84494b5..cc37127647324718cc4c51cb92a37ee15b989dcd 100644 (file)
  * @param   Filename
  * @param   exception_on_error
  */
-gdcmDicomDir::gdcmDicomDir(const char *FileName,
+gdcmDicomDir::gdcmDicomDir(const char *FileName, bool parseDir,
                            bool exception_on_error):
    gdcmParser(FileName,exception_on_error,true)
 {
    if( GetListEntry().begin()==GetListEntry().end() ) 
    {
       dbg.Verbose(0, "gdcmDicomDir::gdcmDicomDir : entry list empty");
-      dbg.Verbose(0, "gdcmDicomDir::gdcmDicomDir : Parse directory and create the DicomDir");
 
-      std::string path=FileName;
-      std::string file;
-
-      int pos1=path.rfind("/");
-      int pos2=path.rfind("\\");
-      if(pos1>pos2)
-         path.resize(pos1);
-      else
-         path.resize(pos2);
-      NewDicomDir(path);
+      if(parseDir)
+      {
+         dbg.Verbose(0, "gdcmDicomDir::gdcmDicomDir : Parse directory and create the DicomDir");
+         ParseDirectory();
+      }
    }
-
-   CreateDicomDir();
+   else
+      CreateDicomDir();
 }
 
 /*
@@ -49,13 +43,13 @@ gdcmDicomDir::gdcmDicomDir(const char *FileName,
  * \brief   
  * @param   exception_on_error
  */
-gdcmDicomDir::gdcmDicomDir(ListTag *l,
+/*gdcmDicomDir::gdcmDicomDir(ListTag *l,
                            bool exception_on_error):                           
    gdcmParser(exception_on_error )  
 {    
    listEntries=*l;
    CreateDicomDir();
-}
+}*/
 
 /*
  * \ingroup gdcmDicomDir
@@ -114,6 +108,12 @@ bool gdcmDicomDir::Write(std::string fileName)
    return true;
 }
 
+void gdcmDicomDir::ParseDirectory(void)
+{
+   NewDicomDir(GetPath());
+   CreateDicomDir();
+}
+
 //-----------------------------------------------------------------------------
 // Protected
 /*
@@ -128,6 +128,7 @@ void gdcmDicomDir::NewDicomDir(std::string path)
    gdcmHeader *header;
 
    listEntries.clear();
+   patients.clear();
 
    for(gdcmDirList::iterator it=fileList.begin(); 
        it!=fileList.end(); ++it) 
@@ -143,6 +144,25 @@ void gdcmDicomDir::NewDicomDir(std::string path)
    SetElements(path,list);
 }
 
+/*
+ * \ingroup gdcmDicomDir
+ * \brief   Get the dicom dir path
+ * @param   
+ */
+std::string gdcmDicomDir::GetPath(void)
+{
+   std::string path=GetFileName();
+
+   int pos1=path.rfind("/");
+   int pos2=path.rfind("\\");
+   if(pos1>pos2)
+      path.resize(pos1);
+   else
+      path.resize(pos2);
+
+   return(path);
+}
+
 //-----------------------------------------------------------------------------
 // Private
 /*
index 3eb1b625fa05a962bb7a3983e593141eafb410dd..b0bc7453254c1756998f572c4b1f353277849d29 100644 (file)
@@ -21,8 +21,9 @@ typedef std::list<gdcmHeader *>  ListHeader;
 class GDCM_EXPORT gdcmDicomDir: public gdcmParser
 {
 public:
-   gdcmDicomDir(ListTag *l,           bool exception_on_error = false);
-   gdcmDicomDir(const char *FileName,bool exception_on_error = false);
+//   gdcmDicomDir(ListTag *l,          bool exception_on_error = false);
+   gdcmDicomDir(const char *FileName, bool parseDir = false,
+                bool exception_on_error = false);
    
    ~gdcmDicomDir(void);
 
@@ -30,8 +31,12 @@ public:
    virtual void Print(std::ostream &os = std::cout);
 
    inline ListPatient &GetPatients() {return patients;};
-   bool   Write(std::string fileName);
 
+// Write
+   bool Write(std::string fileName);
+   void ParseDirectory(void);
+
+// Types
    typedef enum
    {
       GDCM_NONE,
@@ -43,6 +48,7 @@ public:
    
 protected:
    void NewDicomDir(std::string path);
+   std::string GetPath(void);
 
 private:
    void CreateDicomDir(void);