]> Creatis software - gdcm.git/blob - TODO
Comments: It shouldn't be too difficult to 'manualy' ask memory merging
[gdcm.git] / TODO
1 -----------------------------------------------------------------------------
2 Proposed Template of an entry in this TODO:
3 (Note: Date is the date of registering of first demand.)
4
5 -------------
6 Description:
7 Date:
8 Attributed:
9 Details:
10 Comments:
11 -------------
12
13 -----------------------------------------------------------------------------
14 Description: Add testing of valid dictionary
15 Date: 2005 Aug 31
16 Attributed: Mathieu
17 Details:
18 Since that now private/shadow dictionary are available
19 it would be nice to start implementing an automatic mode of loading
20 those dictionary as we read the public one.
21 Comments: It shouldn't be too difficult to 'manualy' ask memory merging 
22           of a Private Dict into the public one (I can do it soon).
23                          Automatic recognition of the Private Dict to be used seems hopeless.
24 -----------------------------------------------------------------------------
25 Description: gdcm::SerieHelper / UID / set of rules
26 Date: 2005 Aug 30
27 Attributed: Mathieu
28 Details:
29   gdcm::SerieHelper now offer a mechanism to add rules to sub select image 
30 as we iterate over them within a subdirectory structure. But what if UID was too
31 restrictive ? Therefore UID subselection become only a good default rule, which
32 should ideally be removed when user need a specific task.
33 Comments:
34 -----------------------------------------------------------------------------
35 Description: Add testing of valid dictionary
36 Date: 2005 Aug 29
37 Attributed: Mathieu
38 Details:
39 It is potentially possible that user modifies the dictionary that gdcm provides
40 and this is also possible that the dictionary generated from pdf is buggy
41 (see 2001,xx5F. VR = SQ, VM = 1-n, from 
42 www.medical.philips.com/main/company/connectivity/assets/docs/dicomcs/mr91.pdf)
43 Therefore gdcm should check for any typo, and report it (if possible)
44 Comments:
45 -----------------------------------------------------------------------------
46 Description: Add kwsys as a subdir somewhere in gdcm
47 Date: 2004 Oct 8
48 Attributed: Mathieu
49 Details:
50   kwsys is a lightweight library developped by kitware, used in project like
51 ITK, VTK, CMake and ParaView. It runs and compile on almost any plateform with c++
52 compiler. And it provide a cross plateform approach to any kind of system call
53 (executing a process, killing a process, realpath, filename/directory management ...)
54 Comments:
55    * jpr : what does 'kwsys' stand for?
56 -----------------------------------------------------------------------------
57 Description: Extent reading support
58 Date: 2004 Oct 8
59 Attributed: Mathieu
60 Details:
61 Comments: All ITK/VTK readers support selecting extent. gdcm should support 
62 selecting extent before being inserted into ITK
63 -----------------------------------------------------------------------------
64 Description: gdcmDicomDir and SQItem creation
65 Date: 2004 Nov 16
66 Attributed:
67 Details: DicomDir creates some SQItem (by new). Then, it creates
68   the corresponding DicomDirPatient, etc. using the content of the SQItem
69   (the content is composed with some DocEntry's that can't be destroyed).
70   So, if the SQItem is deleted, then it's content is deleted to. But the 
71   DicomDirPatient, etc. use the content of the SQItem. Then, the SQItem can't
72   be deleted, and when have memory leaks
73 Comments : 
74    * JPR : Fixed
75 -----------------------------------------------------------------------------
76 Description: [BUG] Better handling of unfound Dicom dictionary.
77              When gdcm doesn't find the Dicom dictionary (because it's
78              path to the directory of dictionary is uncorrect, either
79              because the install relative layout was broken after file moves
80              or because the environnement variable GDCM_DICT_PATH is 
81              unpropely set), gdcm will:
82              1/ print a warning
83              2/ throw an exception (that is internaly UNcatched by gdcm)
84                 that in most cases provoques the caller application to
85                 exit uncleanly (uncatched excpetions in fine call abort() ).
86              Additionaly on Win32 the warning print isn't displayed because
87              exiting occurs prior to cerr or cout is flushed properly.
88 Date: 2004 Oct 15
89 Attributed:
90 Details: fixes (from dirty to clean)
91          1/ force Win32 to flush it's buffer so at least the user gets some
92             reason why it's application exited (when called in command
93             environement). Note: it looks like the "cerr << flush" fails. Sigh.
94          2/ within gdcm catch the exception, display a decent warning, and
95             return to caller.
96          3/ see the comment below on how to enhance the API and fix things
97             really cleanly.
98 Comments: ENH proposal:
99           The caller migth not be aware of the path to the dictionaries
100           on invocation of gdcm (think this path is set by the Interface
101           because the caller wants to skip the default gdcm dictionary in order
102           to provide his own ones e.g. another language based one).
103              Hence, gdcm should postpone the parsing of the default dictionary
104           instead of doing it on library entry.
105           This would enable two things:
106            - It would give a chance to the caller to set the path to
107              the dictionaries he whishes to use, through a call to
108              newly created DictSet::SetDictionaryPath( string ).
109            - It would avoid the burden of using the GDCM_DICT_PATH
110              environnement variable and enable GDCM CONTROL FROM WITHIN
111              THE API. Optionaly, if the caller didn't use the API to
112              provide his prefered path, gdcm could still default to 
113              GDCM_DICT_PATH...
114 -----------------------------------------------------------------------------
115 Description: vtk/vtkGdcmReader doesn't positionate the normal to the image
116 Date: 2004 Oct 1
117 Attributed:
118 Details: vtkGdcmReader::CheckFileCoherence() sets the DataOrigin[i]
119          but doesn't set the plane (image seen in 3D) normal (is it
120          possible any how). This plane normal could be extracted from 
121          the "orientation" info of the gdcmHeader ( refer to
122          grep "Orientation" Dicts/dicomV3.dic).
123          Problem exhibiting this defect: cine loop on a stack of images
124                whose Origin is correct, but whose normal is not set will
125                plainly suck !
126 Comments:
127         * vtkGdcmReader inherits from vtkImageReader which aggregates
128           a vtkTranform. vtkGdcmReader could store (when the user requires
129           it, see below) the origin/normal taken from the Dicom Header
130           within this vtkTransform (looks like a natural place to store
131           this spacial information).
132         * Both settings of the origin and/OR the normal of the plane (image)
133           should be an option defined with a flag (On/Off) in the
134           vtkGdcmReader...
135 -----------------------------------------------------------------------------
136 Description: test the private dictionary part.
137 Date: 2004 Sep 24
138 Attributed:
139 Details:
140 Comments:
141  * Frog: where can we obtain such a private/dictionary and the corresponding
142          Dicom file ? Any examples on-line ?
143  * jpr : some are in gdcm/Dicts (built from pdf documents found on constructors'
144         www sites.
145         When we check them against existing images, we see the are uncomplete
146         and unaccurate ...
147 -----------------------------------------------------------------------------
148 Description: generate methods based on VM.
149 Date: 2004 Jul 30
150 Attributed:
151 Details:
152  * cmake should parse le DICOM dictionary to generate methods like
153    gdcm???::SetImagePosition(int, int)
154    {
155      //generated content do not edit
156      ...
157    }
158    gdcm???::SetImageNumber(int)
159    {
160      //generated content do not edit
161      ...
162    }
163 Comments:
164  * Regrain: a dicom dictionary entry name is NOT UNIQUE [this means
165      two tags=(group, element) can share the same name].
166      What should the wrapper do in such a case !?
167  * Frog: what does VM stand for ?
168  * VM = Value Multiplicity
169 -----------------------------------------------------------------------------
170 Description: Add information on supported imagers (constructor/model)
171 Date: 2004 9 7
172 Attributed:
173 Details: in order to promote gdcm make a list (on the web pages)
174          of images successfully parsed based on a constructor/model ordering
175 Comments:
176  * frog: gdcmData only lists pathological images. How to collect
177          the ones gdcm works smoothly with (hopefully gdcmData is a small
178          subset of what we would like).
179   * jpr : gdcmData contains images that caus*ed* us some troubles.  
180           the aim of gdcm is to read *all* the images, from *all* the
181           constructors and *all* the models.
182           Better we do a 'gdcm Dicom Hall of Shame' with bugged header images,
183           explaining *why* the header is bugged.         
184 -----------------------------------------------------------------------------
185 Description: Add a GetVersion() global function.
186 Date: 2003 july 7
187 Attributed:
188 Details: This is to be used for version assertion with gdcmPython
189 Comments: Done (August 2005)
190 -----------------------------------------------------------------------------
191 * vtk/vtkGdcmHeader.cxx: if speed becomes a concern some changes can
192   be made at the cost of memory consumption (refer to header of 
193   vtk/vtkGdcmHeader.cxx)
194 -----------------------------------------------------------------------------
195 * gdcmElValSet::SetElValueLengthByNumber IMNSHO should be trashed.
196   It's only purpose is a onliner substitute to calling GetElValueByNumber
197   and then SetLength. This only obfuscates the caller code more than
198   clarifying it.
199   Besides the definition of gdcmElValSet::SetElValueLengthByNumber itself
200   it quite poor since it is a almost exact copy of
201   gdcmElValSet::GetElValueByNumber except for the returned code.
202   gdcmHeader::SetPubElValLengthByNumber (which is based on 
203   gdcmElValSet::SetElValueLengthByNumber) is used nowhere...
204 Comments:
205    * jpr : all the methods SetxxxByName were trashed.
206            all the methods SetxxxByNumber were renamed
207            A general method clean out was performed
208 -----------------------------------------------------------------------------
209 * All (or at least many of) the methods of gdcmHeader whose only arguments
210   are an ElValue* (e.g.  FindLength, FindVR, LoadElementValue...) can
211   be moved away to ElValue class on condition of transmitting the
212   gdcmHeader.fp attribute. This change should be considered since it
213   would allow those method to avoid artificial calls to ElValue::GetElement(),
214   ElValue::GetVR()...
215 -----------------------------------------------------------------------------
216 * Group length is not a unique tag in a file. Hence avoid putting it
217   in the element values dictionary without doing something smarter
218   (say, instead of storing the length store the group and the length
219    so we can related a length to a group).
220 -----------------------------------------------------------------------------
221 * GetPubElValByNumber doit faire la difference entre chaine vide 
222   et chaine pas trouve'e. Eventuellement raiser une exception ?
223 -----------------------------------------------------------------------------
224 * gdcmHeader::LoadElements only loads the element whose length is
225   below the specified size. When accessing the value of such an element
226   the content is unfound ! Find a decent way of loading the value on
227   explicit demand.
228 -----------------------------------------------------------------------------
229 * JPR: supply a method that only reads/loads (?) the Dicom elements 
230   given as a list(?).
231 -----------------------------------------------------------------------------
232 * JPR: gdcmHeader::CheckSwap() dans le cas ACR pas propre, degager tout de
233   suite si on a deduit que c'en est pas...
234 -----------------------------------------------------------------------------
235 * python /usr/lib/python2.2/site-packages/DaVaW/demo/dvwDcmReader.py
236   and load image /home/frog/cvs/DCMlib/Data/CT-MONO2-16-ankle.dcm
237   will yield wrong coloring scheme as opposed to 
238   affim filein=/home/frog/cvs/DCMlib/Data/CT-MONO2-16-ankle.dcm
239 -----------------------------------------------------------------------------
240 * gdcmFile should implement the following API:
241    gdcmFile WriteDicom;
242    WriteDicom.SetFileName("MyDicomFile.dcm");
243    string * AllTags = gdcmHeader.GetDcmTagNames();
244    WriteDicom.SetDcmTag(AllTags[5], "253");
245    WriteDicom.SetDcmTag("Patient Name", "bozo");
246    WriteDicom.SetDcmTag("Patient Name", "bozo");
247    WriteDicom.SetImageData(Image);
248    WriteDicom.Write();
249
250    Anonymize(ostream& output) {
251       a = gdcmFile("toto1");
252       a.SetPubValueByName("Patient Name", "");
253       a.SetPubValueByName("Date", "");
254       a.SetPubValueByName("Study Date", "");
255       a.write(output);
256    }
257 -----------------------------------------------------------------------------
258