* Preparation of writing a gdcmHeader iterator: generalisation of gdcmTagKey
- The following is the doxygen comment of the typedef declaration
of gdcmagKey in src/gdcmCommon.h:
gdcmTagKey is made to old an "universal" (as in URL, Universal
Ressource Locator) key to a gdcmDocEntry i.e. a dicom tag.
A dicom tag allways has a group and an element, but a set of tags
embeded in various (optionally nested) sequences and sharing
the same group and element all share the same (group, element)
"identifier". Hence the (group, element) cannot be used as an
identifier (in gdcm we shall refer to a "TagKey") of a tag.
In order to construct a proper tag identifier (i.e. a key) we
consider the following definition of a TagKey:
- let Group, Element be the string representation of the
group and element dicom tag members,
- let ItemNumber be the string representation of the integer
index of the considered item number of a sequence,
Let the key of a tag embeded in a sequence, noted SeqTag, be
the form:
/ItemNumber#Group|Element
where "/", "#" and "|" are characters acting as separators.
Then the general form of a gdcmTagKey is given by:
Group|Element<SeqTag>
where <SeqTag> means NO or many instances of SeqTag.
Hence the gdcmTagKey of a tag not "leaving" in a sequence is the
string e.g.
0028|1201
but the gdcmTagKey of a tag "embeded" is the first item of
a sequence, itself nested in the third item of a sequence is the
string e.g.
0004|1220/2#0008|0082/0#0008|0090
- src/gdcmDocEntry.h: added a new Key (of type gdcmTagKey) member, in
order to hold the new sequence compatible key. Previously, the
GetKey() method would look in the underlying gdcmDictEntry.
- src/gdcmDocEntry.cxx:
-- constructor now copies the underlying DictEntry key, in the local
Key member.
-- ::Print: displays the member Key, instead of the (group, element).
- src/gdcmCommon.h: added some comments on typedef gdcmTagKey.
- src/gdcmDocEntrySet.h:xi
-- ::ParseDES() now setups the gdcmTagKey of the sequence it is parsing.
-- now has a new BaseTagKey member.
-- STYLE.
* src/gdcmValEntry.[h|cxx], src/gdcmBinEntry.[h|cxx]: the member VoidArea,
previously a member of gdcmValEntry, moved to gdcmBinEntry were is
truly belongs.
This poses the problem with the semantics of the following lines
LoadEntryVoidArea(0x0028,0x1201); // R LUT
LoadEntryVoidArea(0x0028,0x1202); // G LUT
LoadEntryVoidArea(0x0028,0x1203); // B LUT
in gdcmDocument::gdcmDocument(std::string const & ). Please refer
to the long FIXME note for what the problem is. Nevertheless in
order to get things working the dicom dictionary was altered !
Please fix things urgently...
* Dicts/dicomV3.dic WRONGLY altered (this means we introduced a uncorrect
information), see above note on moving the member VoidArea. Nevertheless
the following entries previously correctly set as US are now inproperly
set to OW:
0028 1201 OW IMG Red Palette Color Lookup Table Data
0028 1202 OW IMG Green Palette Color Lookup Table Data
0028 1203 OW IMG Blue Palette Color Lookup Table Data
* src/gdcmDocEntry.[h|cxx], src/gdcmSeqEntry.h: SQDepthLevel member
of gdcmDocEntry moved to gdcmSeqEntry.
* src/gdcmSeqEntry.cxx: STYLE.
WARNING : This was not designed as a 'Test' program, but as a utility
provided to 'transform' an image 'Siemens MRI New version'
into an image 'Siemens MRI old version'
If user tries to 'merge' two mismatching images
e.g. a LUT image and a RGB image
or a compressed and an uncompressed one
or a single frame and a multiframe,
or a '12 Bits Allocated' image and anything else, etc,
Probabely TestChangeHeader will fail !
FIX :
gdcmElementSet::RemoveEntry() now removes the entry from the H Table
ADD :
gdcmElementSet::RemoveEntryNoDestroy() removes the entry, without deletion
Temporary (?) uncomment of method gdcmElementSet::GetEntry()
to allow Example/TestCopyDicom.cxx to compile
(she shall have to decide if we consider the modif as permanent, or if we remove TestCopyDicom.cxx)
jpr [Thu, 26 Aug 2004 15:29:52 +0000 (15:29 +0000)]
- now, DicomDir stuff stakes into account the 'new' structure
- gdcmObject is no longer composed of 2 pointers in a chained list, but is an SQItem
- useless gdcmDicomDir::WriteEntries method is removed
- useless gdcmDicomDir::AddObjectToEnd method is removed
- WARNING : BuidUpDicomDir not yet debugged, but I prefer to commit right now.
-> See you tomorow
frog [Tue, 3 Aug 2004 17:28:57 +0000 (17:28 +0000)]
* gdcmPython/testSuite.py: all the test suite in python is now moved
to it's C++ version (see gdcmData/TestAllEntryVerifyReference.txt)
* Test/CMakeLists.txt adapted to renaming of files in gdcmData
* gdcm/TODO and src/gdcmDictSet.h cleaned up frow the "TODO Swig" oldies
frog [Mon, 2 Aug 2004 16:42:12 +0000 (16:42 +0000)]
* gdcmPython/testSuite.py checks on CR-MONO1-10-chest.dcm moved to
gdcmData/TestAllEntryVerifyReference.txt
* Test/TestAllEntryVerify.cxx is now effective (used allways return true)
* src/gdcmDocument.[cxx|h]: constructors no longer use the bool
exception_on_error parameter.
- src/gdcmFile.[cxx|h], src/gdcmHeader.[cxx|h] changed accordingly,
- vtk/vtkGdcmReader.cxx changed accordingly,
- Example/*.cxx and Test/*.cxx changed accordingly.
frog [Mon, 2 Aug 2004 14:06:57 +0000 (14:06 +0000)]
* gdcmPython/CMakeLists.txt: SWIG_FLAGS doesn't declare includeall
to avoid inclusion recursion until STL is reached.
* src/gdcmDocument.[h|cxx]: exceptions substituted to errno C-style
mecanism. errno.h is not included in gdcm anymore.
* src/gdcmException.h: introduced new gdcmFormatUnexpected class
(gdcmFormatError now inherits from gdcmFormatUnexpected).
* TODO updated
ENH: Test now support passing argument, thus instead of iterating over all images, you can pass the input dicom images and the reference image. This is pretty usefull in debug time
FIX: valgrind reported this one:
UMR ==23598== Use of uninitialised value of size 4
==23598== at 0x77C5B7: isalpha (in /lib/tls/libc-2.3.2.so)
==23598== by 0x3C2CAB2E: gdcmDocument::FindDocEntryVR(gdcmDocEntry*) (gdcmDocument.cxx:1783)
==23598== by 0x3C2CCE83: gdcmDocument::ReadNextDocEntry() (gdcmDocument.cxx:2556)
==23598== by 0x3C2C985C: gdcmDocument::ParseSQ(gdcmSeqEntry*, long, long, bool) (gdcmDocument.cxx:1422)
==23598== by 0x3C2C9792: gdcmDocument::ParseDES(gdcmDocEntrySet*, long, long, bool) (gdcmDocument.cxx:1391)
==23598== by 0x3C2C5858: gdcmDocument::gdcmDocument(std::string const&, bool, bool, bool) (gdcmDocument.cxx:130)
==23598== by 0x3C2B19FA: gdcmHeader::gdcmHeader(std::string const&, bool, bool, bool) (gdcmHeader.cxx:47)
==23598== by 0x8053824: PrintAllDocument(int, char**) (PrintAllDocument.cxx:34)
==23598== by 0x8050D3E: main (gdcmTests.cxx:173)
==23598==
BUG: On recent debian system, the dirent structure is not fed properly. Furthermore the scandir is only a BSD extension and not POSIX. So rewrote Explore function to be POSIX and works on recent debian system. The Explore function will also now return the number of files read
* src/gdcmCommon.h, gdcmDict.cxx, gdcmTS.cxx : bug fix for msvc6 compilation
* src/gdcmDebug.[h|cxx] : bug fix for msvc6 compilation. Replace the dbg
variable (instance of gdcmDebug) by a definition macro, and the instance
is now in static in the gdcmDebug class
* src/gdcmSQItem.h : (FIXME) remove an undefined method
* Test/PrintAllDocument.cxx : bug fix in the result of the test
-- BeNours
* WARNING: ctest now depends more tightly on gdcmData. You should
check out gdcmData properly for things to run smoothly...
* src/gdcmDocument.cxx MAX_SIZE_LOAD_ELEMENT_VALUE is set back to 0xfff
(4096) for "ctest -R TestAllEntryVerify" to be able to run (i.e.
we need the pixels not be loaded in order to use the ValEntry
that displays position and size).
* Test/TestAllEntryVerify.cxx a new low level test now seems fair.
This is a C++ based equivalent of gdcmPython/testSuite.py that should
be deprecated. If you have any doubts about the advantages of a
modern scripting language (read Python) versus grass root C++ (i.e.
without lex + yacc, because of gdcm commitement to MS-VC++, sighhh),
I suggest you compare TestAllEntryVerify.cxx (639 lines, without the
reference file gdcmData/TestAllEntryVerifyReference.txt) and testSuite.py.
Anyhow, consider documenting the gdcmData images in
gdcmData/TestAllEntryVerifyReference.txt (and please run ctest before
commiting changes).
* Test/CMakeLists.txt:
- now uses TestAllEntryVerify.cxx
- specific comments on oldACR00001.ima (now renamed in gdcmData
to SIEMENS_GBS_III-16-ACR_NEMA_1.acr) moved away to
gdcmData/TestAllEntryVerifyReference.txt
* TODO updated.
- guint16 and guint32 removed. Use ISO C uint16_t, uint32_t instead.
- TagKey renamed to gdcmTagKey (for external usage)
- VRKey renamed to gdcmVRKey (for external usage)
- removal of typedef duplication.
- Removed all unecessary inline keyword from class inline definitions.
- Some method|function(void) declarations replaced with method|function().
* src/jpeg/libijg12/jdhuff12.c:
- printf polluting ctest removed.
- TAB removal for comminting
* Test:
- TestAllReadCompareDicom.cxx: added a test that compares all the
images in gdcmDataImages.h with corresponding images in
gdcmData/BaselineDicom/. When baseline images are not present
this test creates them.
Note: we need to validate each reference image, but before that
I'd like to rename them with a more explicit name...
- CMakeLists.txt: changed accordingly.
* Example/*.cxx: examples now only include gdcm.h (as opposed to
including each header needed).
* Test/*.cxx and Example/*.cxx: moved some examples away from the
test suite to the Example directory. Are concerned:
- PrintHeader.cxx
- TestDcm2Acr.cxx
- TestFindTags.cxx
- TestWrite.cxx was
- TestWriteSimple.cxx
* Test/CMakeLists.txt: added some comments on reasons for black listing
image gdcmData/oldACR00001.ima
frog [Wed, 30 Jun 2004 00:10:58 +0000 (00:10 +0000)]
* Test/CmakeList.txt: removed the following from black list (to be coherent
with removal from gdcmData):
- gdcm-MR-PHILIPS-16-Multi-Seq.fixed.dcm
- gdcm-MR-PHILIPS-16.dcm
- US.3405.1.dcm
Added the following because after last cvs update, they cause
ctest -R TestReadWriteReadCompare
to segfault:
- gdcm-MR-SIEMENS-16-1.acr
- oldACR00001.ima
frog [Tue, 29 Jun 2004 23:43:19 +0000 (23:43 +0000)]
* Test/TestReadWriteReadCompare.cxx was properly written (with a call
to gdcmFile::SetImageData()) BUT since gdcmFile is brain damaged (see
new comments in this file) we temporarily (sigh) move to a weaker
form of test...
* Test/CmakeList.txt: with the change to Test/TestReadWriteReadCompare.cxx
we don't need to black list the following images anymore:
- 8BitsUncompressedColor.dcm
- OT-PAL-8-face.dcm
- US-PAL-8-10x-echo.dcm
* src/gdcmDocument.[h|cxx]: RE-Reverting to version 1.42 with the proper
fixes and the beautified code ;-)
This fixes the bug introduced in version 1.42 (when beautifying)
that made the parsing of 8BitsRunLengthColor.dcm unproper.
Note: ctest was blind to this bug (this means we need to still
improve the test suite). The bug could be detected by using
gdcmbin/bin/PrintDocument $GDCM_DATA/8BitsRunLengthColor.dcm
or by using
gdcmbin/bin/ReadWrite $GDCM_DATA/8BitsRunLengthColor.dcm
and by displaying the (garbage) produced file temp.XDCM...
frog [Tue, 29 Jun 2004 14:00:37 +0000 (14:00 +0000)]
* Test/TestWriteRead.cxx and TestReadWrite.cxx merged (because of
redundancy) to added Test/TestReadWriteReadCompare.cxx
* Test/CmakeList.txt: because the compare test of
Test/TestReadWriteReadCompare.cxx fails, the following images are
black listed: - 8BitsUncompressedColor.dcm
- OT-PAL-8-face.dcm
- US-PAL-8-10x-echo.dcm