]> Creatis software - gdcm.git/blobdiff - Example/ToInTag.cxx
Add small utility to convert 'Dense' file format iamges into DICOM images
[gdcm.git] / Example / ToInTag.cxx
index ba79a148eb3047427043e1168268a2976499e0ea..dde01a4cb8a8c7cf96b3118dd0f1483906d88776 100755 (executable)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: ToInTag.cxx,v $
   Language:  C++
-  Date:      $Date: 2006/06/07 12:23:25 $
-  Version:   $Revision: 1.4 $
+  Date:      $Date: 2006/06/30 09:58:08 $
+  Version:   $Revision: 1.6 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -215,6 +215,7 @@ int main(int argc, char *argv[])
    {
       std::cout << "------------List of found files ------------" << std::endl;
       dirList.Print();
+      std::cout << std::endl;
    }
    
    gdcm::DirListType fileNames;
@@ -361,6 +362,9 @@ int main(int argc, char *argv[])
       // storing in a map ensures automatic sorting !      
       sf[userFileIdentifier] = f;
    }
+   
+   if (verbose)
+      std::cout << "  " << std::endl;
       
    std::string fullFilename, lastFilename;
    std::string previousPatientName, currentPatientName;
@@ -368,6 +372,8 @@ int main(int argc, char *argv[])
    std::string previousImagePosition, currentImagePosition;
    std::string previousPhaseEncodingDirection, currentPhaseEncodingDirection;
    std::string previousTriggerTime, currentTriggerTime;
+   
+   std::string currentStudyUID;   
       
    std::string writeDir, currentWriteDir;
    std::string currentPatientWriteDir, currentSerieWriteDir, 
@@ -386,10 +392,18 @@ int main(int argc, char *argv[])
    previousTriggerTime            = "";
    
    int sliceIndex = 0; // Is incremented *at the beginning* of processing
-   int frameIndex = 1;
+   int frameIndex;
+   if (taggrid)
+       frameIndex = 0;
+   else
+       frameIndex = 1;
+              
    int flag       = 0;
        
    gdcm::File *currentFile;
+
+   std::string defaultStudyUID =  gdcm::Util::CreateUniqueUID();
+   std::string defaultSerieUID; 
      
    for (it2 = sf.begin() ; it2 != sf.end(); ++it2)
    {  
@@ -397,7 +411,8 @@ int main(int argc, char *argv[])
        
       fullFilename =  currentFile->GetFileName();
       lastFilename =  gdcm::Util::GetName( fullFilename ); 
-      std::cout << "Rewrite [" <<lastFilename << "]" << std::endl;
+      std::cout << " --------------------------------------------------"
+                << " Rewrite [" <<lastFilename << "]" << std::endl;
      
       tokens.clear();
       gdcm::Util::Tokenize (it2->first, tokens, token);
@@ -414,7 +429,15 @@ int main(int argc, char *argv[])
           currentImagePosition[0] = 'P'; 
       
       if (previousPatientName != currentPatientName)
-      {
+      {      
+         if ( currentFile->GetEntryString(0x0020,0x000d) == gdcm::GDCM_UNFOUND)
+         {
+            if (verbose)   
+               std::cout << "--- new  Study UID created" << std::endl;
+            defaultStudyUID =  gdcm::Util::CreateUniqueUID();
+            currentFile->InsertEntryString(defaultStudyUID, 0x0020, 0x000d, "UI" );
+         }
+  
          previousPatientName = currentPatientName;
          if (verbose)   
             std::cout << "==== new Patient  [" << currentPatientName  << "]" << std::endl;
@@ -440,6 +463,15 @@ int main(int argc, char *argv[])
          if (verbose)   
             std::cout << "==== === new Serie [" << currentSerieInstanceUID << "]"
                       << std::endl;
+      
+         if ( currentFile->GetEntryString(0x0020,0x000e) == gdcm::GDCM_UNFOUND)
+         {
+            if (verbose)   
+               std::cout << "--- --- new  Serie UID created" << std::endl;
+            defaultSerieUID =  gdcm::Util::CreateUniqueUID();
+            currentFile->InsertEntryString(defaultSerieUID, 0x0020, 0x000e, "UI" );
+         }       
+      
          if (split)
          {
              currentSerieWriteDir  = currentPatientWriteDir + gdcm::GDCM_FILESEPARATOR
@@ -472,7 +504,9 @@ int main(int argc, char *argv[])
             sliceIndex = 1; // only *one* slice in a given directory
          else
             sliceIndex += 1;
-      }      
+      }
+      if (verbose)
+         std::cout << "Slice Index : " << sliceIndex << std::endl;      
 
 // We don't split on Row/Column!
 /*
@@ -539,9 +573,9 @@ int main(int argc, char *argv[])
             chSessionIndex = "1";
          }
       }
-       if (currentFile->IsVRCoherent(0x0020) == 1 )     
+      if (currentFile->IsVRCoherent(0x0020) == 1 )     
          currentFile->InsertEntryString(chSessionIndex, 0x0020, 0x0012, "  ");
-       else
+      else
          currentFile->InsertEntryString(chSessionIndex, 0x0020, 0x0012, "IS");
  
       // Deal with  0x0021, 0x1020 : 'SLICE INDEX'
@@ -565,11 +599,19 @@ int main(int argc, char *argv[])
  
       std::string strImagePositionPatient    = currentFile->GetEntryString(0x0020, 0x0032 );
       if (strImagePositionPatient == gdcm::GDCM_UNFOUND)
-         currentFile->InsertEntryString(currentFile->GetEntryString(0x0020, 0x0030), 0x0020, 0x0032, "DS" );  
+      {
+         if (verbose)
+            std::cout << "Duplicate ImagePosition into ImagePositionPatient" << std::endl;
+         currentFile->InsertEntryString(currentFile->GetEntryString(0x0020, 0x0030), 0x0020, 0x0032, "DS" );
+      }  
       
       std::string strImageOrientationPatient = f->GetEntryString(0x0020, 0x0037 );
       if (strImageOrientationPatient == gdcm::GDCM_UNFOUND)
+      {
+         if (verbose)
+            std::cout << "Duplicate ImageOrientation into ImageOrientationPatient" << std::endl;      
          currentFile->InsertEntryString(currentFile->GetEntryString(0x0020, 0x0035), 0x0020, 0x0037, "DS" );       
+      }
                 
       if (taggrid)
          frameIndex++;
@@ -585,6 +627,8 @@ int main(int argc, char *argv[])
             flag = 0;
          }
       } 
+      if (verbose)
+         std::cout << "Frame Index : " << frameIndex << std::endl; 
                  
       if (split)