]> Creatis software - gdcm.git/blobdiff - Doc/Website/HowToUseGdcm.html
avoid warnings
[gdcm.git] / Doc / Website / HowToUseGdcm.html
index f3da43f48823493fe03b2f7161279ba3107b386e..bb9b730e7457deeb235be6184d1a7c72869de925 100755 (executable)
@@ -20,7 +20,7 @@ Jean-Pierre Roux
 1-1-1-1) Deal with the file header
 1-1-1-2) Load the 'pixels' in memory
 1-1-1-3) Get the value of a single Dicom DataElement 
-1-1-1-4) Get the value of a Dicom Sequence  
+1-1-1-4) Get the values within a Dicom Sequence  
 1-1-2) A File Set
 
 1-2) using VTK
@@ -48,25 +48,31 @@ Jean-Pierre Roux
 
 2-4) Retrictions for Python users
 
-3) Some 'Command line' utilities
+3) DICOMDIR
+===========
+3-1) How to read a DICIMDIR
+3-2) How to modifiy a DICOMDIR
+3-3) How to create a DICOMDIR
+
+4) Some 'Command line' utilities
 ================================
-3-) PrintFile
-3-) exSerieHelper
-3-) exXCoherentFileSet
+4-) PrintFile
+4-) exSerieHelper
+4-) exXCoherentFileSet
 
-3-) AnonymizeNoLoad
-3-) AnonymizeMultiPatient
-3-) AnonymizeDicomDir
+4-) AnonymizeNoLoad
+4-) AnonymizeMultiPatient
+4-) AnonymizeDicomDir
 
-3-) ReWrite
-3-) RawToDicom
-3-) exMoveImagesToSingleSerieUID
+4-) ReWrite
+4-) RawToDicom
+4-) exMoveImagesToSingleSerieUID
 
-3-) vtkgdcmViewer2
-3-) vtkgdcmSerieViewer2
+4-) vtkgdcmViewer2
+4-) vtkgdcmSerieViewer2
 
-3-) PrintDicomDir
-3-) MakeDicomDir
+4-) PrintDicomDir
+4-) MakeDicomDir
 
 ----------------------------------------------------------------------------
 
@@ -145,7 +151,70 @@ S 0018|6011 [SQ]                       [Sequence of Ultrasound Regions]
 
 0018|6011 is a 'Sequence' (SQ), composed of various Sequence Items(SQItem)
 Each SQItem is a set of Elements (an Element may be a DataElement (D) or a
-Sequence (S), recursively.
+Sequence (S), recursively, within any level of embedding :
+
+S 0029|263d [SQ]                                                                   []
+   |  --- SQItem number 0
+   | D fffe|e000 [UL]                                                              [Item ]
+   | D 0008|0000 [UL]                                                       [Group Length] [12]
+   | D 0008|0001 [UL]                                               [Length to End (RET) ] [28776]
+   | D 0029|0000 [UL]                                                       [Group Length] [28764]
+   | D 0029|002a [LO]                                                    [Private Creator] [SPI-P-Private_ICS Release 1;6 ]
+   | D 0029|2a02 [LO]                                                                   [] [PERFUSION_MR_T2STAR_GAMMA_VARIATE_ANALYSER]
+   | S 0029|2a06 [SQ]                                                                   []
+   |    |  --- SQItem number 0
+   |    | D fffe|e000 [UL]                                                              [Item ]
+   |    | D 0008|0000 [UL]                                                       [Group Length] [12]
+   |    | D 0008|0001 [UL]                                               [Length to End (RET) ] [20]
+   |    | D fffe|0000 [UL]                                                       [Group Length]
+   |    |  --- SQItem number 1
+   |    | D fffe|e000 [UL]                                                              [Item ]
+   |    | D 0008|0000 [UL]                                                       [Group Length] [12]
+   |    | D 0008|0001 [UL]                                               [Length to End (RET) ] [194]
+   |    | D 0029|0000 [UL]                                                       [Group Length] [182]
+   |    | D 0029|002a [LO]                                                    [Private Creator] [SPI-P-Private_ICS Release 1;6 ]
+   |    | S 0029|2a07 [SQ]                                                                   []
+   |    |    |  --- SQItem number 0
+   |    |    | D fffe|e000 [UL]                                                              [Item ]
+   |    |    | D 0008|0000 [UL]                                                       [Group Length] [12]
+   |    |    | D 0008|0001 [UL]                                               [Length to End (RET) ] [100]
+   |    |    | D 0029|0000 [UL]                                                       [Group Length] [88]
+   |    |    | D 0029|002a [LO]                                                    [Private Creator] [SPI-P-Private_ICS Release 1;6 ]
+   |    |    | D 0029|2a0a [US]                                                                   [] [1]
+   |    |    | D 0029|2a0b [US]                                                                   [] [2]
+   |    |    | D 0029|2a0c [US]                                                                   [] [2]
+   |    |    | D 0029|2a0d [US]                                                                   [] [1]
+   |    |    | D 0029|2a10 [US]                                                                   [] [1]
+   |    |    | S 0029|2a2e [SQ]                                                                   []
+   |    |    |    |  --- SQItem number 0
+   |    |    |    | D fffe|e000 [UL]                                                              [Item ]
+   |    |    |    | D 0008|0000 [UL]                                                       [Group Length] [12]
+   |    |    |    | D 0008|0001 [UL]                                               [Length to End (RET) ] [2266]
+   |    |    |    | D 0029|0000 [UL]                                                       [Group Length] [2254]
+   |    |    |    | D 0029|0025 [LO]                                                    [Private Creator] [SPI-P-Private_ICS Release 1;1 ]
+   |    |    |    | D 0029|0027 [LO]                                                    [Private Creator] [SPI-P-Private_ICS Release 1;3 ]
+   |    |    |    | D 0029|0028 [LO]                                                    [Private Creator] [SPI-P-Private_ICS Release 1;4 ]
+   |    |    |    | D 0029|2500 [SL]                                                                   [] [43]
+   |    |    |    | D 0029|256b [FD]                                                                   [] [0.5]
+   |    |    |    | D 0029|2700 [LO]                                                                   [] [L1]
+   |    |    |    | D 0029|276a [FL]                                                                   [] [0.35]
+   |    |    |    | S 0029|27c0 [SQ]                                                                   []
+   |    |    |    |    |  --- SQItem number 0
+   |    |    |    |    | D fffe|e000 [UL]                                                              [Item ]
+   |    |    |    |    | D 0008|0000 [UL]                                                       [Group Length] [12]
+   |    |    |    |    | D 0008|0001 [UL]                                               [Length to End (RET) ] [110]
+   |    |    |    |    | D 0029|0000 [UL]                                                       [Group Length] [98]
+   |    |    |    |    | D 0029|0027 [LO]                                                    [Private Creator] [SPI-P-Private_ICS Release 1;3 ]
+   |    |    |    |    | D 0029|27b0 [SL]                                                                   [] [0]
+   |    |    |    |    | D 0029|27b1 [FL]                                                                   [] [0]
+   |    |    |    |    | D 0029|27b2 [FL]                                                                   [] [0]
+   |    |    |    |    | D 0029|27b4 [FL]                                                                   [] [0]
+   |    |    |    |    | D 0029|27b9 [FL]                                                                   [] [1]   
+   | S 0029|2a14 [SQ]                                                                   []
+   |    |  --- SQItem number 0
+   |    | D fffe|e000 [UL]                                                              [Item ]
+   |    | D 0008|0000 [UL]                                                       [Group Length] [12]
+   
 Probabely, you'll never have to deal with Sequences (hope so!).
 
 1) How to Read a DICOM File
@@ -162,12 +231,12 @@ Probabely, you'll never have to deal with Sequences (hope so!).
 The first step is to load the file header :
 
            gdcm::File *f = new gdcm::File();
-                  f->SetLoadMode(NO_SEQ);            | depending on what
-                  f->SetLoadMode(NO_SHADOW);         | you want *not* 
-                  f->SetLoadMode(NO_SEQ | NO_SHADOW);| to load from the
-                  f->SetLoadMode(NO_SHADOWSEQ);      | target file
-            f->SetFileName(fileName);
-            f->Load( );
+                  f->SetLoadMode(LD_NOSEQ);              | depending on what
+                  f->SetLoadMode(LD_NOSHADOW);           | you want *not* 
+                  f->SetLoadMode(LD_NOSEQ | LD_NOSHADOW);| to load from the
+                  f->SetLoadMode(LD_NOSHADOWSEQ);        | target file
+           f->SetFileName(fileName);
+           f->Load( );
 
 Note :
 The 'long' Data Element (>4096 char) are not loaded by default
@@ -179,6 +248,7 @@ before calling gdcm::File::Load();
 
 Note :
 Except if you are really aware about it, do *not* use SetLoadMode().
+LD_ALL is the default.
 
 Check if the file is gdcm-readable.
 
@@ -201,9 +271,20 @@ Check some fields, e.g
 
 Next step is to load the pixels in memory.
 Uncompression (JPEG lossless, JPEG lossy, JPEG 2000, RLE, ...) 
-is automatically performed if necessary.
+will be automatically performed if necessary.
+
+You first have to create a 'File Helper'
 
            gdcm::FileHelper *fh = gdcm::FileHelper::New(f);
+
+In some images,(where BitsAllocated=16, BitsUsed=8), 
+the 'unused bits' are actually ... used for storing 'overlays'.
+(e.g. : Patient / Aquisition / Institution informations, or drawings ...)
+It's up to you to decide whether you want or not to load the overlays.
+(Probabely, if you want to post-process the images, you dont' want!)
+
+           fh->SetKeepOverlays(true);  // default is : false
+
            void *imageData = fh->GetImageDataRaw();
            uint32_t dataSize = fh->GetImageDataRawSize();
 
@@ -228,8 +309,6 @@ Possible values are :
            int dimZ = f->GetZSize(); // meaningfull only for 'Volumes' or 'multiframe files'
            int dimT = f->GetTSize(); // meaningfull only for 4D objects (?)
 
-Now, you can enjoy your image !
-
 Sometimes, you deal with 'colour' images :-(
 They may be stored, on disc, as :
      RGB pixels, 
@@ -244,6 +323,12 @@ You'll get an 'RGB Pixels' image in memory if you use:
            void *imageData = fh->GetImageData();
            uint32_t dataSize = fh->GetImageDataSize();
 
+If you don't want to convert a "Grey level images + LUT" into "RGB Pixel image" use
+           gdcm::FileHelper *fh = gdcm::FileHelper::New(f);
+           void *imageData = fh->GetImageDataRaw();
+           uint32_t dataSize = fh->GetImageDataRawSize();
+   
+Now, you can enjoy your image !   
 
 1-1-1-3) Get the value of a single Dicom DataElement 
 
@@ -268,10 +353,10 @@ You'll get an 'RGB Pixels' image in memory if you use:
   You will have to cast them, according to the knowledge you have about them.
   LutRedData = (uint8_t*)f->GetEntryBinArea( 0x0028, 0x1201 ); 
    
-1-1-1-4) Get the value(s) of a Dicom Sequence           
+1-1-1-4) Get the value(s) within a Dicom Sequence           
 
 Actually, a 'Dicom Sequence' is composed of a list a 'Sequence Items',
-each Sequence Item is a set of DataElement (that can be a Sequence Element, recursively).
+each Sequence Item is a set of DataElement (that can be Dicom Sequences, recursively).
 You have to get the Sequence element, to get its number of Sequence items, to iterate on each one.
 e.g.:
 
@@ -298,7 +383,7 @@ of images, laying in a Directories tree-like structure, you don't know anything
 about the Patients, and so on)
 
 A class gdcm::SerieHelper is designed to help solving this problem.
-Use it as follows.
+Use it as follows :
 
     gdcm::SerieHelper *sh = gdcm::SerieHelper::New();
     while (int i=0; i < nbOfFiles; i++) {
@@ -315,7 +400,7 @@ Files are 'splitted' into as many 'Single Serie UID File Set'
 // -------- skip this one, for a first reading ! -----------
 
 Sometimes, the Serie UID is not enough to disseminate properly the images.
-We may want to disseminate into multiple sub serie when needed.
+We may want to disseminate into multiple sub series when needed.
 
 Use :
 void SerieHelper::SetUseSeriesDetails(bool s);
@@ -366,6 +451,7 @@ If you want to 'order' the files within each 'Single Serie UID File Set'
   
   If, for any reason of his own, user already get the file headers,
   he may add the gdcm::File (instead of the file name) to the SerieHelper.
+  (Sorry, not available in Python)
 
     gdcm::SerieHelper *sh = gdcm::SerieHelper::New();
     while (int i=0; i < nbOfFiles; i++) {
@@ -412,7 +498,7 @@ He wants to drop the 'duplicate images'
 Sometimes the previous stuff is *not enough* !
 
 Within a SingleSerieUIDFileSet, you can have have various orientations,
-or various positions, at various times. (not only various position , at a single
+or various positions, at various times. (not only various positions, at a single
 time, for a single orientation).
 
 User may consider that dealing only with the 'Series Instance UID' 
@@ -467,10 +553,12 @@ a vtkGdcmReader() method ( derived from vtkReader() ) is available.
 
    vtkGdcmReader *reader = vtkGdcmReader::New();
    reader->SetFileName( yourDicomFilename );      
-   reader->SetLoadMode( yourLoadMode); // See C++ part 
+   reader->SetLoadMode( yourLoadMode );   // See C++ part 
+   reader->SetKeepOverlays( true/false ); // See C++ part    
    reader->Update();
    vtkImageData* ima = reader->GetOutput();
-   int* Size = ima->GetDimensions();   
+   int* Size = ima->GetDimensions(); 
+     
  // -> Enjoy it.     
 
 1-2-2) A File Set
@@ -482,10 +570,12 @@ feel like:
    vtkGdcmReader *reader = vtkGdcmReader::New();
    for(int i=1; i< yourNumberOfFiles; i++)
          reader->AddFileName( yourTableOfFileNames[i] );     
-   reader->SetLoadMode( yourLoadMode); // See C++ part 
+   reader->SetLoadMode( yourLoadMode );   // See C++ part 
+   reader->SetKeepOverlays( true/false ); // See C++ part     
    reader->Update();
    vtkImageData* ima = reader->GetOutput();
    int* Size = ima->GetDimensions();
+   
  // -> Enjoy it.
  
  Warning : The first file is assumed to be the reference file.
@@ -627,7 +717,7 @@ you just have to process as follow :
         file->InsertEntryString(str.str(),0x0028,0x0002, "US"); // Samples per Pixel
 
 //--> Set Optional fields
-      se further how to deal with optional fields
+      see further how to deal with optional fields
 
 //--> Create a gdcm::FileHelper
        gdcm::FileHelper *fileH = gdcm::FileHelper::New(file);
@@ -659,26 +749,31 @@ you just have to process as follow :
       fileH->SetContentType(GDCM_NAME_SPACE::UNMODIFIED_PIXELS_IMAGE);
       
       // depending on what you did before!
-                  
-//--> Set the Image Data
-       fileH->SetImageData((unsigned char *)imageData,size);
-      // ( Casting as 'unsigned char *' is just to avoid warnings.
-      // It doesn't change the values. )
 
 //--> Set the compression type : 
-      fileH->SetWriteTypeToJPEG();         
-      fileH->SetWriteTypeToJPEG2000();
-      fileH->SetWriteTypeToDcmExplVR(); // Explicit Value Represtation (no compression)
-      fileH->SetWriteTypeToDcmImplVR(); // Implicit Value Represtation (no compression)
+      fileH->SetWriteTypeToJPEG();      // lossless compression        
+      fileH->SetWriteTypeToJPEG2000();  // lossless compression 
+      fileH->SetWriteTypeToDcmExplVR(); // Explicit Value Representation (no compression)
+      fileH->SetWriteTypeToDcmImplVR(); // Implicit Value Representation (no compression)
       
       fileH->SetWriteModeToRaw();       // Probabely you don't want to convert any LUT into RGB pixels ...
 
+//--> Set the Image Data
+       fileH->SetImageData((unsigned char *)imageData,size);
+      // ( Casting as 'unsigned char *' is just to avoid warnings.
+      // It doesn't change the values. )
+      // or
+       fileH->SetUserData((unsigned char *)imageData,size); // performs compression, when required
+      // ( Casting as 'unsigned char *' is just to avoid warnings.
+      // It doesn't change the values. )
+                  
 //-> Write !      
       fileH->Write(fileName.str());
 
 //This works for a single image (singleframe or multiframe)
 
 2-1-1-1) Deal with optional DataElements          // TODO : finish it
+
     Any Data Element may be added (it's up to the user to understand what he is doing!)
     The supplied methods 'InsertXxx' will create the DataElement or replace it if it already exists.  
     Have a look at gdcm/Dict/dicomV3.dic to see what are the various DICOM fields, with their VR.
@@ -738,7 +833,8 @@ you just have to process as follow :
    // gdcm::FileHelper::CheckMandatoryElements() will check inconsistencies,
    // as far as it knows how.
    // Sorry, not yet available under Python.
-   //vtkSetMacro(GdcmFile, gdcm::File *);
+   
+     vtkSetMacro(GdcmFile, gdcm::File *);
    
 void vtkGdcmWriter::SetGdcmFile(gdcm::File *);
 
@@ -766,7 +862,7 @@ void vtkGdcmWriter::SetContentTypeToFilteredImage()
 void vtkGdcmWriter::SetContentTypeToUserCreatedImage()                        
 vtkGdcmWriter::void SetContentTypeToUnmodifiedPixelsImage()
    
-  // depending on what he did before!
+  // depending on what he did before (see C++ part)
   
                       
 
@@ -783,25 +879,213 @@ vtkGdcmWriter::void SetContentTypeToUnmodifiedPixelsImage()
 ---------------------------------
 /// \todo : write it!
 
-3) Some 'Command line' utilities  /// \todo: finish it!
+
+3) DICOMDIR /// \todo: finish it!
+===========
+3-1) How to read a DICIMDIR
+3-2) How to modifiy a DICOMDIR
+3-3) How to create a DICOMDIR
+
+
+4) Some 'Command line' utilities  /// \todo: finish it!
 ================================
 
-3-) PrintFile
-3-) exSerieHelper
-3-) exXCoherentFileSet
+4-) PrintFile
+4-) exSerieHelper
+4-) exXCoherentFileSet
+
+4-) AnonymizeNoLoad
+4-) AnonymizeMultiPatient
+4-) AnonymizeDicomDir
+4-) PatchHeader
+4-) ReWrite
+4-) RawToDicom
+4-) exMoveImagesToSingleSerieUID
 
-3-) AnonymizeNoLoad
-3-) AnonymizeMultiPatient
-3-) AnonymizeDicomDir
+4-) vtkgdcmViewer2
+4-) vtkgdcmSerieViewer2
 
-3-) ReWrite
-3-) RawToDicom
-3-) exMoveImagesToSingleSerieUID
+4-) PrintDicomDir
+4-) MakeDicomDir
 
-3-) vtkgdcmViewer2
-3-) vtkgdcmSerieViewer2
 
-3-) PrintDicomDir
-3-) MakeDicomDir
+    *   PrintFile
+    
+     Display the header of a ACR-NEMA/PAPYRUS/DICOM File                      
+     usage: PrintFile {filein=inputFileName|dirin=inputDirectoryName}[level=n]
+                       [forceload=listOfElementsToForceLoad] [rec] [noex] 
+                       [4DLoc= ][dict= privateDirectory]                  
+                       [ { [noshadowseq] | [noshadow][noseq] } ]          
+                       [debug] [warning]                                  
+      level = 0,1,2 : depending on the amount of details user wants to see
+      rec : user wants to parse recursively the directory                 
+      noex : user doen't want extra 'user friendly' info                  
+      4DLoc: group-elem(in hexa, no space) of the DataEntry holdind 4thDim
+      listOfElementsToForceLoad : group-elem,g2-e2,... (in hexa, no space)
+                                of Elements to load whatever their length 
+      privateDirectory : source file full path name of Shadow Group elems 
+      noshadowseq: user doesn't want to load Private Sequences            
+      noshadow   : user doesn't want to load Private groups (odd number)  
+      noseq      : user doesn't want to load Sequences                    
+      debug      : user wants to run the program in 'debug mode'          
+      warning    : user wants to be warned about any oddity in the File   
+      showlut :user wants to display the Palette Color (as an int array)  
+
+    * Anonymize
+
+         Anonymizes a full gdcm-readable Dicom image
+                Warning : probably segfaults if pixels are not gdcm readable.
+                          Use AnonymizeNoLoad instead.
+         usage: Anonymize filein=inputFileName fileout=anonymizedFileName [debug][usage]
+                debug    : user wants to run the program in 'debug mode'
+                usage    : user wants to display usage
+        
+
+    * AnonymizeNoLoad
+
+       
+         Anonymizes a gdcm-readable Dicom image even if pixels aren't gdcm readable
+               Warning : the image is overwritten;
+                         to preserve its integrity, use a copy.
+         usage: AnonymizeNoLoad {filein=inputFileName|dirin=inputDirectoryName}
+                                [rubout=listOfPrivateElementsToRubOut]
+                                [ { [noshadowseq] | [noshadow][noseq] } ] [debug]
+                inputFileName : Name of the (single) file user wants to anonymize
+                inputDirectoryName : user wants to anonymize *all* the files
+                                     within the (single Patient!) directory
+                listOfElementsToRubOut : group1-elem1,g2-e2,... (in hexa)
+                                         of extra Elements to rub out
+                noshadowseq: user doesn't want to load Private Sequences
+                noshadow   : user doesn't want to load Private groups (odd number)
+                noseq      : user doesn't want to load Sequences
+                debug      : user wants to run the program in 'debug mode'
+                usage      : user wants to display usage
+         
+
+    * ReWrite
+
+ Re write a full gdcm-readable Dicom image                              
+     (usefull when the file header is not very straight).               
+                                                                        
+ usage: ReWrite filein=inputFileName fileout=outputFileName             
+       [keepoverlays] [mode=write mode] [monochrome1]                   
+       [noshadow] [noseq][debug]                                        
+  --> The following line to 'rubout' a burnt-in Patient name            
+       [rubout=xBegin,xEnd,yBegin,yEnd [ruboutvalue=n (<255)] ]         
+  --> The 2 following lines, to extract a sub image within some frames  
+       [ROI=xBegin,xEnd,yBegin,yEnd]                                    
+       [firstframe=beg] [lastframe=end]                                 
+                                                                        
+        mode = a (ACR), x (Explicit VR Dicom), r (RAW : only pixels)    
+               j (jpeg lossless), 2 (jpeg2000)                          
+        keepoverlays : user wants to keep ACR-NEMA-like overlays        
+        monochrome1 = user wants MONOCHROME1 photom. interp. (0=white)  
+        noshadowseq: user doesn't want to load Private Sequences        
+        noshadow : user doesn't want to load Private groups (odd number)
+        noseq    : user doesn't want to load Sequences                  
+        rgb      : user wants to transform LUT (if any) to RGB pixels   
+        warning  : developper wants to run the program in 'warning mode'
+        debug    : developper wants to run the program in 'debug mode'          
+
+    * PrintDicomDir
+
+         Displays the tree-like structure of a DICOMDIR File
+         usage: PrintDicomDir filein=fileName [detail=n] [level=n] [debug] [usage]
+                detail = 1 : Patients, 2 : Studies, 3 : Series, 4 : Images
+                         5 : Full Content
+                level = 0,1,2 : depending on user (what he wants to see, when detail=5)
+                debug    : user wants to run the program in 'debug mode'
+                usage    : user wants to display usage
+         
+
+    * MakeDicomDir
+
+         Explores recursively the given directory, makes the relevant DICOMDIR
+                and writes it as 'NewDICOMDIR'
+         usage: MakeDicomDir dirname=rootDirectoryName 
+                            [ { [noshadowseq] | [noshadow][noseq] } ] [debug] [usage]
+                noshadowseq: user doesn't want to load Private Sequence
+                noshadow   : user doesn't want to load Private groups (odd number)
+                noseq      : user doesn't want to load Sequences
+                debug      : user wants to run the program in 'debug mode'
+                usage      : user wants to display usage
+         
+
+    * AnonymizeDicomDir
+
+         Anonymizes a gdcm-readable DICOMDIR even when some 'Objects'
+                are not yet taken into account
+                Warning : the DICOMDIR is overwritten; 
+                          to preserve its integrity, use a copy.
+         usage: AnonymizeDicomDir filein=dicomDirName [debug] [usage] [usage]
+                debug    : user wants to run the program in 'debug mode'
+                usage    : user wants to display usage
+         
+
+    * PatchHeader
+
+          Allows aware user to patch a gdcm-parsable image header, without 
+               loading image.
+               Warning : the image(s) is/are overwritten
+                         to preserve image(s) integrity, use a copy.
+               WARNING : *NO CHECK* is performed on the new values.
+                         Use only if you are sure the original values are wrong
+                         *and* your values are right...
+         usage: PatchHeader {filein=inputFileName|dirin=inputDirectoryName}
+                     [ { [size=] | [rows=][columns=] } ] [planes=]
+                     [bitsallocated=] [bitsstored=]
+                     [highbit=] [samplesperpixel=]
+                     [pixelrepresentation=] [samplesperpixel=]
+                     [ { [noshadowseq] | [noshadow][noseq] } ] [debug]
+                                                                                 
+             inputFileName : Name of the (single) file user wants to modify
+             inputDirectoryName : user wants to modify *all* the files
+                                  within the directory
+             newsize         : new size, to overwrite old (wrong) one
+                or
+             rows            : new Rows number,    to overwrite old (wrong) one
+             columns         : new Columns number, to overwrite old (wrong) one
+             planes          : new Planes number,  ...
+             bitsallocated   : new Bits Allocated number,  ...
+             bitsstored      : new Bits Stored number,  ...
+             highbit         : new High Bit number,  ...
+             samplesperpixel : new Samples Per Pixel, ...
+             pixelrepresentation : new Pixel Representation, ...
+                                                                                 
+             noshadowseq: user doesn't want to load Private Sequences
+             noshadow   : user doesn't want to load Private groups (odd number)
+             noseq      : user doesn't want to load Sequences
+             debug      : user wants to run the program in 'debug mode'
+             usage      : user wants to display usage
+         
+
+    * exXCoherentFileSet :
+                                                 
+Shows the various 'XCoherent' Filesets within a directory                 
+Optionaly copies the images in a Directories tree                          
+usage: exXCoherentFileSet {dirin=inputDirectoryName}                      
+                           dirout=outputDirectoryName                     
+                       { tag=group-elem | pos | ori } [sort] [write]      
+                       [ { [noshadowseq] | [noshadow][noseq] } ] [debug]  
+                                                                          
+       dirin : user wants to analyze *all* the files                      
+                            within the directory                          
+       write : user wants to create directories                           
+       dirout : will be created if doesn't exist                          
+       pos  : user wants to split each Single SerieUID Fileset on the     
+                         'Image Position '                                
+       ori  : user wants to split each Single SerieUID Fileset on the     
+                         'Image Orientation '                             
+       tag : group-elem    (in hexa, no space)                            
+                       the user wants to split on                         
+       sort :  user wants FileHelper to sort the images                   
+               Warning : will probabely crah if sort has no meaning       
+                (not only look at image names)                            
+       noshadowseq: user doesn't want to load Private Sequences           
+       noshadow   : user doesn't want to load Private groups (odd number) 
+       noseq      : user doesn't want to load Sequences                   
+       verbose    : user wants to run the program in 'verbose mode'       
+       debug      : developper wants to run the program in 'debug mode'  
+
 }}}
 </pre>