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