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