Codebase list gdcm / 5f2cfba
New upstream version 3.0.16 Mathieu Malaterre 1 year, 8 months ago
98 changed file(s) with 4514 addition(s) and 1188 deletion(s). Raw diff Collapse all Expand all
533533 const char *in = filenames[i].c_str();
534534 const char *out = outfilenames[i].c_str();
535535 if (!CleanOneFile(cleaner, in, out, skipmeta > 0 ? true : false,
536 continuemode)) {
536 continuemode > 0 ? true : false)) {
537537 return 1;
538538 }
539539 }
4848 #include "gdcmASN1.h"
4949 #include "gdcmAttribute.h"
5050 #include "gdcmBase64.h"
51 #include "gdcmMEC_MR3.h"
5152 #include "gdcmTagKeywords.h"
5253
5354 #include <string>
492493 os << " UserAdress4: " << std::string(UserAdress4,32) << "\n";
493494 os << " UserAdress5: " << std::string(UserAdress5,32) << "\n";
494495 os << " RecDate: " << std::string(RecDate,8) << "\n";
495 os << " RecTime: " << std::string(RecTime,64) << "\n";
496 os << " RecTime: " << std::string(RecTime,6) << "\n";
496497 os << " RecPlace: " << std::string(RecPlace,64) << "\n";
497498 os << " RecSource: " << std::string(RecSource,64) << "\n";
498499 os << " DF1: " << std::string(DF1,64) << "\n";
852853 return ret;
853854 }
854855
855 static int PrintPMTF(const std::string & filename, bool verbose)
856 static int PrintMEC_MR3(const std::string & filename, bool verbose)
856857 {
857858 (void)verbose;
858859 gdcm::Reader reader;
864865 }
865866
866867 const gdcm::DataSet& ds = reader.GetFile().GetDataSet();
867 int ret;
868
869 // Original Data
870 const gdcm::PrivateTag tmecmr3(0x700d,0x08,"TOSHIBA_MEC_MR3");
871 if( !ds.FindDataElement( tmecmr3) ) return 1;
872 const gdcm::DataElement& mecmr3 = ds.GetDataElement( tmecmr3 );
873 if ( mecmr3.IsEmpty() ) return 1;
874 const gdcm::ByteValue * bv = mecmr3.GetByteValue();
875
876 const char *inbuffer = bv->GetPointer();
877 const size_t buf_len= bv->GetLength();
878
879 int ret = 0;
880 if (!gdcm::MEC_MR3::Print(inbuffer, buf_len))
881 {
882 ret = 1;
883 }
884
885 return ret;
886 }
887
888 static int PrintPMTF(const std::string & filename, bool verbose)
889 {
890 (void)verbose;
891 gdcm::Reader reader;
892 reader.SetFileName( filename.c_str() );
893 if( !reader.Read() )
894 {
895 std::cerr << "Failed to read: " << filename << std::endl;
896 return 1;
897 }
898
899 const gdcm::DataSet& ds = reader.GetFile().GetDataSet();
900 int ret = 0;
868901 {
869902 const gdcm::PrivateTag tpmtf(0x0029,0x1,"PMTF INFORMATION DATA");
870903 const gdcm::PrivateTag tseq(0x0029,0x90,"PMTF INFORMATION DATA");
12101243 std::cout << " or TOSHIBA_MEC_MR3 sub-sequences (0029,01,TOSHIBA_MEC_MR3)." << std::endl;
12111244 std::cout << " or CANON_MEC_MR3 sub-sequences (0029,01,CANON_MEC_MR3)." << std::endl;
12121245 std::cout << " --medcom print MedCom History Information as UTF-8 (0029,20,SIEMENS MEDCOM HEADER)." << std::endl;
1246 std::cout << " --mr3 print Original Data as UTF-8 (700d,08,TOSHIBA_MEC_MR3)." << std::endl;
12131247 std::cout << " -A --asn1 print encapsulated ASN1 structure >(0400,0520)." << std::endl;
12141248 std::cout << " --map-uid-names map UID to names." << std::endl;
12151249 std::cout << "General Options:" << std::endl;
12431277 int printvepro = 0;
12441278 int printsds = 0; // MR Series Data Storage
12451279 int printct3 = 0; // TOSHIBA_MEC_CT3
1280 int printmecmr3 = 0; // TOSHIBA_MEC_MR3
12461281 int printpmtf = 0; // TOSHIBA / PMTF INFORMATION DATA & TOSHIBA / TOSHIBA_MEC_MR3 & CANON_MEC_MR3
12471282 int verbose = 0;
12481283 int warning = 0;
12921327 {"pmtf", 0, &printpmtf, 1},
12931328 {"mecmr3", 0, &printpmtf, 1},
12941329 {"medcom", 0, &printmedcom, 1},
1330 {"mr3", 0, &printmecmr3, 1},
12951331 {nullptr, 0, nullptr, 0} // required
12961332 };
12971333 static const char short_options[] = "i:xrpdcCPAVWDEhvI";
15131549 {
15141550 res += PrintPMTF(*it, verbose!= 0);
15151551 }
1552 else if( printmecmr3 )
1553 {
1554 res += PrintMEC_MR3(*it, verbose!=0);
1555 }
15161556 else if( printmedcom )
15171557 {
1518 res += PrintMedComHistory(*it, csaname);
1558 res += PrintMedComHistory(*it, verbose!=0);
15191559 }
15201560 else if( printelscint )
15211561 {
15751615 else if( printpmtf )
15761616 {
15771617 res += PrintPMTF(filename, verbose!= 0);
1618 }
1619 else if( printmecmr3 )
1620 {
1621 res += PrintMEC_MR3(filename, verbose!= 0);
15781622 }
15791623 else if( printmedcom )
15801624 {
1616 #----------------------------------------------------------------------------
1717
1818 project(GDCM
19 VERSION 3.0.14
19 VERSION 3.0.16
2020 LANGUAGES CXX C
2121 )
2222 ## NOTE: the "DESCRIPTION" feature of project() was introduced in cmake 3.10.0
2727 set(GDCM_MINOR_VERSION ${GDCM_VERSION_MINOR})
2828 set(GDCM_BUILD_VERSION ${GDCM_VERSION_PATCH})
2929 set(GDCM_VERSION "${GDCM_VERSION_MAJOR}.${GDCM_VERSION_MINOR}.${GDCM_VERSION_PATCH}") # ${GDCM_VERSION_TWEAK}
30 set(GDCM_SHORT_VERSION "${GDCM_VERSION_MAJOR}.${GDCM_VERSION_MINOR}")
3031
3132 mark_as_advanced(CMAKE_BACKWARDS_COMPATIBILITY CMAKE_BUILD_TYPE CMAKE_INSTALL_PREFIX)
3233 set(GDCM_CMAKE_DIR "${GDCM_SOURCE_DIR}/CMake" CACHE INTERNAL "")
131132 set(LIBRARY_OUTPUT_PATH ${GDCM_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.")
132133 mark_as_advanced(LIBRARY_OUTPUT_PATH)
133134 endif()
135
136 # TODO: The following should be used for CMake 3 and beyond,
137 # EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH are deprecated
138 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
139 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
140 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
134141
135142 #-----------------------------------------------------------------------------
136143 # Adding GDCM_DATA_ROOT
649656 mark_as_advanced(VTK_DIR)
650657 set(GDCM_VTK_DIR ${VTK_DIR})
651658 mark_as_advanced(GDCM_USE_PARAVIEW)
652 add_subdirectory(Utilities/VTK)
659
660 set(VTKGDCM_NAME vtkgdcm CACHE STRING "vtk-gdcm lib name")
661 mark_as_advanced(VTKGDCM_NAME)
662
663 if(VTK_VERSION VERSION_LESS 8.90)
664 add_subdirectory(Utilities/VTK)
665 else()
666 message(STATUS "Building Utilities/VTK as a VTK 9 Module")
667 # TODO: use VTKGDCM_NAME instead of vtkgdcm
668
669 option(VTKGDCM_VERSIONED_INSTALL "Install with versioned names." ON)
670 mark_as_advanced(VTKGDCM_VERSIONED_INSTALL)
671 if(VTKGDCM_VERSIONED_INSTALL)
672 set(vtk_version_suffix "-${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")
673 set(vtkgdcm_library_suffix "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")
674 else()
675 set(vtk_version_suffix "")
676 set(vtkgdcm_library_suffix "")
677 endif()
678 if(DEFINED GDCM_CUSTOM_LIBRARY_SUFFIX)
679 set(vtkgdcm_library_suffix "${GDCM_CUSTOM_LIBRARY_SUFFIX}")
680 endif()
681
682 vtk_module_scan(
683 MODULE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/Utilities/VTK/vtkgdcm.module"
684 REQUEST_MODULES "GDCM::vtkgdcm"
685 PROVIDES_MODULES vtkgdcm_modules
686 ENABLE_TESTS "${GDCM_BUILD_TESTING}"
687 )
688
689 # documented at https://vtk.org/doc/nightly/html/group__module.html
690 vtk_module_build(
691 MODULES ${vtkgdcm_modules}
692 INSTALL_EXPORT GDCM
693 ARCHIVE_DESTINATION "${GDCM_INSTALL_LIB_DIR}"
694 HEADERS_DESTINATION "${GDCM_INSTALL_INCLUDE_DIR}/vtk${vtk_version_suffix}"
695 CMAKE_DESTINATION "${GDCM_INSTALL_PACKAGE_DIR}"
696 LICENSE_DESTINATION "${GDCM_INSTALL_DATA_DIR}/vtkgdcm-${GDCM_SHORT_VERSION}"
697 HIERARCHY_DESTINATION "${GDCM_INSTALL_LIB_DIR}/vtk${vtk_version_suffix}/hierarchy/vtkgdcm"
698 LIBRARY_NAME_SUFFIX "${vtkgdcm_library_suffix}"
699 VERSION "${GDCM_VERSION}"
700 SOVERSION "1"
701 # TODO: these are probably not set as they should be
702 #USE_EXTERNAL "${GDCM_USE_EXTERNAL}"
703 #TEST_DATA_TARGET vtkgdcmData
704 #TEST_INPUT_DATA_DIRECTORY "${vtkgdcm_test_data_directory_input}"
705 #TEST_OUTPUT_DATA_DIRECTORY "${vtkgdcm_test_data_directory_output}"
706 )
707
708 if(GDCM_WRAP_PYTHON AND VTK_WRAP_PYTHON)
709 find_package(PythonInterp ${VTK_PYTHON_VERSION} QUIET)
710
711 vtk_module_wrap_python(
712 MODULES ${vtkgdcm_modules}
713 TARGET GDCM::vtkgdcmpython
714 INSTALL_EXPORT vtkgdcmPython
715 PYTHON_PACKAGE "vtkgdcm"
716 CMAKE_DESTINATION "${GDCM_INSTALL_PACKAGE_DIR}"
717 LIBRARY_DESTINATION "${GDCM_INSTALL_LIB_DIR}"
718 MODULE_DESTINATION "${GDCM_VTK_INSTALL_PYTHONMODULE_DIR}"
719 SOABI "${Python${VTK_PYTHON_VERSION}_SOABI}"
720 BUILD_STATIC OFF
721 )
722
723 file(GENERATE
724 OUTPUT "${CMAKE_BINARY_DIR}/${GDCM_VTK_INSTALL_PYTHONMODULE_DIR}/vtkgdcm/__init__.py"
725 CONTENT "from .vtkgdcm import *\n\n__all__ = ['vtkgdcm']\n__version__ = \"${GDCM_VERSION}\"\n")
726 install(
727 FILES "${CMAKE_BINARY_DIR}/${GDCM_VTK_INSTALL_PYTHONMODULE_DIR}/vtkgdcm/__init__.py"
728 DESTINATION "${GDCM_VTK_INSTALL_PYTHONMODULE_DIR}/vtkgdcm/")
729
730 export(
731 EXPORT vtkgdcmPython
732 NAMESPACE GDCM::
733 FILE "${GDCM_INSTALL_PACKAGE_DIR}/vtkgdcmPython-targets.cmake")
734 install(
735 EXPORT vtkgdcmPython
736 NAMESPACE GDCM::
737 FILE vtkgdcmPython-targets.cmake
738 DESTINATION "${GDCM_INSTALL_PACKAGE_DIR}")
739 endif()
740
741 if(GDCM_WRAP_JAVA AND VTK_WRAP_JAVA)
742 # TODO: this is broken, incomplete, needs lots of work
743 vtk_module_wrap_java(
744 MODULES ${vtkgdcm_modules}
745 WRAPPED_MODULES vtkgdcm_java_wrapped_modules
746 JAVA_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles")
747 endif()
748 endif()
653749 endif()
654750 endif()
655751
3535
3636 -->
3737 <dict>
38 <!--entry name="Attribute Name" type="Type" vr="VR" vm="VM" description="Descriptiom"/-->
38 <!--entry name="Attribute Name" type="Type" vr="VR" vm="VM" description="Description"/-->
3939 <!--entry name="General Image Attributes" type="1" vr="&#xA0;" vm="&#xA0;" description=""/-->
4040 <entry name="AcquisitionDate" type="3" vr="DA" vm="1" description="A number identifying the single continuous gathering of data over a period of time which resulted in this image"/>
4141 <entry name="ContentDate" type="2C" vr="DA" vm="1" description="The date the image data creation started. Required if image is part of a series in which the images are temporally related"/>
6969 <entry name="ScanOptions" type="2" vr="CS" vm="1-n" description="Parameters of scanning sequence"/>
7070 <entry name="MRAcquisitionType" type="2" vr="CS" vm="1" description="Identification of date encoding scheme. Enumerated Values: 2D = frequency x phase 3D = frequency x phase x phase"/>
7171 <!--entry name="&#xA0;" type="1" vr="&#xA0;" vm="&#xA0;" description="&#xA0;"/-->
72 <entry name="SequenceName" type="3" vr="SH" vm="1" description="User defined name for the Scanning Sequence and Sequence Varaint combination"/>
72 <entry name="SequenceName" type="3" vr="SH" vm="1" description="User defined name for the Scanning Sequence and Sequence Variant combination"/>
7373 <entry name="AngioFlag" type="3" vr="CS" vm="1" description="Angio image indicator. Primary image for angio processing. Enumerated values: Y = image is Angio N = image is not Angio"/>
74 <entry name="RepetitionTime" type="2C" vr="DS" vm="1" description="The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequnece Variant is not segmented k-space"/>
74 <entry name="RepetitionTime" type="2C" vr="DS" vm="1" description="The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequence Variant is not segmented k-space"/>
7575 <entry name="EchoTime" type="2" vr="DS" vm="1" description="Time in msec between the middle of the excitation pulse and the peak of the echo produced. In the case of segmented k-space, the TE(eff) is the time between the middle of the excitation pulse to the peak of the echo that is used to cover the center of k-space)"/>
7676 <entry name="InversionTime" type="2C" vr="DS" vm="1" description="Time in msec after the middle of inverting RF pulse to middle of excitation pulse to detect the amount of longitudinal magnetization. Required if Scanning Sequence has value of IR"/>
7777 <entry name="NumberOfAverages" type="3" vr="DS" vm="1" description="Number of times a given pulse sequence is repeated before any parameter has changed"/>
9696 <entry name="Skip Beats" type="3" vr="IS" vm="1" description="Number of beats skipped after a detected arrhythmia"/>
9797 <entry name="HeartRate" type="3" vr="IS" vm="1" description="Beats per minute"/>
9898 <entry name="CardiacNumberOfImages" type="3" vr="IS" vm="1" description="Number of imagesb per cardiac cycle"/>
99 <entry name="TriggerWindow" type="3" vr="IS" vm="1" description="Percent of R-R interval, based on Heart Rate (0018,1088), prescriped as a window for a valid/usable trigger"/>
99 <entry name="TriggerWindow" type="3" vr="IS" vm="1" description="Percent of R-R interval, based on Heart Rate (0018,1088), prescribed as a window for a valid/usable trigger"/>
100100 <entry name="ReconstructionDiameter" type="3" vr="DS" vm="1" description="Diameter in mm of the region from within which data were used in creating the reconstruction of the image. Data may exist outside this region and portions of the patient may exist outside the region"/>
101101 <entry name="Receive Coil" type="3" vr="SH" vm="1" description="Received coil used"/>
102102 <entry name="TransmittingCoil" type="3" vr="SH" vm="1" description="Transmitted coil used"/>
145145 <entry name="InstitutionName" type="3" vr="LO" vm="1" description="Institution where the equipment is located that produced the digital images"/>
146146 <entry name="InstitutionAddress" type="3" vr="ST" vm="1" description="Mailing address of the institution where the equipment is located that produced the digital images"/>
147147 <entry name="ManufacturersModelName" type="3" vr="LO" vm="1" description="Manufacturer's model number of the equipment that produced the digital images"/>
148 <entry name="DeviceSerialNumber" type="3" vr="LO" vm="1" description="Manufacturer's seriel number of the equipment that produced the digital images"/>
148 <entry name="DeviceSerialNumber" type="3" vr="LO" vm="1" description="Manufacturer's serial number of the equipment that produced the digital images"/>
149149 <entry name="SoftwareVersions" type="3" vr="LO" vm="1-n" description="Manufacturer's designation of software of the equipment that produced the digital images"/>
150150 <!--entry name="Overlay Idendification Attributes" type="1" vr="&#xA0;" vm="&#xA0;" description="&#xA0;"/-->
151151 <entry name="OverlayRows" type="1" vr="US" vm="1" description="Number of Rows in Overlay"/>
207207 <entry name="ReferencedImageSequence" type="1" vr="UI" vm="1_n" description="A sequence which provides reference to a set of Image SOP Class/Instance identifying other images significantly related to this image (localizer images)"/>
208208 <entry name="PatientOrientation" type="1" vr="CS" vm="1" description="Patient direction of the rows and columns of the image. Not required for MR images"/>
209209 <entry name="ScanningSequence" type="1" vr="CS" vm="1_n" description="Description of the type of data taken. Enumerated values: SE = Spin Echo; IR = Inversion Recovery; GR = Gradient Recalled; EP = Echo Planar; RM = Research Mode"/>
210 <entry name="SequenceName" type="1" vr="SH" vm="1" description="User defined name for the Scanning Sequence and Sequence Varaint combination"/>
211 <entry name="RepetitionTime" type="1" vr="DS" vm="1" description="The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequnece Variant is not segmented k-space"/>
210 <entry name="SequenceName" type="1" vr="SH" vm="1" description="User defined name for the Scanning Sequence and Sequence Variant combination"/>
211 <entry name="RepetitionTime" type="1" vr="DS" vm="1" description="The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequence Variant is not segmented k-space"/>
212212 <entry name="EchoTime" type="1" vr="DS" vm="1" description="Time in msec between the middle of the excitation pulse and the peak of the echo produced. In the case of segmented k-space, the TE(eff) is the time between the middle of the excitation pulse to the peak of the echo that is used to cover the center of k-space)"/>
213213 <entry name="InversionTime" type="1" vr="DS" vm="1" description="Time in msec after the middle of inverting RF pulse to middle of excitation pulse to detect the amount of longitudinal magnetization. Required if Scanning Sequence has value of IR"/>
214214 <entry name="NumberOfAverages" type="1" vr="DS" vm="1" description="Number of averages"/>
123123 #print "Other Full line:", s2
124124 self.AddOutputLine(s2)
125125 else:
126 # we have a suspicioulsy long line, so what that could
126 # we have a suspiciously long line, so what that could
127127 # happen, let's check:
128128 if self.IsAFullLine(previousbuffer):
129129 self.AddOutputLine(previousbuffer)
1616 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-1><B>Type</B></FONT></TD>
1717 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-1><B>VR</B></FONT></TD>
1818 <TD ALIGN="center" STYLE="vnd.ms-excel.numberformat:@"><FONT FACE="Arial" SIZE=-1><B>VM</B></FONT></TD>
19 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-1><B>Descriptiom</B></FONT></TD>
19 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-1><B>Description</B></FONT></TD>
2020 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-1><B>Creator</B></FONT></TD>
2121 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-1><B>Unit</B></FONT></TD>
2222 </TR>
163163 <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD>
164164 <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>IS</FONT></TD>
165165 <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>1-n</FONT></TD>
166 <TD BGCOLOR=#FFFFFF ALIGN="left"><FONT FACE="Arial" SIZE=-2>References one or more image frames of a Multi-frame Image SOP Instance, identifying which frames are siginificantly related to this image</FONT></TD>
166 <TD BGCOLOR=#FFFFFF ALIGN="left"><FONT FACE="Arial" SIZE=-2>References one or more image frames of a Multi-frame Image SOP Instance, identifying which frames are significantly related to this image</FONT></TD>
167167 <TD BGCOLOR=#FFFFFF ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
168168 <TD BGCOLOR=#FFFFFF ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
169169 </TR>
203203 <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD>
204204 <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>IS</FONT></TD>
205205 <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>1-n</FONT></TD>
206 <TD BGCOLOR=#FFFFFF ALIGN="left"><FONT FACE="Arial" SIZE=-2>References one or more image frames of a Multi-frame Image SOP Instance, identifying which frames are siginificantly related to this image</FONT></TD>
206 <TD BGCOLOR=#FFFFFF ALIGN="left"><FONT FACE="Arial" SIZE=-2>References one or more image frames of a Multi-frame Image SOP Instance, identifying which frames are significantly related to this image</FONT></TD>
207207 <TD BGCOLOR=#FFFFFF ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
208208 <TD BGCOLOR=#FFFFFF ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
209209 </TR>
356356 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD>
357357 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>SH</FONT></TD>
358358 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
359 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>User defined name for the Scanning Sequence and Sequence Varaint combination</FONT></TD>
359 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>User defined name for the Scanning Sequence and Sequence Variant combination</FONT></TD>
360360 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
361361 <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
362362 </TR>
379379 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>2C</FONT></TD>
380380 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>DS</FONT></TD>
381381 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
382 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequnece Variant is not segmented k-space</FONT></TD>
382 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequence Variant is not segmented k-space</FONT></TD>
383383 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
384384 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>msec</FONT></TD>
385385 </TR>
632632 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD>
633633 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>IS</FONT></TD>
634634 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
635 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Percent of R-R interval, based on Heart Rate (0018,1088), prescriped as a window for a valid/usable trigger</FONT></TD>
635 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Percent of R-R interval, based on Heart Rate (0018,1088), prescribed as a window for a valid/usable trigger</FONT></TD>
636636 <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
637637 <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
638638 </TR>
11191119 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD>
11201120 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>LO</FONT></TD>
11211121 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
1122 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Manufacturer's seriel number of the equipment that produced the digital images</FONT></TD>
1122 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Manufacturer's serial number of the equipment that produced the digital images</FONT></TD>
11231123 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition/application</FONT></TD>
11241124 <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
11251125 </TR>
13131313 Example:
13141314 channel 0: 00000001
13151315 channel 3: 00000111
1316 ·</FONT></TD>
1316 �</FONT></TD>
13171317 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
13181318 <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
13191319 </TR>
14351435 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
14361436 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>UL</FONT></TD>
14371437 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
1438 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Parameters used for acquisition, e.g. door open, interpolation, raw filter, Siemens seqence ....</FONT></TD>
1438 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Parameters used for acquisition, e.g. door open, interpolation, raw filter, Siemens sequence ....</FONT></TD>
14391439 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
14401440 <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
14411441 </TR>
15351535 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
15361536 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>DS</FONT></TD>
15371537 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
1538 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Time delay after start of measurment</FONT></TD>
1538 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Time delay after start of measurement</FONT></TD>
15391539 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
15401540 <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
15411541 </TR>
17451745 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
17461746 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>SH</FONT></TD>
17471747 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
1748 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>User defined name for the Scanning Sequence and Sequence Varaint combination</FONT></TD>
1748 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>User defined name for the Scanning Sequence and Sequence Variant combination</FONT></TD>
17491749 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
17501750 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
17511751 </TR>
17551755 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
17561756 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>DS</FONT></TD>
17571757 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
1758 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequnece Variant is not segmented k-space</FONT></TD>
1758 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequence Variant is not segmented k-space</FONT></TD>
17591759 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
17601760 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
17611761 </TR>
21632163 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
21642164 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>UL</FONT></TD>
21652165 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD>
2166 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Parameters used for acquisition, e.g. door open, interpolation, raw filter, Siemens seqence .·</FONT></TD>
2166 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>Parameters used for acquisition, e.g. door open, interpolation, raw filter, Siemens sequence .�</FONT></TD>
21672167 <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD>
21682168 <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>&nbsp;</FONT></TD>
21692169 </TR>
6363 {"SequenceVariant","1",VR::CS,VM::VM1_n,"Variant of the Scanning Sequence"},
6464 {"ScanOptions","2",VR::CS,VM::VM1_n,"Parameters of scanning sequence"},
6565 {"MRAcquisitionType","2",VR::CS,VM::VM1,"Identification of date encoding scheme. Enumerated Values: 2D = frequency x phase 3D = frequency x phase x phase"},
66 {"SequenceName","3",VR::SH,VM::VM1,"User defined name for the Scanning Sequence and Sequence Varaint combination"},
66 {"SequenceName","3",VR::SH,VM::VM1,"User defined name for the Scanning Sequence and Sequence Variant combination"},
6767 {"AngioFlag","3",VR::CS,VM::VM1,"Angio image indicator. Primary image for angio processing. Enumerated values: Y = image is Angio N = image is not Angio"},
68 {"RepetitionTime","2C",VR::DS,VM::VM1,"The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequnece Variant is not segmented k-space"},
68 {"RepetitionTime","2C",VR::DS,VM::VM1,"The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequence Variant is not segmented k-space"},
6969 {"EchoTime","2",VR::DS,VM::VM1,"Time in msec between the middle of the excitation pulse and the peak of the echo produced. In the case of segmented k-space, the TE(eff) is the time between the middle of the excitation pulse to the peak of the echo that is used to cover the center of k-space)"},
7070 {"InversionTime","2C",VR::DS,VM::VM1,"Time in msec after the middle of inverting RF pulse to middle of excitation pulse to detect the amount of longitudinal magnetization. Required if Scanning Sequence has value of IR"},
7171 {"NumberOfAverages","3",VR::DS,VM::VM1,"Number of times a given pulse sequence is repeated before any parameter has changed"},
9090 {"Skip Beats","3",VR::IS,VM::VM1,"Number of beats skipped after a detected arrhythmia"},
9191 {"HeartRate","3",VR::IS,VM::VM1,"Beats per minute"},
9292 {"CardiacNumberOfImages","3",VR::IS,VM::VM1,"Number of imagesb per cardiac cycle"},
93 {"TriggerWindow","3",VR::IS,VM::VM1,"Percent of R-R interval, based on Heart Rate (0018,1088), prescriped as a window for a valid/usable trigger"},
93 {"TriggerWindow","3",VR::IS,VM::VM1,"Percent of R-R interval, based on Heart Rate (0018,1088), prescribed as a window for a valid/usable trigger"},
9494 {"ReconstructionDiameter","3",VR::DS,VM::VM1,"Diameter in mm of the region from within which data were used in creating the reconstruction of the image. Data may exist outside this region and portions of the patient may exist outside the region"},
9595 {"Receive Coil","3",VR::SH,VM::VM1,"Received coil used"},
9696 {"TransmittingCoil","3",VR::SH,VM::VM1,"Transmitted coil used"},
133133 {"InstitutionName","3",VR::LO,VM::VM1,"Institution where the equipment is located that produced the digital images"},
134134 {"InstitutionAddress","3",VR::ST,VM::VM1,"Mailing address of the institution where the equipment is located that produced the digital images"},
135135 {"ManufacturersModelName","3",VR::LO,VM::VM1,"Manufacturer's model number of the equipment that produced the digital images"},
136 {"DeviceSerialNumber","3",VR::LO,VM::VM1,"Manufacturer's seriel number of the equipment that produced the digital images"},
136 {"DeviceSerialNumber","3",VR::LO,VM::VM1,"Manufacturer's serial number of the equipment that produced the digital images"},
137137 {"SoftwareVersions","3",VR::LO,VM::VM1_n,"Manufacturer's designation of software of the equipment that produced the digital images"},
138138 {"OverlayRows","1",VR::US,VM::VM1,"Number of Rows in Overlay"},
139139 {"OverlayColumns","1",VR::US,VM::VM1,"Number of Columns in Overlay"},
191191 {"ReferencedImageSequence","1",VR::UI,VM::VM1_n,"A sequence which provides reference to a set of Image SOP Class/Instance identifying other images significantly related to this image (localizer images)"},
192192 //{"PatientOrientation","1",VR::CS,VM::VM1,"Patient direction of the rows and columns of the image. Not required for MR images"},
193193 {"ScanningSequence","1",VR::CS,VM::VM1_n,"Description of the type of data taken. Enumerated values: SE = Spin Echo; IR = Inversion Recovery; GR = Gradient Recalled; EP = Echo Planar; RM = Research Mode"},
194 //{"SequenceName","1",VR::SH,VM::VM1,"User defined name for the Scanning Sequence and Sequence Varaint combination"},
195 //{"RepetitionTime","1",VR::DS,VM::VM1,"The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequnece Variant is not segmented k-space"},
194 //{"SequenceName","1",VR::SH,VM::VM1,"User defined name for the Scanning Sequence and Sequence Variant combination"},
195 //{"RepetitionTime","1",VR::DS,VM::VM1,"The period of time in msec between the beginning of a pulse sequence and the beginning of a succeeding (essentially identical) pulse sequence. Required except when Scanning Sequence is EP and Sequence Variant is not segmented k-space"},
196196 //{"EchoTime","1",VR::DS,VM::VM1,"Time in msec between the middle of the excitation pulse and the peak of the echo produced. In the case of segmented k-space, the TE(eff) is the time between the middle of the excitation pulse to the peak of the echo that is used to cover the center of k-space)"},
197197 //{"InversionTime","1",VR::DS,VM::VM1,"Time in msec after the middle of inverting RF pulse to middle of excitation pulse to detect the amount of longitudinal magnetization. Required if Scanning Sequence has value of IR"},
198198 //{"NumberOfAverages","1",VR::DS,VM::VM1,"Number of averages"},
4040 {0x0019,"SPIA","SPI Acquisition"},
4141 {0x0020,"IMG","Image"},
4242 {0x0021,"SPIIM","SPI Image"},
43 {0x0022,"OPHY","Ophtalmology"},
43 {0x0022,"OPHY","Ophthalmology"},
4444 {0x0028,"IMGP","Image Presentation"},
4545 {0x0032,"SDY","Study"},
4646 {0x0038,"VIS","Visit"},
26872687 {0x0019,0x0070,"GE ??? From Adantage Review CS",VR::LO,VM::VM1,"CR Image Serial Number",false },
26882688 {0x0019,0x0080,"GE ??? From Adantage Review CS",VR::LO,VM::VM1,"CR Bar Code Number",false },
26892689 {0x0019,0x0090,"GE ??? From Adantage Review CS",VR::LO,VM::VM1,"CR Film Output Exposures",false },
2690 {0x0045,0x0067,"GE LUT Asymmetry Parameter",VR::DS,VM::VM1,"LUT Assymetry",false },
2690 {0x0045,0x0067,"GE LUT Asymmetry Parameter",VR::DS,VM::VM1,"LUT Asymmetry",false },
26912691 {0x0053,0x0020,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"ShuttleFlag",false },
26922692 {0x0053,0x0021,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"TableSpeedNotReachesTargetFlag",false },
26932693 {0x0053,0x0040,"GEHC_CT_ADVAPP_001",VR::SH,VM::VM1,"IterativeReconAnnotation",false },
27012701 {0x0053,0x0065,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"Shutter Mode Percent",false },
27022702 {0x0053,0x0066,"GEHC_CT_ADVAPP_001",VR::LO,VM::VM1,"Image Browser Annotation",false },
27032703 {0x0053,0x0067,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"Overlapped Recon Flag",false },
2704 {0x0053,0x0068,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"Row Number Anotation Flag",false },
2704 {0x0053,0x0068,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"Row Number Annotation Flag",false },
27052705 {0x0053,0x006a,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"ODMFlag",false },
27062706 {0x0053,0x006b,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"ODMReductionPercent",false },
27072707 {0x0053,0x006c,"GEHC_CT_ADVAPP_001",VR::DS,VM::VM1,"?",false },
34063406 {0x0045,0x0062,"GEMS_FALCON_03",VR::IS,VM::VM1,"User Window Center",false },
34073407 {0x0045,0x0063,"GEMS_FALCON_03",VR::IS,VM::VM1,"User Window Width",false },
34083408 {0x0045,0x0065,"GEMS_FALCON_03",VR::IS,VM::VM1,"Requested Detector Entrance Dose",false },
3409 {0x0045,0x0067,"GEMS_FALCON_03",VR::DS,VM::VM3,"VOI LUT Assymmetry parameter beta",false },
3409 {0x0045,0x0067,"GEMS_FALCON_03",VR::DS,VM::VM3,"VOI LUT Asymmetry parameter beta",false },
34103410 {0x0045,0x0069,"GEMS_FALCON_03",VR::IS,VM::VM1,"Collimator rotation",false },
34113411 {0x0045,0x0072,"GEMS_FALCON_03",VR::DS,VM::VM1,"Collimator Width",false },
34123412 {0x0045,0x0073,"GEMS_FALCON_03",VR::DS,VM::VM1,"Collimator Height",false },
85508550 {0x0055,0x0093,"SIEMENS MED NM",VR::FL,VM::VM1,"Filter Cutoff Frequency",false },
85518551 {0x0055,0x0094,"SIEMENS MED NM",VR::FL,VM::VM1,"Filter Alpha Coefficient",false },
85528552 {0x0055,0x0095,"SIEMENS MED NM",VR::FL,VM::VM1,"Filter Order",false },
8553 {0x0055,0x0096,"SIEMENS MED NM",VR::FL,VM::VM1,"Attenuation Cooefficient",false },
8553 {0x0055,0x0096,"SIEMENS MED NM",VR::FL,VM::VM1,"Attenuation Coefficient",false },
85548554 {0x0055,0x0097,"SIEMENS MED NM",VR::SS,VM::VM1,"Percent Ray",false },
85558555 {0x0055,0x0098,"SIEMENS MED NM",VR::SS,VM::VM1,"Astigmatic Collimator 1 Neuro 2 Cardiac",false },
85568556 {0x0055,0x0099,"SIEMENS MED NM",VR::SS,VM::VM1,"XP0",false },
21222122 <entry owner="GE ??? From Adantage Review CS" group="0019" element="xx70" vr="LO" vm="1" name="CR Image Serial Number"/>
21232123 <entry owner="GE ??? From Adantage Review CS" group="0019" element="xx80" vr="LO" vm="1" name="CR Bar Code Number"/>
21242124 <entry owner="GE ??? From Adantage Review CS" group="0019" element="xx90" vr="LO" vm="1" name="CR Film Output Exposures"/>
2125 <entry owner="GE LUT Asymmetry Parameter" group="0045" element="xx67" vr="DS" vm="1" name="LUT Assymetry"/>
2125 <entry owner="GE LUT Asymmetry Parameter" group="0045" element="xx67" vr="DS" vm="1" name="LUT Asymmetry"/>
21262126 <entry owner="GEHC_CT_ADVAPP_001" group="0053" element="xx20" vr="IS" vm="1" name="ShuttleFlag"/>
21272127 <entry owner="GEHC_CT_ADVAPP_001" group="0053" element="xx21" vr="IS" vm="1" name="TableSpeedNotReachesTargetFlag"/>
21282128 <entry owner="GEHC_CT_ADVAPP_001" group="0053" element="xx40" vr="SH" vm="1" name="IterativeReconAnnotation"/>
28312831 <entry owner="GEMS_FALCON_03" group="0045" element="xx62" vr="IS" vm="1" name="User Window Center"/>
28322832 <entry owner="GEMS_FALCON_03" group="0045" element="xx63" vr="IS" vm="1" name="User Window Width"/>
28332833 <entry owner="GEMS_FALCON_03" group="0045" element="xx65" vr="IS" vm="1" name="Requested Detector Entrance Dose"/>
2834 <entry owner="GEMS_FALCON_03" group="0045" element="xx67" vr="DS" vm="3" name="VOI LUT Assymmetry parameter beta"/>
2834 <entry owner="GEMS_FALCON_03" group="0045" element="xx67" vr="DS" vm="3" name="VOI LUT Asymmetry parameter beta"/>
28352835 <entry owner="GEMS_FALCON_03" group="0045" element="xx69" vr="IS" vm="1" name="Collimator rotation"/>
28362836 <entry owner="GEMS_FALCON_03" group="0045" element="xx72" vr="DS" vm="1" name="Collimator Width"/>
28372837 <entry owner="GEMS_FALCON_03" group="0045" element="xx73" vr="DS" vm="1" name="Collimator Height"/>
73097309 <entry owner="SIEMENS MED NM" group="0055" element="xx93" vr="FL" vm="1" name="Filter Cutoff Frequency"/>
73107310 <entry owner="SIEMENS MED NM" group="0055" element="xx94" vr="FL" vm="1" name="Filter Alpha Coefficient"/>
73117311 <entry owner="SIEMENS MED NM" group="0055" element="xx95" vr="FL" vm="1" name="Filter Order"/>
7312 <entry owner="SIEMENS MED NM" group="0055" element="xx96" vr="FL" vm="1" name="Attenuation Cooefficient"/>
7312 <entry owner="SIEMENS MED NM" group="0055" element="xx96" vr="FL" vm="1" name="Attenuation Coefficient"/>
73137313 <entry owner="SIEMENS MED NM" group="0055" element="xx97" vr="SS" vm="1" name="Percent Ray"/>
73147314 <entry owner="SIEMENS MED NM" group="0055" element="xx98" vr="SS" vm="1" name="Astigmatic Collimator 1 Neuro 2 Cardiac"/>
73157315 <entry owner="SIEMENS MED NM" group="0055" element="xx99" vr="SS" vm="1" name="XP0"/>
6666 CSAHeader():InternalDataSet(),InternalType(UNKNOWN),InterfileData(nullptr) {};
6767 ~CSAHeader() = default;
6868
69 /// Divers format of CSAHeader as found 'in the wild'
69 /// Diverse format of CSAHeader as found 'in the wild'
7070 typedef enum {
7171 UNKNOWN = 0,
7272 SV10,
155155 return nullptr;
156156 }
157157 }
158 catch ( ... )
159 {
160 gdcmErrorMacro( "Could not read SQ, unknown exception" );
161 delete sqi;
162 return nullptr;
163 }
158164 }
159165 return sqi;
160166 }
5959 /// \brief Appends a Fragment to the already added ones
6060 void AddFragment(Fragment const &item);
6161
62 // Compute the length of all fragments (and framents only!).
62 // Compute the length of all fragments (and fragments only!).
6363 // Basically the size of the PixelData as stored (in bytes).
6464 unsigned long ComputeByteLength() const;
6565
1316013160
1316113161 Defined Terms:
1316213162 ION_SQUARE = square ion applicator
13163 ION_RECT = rectangluar ion applicator
13163 ION_RECT = rectangular ion applicator
1316413164 ION_CIRC = circular ion applicator
1316513165 ION_SHORT = short ion applicator
1316613166 ION_OPEN = open (dummy) ion applicator
1373513735
1373613736 Defined Terms:
1373713737 ION_SQUARE = square ion applicator
13738 ION_RECT = rectangluar ion applicator
13738 ION_RECT = rectangular ion applicator
1373913739 ION_CIRC = circular ion applicator
1374013740 ION_SHORT = short ion applicator
1374113741 ION_OPEN = open (dummy) ion applicator
1499114991 Note: If the Presentation LUT Shape (2050,0020) is IDENTITY, then the result of applying the Window Center (0028,1050) and Window Width (0028,1051) is P-Values.
1499214992
1499314993 If multiple values are present, both Attributes shall have the same number of values and shall be considered as pairs. Multiple values indicate that multiple alternative views should be presented.
14994 The VOI LUT Sequence specifes a (potentially non-linear) conversion from the output of the (conceptual) Modality LUT values to the input to the (conceptual) Presentation LUT.
14994 The VOI LUT Sequence specifies a (potentially non-linear) conversion from the output of the (conceptual) Modality LUT values to the input to the (conceptual) Presentation LUT.
1499514995 If multiple items are present in VOI LUT Sequence (0028,3010), only one shall be applied. Multiple items indicate that multiple alternative views should be presented.
1499614996 If any VOI LUT Attributes are included by an Image, a Window Width and Window Center or the VOI LUT Table, but not both, shall be applied to the Image for display. Inclusion of both indicates that multiple alternative views should be presented.
1499714997 The three values of the LUT Descriptor (0028,3002) describe the format of the LUT Data (0028,3006).
1501415014 Note: If the Presentation LUT Shape (2050,0020) is IDENTITY, then the result of applying the Window Center (0028,1050) and Window Width (0028,1051) is P-Values.
1501515015
1501615016 If multiple values are present, both Attributes shall have the same number of values and shall be considered as pairs. Multiple values indicate that multiple alternative views should be presented.
15017 The VOI LUT Sequence specifes a (potentially non-linear) conversion from the output of the (conceptual) Modality LUT values to the input to the (conceptual) Presentation LUT.
15017 The VOI LUT Sequence specifies a (potentially non-linear) conversion from the output of the (conceptual) Modality LUT values to the input to the (conceptual) Presentation LUT.
1501815018 If multiple items are present in VOI LUT Sequence (0028,3010), only one shall be applied. Multiple items indicate that multiple alternative views should be presented.
1501915019 If any VOI LUT Attributes are included by an Image, a Window Width and Window Center or the VOI LUT Table, but not both, shall be applied to the Image for display. Inclusion of both indicates that multiple alternative views should be presented.
1502015020 The three values of the LUT Descriptor (0028,3002) describe the format of the LUT Data (0028,3006).
1504415044 Note: If the Presentation LUT Shape (2050,0020) is IDENTITY, then the result of applying the Window Center (0028,1050) and Window Width (0028,1051) is P-Values.
1504515045
1504615046 If multiple values are present, both Attributes shall have the same number of values and shall be considered as pairs. Multiple values indicate that multiple alternative views should be presented.
15047 The VOI LUT Sequence specifes a (potentially non-linear) conversion from the output of the (conceptual) Modality LUT values to the input to the (conceptual) Presentation LUT.
15047 The VOI LUT Sequence specifies a (potentially non-linear) conversion from the output of the (conceptual) Modality LUT values to the input to the (conceptual) Presentation LUT.
1504815048 If multiple items are present in VOI LUT Sequence (0028,3010), only one shall be applied. Multiple items indicate that multiple alternative views should be presented.
1504915049 If any VOI LUT Attributes are included by an Image, a Window Width and Window Center or the VOI LUT Table, but not both, shall be applied to the Image for display. Inclusion of both indicates that multiple alternative views should be presented.
1505015050 The three values of the LUT Descriptor (0028,3002) describe the format of the LUT Data (0028,3006).
1506615066 Note: If the Presentation LUT Shape (2050,0020) is IDENTITY, then the result of applying the Window Center (0028,1050) and Window Width (0028,1051) is P-Values.
1506715067
1506815068 If multiple values are present, both Attributes shall have the same number of values and shall be considered as pairs. Multiple values indicate that multiple alternative views should be presented.
15069 The VOI LUT Sequence specifes a (potentially non-linear) conversion from the output of the (conceptual) Modality LUT values to the input to the (conceptual) Presentation LUT.
15069 The VOI LUT Sequence specifies a (potentially non-linear) conversion from the output of the (conceptual) Modality LUT values to the input to the (conceptual) Presentation LUT.
1507015070 If multiple items are present in VOI LUT Sequence (0028,3010), only one shall be applied. Multiple items indicate that multiple alternative views should be presented.
1507115071 If any VOI LUT Attributes are included by an Image, a Window Width and Window Center or the VOI LUT Table, but not both, shall be applied to the Image for display. Inclusion of both indicates that multiple alternative views should be presented.
1507215072 The three values of the LUT Descriptor (0028,3002) describe the format of the LUT Data (0028,3006).
2005120051 Required if present and consistent in the contributing SOP Instances.</description>
2005220052 </entry>
2005320053 </module>
20054 <macro table="C.8.21.3.1.1-1" name="X Ray 3D General Shared Acquisiton Macro">
20054 <macro table="C.8.21.3.1.1-1" name="X Ray 3D General Shared Acquisition Macro">
2005520055 <entry group="0008" element="2112" name="Source Image Sequence" type="1C">
2005620056 <description>A Sequence that identifies the set of Images that constitute this acquisition context.
2005720057 Required if the reconstruction is created from DICOM SOP Instances.
11 <!--We need the DICOM Tag (group,element) but the Attribute is not necessary I don't see
22 why we should repeat it. Type is compulsory and Description is not necessary either.-->
33 <!-- Maybe we should double check that Attribute are consistent with the data dict -->
4 <!-- Description would be awsome for help bubbles -->
4 <!-- Description would be awesome for help bubbles -->
55 <!-- Sample XML file to test XML parser -->
66
77 <Table Name="Template">
4040 Modules &GetModules() { return Part3Modules; }
4141
4242 /// Users should not directly use Macro. Macro are simply a way for DICOM WG to re-use Tables.
43 /// Macros are conviently wrapped within Modules. See gdcm::Module API directly
43 /// Macros are conveniently wrapped within Modules. See gdcm::Module API directly
4444 const Macros &GetMacros() const { return Part3Macros; }
4545 Macros &GetMacros() { return Part3Macros; }
4646
11 # MSFF
22 set(MSFF_SRCS
33 gdcmEmptyMaskGenerator.cxx
4 gdcmMEC_MR3.cxx
45 gdcmEquipmentManufacturer.cxx
56 gdcmFileStreamer.cxx
67 gdcmCleaner.cxx
107108 )
108109
109110 list(APPEND MSFF_SRCS
110 ${GDCM_SOURCE_DIR}/Utilities/gdcmcsa/csa.c
111 ${GDCM_SOURCE_DIR}/Utilities/gdcmext/csa.c
112 ${GDCM_SOURCE_DIR}/Utilities/gdcmext/mec_mr3.c
113 ${GDCM_SOURCE_DIR}/Utilities/gdcmext/mec_mr3_io.c
114 ${GDCM_SOURCE_DIR}/Utilities/gdcmext/mec_mr3_dict.c
111115 )
112116
113117 # Do the proper thing when building static...if only there was configured
1919 #include "gdcmEvent.h"
2020 #include "gdcmGlobal.h"
2121
22 #include "gdcmcsa/csa.h"
22 #include "gdcmext/csa.h"
23 #include "gdcmext/mec_mr3.h"
2324
2425 namespace gdcm {
2526
635636 bool Scrub(PrivateTag const &pt) {
636637 static const PrivateTag &csa1 = CSAHeader::GetCSAImageHeaderInfoTag();
637638 static const PrivateTag &csa2 = CSAHeader::GetCSASeriesHeaderInfoTag();
638 if (pt == csa1 || pt == csa2) {
639 const PrivateTag mec_mr3(0x700d, 0x08, "TOSHIBA_MEC_MR3");
640 const PrivateTag pmtf1(0x0029, 0x90, "PMTF INFORMATION DATA");
641 const PrivateTag pmtf2(0x0029, 0x90, "TOSHIBA_MEC_MR3");
642 if (pt == csa1 || pt == csa2 || pt == mec_mr3 || pt == pmtf1 || pt == pmtf2) {
639643 scrub_privatetags.insert(pt);
640644 return true;
641645 }
766770 return true;
767771 }
768772 gdcmErrorMacro("Failure to call CleanCSA");
773 return false;
774 }
775
776 static bool CleanMEC_MR3(DataSet &ds, const DataElement &de) {
777 const ByteValue *bv = de.GetByteValue();
778 // fast path:
779 if (!bv) return true;
780
781 DataElement clean(de.GetTag());
782 clean.SetVR(de.GetVR());
783 std::vector<char> v;
784 v.resize(bv->GetLength());
785 if (mec_mr3_memcpy(&v[0], bv->GetPointer(), bv->GetLength())) {
786 clean.SetByteValue(&v[0], v.size());
787 ds.Replace(clean);
788 return true;
789 }
790 gdcmErrorMacro("Failure to call CleanMEC_MR3");
791 return false;
792 }
793
794 static bool CleanPMTF(DataSet &ds, const DataElement &de) {
795 const ByteValue *bv = de.GetByteValue();
796 // fast path:
797 if (!bv) return true;
798 const char *input = bv->GetPointer();
799 const size_t len = bv->GetLength();
800
801 bool success = true;
802 try {
803 std::istringstream is;
804 {
805 std::vector<char> copy(input, input + len);
806 std::reverse(copy.begin(), copy.end());
807 std::string dup(&copy[0], copy.size());
808 is.str(dup);
809 }
810
811 // FIXME gdcm::Cleaner will by default change defined length SQ into undef
812 // length...there is a risk of incompatibily with vendor
813 gdcm::Cleaner cleaner;
814 gdcm::File &file = cleaner.GetFile();
815 gdcm::FileMetaInformation &fmi = file.GetHeader();
816 fmi.SetDataSetTransferSyntax(gdcm::TransferSyntax::ExplicitVRLittleEndian);
817 gdcm::DataSet &revds = file.GetDataSet();
818 revds.Read<gdcm::ExplicitDataElement, gdcm::SwapperNoOp>(is);
819
820 gdcm::VR vr = VR::PN;
821 cleaner.Empty(vr);
822 if (!cleaner.Clean()) {
823 success = false;
824 } else {
825 std::ostringstream os;
826 revds.Write<gdcm::ExplicitDataElement, gdcm::SwapperNoOp>(os);
827 const std::string str = os.str();
828 std::vector<char> v(str.c_str(), str.c_str() + str.size());
829 std::reverse(v.begin(), v.end());
830
831 DataElement clean(de.GetTag());
832 clean.SetVR(de.GetVR());
833 clean.SetByteValue(&v[0], v.size());
834 ds.Replace(clean);
835 }
836 } catch (...) {
837 success = false;
838 }
839
840 if (success) {
841 return true;
842 }
843 gdcmErrorMacro("Failure to call CleanPMTF");
769844 return false;
770845 }
771846
9591034
9601035 static const PrivateTag &csa1 = CSAHeader::GetCSAImageHeaderInfoTag();
9611036 static const PrivateTag &csa2 = CSAHeader::GetCSASeriesHeaderInfoTag();
1037 const PrivateTag mec_mr3(0x700d, 0x08, "TOSHIBA_MEC_MR3");
1038 const PrivateTag pmtf1(0x0029, 0x90, "PMTF INFORMATION DATA");
1039 const PrivateTag pmtf2(0x0029, 0x90, "TOSHIBA_MEC_MR3");
9621040
9631041 if (pt == csa1) {
9641042 const bool ret = CleanCSA(ds, de);
9651043 if (!ret) return false;
9661044 } else if (pt == csa2) {
9671045 const bool ret = CleanCSA(ds, de);
1046 if (!ret) return false;
1047 } else if (pt == mec_mr3) {
1048 const bool ret = CleanMEC_MR3(ds, de);
1049 if (!ret) return false;
1050 } else if (pt == pmtf1) {
1051 const bool ret = CleanPMTF(ds, de);
1052 if (!ret) return false;
1053 } else if (pt == pmtf2) {
1054 const bool ret = CleanPMTF(ds, de);
9681055 if (!ret) return false;
9691056 } else {
9701057 gdcmErrorMacro(" not implemented");
9791066 return true;
9801067 }
9811068
982 Cleaner::Cleaner() : pimpl(new impl) {}
1069 Cleaner::Cleaner() : F(new File), pimpl(new impl) {}
9831070
9841071 Cleaner::~Cleaner() { delete pimpl; }
9851072
2929 * As a side note there is also a problem with const reference to enum type:
3030 * - http://sourceforge.net/mailarchive/forum.php?thread_name=bf0c3b3f0802290552y5163989t76572b80a044ce28%40mail.gmail.com&forum_name=swig-user
3131 *
32 * And to keep a track of isse with swig here is the last one:
32 * And to keep track of an issue with swig here is the last one:
3333 *
3434 * - http://sourceforge.net/mailarchive/forum.php?thread_name=bf0c3b3f0802290552y5163989t76572b80a044ce28%40mail.gmail.com&forum_name=swig-user
3535 */
287287
288288 /*
289289 * Finding the next Directory Record type is easy, simply starting from the start and iterating
290 * to the end guarantee travering everything without omitting anyone.
290 * to the end guarantees traversing everything without omitting anyone.
291291 *
292292 * TODO: Need to make sure that Series belong to the same Study...
293293 */
123123 const VR &devr = de.GetVR();
124124 if( devr != refvr )
125125 {
126 if(!refvr.Compatible(devr))
126 if(!refvr.Compatible(devr)) {
127127 gdcmWarningMacro("Inconsistent VR: " << devr << " should be " << refvr << " for: [" << (owner ? owner : "<null>") << "]" << " de is: " << de );
128 }
128129 }
129130 }
130131
10081008 const Tag tfgs(0x5200,0x9230);
10091009 if( ds.FindDataElement( tfgs ) )
10101010 {
1011 SmartPointer<SequenceOfItems> sqi = ds.GetDataElement( tfgs ).GetValueAsSQ();
1011 const DataElement &de = ds.GetDataElement( tfgs );
1012 SmartPointer<SequenceOfItems> sqi = de.GetValueAsSQ();
10121013 assert( sqi );
1013 sqi->SetLengthToUndefined();
10141014 sqi->SetNumberOfItems( dims[2] );
1015 {
1016 // Simple mechanism to avoid recomputation of Sequence Length: make
1017 // them undefined length
1018 DataElement dup(de.GetTag());
1019 dup.SetVR(VR::SQ);
1020 dup.SetValue(*sqi);
1021 dup.SetVLToUndefined();
1022 ds.Replace(dup);
1023 }
10151024 }
10161025 }
10171026
305305 {
306306 #if 0
307307 // FIXME:
308 // There is a very subbtle issue here. We are trying to compress a 8bits RGB image
308 // There is a very subtle issue here. We are trying to compress a 8bits RGB image
309309 // into an 8bits allocated indexed Pixel Data with 8bits LUT... this is just not
310310 // possible in the general case
311311 typedef std::set< U8, ltstr8 > RGBColorIndexer;
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13 #include "gdcmMEC_MR3.h"
14
15 #include "gdcmext/mec_mr3_io.h"
16
17 namespace gdcm
18 {
19 bool MEC_MR3::Print(const char *src, size_t srclen)
20 {
21 return mec_mr3_print(src, srclen);
22 }
23 } // end namespace gdcm
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13 #ifndef GDCMMEC_MR3_H
14 #define GDCMMEC_MR3_H
15
16 #include "gdcmTypes.h"
17
18 namespace gdcm
19 {
20 /**
21 * \brief Class for MEC_MR3
22 *
23 */
24 class GDCM_EXPORT MEC_MR3
25 {
26 public:
27 static bool Print(const char *src, size_t srclen);
28 };
29
30 } // end namespace gdcm
31
32 #endif // GDCMMEC_MR3_H
6161 "You need to decompress first." );
6262 return false;
6363 }
64 #if 1
6465 gdcm::PhotometricInterpretation pi = this->GetPhotometricInterpretation();
65 #if 0
6666 if( pi != gdcm::PhotometricInterpretation::MONOCHROME2 ) {
6767 gdcmErrorMacro( "Bogus PI" << pi );
6868 return false;
4646 friend class Bitmap;
4747 friend std::ostream& operator<<(std::ostream &_os, const PixelFormat &pf);
4848 public:
49 // When adding a type please add its dual type (its unsigned conterpart)
49 // When adding a type please add its dual type (its unsigned counterpart)
5050 typedef enum {
5151 UINT8,
5252 INT8,
8787 /// By default (when UseTargetPixelType is false), a best
8888 /// matching Target Pixel Type is computed. However user can override
8989 /// this auto selection by switching UseTargetPixelType:true and
90 /// also specifying the specifix Target Pixel Type
90 /// also specifying the specific Target Pixel Type
9191 void SetTargetPixelType( PixelFormat const & targetst );
9292
9393 /// Override default behavior of Rescale
6565
6666 /// Execute the XPATH query to find a value (as string)
6767 /// return false when attribute is not found (or an error in the XPATH query)
68 /// You need to make sure that your XPATH query is syntatically correct
68 /// You need to make sure that your XPATH query is syntactically correct
6969 bool ExecuteQuery(std::string const &query, std::string & value) const;
7070
7171 protected:
379379 }
380380
381381 //****** Surface Mesh Primitives *****//
382 // Two exemples :
382 // Two examples :
383383 // (0066,0013) SQ (Sequence with undefined length #=1) # u/l, 1 Surface Mesh Primitives Sequence
384384 // (fffe,e000) na (Item with undefined length #=1) # u/l, 1 Item
385385 // (0066,0042) OL # 0, 1 Long Edge Point Index List
5252 /// successfully been tested for a root of size 26 bytes. Any longer root should work (the Generate()
5353 /// function will return a string), but will truncate the high bits of the 128bits UUID until the
5454 /// generated string fits on 64 bits. The authors disclaims any
55 /// responsabitlity for garanteeing uniqueness of UIDs when the root is longer than 26 bytes.
55 /// responsabitlity for guaranteeing uniqueness of UIDs when the root is longer than 26 bytes.
5656 static void SetRoot(const char * root);
5757 static const char *GetRoot();
5858
7575 public:
7676 /*
7777 Message ID M U
78 Message ID Being Responded To  M
78 Message ID Being Responded To M
7979 Affected SOP Class UID M U(=)
80 Status  M
80 Status M
8181 */
8282 };
8383
2020
2121 name and date: 25 Sept 2010 mmr
2222
23 Updte on 27 sept 2010 mmr: since this is where all PDUs are included, also use this
23 Update on 27 sept 2010 mmr: since this is where all PDUs are included, also use this
2424 class to construct specific instances of PDUs, and return the BasePDU class.
2525 */
2626 #include "gdcmPDUFactory.h"
8888 mConnection->GetTimer().SetTimeout(inTimeout);
8989
9090 // Warning PresentationContextID is important
91 // this is a sort of uniq key used by the recevier. Eg.
91 // this is a sort of uniq key used by the receiver. Eg.
9292 // if one push_pack
9393 // (1, Secondary)
9494 // (1, Verification)
273273
274274
275275 // Warning PresentationContextID is important
276 // this is a sort of uniq key used by the recevier. Eg.
276 // this is a sort of uniq key used by the receiver. Eg.
277277 // if one push_pack
278278 // (1, Secondary)
279279 // (1, Verification)
6969 ULConnectionManager();
7070 ~ULConnectionManager() override;
7171
72 // NOTE: (MM) The following two functions are difficults to use, therefore marking
72 // NOTE: (MM) The following two functions are difficult to use, therefore marking
7373 // them as internal for now.
7474
7575 // \internal
4545 const DataSet &ds = GetQueryDataSet();
4646 if (ds.Size() == 0) return false;
4747
48 // in Query somme tags are required other are optional
49 // lets check that we have required one's
48 // in Query some tags are required, others are optional
49 // lets check that we have required ones
5050
5151 bool theReturn = true ;
5252 DataSet validDs = GetValidDataSet();
5353 } // namespace gdcm
5454
5555 struct TestCleaner4Impl {
56 virtual ~TestCleaner4Impl() {}
5657 virtual bool check_before(gdcm::DataSet &ds) = 0;
5758 virtual bool check_after(gdcm::DataSet &ds, bool preservePatientName) = 0;
5859 int run(std::string const &filename, std::string const &outfilename,
00 # Build the vtk-gdcm simple viewer
11 include_directories(
2 ${GDCM_BINARY_DIR}/Utilities/VTK
23 ${GDCM_SOURCE_DIR}/Utilities/VTK
34 )
45
3940 if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" GREATER 5.0 )
4041 target_link_libraries(${app} vtkWidgets vtkHybrid)
4142 endif()
43 elseif(VTK_VERSION VERSION_LESS 8.90)
44 # >= 6.0 and < 8.90
45 target_link_libraries(${app} ${VTK_LIBRARIES} vtkIOXML)
4246 else()
43 # >= 6.0
44 target_link_libraries(${app} ${VTK_LIBRARIES} vtkIOXML)
47 # >= 8.90
48 target_link_libraries(${app}
49 VTK::CommonCore VTK::CommonMisc
50 VTK::FiltersModeling VTK::ImagingColor
51 VTK::IOImage VTK::IOMINC VTK::IOXML
52 VTK::tiff)
53 set(_rendering_libs
54 VTK::InteractionWidgets VTK::RenderingAnnotation VTK::RenderingCore
55 VTK::InteractionStyle VTK::RenderingFreeType VTK::RenderingOpenGL2)
56 if(VTK_USE_RENDERING)
57 target_link_libraries(${app} ${_rendering_libs})
58 vtk_module_autoinit(TARGETS ${app} MODULES ${_rendering_libs})
59 endif()
4560 endif()
4661 if(WIN32 AND NOT CYGWIN)
4762 target_link_libraries(${app} gdcmgetopt)
1515 )
1616 endif()
1717
18 #if( ${VTK_VERSION_MAJOR} LESS 7 )
18 if(VTK_VERSION VERSION_LESS 8.90)
1919 include(${VTK_USE_FILE})
20 #endif()
20 else()
21 if(VTK::RenderingCore IN_LIST VTK_LIBRARIES)
22 # VTK 5 used to export VTK_USE_RENDERING, now we set it ourselves
23 set(VTK_USE_RENDERING 1)
24 endif()
25 endif()
2126
2227 if( ${VTK_MAJOR_VERSION} GREATER 5 )
2328 list(APPEND vtkgdcm_SRCS
4045 ${GDCM_SOURCE_DIR}/Source/DataStructureAndEncodingDefinition
4146 ${GDCM_SOURCE_DIR}/Source/MediaStorageAndFileFormat
4247 ${GDCM_SOURCE_DIR}/Source/DataDictionary
48 ${GDCM_BINARY_DIR}/Utilities/VTK
4349 ${GDCM_SOURCE_DIR}/Utilities/VTK
4450 )
4551
6268 vtkRendering
6369 )
6470 endif()
65 else()
71 elseif(VTK_VERSION VERSION_LESS 8.90)
6672 set(vtkgdcm_LIBS
6773 vtkCommonCore
6874 vtkImagingCore
9197 endif()
9298 endforeach()
9399 endforeach()
100 elseif() # (VTK_VERSION VERSION_LESS 8.90)
101 # for VTK 9, target dependencies are handled automatically
102 set(vtkgdcm_LIBS)
94103 endif()
95104
96105 # Use wrapping hints for this project.
97106 #set(VTK_WRAP_HINTS "${PROJECT_SOURCE_DIR}/hints")
98
99 set(VTKGDCM_NAME vtkgdcm CACHE STRING "vtk-gdcm lib name")
100 mark_as_advanced(VTKGDCM_NAME)
101107
102108 # Create the instantiator for these classes.
103109 # FIXME: Are instantiator really needed when only doing python wrapping ?
157163 endif()
158164 endif()
159165
166 if(VTK_VERSION VERSION_LESS 8.90)
167
160168 #Hum... not sure why this is needed.
161169 #if(NOT VTK_BUILD_SHARED_LIBS AND GDCM_BUILD_SHARED_LIBS)
162170 # add_library(vtkgdcm STATIC ${vtkgdcm_SRCS} ${vtkgdcmInstantiator_SRCS})
183191 # endif()
184192 endif()
185193
194 # Generate the header file for VTKGDCM_EXPORT
195 configure_file(vtkgdcmModule.h.in
196 "${CMAKE_CURRENT_BINARY_DIR}/vtkgdcmModule.h" COPYONLY)
197
186198 if(NOT GDCM_INSTALL_NO_DEVELOPMENT)
187 set(header_files_glob "*.h" "*.txx")
199 set(header_files_glob "${CMAKE_CURRENT_BINARY_DIR}/*.h" "*.h" "*.txx")
188200 if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" LESS 4.5 )
189201 set(header_files_glob ${header_files_glob}
190202 "VTK4/*.h"
194206 install(FILES ${header_files}
195207 DESTINATION ${GDCM_INSTALL_INCLUDE_DIR} COMPONENT VTKHeaders
196208 )
209 endif()
210
211 elseif(DEFINED VTK_MODULE_ENABLE_GDCM_vtkgdcm)
212 # When building as a module for VTK 8.90 or later
213 set(vtkgdcm_SRC_HDRS)
214 foreach(_src ${vtkgdcm_SRCS})
215 get_filename_component(_base ${_src} NAME_WE)
216 list(APPEND vtkgdcm_SRC_HDRS ${_base}.h)
217 endforeach()
218 vtk_module_add_module(GDCM::vtkgdcm
219 SOURCES ${vtkgdcm_SRCS}
220 HEADERS ${vtkgdcm_SRC_HDRS} ${vtkgdcm_HDRS})
221 vtk_module_link(GDCM::vtkgdcm
222 PRIVATE gdcmMSFF)
197223 endif()
198224
199225 if(GDCM_WRAP_PHP)
641667
642668 endif()
643669
670 if(VTK_VERSION VERSION_LESS 8.90)
671
644672 if( (GDCM_WRAP_JAVA AND VTK_WRAP_JAVA) OR
645673 (GDCM_WRAP_PYTHON AND VTK_WRAP_PYTHON) )
646674 if( ${VTK_MAJOR_VERSION} GREATER 7 )
832860 add_subdirectory(Testing)
833861 endif()
834862
863 endif() #(VTK_VERSION VERSION_LESS 8.90)
864
835865 if(BUILD_APPLICATIONS)
836866 add_subdirectory(Applications)
837867 endif()
00 include_directories(
1 ${GDCM_BINARY_DIR}/Utilities/VTK
12 ${GDCM_SOURCE_DIR}/Utilities/VTK
23 )
34
78 CreateFakeRTDOSE
89 CreateFakePET
910 ConvertSingleBitTo8Bits
10 GenerateRTSTRUCT
11 offscreenimage
1211 )
12 if(VTK_USE_RENDERING OR vtkRenderingCore_LOADED)
13 set(GDCM_VTK_APPS
14 ${GDCM_VTK_APPS}
15 GenerateRTSTRUCT
16 offscreenimage
17 )
18 endif()
1319 if( ${VTK_MAJOR_VERSION} GREATER 5 )
1420 set(GDCM_VTK_APPS
1521 ${GDCM_VTK_APPS}
5763 # gdcmTesting is in Common:
5864 target_link_libraries(${app} gdcmCommon)
5965 endif()
60 if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" GREATER 6.0 )
66 if(NOT VTK_VERSION VERSION_LESS 8.90)
67 target_link_libraries(${app}
68 VTK::FiltersCore VTK::FiltersModeling VTK::ImagingColor VTK::IOXML)
69 set(_rendering_libs
70 VTK::InteractionWidgets VTK::RenderingAnnotation VTK::RenderingCore
71 VTK::InteractionStyle VTK::RenderingFreeType VTK::RenderingOpenGL2
72 VTK::RenderingVolume VTK::RenderingVolumeOpenGL2)
73 if(VTK_USE_RENDERING)
74 target_link_libraries(${app} ${_rendering_libs})
75 vtk_module_autoinit(TARGETS ${app} MODULES ${_rendering_libs})
76 endif()
77 elseif( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" GREATER 6.0 )
6178 target_link_libraries(${app} ${VTK_LIBRARIES})
6279 else()
6380 if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" GREATER 5.0 )
1313 #include "vtkGDCMImageReader2.h"
1414 #include "vtkImageChangeInformation.h"
1515 #include "vtkStringArray.h"
16 #include "vtkVersion.h"
1617 #include "gdcmIPPSorter.h"
1718
1819 #ifndef vtkFloatingPointType
1414 #include "vtkGDCMImageWriter.h"
1515 #include "vtkImageData.h"
1616 #include "vtkImageCast.h"
17 #include "vtkVersion.h"
1718
1819 #include "gdcmTesting.h"
1920 // The following file is 16/16/15 but the scalar range of the image is [0,192]
1414 #include "vtkGDCMImageWriter.h"
1515 #include "vtkImageData.h"
1616 #include "vtkStringArray.h"
17 #include "vtkVersion.h"
1718
1819 #include "gdcmTesting.h"
1920 #include "gdcmFilenameGenerator.h"
1414 #include "vtkGDCMImageWriter.h"
1515 #include "vtkImageData.h"
1616 #include "vtkImageLuminance.h"
17 #include "vtkVersion.h"
1718
1819 #include "gdcmTesting.h"
1920
1717 #include "vtkPointData.h"
1818 #include "vtkBitArray.h"
1919 #include "vtkUnsignedCharArray.h"
20 #include "vtkVersion.h"
2021
2122 int main(int argc, char *argv[])
2223 {
1818 #include "vtkDataArray.h"
1919 #include "vtkMedicalImageProperties.h"
2020 #include "vtkStringArray.h"
21 #include "vtkVersion.h"
2122
2223 #include "gdcmTrace.h"
2324 #include "gdcmReader.h"
1717 #include "vtkPointData.h"
1818 #include "vtkDataArray.h"
1919 #include "vtkMedicalImageProperties.h"
20 #include "vtkVersion.h"
2021
2122 #include "gdcmTrace.h"
2223 #include "gdcmReader.h"
3030 #include "vtkProperty.h"
3131 #include "vtkProperty2D.h"
3232 #include "vtkImageData.h"
33 #include "vtkVersion.h"
3334
3435 #include <algorithm> //for std::find
3536
1515 #include "vtkImageData.h"
1616 #include "vtkImageMagnify.h"
1717 #include "vtkImageCast.h"
18 #include "vtkVersion.h"
1819
1920 #include "gdcmTesting.h"
2021 #include "gdcmSystem.h"
4444 #include "vtkGDCMImageReader.h"
4545 #include "vtkGDCMImageWriter.h"
4646 #include "vtkStringArray.h"
47 #include "vtkVersion.h"
4748
4849 #include "gdcmSystem.h"
4950 #include "gdcmDirectory.h"
3131 #include "vtkLookupTable.h"
3232 #include "vtkTexture.h"
3333 #include "vtkPlaneSource.h"
34 #include "vtkVersion.h"
3435
3536 int main( int argc, char *argv[] )
3637 {
2424 #include <vtkXMLPolyDataWriter.h>
2525 #include <vtkRenderWindowInteractor.h>
2626 #include <vtkImageColorViewer.h>
27 #include "vtkVersion.h"
2728
2829 #include "gdcmReader.h"
2930 #include "gdcmAttribute.h"
2323 #include <vtkXMLImageDataWriter.h>
2424 #include <vtkRenderWindowInteractor.h>
2525 #include <vtkImageColorViewer.h>
26 #include "vtkVersion.h"
2627
2728 #include "gdcmReader.h"
2829 #include "gdcmAttribute.h"
2424 #include "vtkCamera.h"
2525 #include "vtkProperty.h"
2626 #include "vtkProperty2D.h"
27 #include "vtkVersion.h"
2728
2829
2930 // gdcmDataExtra/gdcmNonImageData/exRT_Structure_Set_Storage.dcm
2929 #include "vtkLookupTable.h"
3030 #include "vtkTexture.h"
3131 #include "vtkPlaneSource.h"
32 #include "vtkVersion.h"
3233
3334 int main( int argc, char *argv[] )
3435 {
2525 #include "vtkRenderWindow.h"
2626 #include "vtkImageClip.h"
2727 #include "vtkRenderWindowInteractor.h"
28 #include "vtkVersion.h"
2829
2930
3031 // gdcmvolume gdcmData/GE_DLX-8-MONO2-Multiframe-Jpeg_Lossless.dcm
1818 #include "vtkPNGWriter.h"
1919 #include "vtkWindowToImageFilter.h"
2020 #include "vtkMedicalImageProperties.h"
21 #include "vtkVersion.h"
2122
2223 int main(int argc, char *argv[])
2324 {
5858 #include <vtkProperty2D.h>
5959 #include <vtkGDCMImageReader.h>
6060 #include <vtkImageChangeInformation.h>
61 #include <vtkVersion.h>
6162
6263 #include "gdcmDirectory.h"
6364 #include "gdcmTesting.h"
2626 #include "vtkProperty2D.h"
2727 #include "vtkAppendPolyData.h"
2828 #include "vtkImageData.h"
29 #include "vtkVersion.h"
2930
3031 /*
3132 * Small example to read in a RTSTUCT and write it out (displays it too).
1717
1818 #include "vtkImageData.h"
1919 #include "vtkStructuredPointsWriter.h"
20 #include "vtkVersion.h"
2021
2122 #include <pthread.h>
2223
5454 endif()
5555
5656 # Add the include paths
57 if(VTK_VERSION VERSION_LESS 8.90)
58 include_directories(
59 "${GDCM_BINARY_DIR}/Utilities/VTK"
60 "${GDCM_SOURCE_DIR}/Utilities/VTK"
61 )
62 else()
63 include_directories(
64 "${GDCM_BINARY_DIR}/Source/Common"
65 "${GDCM_SOURCE_DIR}/Source/Common"
66 "${GDCM_SOURCE_DIR}/Source/DataDictionary"
67 "${GDCM_SOURCE_DIR}/Source/DataStructureAndEncodingDefinition"
68 "${GDCM_SOURCE_DIR}/Source/MediaStorageAndFileFormat"
69 )
70 endif()
71
5772 include_directories(
58 "${GDCM_SOURCE_DIR}/Utilities/VTK"
5973 "${GDCM_BINARY_DIR}/Testing/Source/Data" # for gdcmDataImages.h
6074 )
6175
6478 )
6579 add_executable(gdcmvtkGDCMTests ${vtkGDCMTests})
6680 target_link_libraries(gdcmvtkGDCMTests ${VTKGDCM_NAME} gdcmMSFF)
67 target_link_libraries(gdcmvtkGDCMTests vtksys)
68 if(VTK_USE_RENDERING)
69 if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" LESS 4.5 )
70 target_link_libraries(gdcmvtkGDCMTests vtkRendering)
71 elseif( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" LESS 6.0 )
72 target_link_libraries(gdcmvtkGDCMTests vtkVolumeRendering)
81
82 if(VTK_VERSION VERSION_LESS 8.90)
83 target_link_libraries(gdcmvtkGDCMTests vtksys)
84 if(VTK_USE_RENDERING)
85 if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" LESS 4.5 )
86 target_link_libraries(gdcmvtkGDCMTests vtkRendering)
87 elseif( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" LESS 6.0 )
88 target_link_libraries(gdcmvtkGDCMTests vtkVolumeRendering)
89 endif()
7390 endif()
74 endif()
75 # VTK 6.0 does not set VTK_USE_RENDERING anymore ?
76 if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" GREATER 6.0 )
77 target_link_libraries(gdcmvtkGDCMTests ${vtkgdcm_LIBS})
78 target_link_libraries(gdcmvtkGDCMTests vtkIOLegacy vtkCommonCore)
91 # VTK 6.0 does not set VTK_USE_RENDERING anymore ?
92 if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" GREATER 6.0 )
93 target_link_libraries(gdcmvtkGDCMTests ${vtkgdcm_LIBS})
94 target_link_libraries(gdcmvtkGDCMTests vtkIOLegacy vtkCommonCore)
95 endif()
96 else()
97 target_link_libraries(gdcmvtkGDCMTests VTK::vtksys VTK::RenderingCore)
7998 endif()
8099
81100 # Need full path to executable:
4242 #error Something went terribly wrong
4343 #endif
4444
45 #include "vtkgdcmModule.h"
4546 #include "vtkObject.h"
4647
4748 class vtkMedicalImagePropertiesInternals;
4849
49 class VTK_IO_EXPORT vtkMedicalImageProperties : public vtkObject
50 class VTKGDCM_EXPORT vtkMedicalImageProperties : public vtkObject
5051 {
5152 public:
5253 static vtkMedicalImageProperties *New();
2424 #error Something went terribly wrong
2525 #endif
2626
27 #include "vtkgdcmModule.h"
2728 #include "vtkObject.h"
2829
2930 #include <string>
3031
3132 class vtkStringArrayInternals;
32 class VTK_EXPORT vtkStringArray : public vtkObject
33 class VTKGDCM_EXPORT vtkStringArray : public vtkObject
3334 {
3435 public:
3536 static vtkStringArray *New();
6363 #ifndef VTKGDCMIMAGEREADER_H
6464 #define VTKGDCMIMAGEREADER_H
6565
66 #include "vtkgdcmModule.h"
6667 #include "vtkMedicalImageReader2.h"
6768 #include "vtkImageData.h"
6869 #include "vtkVersion.h"
99100 namespace gdcm { class ImageReader; }
100101 //ETX
101102 class vtkMatrix4x4;
102 class VTK_EXPORT vtkGDCMImageReader : public vtkMedicalImageReader2
103 class VTKGDCM_EXPORT vtkGDCMImageReader : public vtkMedicalImageReader2
103104 {
104105 public:
105106 static vtkGDCMImageReader *New();
6363 #ifndef VTKGDCMIMAGEREADER2_H
6464 #define VTKGDCMIMAGEREADER2_H
6565
66 #include "vtkgdcmModule.h"
6667 #include "vtkMedicalImageReader2.h"
6768 #include "vtkImageData.h"
6869
9091 namespace gdcm { class ImageReader; }
9192 //ETX
9293 class vtkMatrix4x4;
93 class VTK_EXPORT vtkGDCMImageReader2 : public vtkMedicalImageReader2
94 class VTKGDCM_EXPORT vtkGDCMImageReader2 : public vtkMedicalImageReader2
9495 {
9596 public:
9697 static vtkGDCMImageReader2 *New();
3737 #ifndef VTKGDCMIMAGEWRITER_H
3838 #define VTKGDCMIMAGEWRITER_H
3939
40 #include "vtkgdcmModule.h"
4041 #include "vtkImageWriter.h"
4142 #include "vtkVersion.h"
4243
4445 class vtkMedicalImageProperties;
4546 class vtkMatrix4x4;
4647 class vtkStringArray;
47 class VTK_EXPORT vtkGDCMImageWriter : public vtkImageWriter
48 class VTKGDCM_EXPORT vtkGDCMImageWriter : public vtkImageWriter
4849 {
4950 public:
5051 static vtkGDCMImageWriter *New();
2222 #ifndef VTKGDCMMEDICALIMAGEPROPERTIES_H
2323 #define VTKGDCMMEDICALIMAGEPROPERTIES_H
2424
25 #include "vtkgdcmModule.h"
2526 #include "vtkMedicalImageProperties.h"
2627
2728 class vtkGDCMMedicalImagePropertiesInternals;
2930 namespace gdcm { class File; }
3031 //ETX
3132
32 class VTK_EXPORT vtkGDCMMedicalImageProperties : public vtkMedicalImageProperties
33 class VTKGDCM_EXPORT vtkGDCMMedicalImageProperties : public vtkMedicalImageProperties
3334 {
3435 public:
3536 static vtkGDCMMedicalImageProperties *New();
2727 #ifndef VTKGDCMPOLYDATAREADER_H
2828 #define VTKGDCMPOLYDATAREADER_H
2929
30 #include "vtkgdcmModule.h"
3031 #include "vtkPolyDataAlgorithm.h"
3132
3233 class vtkMedicalImageProperties;
3435 //BTX
3536 namespace gdcm { class Reader; }
3637 //ETX
37 class VTK_EXPORT vtkGDCMPolyDataReader : public vtkPolyDataAlgorithm
38 class VTKGDCM_EXPORT vtkGDCMPolyDataReader : public vtkPolyDataAlgorithm
3839 {
3940 public:
4041 static vtkGDCMPolyDataReader *New();
495495 sqi = new SequenceOfItems;
496496
497497 vtkIdType npts = 0;
498 #if VTK_MAJOR_VERSION >= 9
499 const vtkIdType *indx = 0;
500 #else
498501 vtkIdType *indx = 0;
502 #endif
499503 double v[3];
500504 unsigned int cellnum = 0;
501505
758762 vtkPoints *pts;
759763 vtkCellArray *polys;
760764 vtkIdType npts = 0;
765 #if VTK_MAJOR_VERSION >= 9
766 const vtkIdType *indx = 0;
767 #else
761768 vtkIdType *indx = 0;
769 #endif
762770 pts = theData->GetPoints();
763771 polys = theData->GetPolys();
764772 vtkCellArray* lines = theData->GetLines();
2424 #ifndef VTKGDCMPOLYDATAWRITER_H
2525 #define VTKGDCMPOLYDATAWRITER_H
2626
27 #include "vtkgdcmModule.h"
2728 #include "vtkPolyDataWriter.h"
2829 #include "vtkStringArray.h"
2930 #include "vtkStdString.h"
3435 //BTX
3536 namespace gdcm { class File; }
3637 //ETX
37 class VTK_EXPORT vtkGDCMPolyDataWriter : public vtkPolyDataWriter
38 class VTKGDCM_EXPORT vtkGDCMPolyDataWriter : public vtkPolyDataWriter
3839 {
3940 public:
4041 static vtkGDCMPolyDataWriter *New();
2020 #ifndef VTKGDCMTESTING_H
2121 #define VTKGDCMTESTING_H
2222
23 #include "vtkgdcmModule.h"
2324 #include "vtkObject.h"
2425
25 class VTK_EXPORT vtkGDCMTesting : public vtkObject
26 class VTKGDCM_EXPORT vtkGDCMTesting : public vtkObject
2627 {
2728 public:
2829 static vtkGDCMTesting *New();
3636 #ifndef VTKGDCMTHREADEDIMAGEREADER_H
3737 #define VTKGDCMTHREADEDIMAGEREADER_H
3838
39 #include "vtkgdcmModule.h"
3940 #include "vtkGDCMImageReader.h"
4041 #include "vtkVersion.h"
4142
42 class VTK_EXPORT vtkGDCMThreadedImageReader : public vtkGDCMImageReader
43 class VTKGDCM_EXPORT vtkGDCMThreadedImageReader : public vtkGDCMImageReader
4344 {
4445 public:
4546 static vtkGDCMThreadedImageReader *New();
4242 #ifndef VTKGDCMTHREADEDIMAGEREADER2_H
4343 #define VTKGDCMTHREADEDIMAGEREADER2_H
4444
45 #include "vtkgdcmModule.h"
4546 #include "vtkThreadedImageAlgorithm.h"
4647
4748 class vtkStringArray;
48 class VTK_EXPORT vtkGDCMThreadedImageReader2 : public vtkThreadedImageAlgorithm
49 class VTKGDCM_EXPORT vtkGDCMThreadedImageReader2 : public vtkThreadedImageAlgorithm
4950 {
5051 public:
5152 static vtkGDCMThreadedImageReader2 *New();
5252 #ifndef VTKIMAGECOLORVIEWER_H
5353 #define VTKIMAGECOLORVIEWER_H
5454
55 #include "vtkgdcmModule.h"
5556 #include "vtkObject.h"
5657 #include "vtkVersion.h"
5758
6768 class vtkRenderWindowInteractor;
6869 class vtkPolyData;
6970
70 class VTK_EXPORT vtkImageColorViewer : public vtkObject
71 class VTKGDCM_EXPORT vtkImageColorViewer : public vtkObject
7172 {
7273 public:
7374 static vtkImageColorViewer *New();
4141 #define VTKIMAGEMAPTOCOLORS16_H
4242
4343
44 #include "vtkgdcmModule.h"
4445 #include "vtkThreadedImageAlgorithm.h"
4546
4647 class vtkScalarsToColors;
4748
48 class VTK_EXPORT vtkImageMapToColors16 : public vtkThreadedImageAlgorithm
49 class VTKGDCM_EXPORT vtkImageMapToColors16 : public vtkThreadedImageAlgorithm
4950 {
5051 public:
5152 static vtkImageMapToColors16 *New();
3535 #include "vtkObjectFactory.h"
3636 #include "vtkScalarsToColors.h"
3737 #include "vtkPointData.h"
38
39 #include <cmath>
3840
3941 //vtkCxxRevisionMacro(vtkImageMapToWindowLevelColors2, "$Revision: 1.3 $")
4042 vtkStandardNewMacro(vtkImageMapToWindowLevelColors2)
4242 #ifndef VTKIMAGEMAPTOWINDOWLEVELCOLORS2_H
4343 #define VTKIMAGEMAPTOWINDOWLEVELCOLORS2_H
4444
45 #include "vtkgdcmModule.h"
4546 #include "vtkImageMapToColors.h"
4647
47 class VTK_EXPORT vtkImageMapToWindowLevelColors2 : public vtkImageMapToColors
48 class VTKGDCM_EXPORT vtkImageMapToWindowLevelColors2 : public vtkImageMapToColors
4849 {
4950 public:
5051 static vtkImageMapToWindowLevelColors2 *New();
3636 #ifndef VTKIMAGEPLANARCOMPONENTSTOCOMPONENTS_H
3737 #define VTKIMAGEPLANARCOMPONENTSTOCOMPONENTS_H
3838
39 #include "vtkgdcmModule.h"
3940 #include "vtkImageAlgorithm.h"
4041
4142 // everything is now handled within the vtkGDCMImageReader as Planar Configuration can not
4344
4445 #error do not use this class
4546
46 //class VTK_EXPORT vtkImagePlanarComponentsToComponents : public vtkThreadedImageAlgorithm
47 class VTK_EXPORT vtkImagePlanarComponentsToComponents : public vtkImageAlgorithm
47 //class VTKGDCM_EXPORT vtkImagePlanarComponentsToComponents : public vtkThreadedImageAlgorithm
48 class VTKGDCM_EXPORT vtkImagePlanarComponentsToComponents : public vtkImageAlgorithm
4849 {
4950 public:
5051 static vtkImagePlanarComponentsToComponents *New();
3838 #ifndef VTKIMAGERGBTOYBR_H
3939 #define VTKIMAGERGBTOYBR_H
4040
41 #include "vtkgdcmModule.h"
4142 #include "vtkThreadedImageAlgorithm.h"
4243
43 class VTK_EXPORT vtkImageRGBToYBR : public vtkThreadedImageAlgorithm
44 class VTKGDCM_EXPORT vtkImageRGBToYBR : public vtkThreadedImageAlgorithm
4445 {
4546 public:
4647 static vtkImageRGBToYBR *New();
3838 #ifndef VTKIMAGEYBRTORGB_H
3939 #define VTKIMAGEYBRTORGB_H
4040
41 #include "vtkgdcmModule.h"
4142 #include "vtkThreadedImageAlgorithm.h"
4243
43 class VTK_EXPORT vtkImageYBRToRGB : public vtkThreadedImageAlgorithm
44 class VTKGDCM_EXPORT vtkImageYBRToRGB : public vtkThreadedImageAlgorithm
4445 {
4546 public:
4647 static vtkImageYBRToRGB *New();
3737 #ifndef VTKLOOKUPTABLE16_H
3838 #define VTKLOOKUPTABLE16_H
3939
40 #include "vtkgdcmModule.h"
4041 #include "vtkLookupTable.h"
4142 #include "vtkUnsignedShortArray.h"
4243
43 class VTK_EXPORT vtkLookupTable16 : public vtkLookupTable
44 class VTKGDCM_EXPORT vtkLookupTable16 : public vtkLookupTable
4445 {
4546 public:
4647 static vtkLookupTable16 *New();
1919 #ifndef VTKRTSTRUCTSETPROPERTIES_H
2020 #define VTKRTSTRUCTSETPROPERTIES_H
2121
22 #include "vtkgdcmModule.h"
2223 #include "vtkObject.h"
2324
2425 class vtkRTStructSetPropertiesInternals;
2526
26 class VTK_EXPORT vtkRTStructSetProperties : public vtkObject
27 class VTKGDCM_EXPORT vtkRTStructSetProperties : public vtkObject
2728 {
2829 public:
2930 static vtkRTStructSetProperties *New();
125125
126126 #define GDCM_EXPORT
127127 #define VTK_EXPORT
128 #define VTKGDCM_EXPORT
128129 #define VTK_COMMON_EXPORT
129130 #define VTK_FILTERING_EXPORT
130131 #define VTK_IO_EXPORT
0 NAME
1 GDCM::vtkgdcm
2 LIBRARY_NAME
3 vtkgdcm
4 GROUPS
5 StandAlone
6 DEPENDS
7 VTK::CommonCore
8 VTK::CommonDataModel
9 VTK::CommonExecutionModel
10 VTK::IOImage
11 VTK::IOLegacy
12 VTK::ImagingSources
13 PRIVATE_DEPENDS
14 VTK::CommonMisc
15 VTK::ImagingCore
16 VTK::IOCore
17 OPTIONAL_DEPENDS
18 VTK::InteractionStyle
19 VTK::RenderingCore
20 TEST_DEPENDS
21 VTK::TestingCore
0 /* Export macros for shared libraries */
1
2 #ifndef vtkgdcmModule_h
3 #define vtkgdcmModule_h
4
5 #include "vtkABI.h"
6 #include "gdcmConfigure.h"
7
8 #if defined(GDCM_BUILD_SHARED_LIBS)
9 # if defined(vtkgdcm_EXPORTS)
10 # define VTKGDCM_EXPORT VTK_ABI_EXPORT
11 # else
12 # define VTKGDCM_EXPORT VTK_ABI_IMPORT
13 # endif
14 #else
15 # define VTKGDCM_EXPORT
16 #endif
17
18 #endif
121121 <para>Remove the private attributes: (0029,20, SIEMENS MEDCOM HEADER) / (0033,02,MITRA OBJECT UTF8 ATTRIBUTES 1.0) / (0043,2a,GEMS_PARM_01). Since (0033,02,MITRA OBJECT UTF8 ATTRIBUTES 1.0) is defined internally in the private dictionary with Value Representation = PN, this attribute will be skipped (since redundant).</para>
122122 </listitem>
123123 <listitem>
124 <para>Scrub the private attributes: (0029,10,SIEMENS CSA HEADER) / (0029,20,SIEMENS CSA HEADER)</para>
124 <para>Scrub the private attributes: (0029,10,SIEMENS CSA HEADER) / (0029,20,SIEMENS CSA HEADER) / (700d,08,TOSHIBA_MEC_MR3) / (0029,90,PMTF INFORMATION DATA)</para>
125125 </listitem>
126126 </itemizedlist>
127127 </para>
131131 --empty PN --preserve /0010,0010 \
132132 --empty PatientID --empty "0070,0084" \
133133 --remove "0029,20,SIEMENS MEDCOM HEADER" --remove "0033,02,MITRA OBJECT UTF8 ATTRIBUTES 1.0" --remove "0043,2a,GEMS_PARM_01" \
134 --scrub "0029,10,SIEMENS CSA HEADER" --scrub "0029,20,SIEMENS CSA HEADER" \
134 --scrub "0029,10,SIEMENS CSA HEADER" --scrub "0029,20,SIEMENS CSA HEADER" \
135 --scrub "700d,08,TOSHIBA_MEC_MR3" \
136 --scrub "0029,90,PMTF INFORMATION DATA" --scrub "0029,90,TOSHIBA_MEC_MR3" \
135137 input_folder output_folder
136138 </literallayout></para>
137139 </refsection>
6161 --sds print Philips MR Series Data Storage (1.3.46.670589.11.0.0.12.2) Information (2005,32,Philips MR Imaging DD 002).
6262 --ct3 print CT Private Data 2 (7005,10,TOSHIBA_MEC_CT3).
6363 --pmtf print PMTF INFORMATION DATA sub-sequences (0029,01,PMTF INFORMATION DATA).
64 --mecmr3 print TOSHIBA_MEC_MR3 sub-sequences (0029,01,TOSHIBA_MEC_MR3).
64 or TOSHIBA_MEC_MR3 sub-sequences (0029,01,TOSHIBA_MEC_MR3).
65 or CANON_MEC_MR3 sub-sequences (0029,01,CANON_MEC_MR3)
6566 --medcom print MedCom History Information as UTF-8 (0029,20,SIEMENS MEDCOM HEADER).
67 --mr3 print Original Data as UTF-8 (700d,08,TOSHIBA_MEC_MR3).
6668 -A --asn1 print encapsulated ASN1 structure &gt;(0400,0520).
6769 --map-uid-names map UID to names.
6870 </literallayout></para>
+0
-288
Utilities/gdcmcsa/csa.c less more
0 #include <assert.h>
1 #include <stdbool.h>
2 #include <stddef.h>
3 #include <stdint.h>
4 #include <stdlib.h> /* realloc */
5 #include <string.h> /* memcpy */
6
7 struct stream {
8 const void *start;
9 const void *end;
10 void *cur;
11 size_t (*read)(void *ptr, size_t size, size_t nmemb, struct stream *in);
12 size_t (*write)(const void *ptr, size_t size, size_t nmemb,
13 struct stream *outstream);
14 };
15
16 static size_t stream_read(void *ptr, size_t size, size_t nmemb,
17 struct stream *in) {
18 char *cur = (char *)in->cur;
19 const char *end = (const char *)in->end;
20 const size_t len = size * nmemb;
21 if (cur + len <= end) {
22 memcpy(ptr, cur, len);
23 in->cur = cur + len;
24 } else {
25 in->cur = NULL;
26 return 0;
27 }
28 return nmemb;
29 }
30
31 static size_t stream_write(const void *ptr, size_t size, size_t nmemb,
32 struct stream *out) {
33 char *cur = (char *)out->cur;
34 const char *end = (const char *)out->end;
35 const size_t len = size * nmemb;
36 if (cur + len <= end) {
37 memcpy(cur, ptr, len);
38 out->cur = cur + len;
39 } else {
40 out->cur = NULL;
41 return 0;
42 }
43 return nmemb;
44 }
45
46 enum CSA_TYPE { INVALID = 0, NOMAGIC = 1, SV10 = 2 };
47
48 struct app {
49 struct stream *in;
50 struct stream *out;
51 uint32_t nelements;
52 enum CSA_TYPE csa_type;
53 };
54
55 static struct app *create_app(struct app *self, struct stream *in,
56 struct stream *out) {
57 self->in = in;
58 self->out = out;
59 self->nelements = 0;
60 self->csa_type = INVALID;
61
62 return self;
63 }
64
65 static void setup_buffer(struct app *self, void *output, const void *input,
66 size_t len) {
67 self->in->cur = (char *)input;
68 self->in->start = input;
69 self->in->end = (char *)input + len;
70 self->in->read = stream_read;
71 self->out->cur = output;
72 self->out->start = output;
73 self->out->end = (char *)output + len;
74 self->out->write = stream_write;
75 }
76
77 #define ERROR_RETURN(X, Y) \
78 if (X != Y) return false
79
80 static size_t fread_mirror(void *ptr, size_t size, size_t nmemb,
81 struct app *self) {
82 struct stream *instream = self->in;
83 struct stream *outstream = self->out;
84
85 size_t s = instream->read(ptr, size, nmemb, instream);
86 if (s == nmemb) {
87 s = outstream->write(ptr, size, nmemb, outstream);
88 if (s == nmemb) return nmemb;
89 }
90 return 0;
91 }
92
93 static size_t fread_mirror_clean(void *ptr, size_t size, size_t nmemb,
94 struct app *self) {
95 struct stream *instream = self->in;
96 struct stream *outstream = self->out;
97
98 if (nmemb != 64) return 0;
99 size_t s = instream->read(ptr, size, nmemb, instream);
100 if (s == nmemb) {
101 char *str = (char *)ptr;
102 const size_t len = strnlen(str, nmemb);
103 assert(len < nmemb);
104 size_t i;
105 for (i = len; i < nmemb; ++i) {
106 str[i] = 0;
107 }
108 s = outstream->write(ptr, size, nmemb, outstream);
109 if (s == nmemb) return nmemb;
110 }
111 return 0;
112 }
113
114 static bool read_magic(struct app *self) {
115 enum CSA_TYPE magic = INVALID;
116 uint32_t n;
117 size_t s = fread_mirror(&n, sizeof n, 1, self);
118 ERROR_RETURN(s, 1);
119 uint32_t unused;
120 s = fread_mirror(&unused, sizeof unused, 1, self);
121 ERROR_RETURN(s, 1);
122
123 // Handle very special case hopefully no conflict with case of no-magic
124 if (n == 0x30315653 && unused == 0x01020304) { // aka 'SV10'
125 s = fread_mirror(&n, sizeof n, 1, self);
126 ERROR_RETURN(s, 1);
127 s = fread_mirror(&unused, sizeof unused, 1, self);
128 ERROR_RETURN(s, 1);
129 magic = SV10;
130 } else if (n < 0x100 && unused == 0x4d) { // 'M'
131 magic = NOMAGIC;
132 } else if (n == 0x7364703c && unused == 0x6f633c3e) // aka '<pds><co'
133 {
134 // 'PET_REPLAY_PARAM'
135 return false;
136 } else if (n == 0x31305356 && unused == 0x2010403) { // aka 'VS01' ...
137 // technically could be reserved; should not happen in the wild
138 return false;
139 } else {
140 assert(0);
141 return false;
142 }
143 self->nelements = n;
144 self->csa_type = magic;
145 return true;
146 }
147
148 static bool write_trailer(struct app *self) {
149 size_t s;
150 // trailing byte in SV10
151 if (self->csa_type == SV10) {
152 uint32_t unused;
153 s = fread_mirror(&unused, sizeof unused, 1, self);
154 ERROR_RETURN(s, 1);
155 } else if (self->csa_type == NOMAGIC) {
156 // no magic
157 uint32_t i;
158 for (i = 0; i < 28u; ++i) {
159 uint32_t unused;
160 s = fread_mirror(&unused, sizeof unused, 1, self);
161 ERROR_RETURN(s, 1);
162 }
163 } else {
164 assert(0);
165 return false;
166 }
167 return true;
168 }
169
170 struct csa_info {
171 char name[64];
172 uint32_t vm;
173 char vr[4];
174 int32_t syngodt;
175 uint32_t nitems;
176 };
177
178 struct csa_item_data {
179 uint32_t len;
180 char *buffer;
181 };
182
183 static bool read_info(struct app *self, struct csa_info *i) {
184 // name. This is 64bytes string. It is assumed that there will be a trailing
185 // \0
186 size_t s = fread_mirror_clean(i->name, sizeof *i->name,
187 sizeof i->name / sizeof *i->name, self);
188 ERROR_RETURN(s, 64);
189 // vm
190 s = fread_mirror(&i->vm, sizeof i->vm, 1, self);
191 ERROR_RETURN(s, 1);
192 // vm == 115301884 seems to be ok...
193 assert(i->vm < 0x6df5dfd);
194 // vr
195 s = fread_mirror(i->vr, sizeof *i->vr, sizeof i->vr / sizeof *i->vr, self);
196 ERROR_RETURN(s, 4);
197 // syngodt (signed)
198 s = fread_mirror(&i->syngodt, sizeof i->syngodt, 1, self);
199 ERROR_RETURN(s, 1);
200 // numer of items
201 s = fread_mirror(&i->nitems, sizeof i->nitems, 1, self);
202 ERROR_RETURN(s, 1);
203 {
204 uint32_t unused;
205 s = fread_mirror(&unused, sizeof unused, 1, self);
206 ERROR_RETURN(s, 1);
207 }
208
209 return true;
210 }
211
212 static bool read_data(struct app *self, struct csa_item_data *d) {
213 size_t s = fread_mirror(&d->len, sizeof d->len, 1, self);
214 ERROR_RETURN(s, 1);
215 int j;
216 for (j = 0; j < 3; j++) {
217 uint32_t unused;
218 s = fread_mirror(&unused, sizeof unused, 1, self);
219 ERROR_RETURN(s, 1);
220 }
221
222 if (d->len != 0) {
223 const uint32_t padding_len = (4 - d->len % 4) % 4;
224 const uint32_t padded_len = ((d->len + 3u) / 4u) * 4u; // (len + 3) & ~0x03
225 assert(padded_len == d->len + padding_len); // programmer error
226 d->buffer = (char *)realloc(d->buffer, padded_len);
227 s = fread_mirror(d->buffer, sizeof *d->buffer, padded_len, self);
228 ERROR_RETURN(s, padded_len);
229 }
230
231 return true;
232 }
233
234 #undef ERROR_RETURN
235
236 static bool csa_scrub(void *output, const void *input, size_t len) {
237 if (!input || !output) return false;
238 struct stream sin;
239 struct stream sout;
240 struct app a;
241 struct app *self = create_app(&a, &sin, &sout);
242 setup_buffer(self, output, input, len);
243 if (!read_magic(self)) return false;
244
245 bool good = true;
246 struct csa_info info;
247 struct csa_item_data data;
248 data.len = 0;
249 data.buffer = NULL;
250 uint32_t element;
251 for (element = 0; good && element < self->nelements; ++element) {
252 // read csa key info
253 if (!read_info(self, &info)) {
254 good = false;
255 break;
256 }
257 // read all csa item data:
258 uint32_t item;
259 for (item = 0; good && item < info.nitems; ++item) {
260 if (!read_data(self, &data)) {
261 good = false;
262 break;
263 }
264 } // end for items
265 }
266 // release memory:
267 free(data.buffer);
268 if (!good) return false;
269
270 // write trailer:
271 if (!write_trailer(self)) {
272 return false;
273 }
274
275 // make sure the whole input was processed:
276 assert(self->in->cur <= self->in->end);
277 if (self->in->cur < self->in->end) {
278 return false;
279 }
280 assert(self->out->cur == self->out->end); // programmer error
281 return true;
282 }
283
284 void *csa_memcpy(void *dest, const void *src, size_t n) {
285 const bool b = csa_scrub(dest, src, n);
286 return b ? dest : NULL;
287 }
+0
-9
Utilities/gdcmcsa/csa.h less more
0 #ifdef __cplusplus
1 extern "C" {
2 #endif
3
4 void *csa_memcpy(void *dest, const void *src, size_t n);
5
6 #ifdef __cplusplus
7 } /* end extern "C" */
8 #endif
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13
14 #include <assert.h>
15 #include <stdbool.h>
16 #include <stddef.h>
17 #include <stdint.h>
18 #include <stdlib.h> /* realloc */
19 #include <string.h> /* memcpy */
20
21 struct stream {
22 const void *start;
23 const void *end;
24 void *cur;
25 size_t (*read)(void *ptr, size_t size, size_t nmemb, struct stream *in);
26 size_t (*write)(const void *ptr, size_t size, size_t nmemb,
27 struct stream *outstream);
28 };
29
30 static size_t stream_read(void *ptr, size_t size, size_t nmemb,
31 struct stream *in) {
32 char *cur = (char *)in->cur;
33 const char *end = (const char *)in->end;
34 const size_t len = size * nmemb;
35 if (cur + len <= end) {
36 memcpy(ptr, cur, len);
37 in->cur = cur + len;
38 } else {
39 in->cur = NULL;
40 return 0;
41 }
42 return nmemb;
43 }
44
45 static size_t stream_write(const void *ptr, size_t size, size_t nmemb,
46 struct stream *out) {
47 char *cur = (char *)out->cur;
48 const char *end = (const char *)out->end;
49 const size_t len = size * nmemb;
50 if (cur + len <= end) {
51 memcpy(cur, ptr, len);
52 out->cur = cur + len;
53 } else {
54 out->cur = NULL;
55 return 0;
56 }
57 return nmemb;
58 }
59
60 enum CSA_TYPE { INVALID = 0, NOMAGIC = 1, SV10 = 2 };
61
62 struct app {
63 struct stream *in;
64 struct stream *out;
65 uint32_t nelements;
66 enum CSA_TYPE csa_type;
67 };
68
69 static struct app *create_app(struct app *self, struct stream *in,
70 struct stream *out) {
71 self->in = in;
72 self->out = out;
73 self->nelements = 0;
74 self->csa_type = INVALID;
75
76 return self;
77 }
78
79 static void setup_buffer(struct app *self, void *output, const void *input,
80 size_t len) {
81 self->in->cur = (char *)input;
82 self->in->start = input;
83 self->in->end = (char *)input + len;
84 self->in->read = stream_read;
85 self->out->cur = output;
86 self->out->start = output;
87 self->out->end = (char *)output + len;
88 self->out->write = stream_write;
89 }
90
91 #define ERROR_RETURN(X, Y) \
92 if ((X) != (Y)) return false
93
94 static size_t fread_mirror(void *ptr, size_t size, size_t nmemb,
95 struct app *self) {
96 struct stream *instream = self->in;
97 struct stream *outstream = self->out;
98
99 size_t s = instream->read(ptr, size, nmemb, instream);
100 if (s == nmemb) {
101 s = outstream->write(ptr, size, nmemb, outstream);
102 if (s == nmemb) return nmemb;
103 }
104 return 0;
105 }
106
107 static size_t fread_mirror_clean(void *ptr, size_t size, size_t nmemb,
108 struct app *self) {
109 struct stream *instream = self->in;
110 struct stream *outstream = self->out;
111
112 if (nmemb != 64) return 0;
113 size_t s = instream->read(ptr, size, nmemb, instream);
114 if (s == nmemb) {
115 char *str = (char *)ptr;
116 const size_t len = strnlen(str, nmemb);
117 assert(len < nmemb);
118 size_t i;
119 for (i = len; i < nmemb; ++i) {
120 str[i] = 0;
121 }
122 s = outstream->write(ptr, size, nmemb, outstream);
123 if (s == nmemb) return nmemb;
124 }
125 return 0;
126 }
127
128 static bool read_magic(struct app *self) {
129 enum CSA_TYPE magic = INVALID;
130 uint32_t n;
131 size_t s = fread_mirror(&n, sizeof n, 1, self);
132 ERROR_RETURN(s, 1);
133 uint32_t unused;
134 s = fread_mirror(&unused, sizeof unused, 1, self);
135 ERROR_RETURN(s, 1);
136
137 // Handle very special case hopefully no conflict with case of no-magic
138 if (n == 0x30315653 && unused == 0x01020304) { // aka 'SV10'
139 s = fread_mirror(&n, sizeof n, 1, self);
140 ERROR_RETURN(s, 1);
141 s = fread_mirror(&unused, sizeof unused, 1, self);
142 ERROR_RETURN(s, 1);
143 magic = SV10;
144 } else if (n < 0x100 && unused == 0x4d) { // 'M'
145 magic = NOMAGIC;
146 } else if (n == 0x7364703c && unused == 0x6f633c3e) // aka '<pds><co'
147 {
148 // 'PET_REPLAY_PARAM'
149 return false;
150 } else if (n == 0x31305356 && unused == 0x2010403) { // aka 'VS01' ...
151 // technically could be reserved; should not happen in the wild
152 return false;
153 } else {
154 assert(0);
155 return false;
156 }
157 self->nelements = n;
158 self->csa_type = magic;
159 return true;
160 }
161
162 static bool write_trailer(struct app *self) {
163 size_t s;
164 // trailing byte in SV10
165 if (self->csa_type == SV10) {
166 uint32_t unused;
167 s = fread_mirror(&unused, sizeof unused, 1, self);
168 ERROR_RETURN(s, 1);
169 } else if (self->csa_type == NOMAGIC) {
170 // no magic
171 uint32_t i;
172 for (i = 0; i < 28u; ++i) {
173 uint32_t unused;
174 s = fread_mirror(&unused, sizeof unused, 1, self);
175 ERROR_RETURN(s, 1);
176 }
177 } else {
178 assert(0);
179 return false;
180 }
181 return true;
182 }
183
184 struct csa_info {
185 char name[64];
186 uint32_t vm;
187 char vr[4];
188 int32_t syngodt;
189 uint32_t nitems;
190 };
191
192 struct csa_item_data {
193 uint32_t len;
194 char *buffer;
195 };
196
197 static bool read_info(struct app *self, struct csa_info *i) {
198 // name. This is 64bytes string. It is assumed that there will be a trailing
199 // \0
200 size_t s = fread_mirror_clean(i->name, sizeof *i->name,
201 sizeof i->name / sizeof *i->name, self);
202 ERROR_RETURN(s, 64);
203 // vm
204 s = fread_mirror(&i->vm, sizeof i->vm, 1, self);
205 ERROR_RETURN(s, 1);
206 // vm == 115301884 seems to be ok...
207 assert(i->vm < 0x6df5dfd);
208 // vr
209 s = fread_mirror(i->vr, sizeof *i->vr, sizeof i->vr / sizeof *i->vr, self);
210 ERROR_RETURN(s, 4);
211 // syngodt (signed)
212 s = fread_mirror(&i->syngodt, sizeof i->syngodt, 1, self);
213 ERROR_RETURN(s, 1);
214 // numer of items
215 s = fread_mirror(&i->nitems, sizeof i->nitems, 1, self);
216 ERROR_RETURN(s, 1);
217 {
218 uint32_t unused;
219 s = fread_mirror(&unused, sizeof unused, 1, self);
220 ERROR_RETURN(s, 1);
221 }
222
223 return true;
224 }
225
226 static bool read_data(struct app *self, struct csa_item_data *d) {
227 size_t s = fread_mirror(&d->len, sizeof d->len, 1, self);
228 ERROR_RETURN(s, 1);
229 int j;
230 for (j = 0; j < 3; j++) {
231 uint32_t unused;
232 s = fread_mirror(&unused, sizeof unused, 1, self);
233 ERROR_RETURN(s, 1);
234 }
235
236 if (d->len != 0) {
237 const uint32_t padding_len = (4 - d->len % 4) % 4;
238 const uint32_t padded_len = ((d->len + 3u) / 4u) * 4u; // (len + 3) & ~0x03
239 assert(padded_len == d->len + padding_len); // programmer error
240 d->buffer = (char *)realloc(d->buffer, padded_len);
241 s = fread_mirror(d->buffer, sizeof *d->buffer, padded_len, self);
242 ERROR_RETURN(s, padded_len);
243 }
244
245 return true;
246 }
247
248 #undef ERROR_RETURN
249
250 static bool csa_scrub(void *output, const void *input, size_t len) {
251 if (!input || !output) return false;
252 struct stream sin;
253 struct stream sout;
254 struct app a;
255 struct app *self = create_app(&a, &sin, &sout);
256 setup_buffer(self, output, input, len);
257 if (!read_magic(self)) return false;
258
259 bool good = true;
260 struct csa_info info;
261 struct csa_item_data data;
262 data.len = 0;
263 data.buffer = NULL;
264 uint32_t element;
265 for (element = 0; good && element < self->nelements; ++element) {
266 // read csa key info
267 if (!read_info(self, &info)) {
268 good = false;
269 break;
270 }
271 // read all csa item data:
272 uint32_t item;
273 for (item = 0; good && item < info.nitems; ++item) {
274 if (!read_data(self, &data)) {
275 good = false;
276 break;
277 }
278 } // end for items
279 }
280 // release memory:
281 free(data.buffer);
282 if (!good) return false;
283
284 // write trailer:
285 if (!write_trailer(self)) {
286 return false;
287 }
288
289 // make sure the whole input was processed:
290 assert(self->in->cur <= self->in->end);
291 if (self->in->cur < self->in->end) {
292 return false;
293 }
294 assert(self->out->cur == self->out->end); // programmer error
295 return true;
296 }
297
298 void *csa_memcpy(void *dest, const void *src, size_t n) {
299 const bool b = csa_scrub(dest, src, n);
300 return b ? dest : NULL;
301 }
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13 #ifndef CSA_H
14 #define CSA_H
15
16 #include <stddef.h>
17
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21
22 void *csa_memcpy(void *dest, const void *src, size_t n);
23
24 #ifdef __cplusplus
25 } /* end extern "C" */
26 #endif
27
28 #endif // CSA_H
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13
14 #include <assert.h>
15 #include <stdbool.h>
16 #include <stddef.h>
17 #include <stdint.h>
18 #include <stdlib.h> /* realloc */
19 #include <string.h> /* memcpy */
20
21 struct stream {
22 const void *start;
23 const void *end;
24 void *cur;
25 size_t (*read)(void *ptr, size_t size, size_t nmemb, struct stream *in);
26 size_t (*write)(const void *ptr, size_t size, size_t nmemb,
27 struct stream *outstream);
28 };
29
30 static size_t stream_read(void *ptr, size_t size, size_t nmemb,
31 struct stream *in) {
32 char *cur = (char *)in->cur;
33 const char *end = (const char *)in->end;
34 const size_t len = size * nmemb;
35 if (cur + len <= end) {
36 memcpy(ptr, cur, len);
37 in->cur = cur + len;
38 } else {
39 in->cur = NULL;
40 return 0;
41 }
42 return nmemb;
43 }
44
45 static size_t stream_write(const void *ptr, size_t size, size_t nmemb,
46 struct stream *out) {
47 char *cur = (char *)out->cur;
48 const char *end = (const char *)out->end;
49 const size_t len = size * nmemb;
50 if (cur + len <= end) {
51 memcpy(cur, ptr, len);
52 out->cur = cur + len;
53 } else {
54 out->cur = NULL;
55 return 0;
56 }
57 return nmemb;
58 }
59
60 struct app {
61 struct stream *in;
62 struct stream *out;
63 };
64
65 static struct app *create_app(struct app *self, struct stream *in,
66 struct stream *out) {
67 self->in = in;
68 self->out = out;
69
70 return self;
71 }
72
73 static void setup_buffer(struct app *self, void *output, const void *input,
74 size_t len) {
75 self->in->cur = (char *)input;
76 self->in->start = input;
77 self->in->end = (char *)input + len;
78 self->in->read = stream_read;
79 self->out->cur = output;
80 self->out->start = output;
81 self->out->end = (char *)output + len;
82 self->out->write = stream_write;
83 }
84
85 #define ERROR_RETURN(X, Y) \
86 if ((X) != (Y)) return false
87
88 static size_t fread_mirror(void *ptr, size_t size, size_t nmemb,
89 struct app *self) {
90 struct stream *instream = self->in;
91 struct stream *outstream = self->out;
92
93 size_t s = instream->read(ptr, size, nmemb, instream);
94 if (s == nmemb) {
95 s = outstream->write(ptr, size, nmemb, outstream);
96 if (s == nmemb) return nmemb;
97 }
98 return 0;
99 }
100
101 // uncomment the following to validate the parser:
102 //#define NOOP
103
104 static void clean_buffer(char *str, size_t buf_len) {
105 #ifndef NOOP
106 size_t i;
107 const size_t len = strnlen(str, buf_len);
108 for (i = 0; i < len; ++i) {
109 str[i] = ' ';
110 }
111 #endif
112 }
113
114 struct buffer19 {
115 char sig1[0x3];
116 unsigned char len2;
117 char sig2;
118 unsigned char len3;
119 char sig3;
120 char iso[0x9];
121 char sig4;
122 unsigned char len4;
123 char sig5;
124 };
125
126 static size_t fread_mirror_clean_iso(void *ptr, size_t size, size_t nmemb,
127 struct app *self) {
128 struct stream *instream = self->in;
129 struct stream *outstream = self->out;
130
131 size_t s = instream->read(ptr, size, nmemb, instream);
132 if (s == nmemb) {
133 static const char magic[] = {0xdf, 0xff, 0x79};
134 if (nmemb >= sizeof magic && memcmp(ptr, magic, sizeof(magic)) == 0) {
135 // iso
136 struct buffer19 b19;
137 if (nmemb < sizeof b19) return 0;
138 memcpy(&b19, ptr, sizeof b19);
139 if (b19.sig2 != 0x1 || b19.sig3 != 0x0 || b19.sig4 != 0x2 ||
140 b19.sig5 != 0x0)
141 return 0;
142 const size_t diff = nmemb - sizeof b19;
143 if (b19.len2 != nmemb - 4 || b19.len3 != 9 || b19.len4 != diff) return 0;
144 if (strncmp(b19.iso, "ISO8859-1", 9) != 0) return 0;
145 char *str = (char *)ptr + sizeof b19;
146 clean_buffer(str, b19.len4);
147 } else {
148 // raw string buffer
149 clean_buffer(ptr, nmemb);
150 }
151 s = outstream->write(ptr, size, nmemb, outstream);
152 if (s == nmemb) return nmemb;
153 }
154 return 0;
155 }
156
157 typedef char str16[16 + 1];
158 typedef char str64[64 + 1];
159
160 struct buffer436 {
161 uint32_t zero;
162 char iver[0x45];
163 char buf3[0x100]; // phi
164 str64 buf4;
165 str16 buf5;
166 char modality[0x15];
167 uint32_t val;
168 };
169 struct buffer516 {
170 str64 zero;
171 char buf2[0x15];
172 char buf3[0x100]; // phi
173 str16 buf4;
174 str64 buf5;
175 str64 buf6;
176 uint32_t bools[6];
177 };
178 struct buffer325 {
179 str64 array[5];
180 };
181
182 static size_t fread_mirror_clean_struct(void *ptr, size_t size, size_t nmemb,
183 struct app *self) {
184 struct stream *instream = self->in;
185 struct stream *outstream = self->out;
186
187 size_t s = instream->read(ptr, size, nmemb, instream);
188 if (s == nmemb) {
189 if (s == 436) {
190 struct buffer436 b436;
191 memcpy(&b436, ptr, nmemb);
192 clean_buffer(b436.buf3, sizeof b436.buf3);
193 memcpy(ptr, &b436, nmemb);
194 } else if (s == 516) {
195 struct buffer516 b516;
196 memcpy(&b516, ptr, nmemb);
197 clean_buffer(b516.buf3, sizeof b516.buf3);
198 memcpy(ptr, &b516, nmemb);
199 } else if (s == 325) {
200 struct buffer325 b325;
201 memcpy(&b325, ptr, nmemb);
202 int a;
203 for (a = 0; a < 5; ++a) {
204 clean_buffer(b325.array[a], sizeof b325.array[a]);
205 }
206 memcpy(ptr, &b325, nmemb);
207 } else {
208 assert(0); // programmer error
209 return 0;
210 }
211 s = outstream->write(ptr, size, nmemb, outstream);
212 if (s == nmemb) return nmemb;
213 }
214 return 0;
215 }
216
217 static size_t fread_mirror_clean_shift_jis(void *ptr, size_t size, size_t nmemb,
218 struct app *self) {
219 struct stream *instream = self->in;
220 struct stream *outstream = self->out;
221
222 size_t s = instream->read(ptr, size, nmemb, instream);
223 if (s == nmemb) {
224 clean_buffer(ptr, nmemb);
225 s = outstream->write(ptr, size, nmemb, outstream);
226 if (s == nmemb) return nmemb;
227 }
228 return 0;
229 }
230
231 static bool read_magic(struct app *self) {
232 (void)self;
233 return true;
234 }
235
236 static bool write_trailer(struct app *self) {
237 assert(self->in->cur <= self->in->end);
238 if (self->in->cur == self->in->end) return true;
239 // else it is missing one byte (nul byte):
240 char padding;
241 size_t s = fread_mirror(&padding, sizeof padding, 1, self);
242 ERROR_RETURN(s, 1);
243 ERROR_RETURN(padding, 0);
244
245 return true;
246 }
247
248 struct mec_mr3_info {
249 uint32_t key;
250 uint32_t type;
251 };
252
253 struct mec_mr3_item_data {
254 uint32_t len;
255 char *buffer;
256 };
257
258 static const uint32_t magic2[] = {0, 0, 12, 0, 0};
259
260 static bool read_info(struct app *self, struct mec_mr3_info *info) {
261 // read key and type at once:
262 size_t s = fread_mirror(info, sizeof *info, 1, self);
263 ERROR_RETURN(s, 1);
264 ERROR_RETURN(info->type & 0x00ff, 0x0);
265
266 return true;
267 }
268
269 static const uint32_t with_phi[] = {
270 0x000055f2, /* !!!charset!!! */
271 0x000055f3, /* */
272 0x000055fc, /* */
273 0x0000560c, /* !!!charset!!! */
274 0x0000560d, /* */
275 0x00005612, /* */
276 0x00006d77, /* */
277 0x00006d80, /* buffer */
278 0x00006d83, /* buffer */
279 0x00006d8a, /* */
280 };
281
282 static bool key_is_phi(const uint32_t val) {
283 unsigned int i;
284 for (i = 0; i < sizeof(with_phi) / sizeof(*with_phi); i++) {
285 if (with_phi[i] == val) return true;
286 }
287 return false;
288 }
289
290 enum Type {
291 ISO_8859_1_STRING =
292 0x00000300, // ASCII string / or struct with 'ISO-8859-1' marker
293 STRUCT_436 =
294 0x001f4300, // Fixed struct 436 bytes (struct with ASCII strings)
295 STRUCT_516 =
296 0x001f4400, // Fixed struct 516 bytes (struct with ASCII strings)
297 STRUCT_325 =
298 0x001f4600, // Fixed struct 325 bytes (struct with ASCII strings)
299 SHIFT_JIS_STRING = 0xff002c00, // SHIFT-JIS string
300 };
301
302 enum SignatureType { SIG_UNK = 0, SIG_SIMPLE = 1, SIG_COMPLEX = 2 };
303 static enum SignatureType compute_signature(const uint32_t sig[5]) {
304 // fast path: {0, 0, 12, 0, 0}
305 const int b = memcmp(sig, magic2, sizeof(magic2));
306 if (b == 0) return SIG_SIMPLE;
307 // check the complex one:
308 // [0,67937544,12,0,235348672] #20
309 // [0,226469240,12,0,235348704] #20
310 const bool sig_complex = sig[0] == 0 && sig[2] == 12 && sig[3] == 0;
311 if (sig_complex) return SIG_COMPLEX;
312 return SIG_UNK;
313 }
314
315 static bool read_data(struct app *self, const struct mec_mr3_info *info,
316 struct mec_mr3_item_data *data) {
317 size_t s = fread_mirror(&data->len, sizeof data->len, 1, self);
318 ERROR_RETURN(s, 1);
319 // in the wild we have: data->len <= 9509
320 uint32_t separator[5];
321 s = fread_mirror(separator, sizeof *separator,
322 sizeof separator / sizeof *separator, self);
323 ERROR_RETURN(s, sizeof separator / sizeof *separator);
324 const enum SignatureType sig_ok = compute_signature(separator);
325 ERROR_RETURN(sig_ok != SIG_UNK, true);
326 data->buffer = (char *)realloc(data->buffer, data->len);
327 if (data->len != 0 && data->buffer == NULL) {
328 return false;
329 }
330
331 if (key_is_phi(info->key)) {
332 // found a key indicating potential phi
333 switch (info->type) {
334 // clean string depending on its type:
335 case ISO_8859_1_STRING:
336 s = fread_mirror_clean_iso(data->buffer, 1, data->len, self);
337 break;
338 case STRUCT_436:
339 case STRUCT_516:
340 case STRUCT_325:
341 s = fread_mirror_clean_struct(data->buffer, 1, data->len, self);
342 break;
343 case SHIFT_JIS_STRING:
344 s = fread_mirror_clean_shift_jis(data->buffer, 1, data->len, self);
345 break;
346 default:
347 assert(0); // programmer error
348 return false;
349 }
350 } else {
351 s = fread_mirror(data->buffer, 1, data->len, self);
352 }
353 ERROR_RETURN(s, data->len);
354
355 return true;
356 }
357
358 static bool read_group(struct app *self, uint32_t nitems,
359 struct mec_mr3_info *info,
360 struct mec_mr3_item_data *data) {
361 bool good = true;
362 uint32_t i;
363 for (i = 0; i < nitems && good; ++i) {
364 good = good && read_info(self, info);
365 // lazy evaluation:
366 good = good && read_data(self, info, data);
367 }
368 return good;
369 }
370
371 #undef ERROR_RETURN
372
373 // If the number of element read is below the magic value, this indicate the
374 // last groups of elements:
375 #define MAGIC_NUM_ELEMENTS 5
376
377 static bool mec_mr3_scrub(void *output, const void *input, size_t len) {
378 if (!input || !output) return false;
379 struct stream sin;
380 struct stream sout;
381 struct app a;
382 struct app *self = create_app(&a, &sin, &sout);
383 setup_buffer(self, output, input, len);
384 if (!read_magic(self)) return false;
385
386 bool good = true;
387 struct mec_mr3_info info;
388 struct mec_mr3_item_data data;
389 data.len = 0;
390 data.buffer = NULL;
391
392 uint32_t remain = 1;
393 size_t s;
394 bool last_groups = false;
395 // read until last set of groups found:
396 while (!last_groups && good) {
397 uint32_t nitems;
398 s = fread_mirror(&nitems, sizeof nitems, 1, self);
399 if (s != 1 || nitems == 0) {
400 good = false;
401 }
402 if (good && nitems <= MAGIC_NUM_ELEMENTS) {
403 // special case to handle last groups
404 remain = nitems;
405 last_groups = true;
406 s = fread_mirror(&nitems, sizeof nitems, 1, self);
407 if (s != 1 || nitems == 0) {
408 good = false;
409 }
410 }
411 // lazy evaluation
412 good = good && read_group(self, nitems, &info, &data);
413 }
414 // read remaining groups:
415 while (good && --remain != 0) {
416 uint32_t nitems;
417 s = fread_mirror(&nitems, sizeof nitems, 1, self);
418 if (s != 1 || nitems <= MAGIC_NUM_ELEMENTS) {
419 good = false;
420 }
421 good = good && read_group(self, nitems, &info, &data);
422 }
423 // release memory:
424 free(data.buffer);
425 if (!good) return false;
426
427 // write trailer:
428 if (!write_trailer(self)) {
429 return false;
430 }
431
432 // make sure the whole input was processed:
433 assert(self->in->cur <= self->in->end); // programmer error
434 if (self->in->cur < self->in->end) {
435 return false;
436 }
437 assert(self->out->cur == self->out->end); // programmer error
438 return true;
439 }
440
441 void *mec_mr3_memcpy(void *dest, const void *src, size_t n) {
442 const bool b = mec_mr3_scrub(dest, src, n);
443 return b ? dest : NULL;
444 }
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13 #ifndef MEC_MR3_H
14 #define MEC_MR3_H
15
16 #include <stddef.h>
17
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21
22 void *mec_mr3_memcpy(void *dest, const void *src, size_t n);
23
24 #ifdef __cplusplus
25 } /* end extern "C" */
26 #endif
27
28 #endif // MEC_MR3_H
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13 #include "mec_mr3_dict.h"
14
15 #include <assert.h>
16 #include <stddef.h>
17
18 struct mec_mr3_dict {
19 uint8_t group;
20 uint32_t key;
21 uint32_t type;
22 const char *name;
23 };
24
25 static const struct mec_mr3_dict dict[] = {
26 {0x01, 0x00000001, 0xfff00200, ""}, //
27 {0x01, 0x0000006d, 0xff002400, ""}, //
28 {0x01, 0x00001004, 0xff002400, ""}, //
29 {0x01, 0x00001005, 0xff002400, ""}, //
30 {0x01, 0x000013ec, 0xff002900, "Imaging Frequency"}, //
31 {0x01, 0x00004e23, 0xff002c00, "Software Version"}, //
32 {0x01, 0x000055f0, 0x0007d000, ""}, //
33 {0x01, 0x000055f1, 0x00000300, "Patient ID"}, //
34 {0x01, 0x000055f2, 0x00000300, "Patient Name Ideographic"}, //
35 {0x01, 0x000055f3, 0x00000300, "Patient Name Alphabetic"}, //
36 {0x01, 0x000055f6, 0x00000200, ""}, //
37 {0x01, 0x000055f7, 0xff000400, ""}, //
38 {0x01, 0x000055f8, 0xff000800, "Patient Size (cm)"}, //
39 {0x01, 0x000055f9, 0xff000800, "Patient Weight"}, //
40 {0x01, 0x000055fa, 0x00000300, "Patient Comments"}, //
41 {0x01, 0x000055fb, 0x00000300, "Name of Physician Reading Study"}, //
42 {0x01, 0x000055fc, 0x00000300, "Referring Physician Name"}, //
43 {0x01, 0x000055fd, 0x00000300, "Department Name (surgery)"}, //
44 {0x01, 0x000055fe, 0x00000300, "Operator Name"}, //
45 {0x01, 0x000055ff, 0x00000100, ""}, //
46 {0x01, 0x00005601, 0x00000300, "Study Description"}, //
47 {0x01, 0x00005602, 0x00000300, ""}, //
48 {0x01, 0x00005603, 0x00000100, ""}, //
49 {0x01, 0x00005604, 0xff000400, ""}, //
50 {0x01, 0x00005606, 0x00000300, "Institution Name"}, //
51 {0x01, 0x0000560a, 0xff002c00, "Patient Age"}, //
52 {0x01, 0x0000560b, 0xff002c00, "Patient ID"}, //
53 {0x01, 0x0000560c, 0xff002c00, "Patient Name Ideographic"}, //
54 {0x01, 0x0000560d, 0xff002c00, "Patient Name Alphabetic"}, //
55 {0x01, 0x00005610, 0xff002c00, "Patient Comments"}, //
56 {0x01, 0x00005611, 0xff002c00, "Name of Physician Reading Study"}, //
57 {0x01, 0x00005612, 0xff002c00, "Referring Physician Name"}, //
58 {0x01, 0x00005613, 0xff002c00, "Department Name (surgery)"}, //
59 {0x01, 0x00005614, 0xff002c00, "Operator Name"}, //
60 {0x01, 0x00005616, 0xff002c00, "Study Description"}, //
61 {0x01, 0x00005617, 0xff002c00, ""}, //
62 {0x01, 0x00005618, 0xff002c00, "Institution Name"}, //
63 {0x01, 0x00005619, 0xff002c00, ""}, //
64 {0x01, 0x0000561a, 0x00000e00, "Study DateTime"}, //
65 {0x01, 0x0000561b, 0x00000e00, "Study Date"}, //
66 {0x01, 0x000059d8, 0xff002400, ""}, //
67 {0x01, 0x00006d61, 0xff002c00, "Requested Procedure ID"}, //
68 {0x01, 0x00006d62, 0xff002c00, ""}, //
69 {0x01, 0x00006d63, 0xff002c00,
70 "Procedure Code Sequence: Coding Scheme Designator"}, //
71 {0x01, 0x00006d64, 0xff002c00, "Procedure Code Sequence: Code Meaning"}, //
72 {0x01, 0x00006d65, 0xff002c00, "Study Instance UID"}, //
73 {0x01, 0x00006d66, 0xff002c00, "Stentor Remote AETitle Element"}, //
74 {0x01, 0x00006d67, 0xff002c00, "Scheduled Procedure Step Description"}, //
75 {0x01, 0x00006d68, 0xff002c00, "Scheduled Procedure Step ID"}, //
76 {0x01, 0x00006d69, 0xff002c00, "Requested Procedure ID"}, //
77 {0x01, 0x00006d71, 0xff002c00, ""}, //
78 {0x01, 0x00006d72, 0xff002c00, "Procedure Code Sequence: Code Value"}, //
79 {0x01, 0x00006d73, 0xff002c00,
80 "Procedure Code Sequence: Coding Scheme Designator"}, //
81 {0x01, 0x00006d74, 0xff002c00, "Procedure Code Sequence: Code Meaning"}, //
82 {0x01, 0x00006d75, 0xff002c00, ""}, //
83 {0x01, 0x00006d76, 0xff002c00, "Scheduled Procedure Step Description"}, //
84 {0x01, 0x00006d77, 0xff002c00, "Referring Physician Name"}, //
85 {0x01, 0x00006d78, 0xff002c00, "DetachedStudyManagement UID"}, //
86 {0x01, 0x00006d79, 0xff002c00, "Referenced Study Instance UID"}, //
87 {0x01, 0x00006d80, 0x001f4400, ""}, //
88 {0x01, 0x00006d81, 0x001f4000, ""}, //
89 {0x01, 0x00006d82, 0x001f4100, ""}, //
90 {0x01, 0x00006d83, 0x001f4300, ""}, //
91 {0x01, 0x00006d84, 0x001f4000, ""}, //
92 {0x01, 0x00006d87, 0xff002400, ""}, //
93 {0x01, 0x00006d8a, 0x001f4600, ""}, //
94 {0x01, 0x00006d8b, 0xff002400, ""}, //
95 {0x01, 0x0000ac09, 0xff002400, ""}, //
96 {0x02, 0x00000002, 0xfff00200, ""}, //
97 {0x02, 0x00000007, 0xfff00200, ""}, //
98 {0x02, 0x0000000b, 0xfff00200, ""}, //
99 {0x02, 0x0000006e, 0xff002400, ""}, //
100 {0x02, 0x00000070, 0xff002400, ""}, //
101 {0x02, 0x00001006, 0xff002800, ""}, //
102 {0x02, 0x00001007, 0xff002800, ""}, //
103 {0x02, 0x000017d4, 0xff002a00, ""}, //
104 {0x02, 0x000017d5, 0xff002a00, ""}, //
105 {0x02, 0x000017d6, 0xff002a00, ""}, //
106 {0x02, 0x000017d7, 0xff002a00, ""}, //
107 {0x02, 0x000017d8, 0xff002a00, ""}, //
108 {0x02, 0x000017d9, 0xff002a00, ""}, //
109 {0x02, 0x000017da, 0xff002a00, ""}, //
110 {0x02, 0x000017db, 0xff002a00, ""}, //
111 {0x02, 0x000017dc, 0xff002a00, ""}, //
112 {0x02, 0x000017dd, 0xff002a00, ""}, //
113 {0x02, 0x000017de, 0xff002400, ""}, //
114 {0x02, 0x000017df, 0x00177000, ""}, //
115 {0x02, 0x000017e0, 0x00177000, ""}, //
116 {0x02, 0x000017e1, 0x00177000, ""}, //
117 {0x02, 0x000017e2, 0xff002a00, ""}, //
118 {0x02, 0x000017e3, 0xff002a00, ""}, //
119 {0x02, 0x000017e4, 0x00177200, ""}, //
120 {0x02, 0x000017e5, 0xff002400, ""}, //
121 {0x02, 0x000017e6, 0xff002400, ""}, //
122 {0x02, 0x000017e7, 0xff002400, ""}, //
123 {0x02, 0x000017e8, 0xff002400, ""}, //
124 {0x02, 0x000017e9, 0xff002400, ""}, //
125 {0x02, 0x000017ea, 0xff002400, ""}, //
126 {0x02, 0x000017eb, 0xff002400, ""}, //
127 {0x02, 0x000017ec, 0xff002400, ""}, //
128 {0x02, 0x000017ed, 0xff002400, ""}, //
129 {0x02, 0x000017ee, 0xff002400, ""}, //
130 {0x02, 0x000017f0, 0xff002400, ""}, //
131 {0x02, 0x000017f1, 0xff002a00, ""}, //
132 {0x02, 0x000017f2, 0xff002300, ""}, //
133 {0x02, 0x000017f4, 0xff002400, ""}, //
134 {0x02, 0x000017f5, 0xff002400, ""}, //
135 {0x02, 0x000017f6, 0xff002400, ""}, //
136 {0x02, 0x000017f7, 0xff003200, ""}, //
137 {0x02, 0x000017f8, 0xff002800, ""}, //
138 {0x02, 0x000017f9, 0xff002800, ""}, //
139 {0x02, 0x000017fa, 0xff003200, ""}, //
140 {0x02, 0x000017fc, 0xff003200, ""}, //
141 {0x02, 0x000017fd, 0xff002800, ""}, //
142 {0x02, 0x000017fe, 0xff002800, ""}, //
143 {0x02, 0x000017ff, 0xff002800, ""}, //
144 {0x02, 0x00001800, 0xff002800, ""}, //
145 {0x02, 0x00001816, 0xff002400, ""}, //
146 {0x02, 0x00001817, 0xff002400, ""}, //
147 {0x02, 0x00001818, 0xff002400, ""}, //
148 {0x02, 0x00001838, 0xff002400, ""}, //
149 {0x02, 0x00001839, 0xff002400, ""}, //
150 {0x02, 0x0000183a, 0xff002800, ""}, //
151 {0x02, 0x0000183b, 0xff002400, ""}, //
152 {0x02, 0x0000183c, 0xff002800, ""}, //
153 {0x02, 0x0000183d, 0xff002800, ""}, //
154 {0x02, 0x0000183e, 0xff002800, ""}, //
155 {0x02, 0x0000183f, 0xff002800, ""}, //
156 {0x02, 0x00001840, 0xff002800, ""}, //
157 {0x02, 0x00001841, 0xff002800, ""}, //
158 {0x02, 0x00001842, 0xff002800, ""}, //
159 {0x02, 0x00001843, 0xff002a00, ""}, //
160 {0x02, 0x00001844, 0xff002400, ""}, //
161 {0x02, 0x00001845, 0xff002400, ""}, //
162 {0x02, 0x00001848, 0xff002a00, ""}, //
163 {0x02, 0x00001849, 0xff002a00, ""}, //
164 {0x02, 0x0000184a, 0xff002800, ""}, //
165 {0x02, 0x0000185f, 0xff002400, ""}, //
166 {0x02, 0x00001860, 0xff002400, ""}, //
167 {0x02, 0x00001861, 0xff003200, ""}, //
168 {0x02, 0x00001862, 0xff002400, ""}, //
169 {0x02, 0x00001863, 0xff002400, ""}, //
170 {0x02, 0x00001864, 0xff002400, ""}, //
171 {0x02, 0x00001865, 0xff002400, ""}, //
172 {0x02, 0x00001866, 0xff002400, ""}, //
173 {0x02, 0x00001867, 0xff002400, ""}, //
174 {0x02, 0x00005600, 0x00000300, ""}, //
175 {0x02, 0x00005615, 0xff002c00, ""}, //
176 {0x02, 0x00009c41, 0xff002c00, "Manufacturer Model Name"}, //
177 {0x02, 0x0000a7f8, 0xff002c00, "Sequence Name"}, //
178 {0x02, 0x0000a7f9, 0xff002c00, "Sequence Name Extended"}, //
179 {0x02, 0x0000a7fb, 0xff002400, ""}, //
180 {0x02, 0x0000a7fd, 0xff003200, ""}, //
181 {0x02, 0x0000a7fe, 0xff002400, ""}, //
182 {0x02, 0x0000a7ff, 0xff002800, "Echo Time (/1000)"}, //
183 {0x02, 0x0000a800, 0xff002400, ""}, //
184 {0x02, 0x0000a801, 0xff002800, "Spacing Between Slices (/1000)"}, //
185 {0x02, 0x0000a802, 0xff002800, ""}, //
186 {0x02, 0x0000a803, 0xff002400, ""}, //
187 {0x02, 0x0000a804, 0xff002400, ""}, //
188 {0x02, 0x0000a805, 0xff003200, ""}, //
189 {0x02, 0x0000a806, 0x00000500, "FOV"}, //
190 {0x02, 0x0000a807, 0x00000500, "Image Matrix"}, //
191 {0x02, 0x0000a808, 0xff002400, ""}, //
192 {0x02, 0x0000a809, 0xff003200, ""}, //
193 {0x02, 0x0000a80a, 0x000bb800, ""}, //
194 {0x02, 0x0000a80b, 0x000bb900, ""}, //
195 {0x02, 0x0000a80c, 0xff002a00, ""}, //
196 {0x02, 0x0000a80d, 0xff002800, "Repetition Time (/1000)"}, //
197 {0x02, 0x0000a80e, 0xff002800, ""}, //
198 {0x02, 0x0000a80f, 0xff002400, ""}, //
199 {0x02, 0x0000a810, 0xff002400, ""}, //
200 {0x02, 0x0000a813, 0xff002400, ""}, //
201 {0x02, 0x0000a814, 0xff002800, ""}, //
202 {0x02, 0x0000a815, 0xff002400, ""}, //
203 {0x02, 0x0000a816, 0xff002400, ""}, //
204 {0x02, 0x0000a817, 0xff002400, ""}, //
205 {0x02, 0x0000a819, 0xff002400, ""}, //
206 {0x02, 0x0000a81b, 0xff002400, ""}, //
207 {0x02, 0x0000a81c, 0xff003200, ""}, //
208 {0x02, 0x0000a81d, 0xff002a00, ""}, //
209 {0x02, 0x0000a822, 0x00000500, ""}, //
210 {0x02, 0x0000a823, 0xff002c00, "MR Acquition Type"}, //
211 {0x02, 0x0000a824, 0xff002400, ""}, //
212 {0x02, 0x0000a825, 0xff002400, ""}, //
213 {0x02, 0x0000a826, 0xff003200, ""}, //
214 {0x02, 0x0000a827, 0xff002400, ""}, //
215 {0x02, 0x0000a828, 0xff002400, ""}, //
216 {0x02, 0x0000a82c, 0xff002400, ""}, //
217 {0x02, 0x0000a82d, 0x000bbb00, ""}, //
218 {0x02, 0x0000a82e, 0xff002400, ""}, //
219 {0x02, 0x0000a82f, 0xff002a00, ""}, //
220 {0x02, 0x0000a830, 0xff002800, ""}, //
221 {0x02, 0x0000a832, 0xff002a00, ""}, //
222 {0x02, 0x0000a834, 0xff002800, ""}, //
223 {0x02, 0x0000a835, 0xff003200, ""}, //
224 {0x02, 0x0000a836, 0xff002400, ""}, //
225 {0x02, 0x0000a837, 0xff002400, "Echo Train Length"}, //
226 {0x02, 0x0000a838, 0xff002400, ""}, //
227 {0x02, 0x0000a839, 0xff002400, ""}, //
228 {0x02, 0x0000a83a, 0xff002400, ""}, //
229 {0x02, 0x0000a83b, 0xff002400, ""}, //
230 {0x02, 0x0000a83c, 0xff002400, ""}, //
231 {0x02, 0x0000a83d, 0xff002400, ""}, //
232 {0x02, 0x0000a844, 0xff002c00, ""}, //
233 {0x02, 0x0000a846, 0xff002400, ""}, //
234 {0x02, 0x0000a847, 0xff002400, ""}, //
235 {0x02, 0x0000a848, 0xff002800, ""}, //
236 {0x02, 0x0000a849, 0xff002800, ""}, //
237 {0x02, 0x0000a84a, 0xff002a00, ""}, //
238 {0x02, 0x0000a84b, 0xff002400, ""}, //
239 {0x02, 0x0000a84c, 0xff002400, ""}, //
240 {0x02, 0x0000a84d, 0xff002400, ""}, //
241 {0x02, 0x0000a84e, 0xff002400, ""}, //
242 {0x02, 0x0000a84f, 0xff002800, ""}, //
243 {0x02, 0x0000a850, 0xff002800, ""}, //
244 {0x02, 0x0000a851, 0xff002800, ""}, //
245 {0x02, 0x0000a852, 0xff002400, ""}, //
246 {0x02, 0x0000a853, 0xff002400, ""}, //
247 {0x02, 0x0000a854, 0xff002400, ""}, //
248 {0x02, 0x0000a85d, 0xff002a00, ""}, //
249 {0x02, 0x0000a85e, 0xff003200, ""}, //
250 {0x02, 0x0000a864, 0xff002400, ""}, //
251 {0x02, 0x0000a865, 0xff002400, ""}, //
252 {0x02, 0x0000a866, 0xff002800, ""}, //
253 {0x02, 0x0000a867, 0xff002800, ""}, //
254 {0x02, 0x0000a868, 0xff002800, ""}, //
255 {0x02, 0x0000a869, 0xff002400, ""}, //
256 {0x02, 0x0000a86a, 0xff002400, ""}, //
257 {0x02, 0x0000a86b, 0xff002400, ""}, //
258 {0x02, 0x0000a86c, 0xff002400, ""}, //
259 {0x02, 0x0000a86d, 0xff002400, ""}, //
260 {0x02, 0x0000a86e, 0xff002400, ""}, //
261 {0x02, 0x0000a86f, 0xff002800, ""}, //
262 {0x02, 0x0000a870, 0xff002400, ""}, //
263 {0x02, 0x0000a8c1, 0xff002c00, "Protocol Name"}, //
264 {0x02, 0x0000a8c2, 0xff002a00, ""}, //
265 {0x02, 0x0000a8c3, 0xff003200, ""}, //
266 {0x02, 0x0000a8c4, 0xff002400, ""}, //
267 {0x02, 0x0000a8c5, 0xff002400, ""}, //
268 {0x02, 0x0000a8c6, 0xff002400, ""}, //
269 {0x02, 0x0000a8c7, 0x000bba00, ""}, //
270 {0x02, 0x0000a8c8, 0x00000400, ""}, //
271 {0x02, 0x0000a8c9, 0xff002400, ""}, //
272 {0x02, 0x0000a8ca, 0xff002400, ""}, //
273 {0x02, 0x0000a8cb, 0x00000400, ""}, //
274 {0x02, 0x0000a8cc, 0x00000400, ""}, //
275 {0x02, 0x0000a8cd, 0x00000400, ""}, //
276 {0x02, 0x0000a8ce, 0x00000400, ""}, //
277 {0x02, 0x0000a8cf, 0x00000400, ""}, //
278 {0x02, 0x0000a8d0, 0xff002400, ""}, //
279 {0x02, 0x0000a8d1, 0xff002400, ""}, //
280 {0x02, 0x0000a8d6, 0xff002400, ""}, //
281 {0x02, 0x0000a8d7, 0xff002400, ""}, //
282 {0x02, 0x0000a8d8, 0xff002a00, ""}, //
283 {0x02, 0x0000a8d9, 0xff002400, ""}, //
284 {0x02, 0x0000a8da, 0xff002c00, "Protocol Name"}, //
285 {0x02, 0x0000a8db, 0xff002400, ""}, //
286 {0x02, 0x0000a8dc, 0xff002400, ""}, //
287 {0x02, 0x0000a8dd, 0xff002800, ""}, //
288 {0x02, 0x0000a8de, 0xff002400, ""}, //
289 {0x02, 0x0000a8df, 0xff002800, ""}, //
290 {0x02, 0x0000a8e0, 0xff002400, ""}, //
291 {0x02, 0x0000a8e1, 0xff002400, ""}, //
292 {0x02, 0x0000a8e2, 0xff002800, ""}, //
293 {0x02, 0x0000a8e3, 0xff002800, ""}, //
294 {0x02, 0x0000a8e4, 0xff002800, ""}, //
295 {0x02, 0x0000a8e6, 0xff002400, ""}, //
296 {0x02, 0x0000a8e7, 0xff002400, ""}, //
297 {0x02, 0x0000a8e8, 0xff002400, ""}, //
298 {0x02, 0x0000a8e9, 0xff003200, ""}, //
299 {0x02, 0x0000a8ea, 0xff003200, ""}, //
300 {0x02, 0x0000a8eb, 0xff002400, ""}, //
301 {0x02, 0x0000a8ef, 0xff002800, ""}, //
302 {0x02, 0x0000a8f2, 0xff002400, ""}, //
303 {0x02, 0x0000a8f3, 0xff002400, ""}, //
304 {0x02, 0x0000a8f5, 0xff003200, ""}, //
305 {0x02, 0x0000a8f6, 0xff002400, ""}, //
306 {0x02, 0x0000a8f7, 0xff002400, ""}, //
307 {0x02, 0x0000a8f8, 0xff002400, ""}, //
308 {0x02, 0x0000a8fa, 0xff002400, ""}, //
309 {0x02, 0x0000a8fb, 0xff002400, ""}, //
310 {0x02, 0x0000a8fd, 0x00000600, ""}, //
311 {0x02, 0x0000a8fe, 0x00000600, ""}, //
312 {0x02, 0x0000a8ff, 0xff003200, ""}, //
313 {0x02, 0x0000a900, 0xff002400, ""}, //
314 {0x02, 0x0000a901, 0xff002400, ""}, //
315 {0x02, 0x0000a902, 0xff002400, ""}, //
316 {0x02, 0x0000a903, 0xff002400, ""}, //
317 {0x02, 0x0000a904, 0xff002400, ""}, //
318 {0x02, 0x0000a905, 0xff002800, ""}, //
319 {0x02, 0x0000a906, 0xff002400, ""}, //
320 {0x02, 0x0000a907, 0xff002400, ""}, //
321 {0x02, 0x0000a908, 0xff002400, ""}, //
322 {0x02, 0x0000a909, 0xff002400, ""}, //
323 {0x02, 0x0000a90a, 0xff002400, ""}, //
324 {0x02, 0x0000a90b, 0xff002400, ""}, //
325 {0x02, 0x0000a90c, 0xff002400, ""}, //
326 {0x02, 0x0000a90e, 0xff002a00, ""}, //
327 {0x02, 0x0000a915, 0xff002400, ""}, //
328 {0x02, 0x0000a916, 0xff002400, ""}, //
329 {0x02, 0x0000a917, 0xff002400, ""}, //
330 {0x02, 0x0000a918, 0xff003200, ""}, //
331 {0x02, 0x0000a919, 0xff003200, ""}, //
332 {0x02, 0x0000a91a, 0xff002400, ""}, //
333 {0x02, 0x0000a91b, 0xff002400, ""}, //
334 {0x02, 0x0000a91c, 0x000bbb00, ""}, //
335 {0x02, 0x0000a91d, 0xff002400, ""}, //
336 {0x02, 0x0000a920, 0xff002400, ""}, //
337 {0x02, 0x0000a921, 0xff002400, ""}, //
338 {0x02, 0x0000a922, 0xff002400, ""}, //
339 {0x02, 0x0000a923, 0xff002400, ""}, //
340 {0x02, 0x0000a924, 0xff002400, ""}, //
341 {0x02, 0x0000a925, 0xff002400, ""}, //
342 {0x02, 0x0000a926, 0xff002400, ""}, //
343 {0x02, 0x0000a927, 0xff002400, ""}, //
344 {0x02, 0x0000a928, 0xff002400, ""}, //
345 {0x02, 0x0000a929, 0xff002400, ""}, //
346 {0x02, 0x0000a92a, 0xff002400, ""}, //
347 {0x02, 0x0000a92b, 0xff002400, ""}, //
348 {0x02, 0x0000a92c, 0x000bbb00, ""}, //
349 {0x02, 0x0000a92d, 0x00000600, ""}, //
350 {0x02, 0x0000a92f, 0xff002400, ""}, //
351 {0x02, 0x0000a930, 0xff002400, ""}, //
352 {0x02, 0x0000a931, 0xff002400, ""}, //
353 {0x02, 0x0000a932, 0xff002400, ""}, //
354 {0x02, 0x0000a934, 0xff002a00, ""}, //
355 {0x02, 0x0000a935, 0xff002400, ""}, //
356 {0x02, 0x0000a936, 0xff002400, ""}, //
357 {0x02, 0x0000a937, 0xff002800, ""}, //
358 {0x02, 0x0000a938, 0x00000600, ""}, //
359 {0x02, 0x0000a93a, 0xff002400, ""}, //
360 {0x02, 0x0000a93c, 0xff002400, ""}, //
361 {0x02, 0x0000a93d, 0xff002400, ""}, //
362 {0x02, 0x0000a93e, 0xff002800, ""}, //
363 {0x02, 0x0000a940, 0xff002800, ""}, //
364 {0x02, 0x0000a941, 0xff002400, ""}, //
365 {0x02, 0x0000a942, 0xff002400, ""}, //
366 {0x02, 0x0000a943, 0xff002400, ""}, //
367 {0x02, 0x0000a944, 0xff002400, ""}, //
368 {0x02, 0x0000a945, 0xff002400, ""}, //
369 {0x02, 0x0000a946, 0xff002400, ""}, //
370 {0x02, 0x0000a947, 0xff002800, ""}, //
371 {0x02, 0x0000a948, 0xff002400, ""}, //
372 {0x02, 0x0000a949, 0xff002400, ""}, //
373 {0x02, 0x0000a94a, 0xff002400, ""}, //
374 {0x02, 0x0000a94b, 0xff002800, ""}, //
375 {0x02, 0x0000a94c, 0xff002400, ""}, //
376 {0x02, 0x0000a94d, 0xff002400, ""}, //
377 {0x02, 0x0000a94e, 0xff002800, ""}, //
378 {0x02, 0x0000a94f, 0xff002400, ""}, //
379 {0x02, 0x0000a95b, 0xff002800, ""}, //
380 {0x02, 0x0000a95c, 0xff002400, ""}, //
381 {0x02, 0x0000a95d, 0xff002400, ""}, //
382 {0x02, 0x0000a95e, 0xff002400, ""}, //
383 {0x02, 0x0000a95f, 0xff002400, ""}, //
384 {0x02, 0x0000a960, 0xff002800, ""}, //
385 {0x02, 0x0000a961, 0xff002400, ""}, //
386 {0x02, 0x0000a962, 0xff002400, ""}, //
387 {0x02, 0x0000a964, 0xff002400, ""}, //
388 {0x02, 0x0000a965, 0x000bc100, ""}, //
389 {0x02, 0x0000a966, 0x000bc200, ""}, //
390 {0x02, 0x0000a96a, 0x000bc300, ""}, //
391 {0x02, 0x0000a96b, 0xff002400, ""}, //
392 {0x02, 0x0000a96c, 0xff002400, ""}, //
393 {0x02, 0x0000a96d, 0xff002a00, ""}, //
394 {0x02, 0x0000a96e, 0x000bc200, ""}, //
395 {0x02, 0x0000a96f, 0xff002400, ""}, //
396 {0x02, 0x0000a970, 0xff002400, ""}, //
397 {0x02, 0x0000a971, 0xff002400, ""}, //
398 {0x02, 0x0000a972, 0xff002400, ""}, //
399 {0x02, 0x0000a973, 0xff002800, ""}, //
400 {0x02, 0x0000a974, 0xff002c00, "Body Part Examined"}, //
401 {0x02, 0x0000a975, 0x00000600, ""}, //
402 {0x02, 0x0000a976, 0xff002400, ""}, //
403 {0x02, 0x0000a977, 0xff002400, ""}, //
404 {0x02, 0x0000a978, 0xff002400, ""}, //
405 {0x02, 0x0000a979, 0xff002400, ""}, //
406 {0x02, 0x0000a980, 0xff002800, ""}, //
407 {0x02, 0x0000a987, 0xff002400, ""}, //
408 {0x02, 0x0000a988, 0xff002400, ""}, //
409 {0x02, 0x0000a989, 0xff002400, ""}, //
410 {0x02, 0x0000a98a, 0x00000f00, ""}, //
411 {0x02, 0x0000a98b, 0xff002400, ""}, //
412 {0x02, 0x0000a98c, 0xff002400, ""}, //
413 {0x02, 0x0000a98d, 0x000bc100, ""}, //
414 {0x02, 0x0000a98e, 0x000bc200, ""}, //
415 {0x02, 0x0000a98f, 0xff002400, ""}, //
416 {0x02, 0x0000a990, 0xff002400, ""}, //
417 {0x02, 0x0000a991, 0xff002400, ""}, //
418 {0x02, 0x0000a992, 0xff002400, ""}, //
419 {0x02, 0x0000a993, 0xff002400, ""}, //
420 {0x02, 0x0000abe0, 0xff002c00, ""}, //
421 {0x02, 0x0000abe1, 0xff002c00, ""}, //
422 {0x02, 0x0000abe2, 0xff002c00, ""}, //
423 {0x02, 0x0000abe3, 0xff002400, ""}, //
424 {0x02, 0x0000abe4, 0xff002800, ""}, //
425 {0x02, 0x0000abe5, 0xff002c00, ""}, //
426 {0x02, 0x0000abe6, 0xff002c00, ""}, //
427 {0x02, 0x0000abe8, 0xff002c00, ""}, //
428 {0x02, 0x0000abe9, 0xff002c00, ""}, //
429 {0x02, 0x0000abeb, 0xff002800, "Repetition Time (/1000)"}, //
430 {0x02, 0x0000abec, 0xff002800, ""}, //
431 {0x02, 0x0000abed, 0xff002800, ""}, //
432 {0x02, 0x0000abee, 0xff002400, ""}, //
433 {0x02, 0x0000abf2, 0xff002400, ""}, //
434 {0x02, 0x0000abf3, 0xff002400, ""}, //
435 {0x02, 0x0000abf5, 0xff002a00, ""}, //
436 {0x02, 0x0000abf6, 0xff002400, ""}, //
437 {0x02, 0x0000abf7, 0xff002400, ""}, //
438 {0x02, 0x0000abf8, 0xff002400, ""}, //
439 {0x02, 0x0000abf9, 0xff002400, ""}, //
440 {0x02, 0x0000abfa, 0xff002400, ""}, //
441 {0x02, 0x0000abfb, 0xff002400, ""}, //
442 {0x02, 0x0000abfc, 0xff002400, ""}, //
443 {0x02, 0x0000abfd, 0xff002400, ""}, //
444 {0x02, 0x0000abfe, 0xff002400, ""}, //
445 {0x02, 0x0000ac00, 0xff002800, ""}, //
446 {0x02, 0x0000ac01, 0xff002800, ""}, //
447 {0x02, 0x0000ac09, 0xff002400, ""}, //
448 {0x02, 0x0000ac0a, 0xff002a00, ""}, //
449 {0x02, 0x0000ac0b, 0x00000500, "Image Matrix"}, //
450 {0x02, 0x0000ac0c, 0x00000400, ""}, //
451 {0x02, 0x0000ac0d, 0xff002a00, ""}, //
452 {0x02, 0x0000ac0e, 0xff002800, "Repetition Time (/1000)"}, //
453 {0x02, 0x0000ac0f, 0xff002400, ""}, //
454 {0x02, 0x0000ac10, 0xff002400, ""}, //
455 {0x02, 0x0000ac11, 0xff002400, ""}, //
456 {0x02, 0x0000ac12, 0xff002400, ""}, //
457 {0x02, 0x0000ac13, 0xff002400, ""}, //
458 {0x02, 0x0000ac14, 0xff002400, ""}, //
459 {0x02, 0x0000ac15, 0xff002400, ""}, //
460 {0x02, 0x0000ac16, 0xff002400, ""}, //
461 {0x02, 0x0000ac17, 0xff002400, ""}, //
462 {0x02, 0x0000ac18, 0xff002400, ""}, //
463 {0x02, 0x0000ac19, 0x00000400, ""}, //
464 {0x02, 0x0000ac1a, 0xff002400, ""}, //
465 {0x02, 0x0000ac1b, 0xff002400, ""}, //
466 {0x02, 0x0000ac1c, 0xff002400, ""}, //
467 {0x02, 0x0000ac1d, 0xff002400, ""}, //
468 {0x02, 0x0000ac1e, 0xff002400, ""}, //
469 {0x02, 0x0000ac1f, 0xff002400, ""}, //
470 {0x02, 0x0000ac20, 0xff003100, ""}, //
471 {0x02, 0x0000ac21, 0xff002800, ""}, //
472 {0x02, 0x0000ac22, 0xff002400, ""}, //
473 {0x02, 0x0000ac23, 0xff002800, ""}, //
474 {0x02, 0x0000ac24, 0xff002800, ""}, //
475 {0x02, 0x0000ac25, 0xff002400, ""}, //
476 {0x02, 0x0000ac26, 0xff003100, ""}, //
477 {0x02, 0x0000ac27, 0xff002400, ""}, //
478 {0x02, 0x0000ac28, 0xff003100, ""}, //
479 {0x02, 0x0000ac29, 0xff002800, ""}, //
480 {0x02, 0x0000ac2a, 0xff002400, ""}, //
481 {0x02, 0x0000ac2b, 0xff002400, ""}, //
482 {0x02, 0x0000ac2d, 0xff002800, ""}, //
483 {0x02, 0x0000ac2e, 0xff002400, ""}, //
484 {0x02, 0x0000ac2f, 0x00000600, ""}, //
485 {0x02, 0x0000ac30, 0xff002400, ""}, //
486 {0x02, 0x0000ac31, 0xff002400, ""}, //
487 {0x02, 0x0000ac32, 0xff002400, ""}, //
488 {0x02, 0x0000ac33, 0xff002400, ""}, //
489 {0x02, 0x0000ac34, 0xff002400, ""}, //
490 {0x02, 0x0000ac35, 0xff002800, ""}, //
491 {0x02, 0x0000ac36, 0xff002400, ""}, //
492 {0x02, 0x0000ac37, 0xff002400, ""}, //
493 {0x02, 0x0000ac38, 0xff002800, ""}, //
494 {0x02, 0x0000ac39, 0xff002400, ""}, //
495 {0x02, 0x0000ac3a, 0xff002400, ""}, //
496 {0x02, 0x0000ac3c, 0xff002800, ""}, //
497 {0x02, 0x0000ac3d, 0xff002400, ""}, //
498 {0x02, 0x0000ac3e, 0xff002800, ""}, //
499 {0x02, 0x0000ac3f, 0xff002400, ""}, //
500 {0x02, 0x0000ac40, 0xff002400, ""}, //
501 {0x02, 0x0000ac41, 0xff002400, ""}, //
502 {0x02, 0x0000ac42, 0xff002800, ""}, //
503 {0x02, 0x0000ac43, 0xff002400, ""}, //
504 {0x02, 0x0000ac44, 0xff002c00, ""}, //
505 {0x02, 0x0000afc8, 0xff002400, ""}, //
506 {0x02, 0x0000afc9, 0xff002900, "Imaging Frequency"}, //
507 {0x02, 0x0000afca, 0xff002400, ""}, //
508 {0x02, 0x0000afcc, 0xff002800, ""}, //
509 {0x02, 0x0000afce, 0xff002800, ""}, //
510 {0x02, 0x0000afcf, 0xff002400, ""}, //
511 {0x02, 0x0000afd0, 0xff002c00, ""}, //
512 {0x02, 0x0000afd1, 0xff002800, ""}, //
513 {0x02, 0x0000afd2, 0xff002800, ""}, //
514 {0x02, 0x0000afd5, 0xff002400, ""}, //
515 {0x02, 0x0000afd6, 0xff002400, "Frame of Reference Index"}, //
516 {0x02, 0x0000afd8, 0xff002a00, ""}, //
517 {0x02, 0x0000afd9, 0xff002200, ""}, //
518 {0x02, 0x0000afda, 0xff002800, ""}, //
519 {0x02, 0x0000afde, 0xff002400, ""}, //
520 {0x02, 0x0000afdf, 0xff002800, ""}, //
521 {0x02, 0x0000afe0, 0xff002c00, ""}, //
522 {0x02, 0x0000afe1, 0xff002400, ""}, //
523 {0x02, 0x0000afe2, 0xff002800, ""}, //
524 {0x02, 0x0000afe4, 0xff002400, ""}, //
525 {0x02, 0x0000afe5, 0xff002800, ""}, //
526 {0x02, 0x0000afe6, 0xff002800, ""}, //
527 {0x02, 0x0000afe7, 0xff002800, ""}, //
528 {0x02, 0x0000afe8, 0xff002800, ""}, //
529 {0x02, 0x0000afe9, 0xff002400, ""}, //
530 {0x02, 0x0000afea, 0xff002800, ""}, //
531 {0x02, 0x0000afeb, 0xff002800, ""}, //
532 {0x02, 0x0000aff0, 0xff002400, ""}, //
533 {0x02, 0x0000aff5, 0xff002800, ""}, //
534 {0x02, 0x0000aff6, 0xff002800, ""}, //
535 {0x02, 0x0000aff7, 0xff002400, ""}, //
536 {0x02, 0x0000affa, 0xff002500, ""}, //
537 {0x02, 0x0000affc, 0xff002400, ""}, //
538 {0x02, 0x0000affd, 0xff002400, ""}, //
539 {0x02, 0x0000afff, 0xff002200, ""}, //
540 {0x02, 0x0000b002, 0xff002400, ""}, //
541 {0x02, 0x0000b004, 0xff002400, ""}, //
542 {0x02, 0x0000b005, 0xff002400, ""}, //
543 {0x02, 0x0000b006, 0x00000500, ""}, //
544 {0x02, 0x0000b007, 0xff002800, ""}, //
545 {0x02, 0x0000b008, 0xff002800, ""}, //
546 {0x02, 0x0000b009, 0xff002800, ""}, //
547 {0x02, 0x0000b00a, 0xff002800, ""}, //
548 {0x02, 0x0000b010, 0x00000f00, ""}, //
549 {0x02, 0x0000b011, 0xff002800, ""}, //
550 {0x02, 0x0000b012, 0xff002800, ""}, //
551 {0x02, 0x0000b3b0, 0xff002800, ""}, //
552 {0x02, 0x0000b3b1, 0xff002400, ""}, //
553 {0x02, 0x0000b3b2, 0xff002400, ""}, //
554 {0x02, 0x0000b3b3, 0xff002300, ""}, //
555 {0x02, 0x0000b3b4, 0x00000b00, ""}, //
556 {0x02, 0x0000b3b5, 0xff002400, ""}, //
557 {0x02, 0x0000b3b7, 0xff002400, ""}, //
558 {0x02, 0x0000b3b9, 0xff002500, ""}, //
559 {0x02, 0x0000b3ba, 0xff002800, ""}, //
560 {0x02, 0x0000b3bb, 0xff002400, ""}, //
561 {0x02, 0x0000b3c2, 0xff002400, ""}, //
562 {0x02, 0x0000b3c3, 0xff002400, ""}, //
563 {0x02, 0x0000b3c4, 0xff002800, ""}, //
564 {0x02, 0x0000b3c5, 0xff002400, ""}, //
565 {0x02, 0x0000b3c6, 0xff002400, ""}, //
566 {0x02, 0x0000b3c7, 0xff002800, ""}, //
567 {0x02, 0x0000b3c8, 0xff002400, ""}, //
568 {0x02, 0x0000b3c9, 0xff002400, ""}, //
569 {0x02, 0x0000b3ca, 0xff003200, ""}, //
570 {0x02, 0x0000b3cb, 0xff003200, ""}, //
571 {0x02, 0x0000b3cc, 0xff003200, ""}, //
572 {0x02, 0x0000b3cd, 0xff002400, ""}, //
573 {0x02, 0x0000b3ce, 0xff002400, ""}, //
574 {0x02, 0x0000b3d0, 0xff002500, ""}, //
575 {0x02, 0x0000b3d1, 0xff002400, ""}, //
576 {0x02, 0x0000b3d2, 0xff002800, ""}, //
577 {0x02, 0x0000b3d3, 0xff002800, ""}, //
578 {0x02, 0x0000b3d4, 0xff002800, ""}, //
579 {0x02, 0x0000b3d5, 0xff002c00, ""}, //
580 {0x02, 0x0000b3d6, 0xff002800, ""}, //
581 {0x02, 0x0000b3d7, 0xff002400, ""}, //
582 {0x02, 0x0000b3d9, 0xff002400, ""}, //
583 {0x02, 0x0000b3da, 0xff002400, ""}, //
584 {0x02, 0x0000b3db, 0xff003200, ""}, //
585 {0x02, 0x0000b3dd, 0xff002400, ""}, //
586 {0x02, 0x0000b3de, 0x00000600, ""}, //
587 {0x02, 0x0000b3df, 0xff002400, ""}, //
588 {0x02, 0x0000b3e0, 0xff002800, ""}, //
589 {0x02, 0x0000b3e1, 0xff003200, ""}, //
590 {0x02, 0x0000b3e2, 0xff002400, ""}, //
591 {0x02, 0x0000b3e3, 0xff002800, ""}, //
592 {0x02, 0x0000b3e4, 0xff002400, ""}, //
593 {0x02, 0x0000b3e5, 0xff002400, ""}, //
594 {0x02, 0x0000b3e6, 0xff002400, ""}, //
595 {0x02, 0x0000b3e7, 0xff002400, ""}, //
596 {0x02, 0x0000b3e8, 0xff002400, ""}, //
597 {0x02, 0x0000b3e9, 0xff002400, ""}, //
598 {0x02, 0x0000b3ea, 0xff002400, ""}, //
599 {0x02, 0x0000b3eb, 0xff002400, ""}, //
600 {0x02, 0x0000b3ec, 0xff002400, ""}, //
601 {0x02, 0x0000b3ee, 0xff002400, ""}, //
602 {0x02, 0x0000b3ef, 0xff002400, ""}, //
603 {0x02, 0x0000b3f0, 0xff002400, ""}, //
604 {0x02, 0x0000b3f1, 0xff002400, ""}, //
605 {0x02, 0x0000b3f2, 0xff002800, ""}, //
606 {0x02, 0x0000b3f3, 0xff002800, ""}, //
607 {0x02, 0x0000b3f4, 0xff002800, ""}, //
608 {0x02, 0x0000b3f5, 0xff003200, ""}, //
609 {0x02, 0x0000b3f6, 0xff002400, ""}, //
610 {0x02, 0x0000b3f7, 0xff002400, ""}, //
611 {0x02, 0x0000b3f8, 0xff002400, ""}, //
612 {0x02, 0x0000b3f9, 0xff002400, ""}, //
613 {0x02, 0x0000b3fa, 0xff002400, ""}, //
614 {0x02, 0x0000b3fd, 0xff002400, ""}, //
615 {0x02, 0x0000b3fe, 0xff002400, ""}, //
616 {0x02, 0x0000b3ff, 0xff002400, ""}, //
617 {0x02, 0x0000b400, 0xff002800, ""}, //
618 {0x02, 0x0000b401, 0xff002400, ""}, //
619 {0x02, 0x0000b404, 0xff002400, ""}, //
620 {0x02, 0x0000b405, 0xff002400, ""}, //
621 {0x02, 0x0000b406, 0xff002400, ""}, //
622 {0x02, 0x0000b407, 0xff002400, ""}, //
623 {0x02, 0x0000b798, 0xff002c00, ""}, //
624 {0x02, 0x0000b799, 0xff002c00, "Coil"}, //
625 {0x02, 0x0000b79a, 0xff002c00, "Coil"}, //
626 {0x02, 0x0000fa09, 0xff002800, ""}, //
627 {0x02, 0x0000fa0b, 0xff002800, ""}, //
628 {0x02, 0x0000fa0d, 0xff002800, ""}, //
629 {0x02, 0x0000fa13, 0xff002800, ""}, //
630 {0x02, 0x0000fa14, 0xff003100, ""}, //
631 {0x02, 0x0000fa15, 0xff003100, ""}, //
632 {0x02, 0x0000fa16, 0xff003100, ""}, //
633 {0x02, 0x0000fa17, 0xff003100, ""}, //
634 {0x02, 0x0000fa1a, 0xff002800, ""}, //
635 {0x02, 0x0000fa1b, 0xff003100, ""}, //
636 {0x02, 0x0000fa22, 0xff002800, ""}, //
637 {0x02, 0x0000fa23, 0xff003100, ""}, //
638 {0x02, 0x0000fa25, 0xff003100, ""}, //
639 {0x02, 0x0000fa26, 0xff002800, ""}, //
640 {0x02, 0x0000fa29, 0xff003100, ""}, //
641 {0x02, 0x0000fa2a, 0xff002800, ""}, //
642 {0x02, 0x0000fa2d, 0xff003100, ""}, //
643 {0x02, 0x0000fa2e, 0xff002800, ""}, //
644 {0x02, 0x0000fa37, 0xff002800, ""}, //
645 {0x02, 0x0000fa38, 0xff003100, ""}, //
646 {0x02, 0x0000fa3c, 0xff002800, ""}, //
647 {0x02, 0x0000fa3d, 0xff002800, ""}, //
648 {0x02, 0x0000fa3e, 0xff003100, ""}, //
649 {0x02, 0x0000fa3f, 0xff003100, ""}, //
650 {0x02, 0x0000fa4b, 0xff002800, ""}, //
651 {0x02, 0x0000fa4c, 0xff002800, ""}, //
652 {0x02, 0x0000fa4d, 0xff003100, ""}, //
653 {0x02, 0x0000fa4e, 0xff003100, ""}, //
654 {0x02, 0x00023283, 0x00000400, ""}, //
655 {0x03, 0x00000008, 0xfff00200, ""}, //
656 {0x03, 0x00000065, 0xff002400, ""}, //
657 {0x03, 0x00000066, 0xff002400, ""}, //
658 {0x03, 0x0000006f, 0xff002400, ""}, //
659 {0x03, 0x000017d5, 0xff002a00, ""}, //
660 {0x03, 0x000017d7, 0xff002a00, ""}, //
661 {0x03, 0x000017d8, 0xff002a00, ""}, //
662 {0x03, 0x000017da, 0xff002a00, ""}, //
663 {0x03, 0x000017db, 0xff002a00, ""}, //
664 {0x03, 0x000017dd, 0xff002a00, ""}, //
665 {0x03, 0x000017de, 0xff002400, ""}, //
666 {0x03, 0x000017df, 0x00177000, ""}, //
667 {0x03, 0x000017e0, 0x00177000, ""}, //
668 {0x03, 0x000017e1, 0x00177000, ""}, //
669 {0x03, 0x000017e2, 0xff002a00, ""}, //
670 {0x03, 0x000017ef, 0xff002c00, ""}, //
671 {0x03, 0x000017f0, 0xff002400, ""}, //
672 {0x03, 0x000017f4, 0xff002400, ""}, //
673 {0x03, 0x000017f5, 0xff002400, ""}, //
674 {0x03, 0x0000180a, 0xff002100, ""}, //
675 {0x03, 0x00001838, 0xff002400, ""}, //
676 {0x03, 0x00001839, 0xff002400, ""}, //
677 {0x03, 0x0000183b, 0xff002400, ""}, //
678 {0x03, 0x0000183d, 0xff002800, ""}, //
679 {0x03, 0x00001843, 0xff002a00, ""}, //
680 {0x03, 0x00001844, 0xff002400, ""}, //
681 {0x03, 0x00001845, 0xff002400, ""}, //
682 {0x03, 0x00001862, 0xff002400, ""}, //
683 {0x03, 0x00001863, 0xff002400, ""}, //
684 {0x03, 0x00001864, 0xff002400, ""}, //
685 {0x03, 0x00001865, 0xff002400, ""}, //
686 {0x03, 0x0000a832, 0xff002a00, ""}, //
687 {0x03, 0x0000afd1, 0xff002800, ""}, //
688 {0x03, 0x0000afea, 0xff002800, ""}, //
689 {0x03, 0x0000afeb, 0xff002800, ""}, //
690 {0x03, 0x0000aff5, 0xff002800, ""}, //
691 {0x03, 0x0000aff6, 0xff002800, ""}, //
692 {0x03, 0x0000b3c1, 0xff002400, ""}, //
693 {0x03, 0x0000b3cf, 0xff002400, ""}, //
694 {0x03, 0x0000b3e4, 0xff002400, ""}, //
695 {0x03, 0x0000b3ee, 0xff002400, ""}, //
696 {0x03, 0x0000b3ef, 0xff002400, ""}, //
697 {0x03, 0x0000b3f0, 0xff002400, ""}, //
698 {0x03, 0x0000b3f1, 0xff002400, ""}, //
699 {0x03, 0x0000fde8, 0x00000100, ""}, //
700 {0x03, 0x0000fe02, 0x00000e00, "Series DateTime"}, //
701 {0x03, 0x00023a50, 0xff002400, ""}, //
702 {0x03, 0x00023a5c, 0xff002400, ""}, //
703 {0x03, 0x00023a5d, 0xff002400, ""}, //
704 {0x03, 0x00023a5e, 0xff002100, ""}, //
705 {0x03, 0x00023a60, 0xff002c00, ""}, //
706 {0x03, 0x00023a61, 0xff002400, ""}, //
707 {0x03, 0x00023a62, 0xff002c00, ""}, //
708 {0x03, 0x00023a79, 0xff002400, ""}, //
709 {0x03, 0x00023a7a, 0xff002400, ""}, //
710 {0x03, 0x00023a7b, 0xff002400, ""}, //
711 {0x03, 0x00023a7c, 0xff002400, ""}, //
712 {0x04, 0x00000009, 0xfff00200, ""}, //
713 {0x04, 0x00000067, 0xff002400, "Rows,Columns"}, //
714 {0x04, 0x00000068, 0xff002400, ""}, //
715 {0x04, 0x0000006b, 0xff002800, ""}, //
716 {0x04, 0x0000006c, 0xff002800, ""}, //
717 {0x04, 0x000017e3, 0xff002400, ""}, //
718 {0x04, 0x00001808, 0xff002400, ""}, //
719 {0x04, 0x00001809, 0xff002400, ""}, //
720 {0x04, 0x00001bc4, 0xff002400, ""}, //
721 {0x04, 0x00001bc5, 0xff002400, ""}, //
722 {0x04, 0x00001bcc, 0xff002c00, ""}, //
723 {0x04, 0x0000a806, 0x00000500, "FOV"}, //
724 {0x04, 0x0000b3b4, 0x00000b00, ""}, //
725 {0x04, 0x0000fa06, 0xff002400, ""}, //
726 {0x04, 0x00014438, 0x00000600, "Orientation Vector 1"}, //
727 {0x04, 0x00014439, 0x00000600, "Orientation Vector 2"}, //
728 {0x04, 0x0001443a, 0x00000600, "Orientation Vector 3"}, //
729 {0x04, 0x0001443b, 0xff002800, "Slice Thickness (meter)"}, //
730 {0x04, 0x0001e078, 0xff002800, "Echo Time (/1000)"}, //
731 {0x04, 0x0001e464, 0xff002400, ""}, //
732 {0x04, 0x0001e465, 0xff002400, ""}, //
733 {0x04, 0x0001e466, 0xff002400, ""}, //
734 {0x04, 0x00023a5a, 0xff002400, ""}, //
735 {0x04, 0x00028873, 0xff002800, "Spacing Between Slices (meter)"}, //
736 {0x04, 0x00028876, 0x00000400, ""}, //
737 {0x04, 0x00028877, 0xff002800, "FOV"}, //
738 {0x04, 0x00028878, 0xff002400, ""}, //
739 {0x04, 0x00028879, 0xff002400, ""}, //
740 {0x04, 0x0002887a, 0xff002a00, ""}, //
741 {0x04, 0x0002887b, 0xff002400, ""}, //
742 {0x04, 0x0002887c, 0xff002400, ""}, //
743 {0x05, 0x00000069, 0xff002800, ""}, //
744 {0x05, 0x0000006b, 0xff002800, ""}, //
745 {0x05, 0x0000006c, 0xff002800, ""}, //
746 {0x05, 0x00001bc3, 0xff002200, ""}, //
747 {0x05, 0x00005603, 0x00000100, ""}, //
748 {0x05, 0x0000a819, 0xff002400, ""}, //
749 {0x05, 0x0000fdea, 0xff002400, ""}, //
750 {0x05, 0x0002bf20, 0xff002a00, ""}, //
751 {0x05, 0x0002c6f0, 0x00000100, ""}, //
752 {0x05, 0x0002d691, 0xff002800, "Slice Location (/1000)"}, //
753 {0x05, 0x0002d695, 0xff002400, "Instance Number"}, //
754 {0x05, 0x0002d696, 0xff002400, "Instance Number"}, //
755 {0x05, 0x0002da78, 0x001b5e00, ""}, //
756 {0x05, 0x0002da79, 0x001b5f00, ""}, //
757 {0x05, 0x0002da7a, 0xff002000, ""}, //
758 {0x06, 0x00000c1d, 0xff002400, "Item Index"}, //
759 {0x06, 0x00036718, 0xff002400, ""}, //
760 {0x06, 0x00036719, 0x00000600, "Orientation Vector 1"}, //
761 {0x06, 0x0003671a, 0x00000600, "Orientation Vector 2"}, //
762 {0x06, 0x0003671b, 0x00000600, "Orientation Vector 3"}, //
763 {0x06, 0x00036721, 0xff002400, ""}, //
764 {0x06, 0x00036722, 0xff002a00, ""}, //
765 {0x06, 0x00036725, 0xff002400, ""}, //
766 {0x06, 0x0003672a, 0xff002400, ""}, //
767 {0x07, 0x00000c1d, 0xff002400, ""}, //
768 {0x07, 0x00036718, 0xff002400, ""}, //
769 {0x07, 0x00036719, 0x00000600, ""}, //
770 {0x07, 0x0003671a, 0x00000600, ""}, //
771 {0x07, 0x0003671b, 0x00000600, ""}, //
772 {0x07, 0x0003671c, 0xff002800, ""}, //
773 {0x07, 0x0003671e, 0xff002a00, ""}, //
774 {0x07, 0x00036721, 0xff002400, ""}, //
775 {0x07, 0x00036722, 0xff002a00, ""}, //
776 {0x07, 0x00036723, 0x00000600, ""}, //
777 {0x07, 0x00036724, 0x00000600, ""}, //
778 {0x07, 0x00036725, 0xff002400, ""}, //
779 {0x07, 0x00036727, 0xff002400, ""}, //
780 {0x07, 0x00036728, 0xff002400, ""}, //
781 {0x07, 0x0003672a, 0xff002400, ""}, //
782 {0x07, 0x0003672b, 0x00000600, ""}, //
783 {0x08, 0x00000c1d, 0xff002400, ""}, //
784 {0x08, 0x00036718, 0xff002400, ""}, //
785 {0x08, 0x00036719, 0x00000600, ""}, //
786 {0x08, 0x0003671a, 0x00000600, ""}, //
787 {0x08, 0x0003671b, 0x00000600, ""}, //
788 {0x08, 0x0003671c, 0xff002800, ""}, //
789 {0x08, 0x0003671e, 0xff002a00, ""}, //
790 {0x08, 0x00036721, 0xff002400, ""}, //
791 {0x08, 0x00036722, 0xff002a00, ""}, //
792 {0x08, 0x00036723, 0x00000600, ""}, //
793 {0x08, 0x00036724, 0x00000600, ""}, //
794 {0x08, 0x00036725, 0xff002400, ""}, //
795 {0x08, 0x00036727, 0xff002400, ""}, //
796 {0x08, 0x00036728, 0xff002400, ""}, //
797 {0x08, 0x0003672a, 0xff002400, ""}, //
798 {0x08, 0x0003672b, 0x00000600, ""}, //
799 {0x09, 0x00000c1d, 0xff002400, ""}, //
800 {0x09, 0x00036718, 0xff002400, ""}, //
801 {0x09, 0x00036719, 0x00000600, ""}, //
802 {0x09, 0x0003671a, 0x00000600, ""}, //
803 {0x09, 0x0003671b, 0x00000600, ""}, //
804 {0x09, 0x0003671c, 0xff002800, ""}, //
805 {0x09, 0x0003671e, 0xff002a00, ""}, //
806 {0x09, 0x00036721, 0xff002400, ""}, //
807 {0x09, 0x00036722, 0xff002a00, ""}, //
808 {0x09, 0x00036723, 0x00000600, ""}, //
809 {0x09, 0x00036724, 0x00000600, ""}, //
810 {0x09, 0x00036725, 0xff002400, ""}, //
811 {0x09, 0x00036727, 0xff002400, ""}, //
812 {0x09, 0x00036728, 0xff002400, ""}, //
813 {0x09, 0x0003672a, 0xff002400, ""}, //
814 {0x09, 0x0003672b, 0x00000600, ""}, //
815 {0x0a, 0x00036723, 0x00000600, ""}, //
816 {0x0a, 0x00036724, 0x00000600, ""}, //
817 {0x0a, 0x0003672a, 0xff002400, ""}, //
818 {0x0a, 0x0003672b, 0x00000600, ""}, //
819 {0x0a, 0x00036722, 0xff002a00, ""}, //
820 {0x0a, 0x0003671e, 0xff002a00, ""}, //
821 {0x0a, 0x00036728, 0xff002400, ""}, //
822 {0x0a, 0x0003671c, 0xff002800, ""}, //
823 {0x0a, 0x00036727, 0xff002400, ""}, //
824 };
825
826 static const uint32_t dict_size = sizeof(dict) / sizeof(*dict);
827
828 void check_mec_mr3_dict() {
829 const struct mec_mr3_dict *prev = dict + 0;
830 for (uint32_t i = 1; i < dict_size; ++i) {
831 const struct mec_mr3_dict *next = dict + i;
832 if (next->group == prev->group)
833 assert(next->key > prev->key);
834 else
835 assert(next->group > prev->group);
836 prev = next;
837 }
838 }
839
840 bool check_mec_mr3_info(const uint8_t group, const uint32_t key,
841 const uint32_t type) {
842 assert(group > 0x0 && group < 0x9);
843 assert((key & 0xfff00000) == 0x0);
844 assert((type & 0x000000ff) == 0x0);
845 const uint32_t sign = type >> 24u;
846 assert(sign == 0x0 || sign == 0xff);
847 bool found = false;
848 for (uint32_t i = 0; i < dict_size; ++i) {
849 const struct mec_mr3_dict *d = dict + i;
850 if (group == d->group && key == d->key) {
851 assert(d->type == type);
852 found = true;
853 }
854 }
855 return found;
856 }
857
858 const char *get_mec_mr3_info_name(const uint8_t group, const uint32_t key) {
859 const char *ret = NULL;
860 for (uint32_t i = 0; i < dict_size; ++i) {
861 const struct mec_mr3_dict *d = dict + i;
862 if (group == d->group && key == d->key) {
863 ret = d->name;
864 }
865 }
866 return ret;
867 }
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13 #ifndef MEC_MR3_DICT_H
14 #define MEC_MR3_DICT_H
15
16 #include <stdbool.h>
17 #include <stdint.h>
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 void check_mec_mr3_dict();
24 bool check_mec_mr3_info(uint8_t group, uint32_t key, uint32_t type);
25 const char *get_mec_mr3_info_name(uint8_t group, uint32_t key);
26
27 #ifdef __cplusplus
28 } /* end extern "C" */
29 #endif
30
31 #endif // MEC_MR3_DICT_H
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13
14 #include "mec_mr3_io.h"
15
16 #include "mec_mr3_dict.h"
17
18 #include <assert.h>
19 #include <math.h>
20 #include <stdint.h>
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24
25 #ifndef _MSC_VER
26 #include <iconv.h>
27 #endif
28 #if defined(_MSC_VER) && (_MSC_VER < 1900)
29 #define snprintf _snprintf
30 #endif
31
32 struct stream {
33 const void *start;
34 const void *end;
35 void *cur;
36 size_t (*read)(void *ptr, size_t size, size_t nmemb, struct stream *in);
37 };
38
39 static size_t stream_read(void *ptr, size_t size, size_t nmemb,
40 struct stream *in) {
41 char *cur = (char *)in->cur;
42 const char *end = (const char *)in->end;
43 const size_t len = size * nmemb;
44 if (cur + len <= end) {
45 memcpy(ptr, cur, len);
46 in->cur = cur + len;
47 } else {
48 in->cur = NULL;
49 return 0;
50 }
51 return nmemb;
52 }
53
54 struct app {
55 struct stream *in;
56 #ifndef _MSC_VER
57 iconv_t conv;
58 #endif
59 void *shift_jis_buffer;
60 };
61
62 static struct app *create_app(struct app *self, struct stream *in) {
63 self->in = in;
64 #ifndef _MSC_VER
65 self->conv = iconv_open("utf-8", "shift-jis");
66 assert(self->conv != (iconv_t)-1);
67 #endif
68 self->shift_jis_buffer = NULL;
69
70 return self;
71 }
72
73 static void setup_buffer(struct app *self, const void *input, size_t len) {
74 self->in->cur = (char *)input;
75 self->in->start = input;
76 self->in->end = (char *)input + len;
77 self->in->read = stream_read;
78 }
79
80 #define ERROR_RETURN(X, Y) \
81 if ((X) != (Y)) return false
82
83 static size_t fread_mirror(void *ptr, size_t size, size_t nmemb,
84 struct app *self) {
85 struct stream *instream = self->in;
86
87 size_t s = instream->read(ptr, size, nmemb, instream);
88 if (s == nmemb) {
89 return nmemb;
90 }
91 assert(0);
92 return s;
93 }
94
95 static bool write_trailer(struct app *self) {
96 assert(self->in->cur <= self->in->end);
97 if (self->in->cur == self->in->end) return true;
98 // else it is missing one byte (nul byte):
99 char padding;
100 size_t s = fread_mirror(&padding, sizeof padding, 1, self);
101 ERROR_RETURN(s, 1);
102 ERROR_RETURN(padding, 0);
103
104 return true;
105 }
106
107 struct mec_mr3_info {
108 uint32_t key;
109 uint32_t type;
110 };
111
112 struct mec_mr3_item_data {
113 uint32_t len;
114 void *buffer;
115 size_t size; // aligned/realloc implementation detail
116 };
117
118 static const uint32_t magic2[] = {0, 0, 12, 0, 0};
119
120 static bool read_info(struct app *self, const uint8_t group,
121 struct mec_mr3_info *info) {
122 // read key and type at once:
123 size_t s = fread_mirror(info, sizeof *info, 1, self);
124 ERROR_RETURN(s, 1);
125 #ifdef MEC_MR3_IO_DEBUG
126 bool found = check_mec_mr3_info(group, info->key, info->type);
127 ERROR_RETURN(found, true);
128 #endif
129
130 return true;
131 }
132
133 static void *aligned_alloc_impl(size_t alignment, size_t size) {
134 #ifdef _MSC_VER
135 return _aligned_malloc(size, alignment);
136 #else
137 return aligned_alloc(alignment, size);
138 #endif
139 }
140
141 static struct mec_mr3_item_data *mec_mr3_aligned_realloc(
142 struct mec_mr3_item_data *data, size_t size) {
143 if (!data) return NULL;
144 // fast path
145 if (size <= data->size) {
146 return data;
147 }
148 // else need to reallocate
149 const size_t guesstimate = size < 4096 ? 4096 : 2 * size;
150 void *buffer = aligned_alloc_impl(64u, guesstimate);
151 if (data->buffer) free(data->buffer);
152 if (!buffer) return NULL;
153 data->buffer = buffer;
154 data->size = guesstimate;
155 return data;
156 }
157
158 static bool is_aligned(const void *pointer, size_t byte_count) {
159 // https://stackoverflow.com/questions/1898153/how-to-determine-if-memory-is-aligned
160 return (uintptr_t)pointer % byte_count == 0;
161 }
162
163 enum SignatureType { SIG_UNK = 0, SIG_SIMPLE = 1, SIG_COMPLEX = 2 };
164 static enum SignatureType compute_signature(const uint32_t sig[5]) {
165 // fast path: {0, 0, 12, 0, 0}
166 const int b = memcmp(sig, magic2, sizeof(magic2));
167 if (b == 0) return SIG_SIMPLE;
168 // check the complex one:
169 // [0,67937544,12,0,235348672] #20
170 // [0,226469240,12,0,235348704] #20
171 const bool sig_complex = sig[0] == 0 && sig[2] == 12 && sig[3] == 0;
172 if (sig_complex) return SIG_COMPLEX;
173 return SIG_UNK;
174 }
175
176 static bool read_data(struct app *self, const uint8_t group,
177 const struct mec_mr3_info *info,
178 struct mec_mr3_item_data *data) {
179 (void)group;
180 (void)info;
181 size_t s = fread_mirror(&data->len, sizeof data->len, 1, self);
182 ERROR_RETURN(s, 1);
183 // in the wild we have: data->len <= 9509
184 uint32_t separator[5];
185 s = fread_mirror(separator, sizeof *separator,
186 sizeof separator / sizeof *separator, self);
187 ERROR_RETURN(s, sizeof separator / sizeof *separator);
188 const enum SignatureType sig_ok = compute_signature(separator);
189 ERROR_RETURN(sig_ok != SIG_UNK, true);
190 data = mec_mr3_aligned_realloc(data, data->len);
191 if (data == NULL) {
192 return false;
193 }
194
195 s = fread_mirror(data->buffer, 1, data->len, self);
196 ERROR_RETURN(s, data->len);
197
198 return true;
199 }
200
201 enum Type {
202 ISO_8859_1_STRING =
203 0x00000300, // ASCII string / or struct with 'ISO-8859-1' marker
204 FLOAT32_VM2N = 0x00000500, // float/32bits VM:2n
205 FLOAT32_VM3N = 0x00000600, // float/32bits VM:3n
206 DATETIME = 0x00000e00, // Date/Time stored as ASCII VM:1
207 STRUCT_136 =
208 0x001f4100, // Fixed struct 136 bytes (struct with ASCII strings)
209 STRUCT_436 =
210 0x001f4300, // Fixed struct 436 bytes (struct with ASCII strings)
211 STRUCT_516 =
212 0x001f4400, // Fixed struct 516 bytes (struct with ASCII strings)
213 STRUCT_325 =
214 0x001f4600, // Fixed struct 325 bytes (struct with ASCII strings)
215 UINT32_VM1 = 0xff000400, // uint32_t, range [0, 4] VM:1
216 FLOAT32_VM1 = 0xff000800, // float/32bits VM:1
217 INT32_VM1N = 0xff002400, // int32_t (signed) VM:1n
218 FLOAT32_VM1N = 0xff002800, // float/32bits VM:1n
219 FLOAT64_VM1 = 0xff002900, // float/64bits VM:1
220 BOOL32_VM1 = 0xff002a00, // bool/32bits VM:1
221 UNICODE_STRING = 0xff002c00, // ASCII, UTF-8 or SHIFT-JIS string
222 };
223
224 struct buffer19 {
225 char sig1[0x3];
226 unsigned char len2;
227 char sig2;
228 unsigned char len3;
229 char sig3;
230 char iso[0x9];
231 char sig4;
232 unsigned char len4;
233 char sig5;
234 };
235
236 static void dump2file(const char *in, int len) {
237 static int debug = 0;
238 char buffer[512];
239 sprintf(buffer, "out%04d", debug);
240 ++debug;
241 FILE *f = fopen(buffer, "wb");
242 fwrite(in, 1, len, f);
243 fclose(f);
244 }
245
246 // https://stackoverflow.com/questions/28270310/how-to-easily-detect-utf8-encoding-in-the-string
247 static bool is_valid_utf8(const char *string) {
248 if (!string) return true;
249
250 const unsigned char *bytes = (const unsigned char *)string;
251 unsigned int cp;
252 int num;
253
254 while (*bytes != 0x00) {
255 if ((*bytes & 0x80) == 0x00) {
256 // U+0000 to U+007F
257 cp = (*bytes & 0x7F);
258 num = 1;
259 } else if ((*bytes & 0xE0) == 0xC0) {
260 // U+0080 to U+07FF
261 cp = (*bytes & 0x1F);
262 num = 2;
263 } else if ((*bytes & 0xF0) == 0xE0) {
264 // U+0800 to U+FFFF
265 cp = (*bytes & 0x0F);
266 num = 3;
267 } else if ((*bytes & 0xF8) == 0xF0) {
268 // U+10000 to U+10FFFF
269 cp = (*bytes & 0x07);
270 num = 4;
271 } else
272 return false;
273
274 bytes += 1;
275 for (int i = 1; i < num; ++i) {
276 if ((*bytes & 0xC0) != 0x80) return false;
277 cp = (cp << 6) | (*bytes & 0x3F);
278 bytes += 1;
279 }
280
281 if ((cp > 0x10FFFF) || ((cp >= 0xD800) && (cp <= 0xDFFF)) ||
282 ((cp <= 0x007F) && (num != 1)) ||
283 ((cp >= 0x0080) && (cp <= 0x07FF) && (num != 2)) ||
284 ((cp >= 0x0800) && (cp <= 0xFFFF) && (num != 3)) ||
285 ((cp >= 0x10000) && (cp <= 0x1FFFFF) && (num != 4)))
286 return false;
287 }
288
289 return true;
290 }
291
292 // return -1 to indicate error:
293 static int remove_control_character_utf8(char *string) {
294 if (!string) return 0;
295
296 unsigned char *bytes = (unsigned char *)string;
297 unsigned int cp;
298 int num;
299 int modified = 0;
300
301 while (*bytes != 0x00) {
302 if ((*bytes & 0x80) == 0x00) {
303 // U+0000 to U+007F
304 cp = (*bytes & 0x7F);
305 num = 1;
306 } else if ((*bytes & 0xE0) == 0xC0) {
307 // U+0080 to U+07FF
308 cp = (*bytes & 0x1F);
309 num = 2;
310 } else if ((*bytes & 0xF0) == 0xE0) {
311 // U+0800 to U+FFFF
312 cp = (*bytes & 0x0F);
313 num = 3;
314 } else if ((*bytes & 0xF8) == 0xF0) {
315 // U+10000 to U+10FFFF
316 cp = (*bytes & 0x07);
317 num = 4;
318 } else
319 return -1;
320
321 bytes += 1;
322 for (int i = 1; i < num; ++i) {
323 if ((*bytes & 0xC0) != 0x80) return -1;
324 cp = (cp << 6) | (*bytes & 0x3F);
325 bytes += 1;
326 }
327
328 if ((cp > 0x10FFFF) || ((cp >= 0xD800) && (cp <= 0xDFFF)) ||
329 ((cp <= 0x007F) && (num != 1)) ||
330 ((cp >= 0x0080) && (cp <= 0x07FF) && (num != 2)) ||
331 ((cp >= 0x0800) && (cp <= 0xFFFF) && (num != 3)) ||
332 ((cp >= 0x10000) && (cp <= 0x1FFFFF) && (num != 4)))
333 return -1;
334
335 if (cp <= 0x001F && num == 1) {
336 bytes[-1] = '.';
337 modified++;
338 } else if (cp == 0x007F && num == 1) {
339 bytes[-1] = '?';
340 modified++;
341 }
342 }
343
344 return modified;
345 }
346
347 static char *shift_jis_to_utf8(char *str, size_t len, struct app *self) {
348 if (len == 0) {
349 return "";
350 }
351 const size_t guesstimate = len < 128 ? 128 : len * 2;
352 self->shift_jis_buffer = realloc(self->shift_jis_buffer, guesstimate);
353 char *dest_str = self->shift_jis_buffer;
354 #ifndef _MSC_VER
355 char *in_str = str;
356 char *out_str = dest_str;
357 size_t inbytes = len;
358 size_t outbytes = guesstimate;
359 if (iconv(self->conv, &in_str, &inbytes, &out_str, &outbytes) == (size_t)-1) {
360 #if 0
361 // at this point both gbk_str & inbytes have been modified, prefer original
362 // values:
363 dump2file(str, len);
364 printf("[%.*s]", (int)len, str);
365 fflush(stdout);
366 #endif
367 return NULL;
368 }
369 dest_str[guesstimate - outbytes] = 0;
370 #else
371 // guesstimate imply at least 128 bytes:
372 strcpy(dest_str, "No iconv support");
373 #endif
374 assert(is_valid_utf8(dest_str));
375 return dest_str;
376 }
377
378 static bool print_iso(void *ptr, size_t size, size_t nmemb, struct app *self) {
379 assert(size == 1);
380 static const char magic[] = {0xdf, 0xff, 0x79};
381 if (nmemb >= sizeof magic && memcmp(ptr, magic, sizeof(magic)) == 0) {
382 // iso
383 struct buffer19 b19;
384 if (nmemb < sizeof b19) return 0;
385 memcpy(&b19, ptr, sizeof b19);
386 if (b19.sig2 != 0x1 || b19.sig3 != 0x0 || b19.sig4 != 0x2 ||
387 b19.sig5 != 0x0)
388 return 0;
389 const size_t diff = nmemb - sizeof b19;
390 if (b19.len2 != nmemb - 4 || b19.len3 != 9 || b19.len4 != diff) return 0;
391 if (strncmp(b19.iso, "ISO8859-1", 9) != 0) return 0;
392 char *str = (char *)ptr + sizeof b19;
393 {
394 char *dest_str = shift_jis_to_utf8(str, b19.len4, self);
395 assert(dest_str != NULL);
396 const int modified = remove_control_character_utf8(dest_str);
397 assert(modified == 0);
398 printf("{%.*s : %s}", 9, b19.iso, dest_str);
399 }
400 } else {
401 // raw string buffer
402 printf("\"%.*s\"", (int)nmemb, (char *)ptr);
403 }
404 return true;
405 }
406
407 static bool print_datetime(void *ptr, size_t size, size_t nmemb,
408 struct app *self) {
409 // 11/12/2002,11:27:32
410 assert(size == 1);
411 (void)self;
412 assert(nmemb == 19 || nmemb == 20);
413 char *str = (char *)ptr;
414 size_t i;
415 const size_t len = strnlen(str, nmemb);
416 assert(len == 19);
417 for (i = 0; i < len; ++i) {
418 assert((str[i] >= '0' && str[i] <= '9') || str[i] == '/' || str[i] == ',' ||
419 str[i] == ':');
420 }
421
422 printf("\"%.*s\"", (int)nmemb, str);
423 return true;
424 }
425
426 typedef char str16[16 + 1];
427 typedef char str64[64 + 1];
428
429 struct buffer136 {
430 uint32_t zero1;
431 str64
432 uid1; // Detached Study Management SOP Class (1.2.840.10008.3.1.2.3.1) ?
433 str64 uid2; // 1.2.840.113745.101000.1098000.X.Y.Z
434 uint16_t zero2;
435 };
436
437 void print_buffer136(struct buffer136 *b136) {
438 assert(b136->zero1 == 0);
439 assert(b136->zero2 == 0);
440 printf("{%u,%s,%s,%hu}", b136->zero1, b136->uid1, b136->uid2, b136->zero2);
441 }
442
443 struct buffer436 {
444 uint32_t zero;
445 char iver[0x45];
446 char buf3[0x100]; // phi
447 str64 buf4;
448 str16 buf5;
449 char modality[0x15];
450 uint32_t val;
451 };
452
453 static void print_buffer436(struct buffer436 *b436) {
454 #if 0
455 static const char vers1[] = "TM_MR_DCM_V1.0";
456 static const char vers2[] = "TM_MR_DCM_V2.0";
457 static const char vers3[] = "TM_MR_DCM_V1.0_3";
458 static const char vers4[] = "TM_MR1_DCM_V1.0";
459 assert(strcmp(b436->iver, vers1) == 0 || strcmp(b436->iver, vers2) == 0 ||
460 strcmp(b436->iver, vers3) == 0 || strcmp(b436->iver, vers4) == 0);
461 #endif
462 assert(b436->zero == 0);
463 assert(strcmp(b436->modality, "MR") == 0);
464 #if 0
465 assert(b436->val == 0 || b436->val == 1 || b436->val == 3 || b436->val == 4);
466 #endif
467 printf("{%u;%s;%s;%s;%s;%s;%u}", b436->zero, b436->iver, b436->buf3,
468 b436->buf4, b436->buf5, b436->modality, b436->val);
469 }
470
471 struct buffer516 {
472 str64 zero; // aka 'none'
473 char buf2[0x15];
474 char buf3[0x100]; // phi
475 str16 buf4;
476 str64 buf5; // Study Instance UID
477 str64 buf6;
478 uint32_t bools[6];
479 };
480
481 static void print_buffer516(struct buffer516 *b516) {
482 printf("{%s;%s;%s;%s;%s;%s", b516->zero, b516->buf2, b516->buf3, b516->buf4,
483 b516->buf5, b516->buf6);
484 uint32_t c;
485 for (c = 0; c < 6; ++c) {
486 assert(b516->bools[c] == c % 2);
487 #if 0
488 if (c)
489 printf(",");
490 printf("%d", b516->bools[c]);
491 #endif
492 }
493 printf("}");
494 }
495
496 struct buffer325 {
497 str64 array[5];
498 };
499
500 static void print_buffer325(struct buffer325 *b325) {
501 int c;
502 printf("{");
503 for (c = 0; c < 5; ++c) {
504 if (c) printf(";");
505 printf("%s", b325->array[c]);
506 }
507 printf("}");
508 }
509
510 static bool print_struct(void *ptr, size_t size, size_t nmemb,
511 struct app *self) {
512 (void)self;
513 assert(size == 1);
514 const size_t s = nmemb;
515 if (s == 136) {
516 struct buffer136 b136;
517 memcpy(&b136, ptr, nmemb);
518 print_buffer136(&b136);
519 } else if (s == 436) {
520 struct buffer436 b436;
521 memcpy(&b436, ptr, nmemb);
522 print_buffer436(&b436);
523 } else if (s == 516) {
524 struct buffer516 b516;
525 memcpy(&b516, ptr, nmemb);
526 print_buffer516(&b516);
527 } else if (s == 325) {
528 struct buffer325 b325;
529 memcpy(&b325, ptr, nmemb);
530 print_buffer325(&b325);
531 } else {
532 assert(0); // programmer error
533 return 0;
534 }
535 return true;
536 }
537
538 static bool print_shift_jis(void *ptr, size_t size, size_t nmemb,
539 struct app *self) {
540 assert(size == 1);
541 char *dest_str = shift_jis_to_utf8(ptr, nmemb, self);
542 if (dest_str) {
543 const int modified = remove_control_character_utf8(dest_str);
544 assert(modified >= 0);
545 printf("|%sSJIS| \"%s\"", modified > 0 ? "?-" : "", dest_str);
546 } else {
547 char *str = ptr;
548 const size_t len = strlen(str);
549 assert(len == nmemb || (len + 1 == nmemb && str[len] == 0));
550 const bool ok = is_valid_utf8(str);
551 if (ok) {
552 const int modified = remove_control_character_utf8(str);
553 assert(modified >= 0);
554 printf("|%sUTF-8| \"%s\"", modified > 0 ? "?-" : "", str);
555 } else {
556 printf("|FIXME: Invalid SHIFT-JIS/UTF-8|");
557 }
558 }
559 return true;
560 }
561
562 static void print_int(const int32_t *buffer, int len) {
563 const int m = sizeof(int32_t);
564 assert(is_aligned(buffer, m));
565 assert(len % m == 0);
566 int i;
567 printf("[");
568 for (i = 0; i < len / m; i++) {
569 if (i) printf(",");
570 int32_t cur = -1;
571 memcpy(&cur, buffer + i, sizeof cur);
572 printf("%d", cur);
573 }
574 printf("]");
575 }
576
577 static void print_float(const float *buffer, int len) {
578 const int m = sizeof(float);
579 assert(is_aligned(buffer, m));
580 assert(len % m == 0);
581 int i;
582 printf("[");
583 for (i = 0; i < len / m; i++) {
584 if (i) printf(",");
585 float cur = -1;
586 memcpy(&cur, buffer + i, sizeof cur);
587 assert(isfinite(cur) && !isnan(cur));
588 printf("%f", cur);
589 }
590 printf("]");
591 }
592
593 static void print_double(const double *buffer, int len) {
594 const int m = sizeof(double);
595 assert(is_aligned(buffer, m));
596 assert(len % m == 0);
597 int i;
598 printf("[");
599 for (i = 0; i < len / m; i++) {
600 if (i) printf(",");
601 const double cur = buffer[i];
602 assert(isfinite(cur) && !isnan(cur));
603 printf("%g", cur);
604 }
605 printf("]");
606 }
607
608 static bool print_int32(void *ptr, size_t size, size_t nmemb,
609 struct app *self) {
610 assert(size == 1);
611 (void)self;
612 // assert(nmemb == 4 || nmemb == 8 || nmemb == 12 || nmembnmemb == 24 || nmemb
613 // == 32 || nmemb == 48);
614 assert(nmemb % 4 == 0);
615 print_int(ptr, nmemb);
616
617 return true;
618 }
619
620 static bool print_float32(void *ptr, size_t size, size_t nmemb,
621 struct app *self) {
622 assert(size == 1);
623 (void)self;
624 assert(nmemb == 4);
625 print_float(ptr, nmemb);
626
627 return true;
628 }
629
630 static bool print_float32_vm1n(void *ptr, size_t size, size_t nmemb,
631 struct app *self) {
632 assert(size == 1);
633 (void)self;
634 assert(nmemb % 4 == 0);
635 print_float(ptr, nmemb);
636
637 return true;
638 }
639
640 static bool print_float32_vm2n(void *ptr, size_t size, size_t nmemb,
641 struct app *self) {
642 assert(size == 1);
643 (void)self;
644 assert((nmemb / 4) % 2 == 0);
645 assert(nmemb == 8 || nmemb == 40 || nmemb == 80 || nmemb == 88);
646 // FIXME: low/high value for nmemb==40&80 makes them look like double...
647 print_float(ptr, nmemb);
648
649 return true;
650 }
651
652 static bool print_float32_vm3n(void *ptr, size_t size, size_t nmemb,
653 struct app *self) {
654 assert(size == 1);
655 (void)self;
656 assert((nmemb / 4) % 3 == 0);
657 assert(nmemb == 12 || nmemb == 36);
658 print_float(ptr, nmemb);
659
660 return true;
661 }
662
663 static bool print_float64(void *ptr, size_t size, size_t nmemb,
664 struct app *self) {
665 assert(size == 1);
666 (void)self;
667 assert(nmemb == 8);
668 print_double(ptr, nmemb);
669 return true;
670 }
671
672 static bool print_uint32(void *ptr, size_t size, size_t nmemb,
673 struct app *self) {
674 assert(size == 1);
675 assert(is_aligned(ptr, 4));
676 (void)self;
677 assert(nmemb == 4);
678 uint32_t u;
679 memcpy(&u, ptr, nmemb);
680 assert(u == 0x0 || u == 0x1 || u == 0x4);
681 printf("%u", u);
682 return true;
683 }
684
685 static bool print_bool32(void *ptr, size_t size, size_t nmemb,
686 struct app *self) {
687 assert(size == 1);
688 assert(is_aligned(ptr, 4));
689 (void)self;
690 assert(nmemb == 4);
691 uint32_t u;
692 memcpy(&u, ptr, nmemb);
693 assert(u == 0x0 || u == 0x1);
694 printf("%s", u ? "true" : "false");
695 return true;
696 }
697
698 static bool print(struct app *self, const uint8_t group,
699 const struct mec_mr3_info *info,
700 struct mec_mr3_item_data *data) {
701 const char *name = get_mec_mr3_info_name(group, info->key);
702 const uint32_t sign = info->type >> 24;
703 const char symb = sign ? '_' : ' ';
704
705 bool ret = true;
706 uint32_t mult = 1;
707 // print info
708 printf("(%01x,%05x) %c%04x ", group, info->key, symb,
709 (info->type & 0x00ffff00) >> 8);
710 // print data:
711 switch (info->type) {
712 case ISO_8859_1_STRING:
713 ret = print_iso(data->buffer, 1, data->len, self);
714 break;
715 case FLOAT32_VM2N:
716 ret = print_float32_vm2n(data->buffer, 1, data->len, self);
717 break;
718 case FLOAT32_VM3N:
719 ret = print_float32_vm3n(data->buffer, 1, data->len, self);
720 break;
721 case DATETIME:
722 ret = print_datetime(data->buffer, 1, data->len, self);
723 break;
724 case STRUCT_136:
725 case STRUCT_436:
726 case STRUCT_516:
727 case STRUCT_325:
728 ret = print_struct(data->buffer, 1, data->len, self);
729 break;
730 case UNICODE_STRING:
731 ret = print_shift_jis(data->buffer, 1, data->len, self);
732 break;
733 case FLOAT32_VM1:
734 ret = print_float32(data->buffer, 1, data->len, self);
735 break;
736 case INT32_VM1N:
737 ret = print_int32(data->buffer, 1, data->len, self);
738 break;
739 case FLOAT32_VM1N:
740 ret = print_float32_vm1n(data->buffer, 1, data->len, self);
741 break;
742 case FLOAT64_VM1:
743 ret = print_float64(data->buffer, 1, data->len, self);
744 break;
745 case UINT32_VM1:
746 ret = print_uint32(data->buffer, 1, data->len, self);
747 break;
748 case BOOL32_VM1:
749 ret = print_bool32(data->buffer, 1, data->len, self);
750 break;
751 default:
752 printf("|NotImplemented|");
753 ret = true;
754 }
755 // print key name
756 if (!name) {
757 static char buf[512];
758 snprintf(buf, sizeof buf, "Missing: {0x%02x, 0x%08x, 0x%08x, \"\"}, //",
759 group, info->key, info->type);
760 name = buf;
761 }
762 printf(" # %u,%u %s\n", data->len, mult, name);
763
764 return ret;
765 }
766
767 static bool read_group(struct app *self, uint8_t group, uint32_t nitems,
768 struct mec_mr3_info *info,
769 struct mec_mr3_item_data *data) {
770 bool good = true;
771 uint32_t i;
772 for (i = 0; i < nitems && good; ++i) {
773 good = good && read_info(self, group, info);
774 // lazy evaluation:
775 good = good && read_data(self, group, info, data);
776 good = good && print(self, group, info, data);
777 }
778 return good;
779 }
780
781 // If the number of element read is below the magic value, this indicate the
782 // last groups of elements:
783 #define MAGIC_NUM_ELEMENTS 5
784
785 bool mec_mr3_print(const void *input, size_t len) {
786 if (!input) return false;
787 struct stream sin;
788 struct app a;
789 struct app *self = create_app(&a, &sin);
790 setup_buffer(self, input, len);
791
792 bool good = true;
793 struct mec_mr3_info info;
794 struct mec_mr3_item_data data;
795 data.size = data.len = 0;
796 data.buffer = NULL;
797
798 uint32_t remain = 1;
799 size_t s;
800 bool last_groups = false;
801 uint8_t group = 0;
802 // read until last set of groups found:
803 while (!last_groups && good) {
804 uint32_t nitems;
805 s = fread_mirror(&nitems, sizeof nitems, 1, self);
806 if (s != 1 || nitems == 0) {
807 good = false;
808 }
809 if (good && nitems <= MAGIC_NUM_ELEMENTS) {
810 // special case to handle last groups
811 remain = nitems;
812 last_groups = true;
813 s = fread_mirror(&nitems, sizeof nitems, 1, self);
814 if (s != 1 || nitems == 0) {
815 good = false;
816 }
817 }
818 // lazy evaluation
819 ++group;
820 good = good && read_group(self, group, nitems, &info, &data);
821 }
822 // read remaining groups:
823 while (good && --remain != 0) {
824 uint32_t nitems;
825 s = fread_mirror(&nitems, sizeof nitems, 1, self);
826 if (s != 1 || nitems <= MAGIC_NUM_ELEMENTS) {
827 good = false;
828 }
829 ++group;
830 good = good && read_group(self, group, nitems, &info, &data);
831 }
832 // release memory:
833 #ifdef _MSC_VER
834 _aligned_free(data.buffer);
835 #else
836 free(data.buffer);
837 #endif
838 #ifndef _MSC_VER
839 iconv_close(self->conv);
840 #endif
841 free(self->shift_jis_buffer);
842 if (!good) return false;
843
844 // write trailer:
845 if (!write_trailer(self)) {
846 return false;
847 }
848
849 // make sure the whole input was processed:
850 assert(self->in->cur <= self->in->end); // programmer error
851 if (self->in->cur < self->in->end) {
852 return false;
853 }
854 return true;
855 }
0 /*=========================================================================
1
2 Program: GDCM (Grassroots DICOM). A DICOM library
3
4 Copyright (c) 2006-2011 Mathieu Malaterre
5 All rights reserved.
6 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
7
8 This software is distributed WITHOUT ANY WARRANTY; without even
9 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 PURPOSE. See the above copyright notice for more information.
11
12 =========================================================================*/
13 #ifndef MEC_MR3_IO_H
14 #define MEC_MR3_IO_H
15
16 #include <stdbool.h>
17 #include <stddef.h>
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 bool mec_mr3_print(const void *input, size_t len);
24
25 #ifdef __cplusplus
26 } /* end extern "C" */
27 #endif
28
29 #endif // MEC_MR3_IO_H
155155 ";
156156
157157 %feature("docstring")
158 gdcm::network::AAssociateRQPDU::GetPresentationContext "PresentationContextRQ const&
158 gdcm::network::AAssociateRQPDU::GetPresentationContext "const
159 PresentationContextRQ&
159160 gdcm::network::AAssociateRQPDU::GetPresentationContext(SizeType i)
160161 const ";
161162
172173 const ";
173174
174175 %feature("docstring")
175 gdcm::network::AAssociateRQPDU::GetPresentationContexts "PresentationContextArrayType const&
176 gdcm::network::AAssociateRQPDU::GetPresentationContexts "const
177 PresentationContextArrayType&
176178 gdcm::network::AAssociateRQPDU::GetPresentationContexts() ";
177179
178180 %feature("docstring")
287289
288290 Return the StringName associated with the event. ";
289291
290 %feature("docstring") gdcm::AnonymizeEvent::GetTag "Tag const&
292 %feature("docstring") gdcm::AnonymizeEvent::GetTag "const Tag&
291293 gdcm::AnonymizeEvent::GetTag() const ";
292294
293295 %feature("docstring") gdcm::AnonymizeEvent::MakeObject "::gdcm::Event* gdcm::AnonymizeEvent::MakeObject() const override
376378 if it protects all Attributes that might be used by unauthorized
377379 entities to identify the patient. NOT THREAD SAFE ";
378380
381 %feature("docstring") gdcm::Anonymizer::Clear "bool
382 gdcm::Anonymizer::Clear(PrivateTag const &pt) ";
383
384 %feature("docstring") gdcm::Anonymizer::Clear "bool
385 gdcm::Anonymizer::Clear(Tag const &t)
386
387 Identical to 'Empty' except no action is done when tag is not present.
388 ";
389
390 %feature("docstring") gdcm::Anonymizer::Empty "bool
391 gdcm::Anonymizer::Empty(PrivateTag const &pt)
392
393 Make PrivateTag pt empty (if not found tag will be created) Pay
394 special attention that this code must be done before any call to
395 Empty/Remove of the associated Private Creator, but before any call to
396 Replace. ";
397
379398 %feature("docstring") gdcm::Anonymizer::Empty "bool
380399 gdcm::Anonymizer::Empty(Tag const &t)
381400
382 Make Tag t empty (if not found tag will be created) Warning: does not
383 handle SQ element ";
401 Make Tag t empty (if not found tag will be created) ";
384402
385403 %feature("docstring") gdcm::Anonymizer::GetCryptographicMessageSyntax
386404 "const CryptographicMessageSyntax*
390408 gdcm::Anonymizer::GetFile() ";
391409
392410 %feature("docstring") gdcm::Anonymizer::Remove "bool
411 gdcm::Anonymizer::Remove(PrivateTag const &pt)
412
413 remove a private tag (even a SQ can be removed) Pay special attention
414 that this code must be done before any call to Empty/Remove of the
415 associated Private Creator, but before any call to Replace. When the
416 private reservation becomes empty, no check is done to automatically
417 remove the private creator ";
418
419 %feature("docstring") gdcm::Anonymizer::Remove "bool
393420 gdcm::Anonymizer::Remove(Tag const &t)
394421
395 remove a tag (even a SQ can be removed) Return code is false when tag
396 t cannot be found ";
422 remove a tag (even a SQ can be removed) ";
397423
398424 %feature("docstring") gdcm::Anonymizer::RemoveGroupLength "bool
399425 gdcm::Anonymizer::RemoveGroupLength()
410436
411437 Main function that loop over all elements and remove retired element.
412438 ";
439
440 %feature("docstring") gdcm::Anonymizer::Replace "bool
441 gdcm::Anonymizer::Replace(PrivateTag const &t, const char *value) ";
442
443 %feature("docstring") gdcm::Anonymizer::Replace "bool
444 gdcm::Anonymizer::Replace(PrivateTag const &t, const char *value, VL
445 const &vl) ";
413446
414447 %feature("docstring") gdcm::Anonymizer::Replace "bool
415448 gdcm::Anonymizer::Replace(Tag const &t, const char *value)
657690 %feature("docstring") gdcm::Attribute "
658691
659692 Attribute class This class use template metaprograming tricks to let
660 the user know when the template instanciation does not match the
693 the user know when the template instantiation does not match the
661694 public dictionary.
662695
663696 Typical example that compile is: Attribute<0x0008,0x9007> a =
697730 gdcm::Attribute< Group, Element, TVR, TVM >::GetValue(unsigned int
698731 idx=0) ";
699732
700 %feature("docstring") gdcm::Attribute::GetValue "ArrayType const&
733 %feature("docstring") gdcm::Attribute::GetValue "const ArrayType&
701734 gdcm::Attribute< Group, Element, TVR, TVM >::GetValue(unsigned int
702735 idx=0) const ";
703736
763796 >::GetValue() ";
764797
765798 %feature("docstring") gdcm::Attribute< Group, Element, TVR, VM::VM1
766 >::GetValue " ArrayType const& gdcm::Attribute< Group, Element, TVR,
799 >::GetValue " const ArrayType& gdcm::Attribute< Group, Element, TVR,
767800 VM::VM1 >::GetValue() const ";
768801
769802 %feature("docstring") gdcm::Attribute< Group, Element, TVR, VM::VM1
850883 VM::VM1_n >::GetValue(unsigned int idx=0) ";
851884
852885 %feature("docstring") gdcm::Attribute< Group, Element, TVR, VM::VM1_n
853 >::GetValue " ArrayType const& gdcm::Attribute< Group, Element, TVR,
886 >::GetValue " const ArrayType& gdcm::Attribute< Group, Element, TVR,
854887 VM::VM1_n >::GetValue(unsigned int idx=0) const ";
855888
856889 %feature("docstring") gdcm::Attribute< Group, Element, TVR, VM::VM1_n
11021135 %feature("docstring") gdcm::BaseQuery::GetQueryDataSet "DataSet&
11031136 gdcm::BaseQuery::GetQueryDataSet() ";
11041137
1105 %feature("docstring") gdcm::BaseQuery::GetQueryDataSet "DataSet
1106 const& gdcm::BaseQuery::GetQueryDataSet() const
1138 %feature("docstring") gdcm::BaseQuery::GetQueryDataSet "const
1139 DataSet& gdcm::BaseQuery::GetQueryDataSet() const
11071140
11081141 Set/Get the internal representation of the query as a DataSet. ";
11091142
12251258 %feature("docstring") gdcm::SegmentHelper::BasicCodedEntry::IsEmpty "bool gdcm::SegmentHelper::BasicCodedEntry::IsEmpty(const bool
12261259 checkOptionalAttributes=false) const
12271260
1228 Check if each attibutes of the basic coded entry is defined.
1261 Check if each attributes of the basic coded entry is defined.
12291262
12301263 Parameters:
12311264 -----------
12721305 %feature("docstring") gdcm::Bitmap::GetBuffer "bool
12731306 gdcm::Bitmap::GetBuffer(char *buffer) const
12741307
1275 Acces the raw data. ";
1308 Access the raw data. ";
12761309
12771310 %feature("docstring") gdcm::Bitmap::GetBufferLength "unsigned long
12781311 gdcm::Bitmap::GetBufferLength() const
15191552
15201553 ByteBuffer.
15211554
1522 Detailled description here looks like a std::streambuf or std::filebuf
1555 Detailed description here looks like a std::streambuf or std::filebuf
15231556 class with the get and peek pointer
15241557
15251558 C++ includes: gdcmByteBuffer.h ";
15441577
15451578 ByteSwap.
15461579
1547 Perform machine dependent byte swaping (Little Endian, Big Endian, Bad
1548 Little Endian, Bad Big Endian). TODO: bswap_32 / bswap_64 ...
1580 Perform machine dependent byte swapping (Little Endian, Big Endian,
1581 Bad Little Endian, Bad Big Endian). TODO: bswap_32 / bswap_64 ...
15491582
15501583 C++ includes: gdcmByteSwap.h ";
15511584
16561689 %feature("docstring") gdcm::ByteValue::SetLength "void
16571690 gdcm::ByteValue::SetLength(VL vl) override ";
16581691
1659 %feature("docstring") gdcm::ByteValue::Write "std::ostream const&
1692 %feature("docstring") gdcm::ByteValue::Write "const std::ostream&
16601693 gdcm::ByteValue::Write(std::ostream &os) const ";
16611694
1662 %feature("docstring") gdcm::ByteValue::Write "std::ostream const&
1695 %feature("docstring") gdcm::ByteValue::Write "const std::ostream&
16631696 gdcm::ByteValue::Write(std::ostream &os) const ";
16641697
16651698 %feature("docstring") gdcm::ByteValue::WriteBuffer "bool
18011834 "std::vector<PresentationDataValue>
18021835 gdcm::network::CFindRSP::ConstructPDVByDataSet(const DataSet
18031836 *inDataSet) ";
1837
1838
1839 // File: classgdcm_1_1Cleaner.xml
1840 %feature("docstring") gdcm::Cleaner "
1841
1842 Cleaner.
1843
1844 This class implement the Subject/Observer pattern trigger the
1845 following event: AnonymizeEvent
1846
1847 IterationEvent
1848
1849 StartEvent
1850
1851 EndEvent
1852
1853 C++ includes: gdcmCleaner.h ";
1854
1855 %feature("docstring") gdcm::Cleaner::Cleaner "gdcm::Cleaner::Cleaner() ";
1856
1857 %feature("docstring") gdcm::Cleaner::~Cleaner "gdcm::Cleaner::~Cleaner() override ";
1858
1859 %feature("docstring") gdcm::Cleaner::Clean "bool
1860 gdcm::Cleaner::Clean()
1861
1862 main loop ";
1863
1864 %feature("docstring") gdcm::Cleaner::Empty "bool
1865 gdcm::Cleaner::Empty(DPath const &dpath) ";
1866
1867 %feature("docstring") gdcm::Cleaner::Empty "bool
1868 gdcm::Cleaner::Empty(PrivateTag const &pt) ";
1869
1870 %feature("docstring") gdcm::Cleaner::Empty "bool
1871 gdcm::Cleaner::Empty(Tag const &t) ";
1872
1873 %feature("docstring") gdcm::Cleaner::Empty "bool
1874 gdcm::Cleaner::Empty(VR const &vr) ";
1875
1876 %feature("docstring") gdcm::Cleaner::GetFile "File&
1877 gdcm::Cleaner::GetFile() ";
1878
1879 %feature("docstring") gdcm::Cleaner::Preserve "bool
1880 gdcm::Cleaner::Preserve(DPath const &dpath) ";
1881
1882 %feature("docstring") gdcm::Cleaner::Remove "bool
1883 gdcm::Cleaner::Remove(DPath const &dpath) ";
1884
1885 %feature("docstring") gdcm::Cleaner::Remove "bool
1886 gdcm::Cleaner::Remove(PrivateTag const &pt) ";
1887
1888 %feature("docstring") gdcm::Cleaner::Remove "bool
1889 gdcm::Cleaner::Remove(Tag const &t) ";
1890
1891 %feature("docstring") gdcm::Cleaner::Remove "bool
1892 gdcm::Cleaner::Remove(VR const &vr) ";
1893
1894 %feature("docstring") gdcm::Cleaner::RemoveAllGroupLength "void
1895 gdcm::Cleaner::RemoveAllGroupLength(bool remove)
1896
1897 Should I remove all group length (deprecated). Default: true. ";
1898
1899 %feature("docstring") gdcm::Cleaner::RemoveAllIllegal "void
1900 gdcm::Cleaner::RemoveAllIllegal(bool remove)
1901
1902 Should I remove all illegal attribute. Default: true. ";
1903
1904 %feature("docstring") gdcm::Cleaner::RemoveAllMissingPrivateCreator "void gdcm::Cleaner::RemoveAllMissingPrivateCreator(bool remove)
1905
1906 Should I remove all private tag for which no private creator is found.
1907 Default: true ";
1908
1909 %feature("docstring") gdcm::Cleaner::RemoveMissingPrivateCreator "bool gdcm::Cleaner::RemoveMissingPrivateCreator(Tag const &t)
1910
1911 Specify a private tag (odd number) without a private creator (root
1912 level only for now): ";
1913
1914 %feature("docstring") gdcm::Cleaner::Scrub "bool
1915 gdcm::Cleaner::Scrub(DPath const &dpath) ";
1916
1917 %feature("docstring") gdcm::Cleaner::Scrub "bool
1918 gdcm::Cleaner::Scrub(PrivateTag const &pt) ";
1919
1920 %feature("docstring") gdcm::Cleaner::Scrub "bool
1921 gdcm::Cleaner::Scrub(Tag const &t)
1922
1923 Clean digital tash (typically SIEMENS CSA header): ";
1924
1925 %feature("docstring") gdcm::Cleaner::Scrub "bool
1926 gdcm::Cleaner::Scrub(VR const &vr) ";
1927
1928 %feature("docstring") gdcm::Cleaner::SetFile "void
1929 gdcm::Cleaner::SetFile(const File &f)
1930
1931 Set/Get File. ";
18041932
18051933
18061934 // File: classgdcm_1_1network_1_1CMoveCancelRq.xml
20592187
20602188 Class to do handle the crypto factory.
20612189
2062 GDCM needs to access in a platform independant way the user specified
2190 GDCM needs to access in a platform independent way the user specified
20632191 crypto engine. It can be: CAPI (windows only)
20642192
20652193 OPENSSL (portable)
21632291 %feature("docstring") gdcm::CSAElement::GetValue "Value&
21642292 gdcm::CSAElement::GetValue() ";
21652293
2166 %feature("docstring") gdcm::CSAElement::GetValue "Value const&
2294 %feature("docstring") gdcm::CSAElement::GetValue "const Value&
21672295 gdcm::CSAElement::GetValue() const
21682296
21692297 Set/Get Value (bytes array, SQ of items, SQ of fragments): ";
21732301
21742302 Set/Get VM. ";
21752303
2176 %feature("docstring") gdcm::CSAElement::GetVR "VR const&
2304 %feature("docstring") gdcm::CSAElement::GetVR "const VR&
21772305 gdcm::CSAElement::GetVR() const
21782306
21792307 Set/Get VR. ";
24252553 %feature("docstring") gdcm::Curve::GetAsPoints "void
24262554 gdcm::Curve::GetAsPoints(float *array) const ";
24272555
2428 %feature("docstring") gdcm::Curve::GetCurveDataDescriptor "std::vector<unsigned short> const&
2429 gdcm::Curve::GetCurveDataDescriptor() const ";
2556 %feature("docstring") gdcm::Curve::GetCurveDataDescriptor "const
2557 std::vector<unsigned short>& gdcm::Curve::GetCurveDataDescriptor()
2558 const ";
24302559
24312560 %feature("docstring") gdcm::Curve::GetDataValueRepresentation "unsigned short gdcm::Curve::GetDataValueRepresentation() const ";
24322561
25542683 %feature("docstring") gdcm::DataElement::GetValue "Value&
25552684 gdcm::DataElement::GetValue() ";
25562685
2557 %feature("docstring") gdcm::DataElement::GetValue "Value const&
2686 %feature("docstring") gdcm::DataElement::GetValue "const Value&
25582687 gdcm::DataElement::GetValue() const
25592688
25602689 Set/Get Value (bytes array, SQ of items, SQ of fragments): ";
25632692
25642693 Interpret the Value stored in the DataElement. This is more robust
25652694 (but also more expensive) to call this function rather than the
2566 simpliest form: GetSequenceOfItems() It also return NULL when the
2567 Value is NOT of type SequenceOfItems WARNING: in case
2568 GetSequenceOfItems() succeed the function return this value, otherwise
2569 it creates a new SequenceOfItems, you should handle that in your case,
2570 for instance: SmartPointer<SequenceOfItems> sqi = de.GetValueAsSQ();
2571 ";
2695 simplest form: GetSequenceOfItems() It also return NULL when the Value
2696 is NOT of type SequenceOfItems WARNING: in case GetSequenceOfItems()
2697 succeed the function return this value, otherwise it creates a new
2698 SequenceOfItems, you should handle that in your case, for instance:
2699 SmartPointer<SequenceOfItems> sqi = de.GetValueAsSQ(); ";
25722700
25732701 %feature("docstring") gdcm::DataElement::GetVL "VL&
25742702 gdcm::DataElement::GetVL() ";
25782706
25792707 Get VL. ";
25802708
2581 %feature("docstring") gdcm::DataElement::GetVR "VR const&
2709 %feature("docstring") gdcm::DataElement::GetVR "const VR&
25822710 gdcm::DataElement::GetVR() const
25832711
25842712 Get VR do not set VR::SQ on bytevalue data element ";
27732901 %feature("docstring") gdcm::DataSet::GetPrivateCreator "std::string
27742902 gdcm::DataSet::GetPrivateCreator(const Tag &t) const
27752903
2776 Return the private creator of the private tag 't': ";
2904 Return the private creator of the private tag 't': or an empty string
2905 when not found ";
2906
2907 %feature("docstring") gdcm::DataSet::GetPrivateTag "PrivateTag
2908 gdcm::DataSet::GetPrivateTag(const Tag &t) const
2909
2910 Return the private tag of the private tag 't', private creator will be
2911 set to empty if not found. ";
27772912
27782913 %feature("docstring") gdcm::DataSet::Insert "void
27792914 gdcm::DataSet::Insert(const DataElement &de)
28402975 %feature("docstring") gdcm::DataSet::Size "SizeType
28412976 gdcm::DataSet::Size() const ";
28422977
2843 %feature("docstring") gdcm::DataSet::Write "std::ostream const&
2978 %feature("docstring") gdcm::DataSet::Write "const std::ostream&
28442979 gdcm::DataSet::Write(std::ostream &os) const ";
28452980
28462981
28653000 gdcm::DataSetEvent::CheckEvent(const ::gdcm::Event *e) const override
28663001 ";
28673002
2868 %feature("docstring") gdcm::DataSetEvent::GetDataSet "DataSet const&
3003 %feature("docstring") gdcm::DataSetEvent::GetDataSet "const DataSet&
28693004 gdcm::DataSetEvent::GetDataSet() const ";
28703005
28713006 %feature("docstring") gdcm::DataSetEvent::GetEventName "const char*
29633098 gdcm::Defs::GetMacros() const
29643099
29653100 Users should not directly use Macro. Macro are simply a way for DICOM
2966 WG to re-use Tables. Macros are conviently wraped within Modules. See
2967 gdcm::Module API directly ";
3101 WG to re-use Tables. Macros are conveniently wrapped within Modules.
3102 See gdcm::Module API directly ";
29683103
29693104 %feature("docstring") gdcm::Defs::GetModules "Modules&
29703105 gdcm::Defs::GetModules() ";
33993534 Class for manipulation directories.
34003535
34013536 This implementation provide a cross platform implementation for
3402 manipulating directores: basically traversing directories and
3537 manipulating directories: basically traversing directories and
34033538 harvesting files
34043539
34053540 will not take into account unix type hidden file recursive option will
34143549
34153550 %feature("docstring") gdcm::Directory::~Directory "gdcm::Directory::~Directory()=default ";
34163551
3417 %feature("docstring") gdcm::Directory::GetDirectories "FilenamesType
3418 const& gdcm::Directory::GetDirectories() const
3552 %feature("docstring") gdcm::Directory::GetDirectories "const
3553 FilenamesType& gdcm::Directory::GetDirectories() const
34193554
34203555 Return the Directories traversed. ";
34213556
3422 %feature("docstring") gdcm::Directory::GetFilenames "FilenamesType
3423 const& gdcm::Directory::GetFilenames() const
3557 %feature("docstring") gdcm::Directory::GetFilenames "const
3558 FilenamesType& gdcm::Directory::GetFilenames() const
34243559
34253560 Set/Get the file names within the directory. ";
34263561
3427 %feature("docstring") gdcm::Directory::GetToplevel "FilenameType
3428 const& gdcm::Directory::GetToplevel() const
3562 %feature("docstring") gdcm::Directory::GetToplevel "const
3563 FilenameType& gdcm::Directory::GetToplevel() const
34293564
34303565 Get the name of the toplevel directory. ";
34313566
34593594 C++ includes: gdcmDirectoryHelper.h ";
34603595
34613596
3597 // File: classgdcm_1_1DPath.xml
3598 %feature("docstring") gdcm::DPath "
3599
3600 class to handle a DICOM path While supp 118 did introduced a notion of
3601 XPath for XML Native model this convention is too XML-centric. Instead
3602 prefer DCMTK style
3603 notationhttps://groups.google.com/g/comp.protocols.dicom/c/IyIH0IOBMPA
3604
3605 C++ includes: gdcmDPath.h ";
3606
3607 %feature("docstring") gdcm::DPath::DPath "gdcm::DPath::DPath() ";
3608
3609 %feature("docstring") gdcm::DPath::~DPath "gdcm::DPath::~DPath() ";
3610
3611 %feature("docstring") gdcm::DPath::ConstructFromString "bool
3612 gdcm::DPath::ConstructFromString(const char *path) ";
3613
3614 %feature("docstring") gdcm::DPath::Match "bool
3615 gdcm::DPath::Match(DPath const &other) const
3616
3617 Return whether or not 'other' match the template DPath. ";
3618
3619 %feature("docstring") gdcm::DPath::Print "void
3620 gdcm::DPath::Print(std::ostream &) const ";
3621
3622
34623623 // File: classgdcm_1_1DummyValueGenerator.xml
34633624 %feature("docstring") gdcm::DummyValueGenerator "
34643625
37133874 process over all files using the same input Series Instance UID so
37143875 that a proper mapping from the old Series UID is done to the new one.
37153876 Since a new Series Instance UID is generated, there is no sense to
3716 preserve the original Frame of Reference UID, altough it would have
3877 preserve the original Frame of Reference UID, although it would have
37173878 made sense here.
37183879
37193880 C++ includes: gdcmEmptyMaskGenerator.h ";
37583919
37593920 EncodingImplementation.
37603921
3761 TODO ";
3922 TODO
3923
3924 C++ includes: gdcmElement.h ";
37623925
37633926
37643927 // File: classgdcm_1_1EncodingImplementation_3_01VR_1_1VRASCII_01_4.xml
38063969 // File: classgdcm_1_1EquipmentManufacturer.xml
38073970 %feature("docstring") gdcm::EquipmentManufacturer "
38083971
3972 The intent is for private tags handling. This class is not meant to
3973 handle all possible vendors in the world, simply those well known
3974 where we intend to read private tags afterwards (typically
3975 SIEMENS+CSA, GEMS+PDB ...)
3976
38093977 C++ includes: gdcmEquipmentManufacturer.h ";
38103978
38113979
40084176
40094177 Set File Meta Information. ";
40104178
4011 %feature("docstring") gdcm::File::Write "std::ostream const&
4179 %feature("docstring") gdcm::File::Write "const std::ostream&
40124180 gdcm::File::Write(std::ostream &os) const
40134181
40144182 Write. ";
41964364 description of the deriation applied to the new image data from the
41974365 original. Both these context groups are extensible.
41984366
4199 File Derivation is compulsary when creating a lossy derived image.
4367 File Derivation is compulsory when creating a lossy derived image.
42004368
42014369 C++ includes: gdcmFileDerivation.h ";
42024370
42674435 After changing a file from Implicit to Explicit representation (see
42684436 ImageChangeTransferSyntax) one operation is to make sure the VR of
42694437 each DICOM attribute are accurate and do match the one from PS 3.6.
4270 Indeed when a file is written in Implicit reprensentation, the VR is
4438 Indeed when a file is written in Implicit representation, the VR is
42714439 not stored directly in the file.
42724440
42734441 WARNING: changing an implicit dataset to an explicit dataset is NOT a
44174585
44184586 Class to manipulate file name's.
44194587
4420 OS independant representation of a filename (to query path, name and
4588 OS independent representation of a filename (to query path, name and
44214589 extension from a filename)
44224590
44234591 C++ includes: gdcmFilename.h ";
45364704
45374705 Get a particular filename (call after Generate) ";
45384706
4539 %feature("docstring") gdcm::FilenameGenerator::GetFilenames "FilenamesType const& gdcm::FilenameGenerator::GetFilenames() const
4707 %feature("docstring") gdcm::FilenameGenerator::GetFilenames "const
4708 FilenamesType& gdcm::FilenameGenerator::GetFilenames() const
45404709
45414710 Return all filenames. ";
45424711
45854754
45864755 Deprecated . Does nothing ";
45874756
4588 %feature("docstring") gdcm::FileSet::GetFiles "FilesType const&
4757 %feature("docstring") gdcm::FileSet::GetFiles "const FilesType&
45894758 gdcm::FileSet::GetFiles() const ";
45904759
45914760 %feature("docstring") gdcm::FileSet::SetFiles "void
48605029
48615030 Append path at the end of the path list WARNING: not thread safe ! ";
48625031
4863 %feature("docstring") gdcm::Global::GetDefs "Defs const&
5032 %feature("docstring") gdcm::Global::GetDefs "const Defs&
48645033 gdcm::Global::GetDefs() const
48655034
48665035 retrieve the default/internal (Part 3) You need to explicitly call
48695038 %feature("docstring") gdcm::Global::GetDicts "Dicts&
48705039 gdcm::Global::GetDicts() ";
48715040
4872 %feature("docstring") gdcm::Global::GetDicts "Dicts const&
5041 %feature("docstring") gdcm::Global::GetDicts "const Dicts&
48735042 gdcm::Global::GetDicts() const
48745043
48755044 retrieve the default/internal dicts (Part 6) This dict is filled up at
49045073
49055074 %feature("docstring") gdcm::GroupDict::~GroupDict "gdcm::GroupDict::~GroupDict()=default ";
49065075
4907 %feature("docstring") gdcm::GroupDict::GetAbbreviation "std::string
4908 const& gdcm::GroupDict::GetAbbreviation(uint16_t num) const ";
4909
4910 %feature("docstring") gdcm::GroupDict::GetName "std::string const&
5076 %feature("docstring") gdcm::GroupDict::GetAbbreviation "const
5077 std::string& gdcm::GroupDict::GetAbbreviation(uint16_t num) const ";
5078
5079 %feature("docstring") gdcm::GroupDict::GetName "const std::string&
49115080 gdcm::GroupDict::GetName(uint16_t num) const ";
49125081
49135082 %feature("docstring") gdcm::GroupDict::Size "size_t
51265295 gdcm::Image::GetSpacing() const
51275296
51285297 Return a 3-tuples specifying the spacing NOTE: 3rd value can be an
5129 aribtrary 1 value when the spacing was not specified (ex. 2D image).
5298 arbitrary 1 value when the spacing was not specified (ex. 2D image).
51305299 WARNING: when the spacing is not specifier, a default value of 1 will
51315300 be returned ";
51325301
52055374
52065375 ImageChangePhotometricInterpretation class.
52075376
5208 Class to change the Photometric Interpetation of an input DICOM
5377 Class to change the Photometric Interpretation of an input DICOM
52095378
52105379 C++ includes: gdcmImageChangePhotometricInterpretation.h ";
52115380
52465415 ImageChangePlanarConfiguration class.
52475416
52485417 Class to change the Planar configuration of an input DICOM By default
5249 it will change into the more usual reprensentation:
5250 PlanarConfiguration = 0
5418 it will change into the more usual representation: PlanarConfiguration
5419 = 0
52515420
52525421 C++ includes: gdcmImageChangePlanarConfiguration.h ";
52535422
55955764 hold the whole uncompressed image as defined by Region region. 0 upon
55965765 error ";
55975766
5598 %feature("docstring") gdcm::ImageRegionReader::GetRegion "Region
5599 const& gdcm::ImageRegionReader::GetRegion() const ";
5767 %feature("docstring") gdcm::ImageRegionReader::GetRegion "const
5768 Region& gdcm::ImageRegionReader::GetRegion() const ";
56005769
56015770 %feature("docstring") gdcm::ImageRegionReader::ReadInformation "bool
56025771 gdcm::ImageRegionReader::ReadInformation()
60026171 gdcm::IPPSorter::SetZSpacingTolerance(double tol)
60036172
60046173 Another reason for failure is that that Z-Spacing is only slightly
6005 changing (eg 1e-3) along the serie, a human can determine that this is
6006 ok and change the tolerance from its default value: 1e-6 ";
6174 changing (eg 1e-3) along the series, a human can determine that this
6175 is ok and change the tolerance from its default value: 1e-6 ";
60076176
60086177 %feature("docstring") gdcm::IPPSorter::Sort "bool
60096178 gdcm::IPPSorter::Sort(std::vector< std::string > const &filenames)
60116180
60126181 Main entry point to the sorter. It will execute the filter, option
60136182 should be set before running this function (SetZSpacingTolerance, ...)
6014 Return value indicate if sorting could be achived. Warning this does
6183 Return value indicate if sorting could be achieved,. Warning this does
60156184 NOT imply that spacing is consistent, it only means the file are
60166185 sorted according to IPP You should check if ZSpacing is 0 or not to
60176186 deduce if file are actually a 3D volume ";
60256194 A component of the value of a Data Element that is of Value
60266195 Representation Sequence of Items. An Item contains a Data Set . See PS
60276196 3.5 7.5.1 Item Encoding Rules Each Item of a Data Element of VR SQ
6028 shall be encoded as a DICOM Standart Data Element with a specific Data
6197 shall be encoded as a DICOM Standard Data Element with a specific Data
60296198 Element Tag of Value (FFFE,E000). The Item Tag is followed by a 4 byte
60306199 Item Length field encoded in one of the following two ways Explicit/
60316200 Implicit ITEM: A component of the Value of a Data Element that is of
66066775 gdcmScanner.h ";
66076776
66086777
6778 // File: structgdcm_1_1Scanner2_1_1ltstr.xml
6779 %feature("docstring") gdcm::Scanner2::ltstr "C++ includes:
6780 gdcmScanner2.h ";
6781
6782
66096783 // File: structgdcm_1_1StrictScanner_1_1ltstr.xml
66106784 %feature("docstring") gdcm::StrictScanner::ltstr "C++ includes:
66116785 gdcmStrictScanner.h ";
66126786
66136787
6788 // File: structgdcm_1_1StrictScanner2_1_1ltstr.xml
6789 %feature("docstring") gdcm::StrictScanner2::ltstr "C++ includes:
6790 gdcmStrictScanner2.h ";
6791
6792
66146793 // File: classgdcm_1_1Macro.xml
66156794 %feature("docstring") gdcm::Macro "
66166795
66286807 %feature("docstring") gdcm::Macro::AddMacroEntry "void
66296808 gdcm::Macro::AddMacroEntry(const Tag &tag, const MacroEntry &module)
66306809
6631 Will add a ModuleEntry direcly at root-level. See Macro for nested-
6810 Will add a ModuleEntry directly at root-level. See Macro for nested-
66326811 included level. ";
66336812
66346813 %feature("docstring") gdcm::Macro::Clear "void gdcm::Macro::Clear()
69717150 gdcm::Module::AddModuleEntry(const Tag &tag, const ModuleEntry
69727151 &module)
69737152
6974 Will add a ModuleEntry direcly at root-level. See Macro for nested-
7153 Will add a ModuleEntry directly at root-level. See Macro for nested-
69757154 included level. ";
69767155
69777156 %feature("docstring") gdcm::Module::Clear "void
76157794
76167795 see AreOverlaysInPixelData Todo Is there actually any way to recognize
76177796 an overlay ? On images with multiple overlay I do not see any way to
7618 differenciate them (other than the group tag).
7797 differentiate them (other than the group tag).
76197798
76207799 Example:
76217800
78097988
78107989 Parser ala XML_Parser from expat (SAX)
78117990
7812 Detailled description here Simple API for DICOM
7991 Detailed description here Simple API for DICOM
78137992
78147993 C++ includes: gdcmParser.h ";
78157994
78718050 ";
78728051
78738052 %feature("docstring")
7874 gdcm::network::PDataTFPDU::GetPresentationDataValue "PresentationDataValue const&
8053 gdcm::network::PDataTFPDU::GetPresentationDataValue "const
8054 PresentationDataValue&
78758055 gdcm::network::PDataTFPDU::GetPresentationDataValue(SizeType i) const
78768056 ";
78778057
79348114
79358115 WARNING: : the API of this class might change.
79368116
8117 WARNING: : SEDESC is not always pure ASCII it can contains latin1
8118
79378119 See: CSAHeader
79388120
79398121 C++ includes: gdcmPDBHeader.h ";
81108292
81118293 PixelFormat.
81128294
8113 By default the Pixel Type will be instanciated with the following
8295 By default the Pixel Type will be instantiated with the following
81148296 parameters: SamplesPerPixel : 1
81158297
81168298 BitsAllocated : 8
83768558 DataSet.
83778559
83788560 For instance when one read in a lossy compressed image and write out
8379 as unencapsulated (ie implicitely lossless) then some attribute are
8561 as unencapsulated (ie implicitly lossless) then some attribute are
83808562 definitely needed to mark this dataset as Lossy (typically 0028,2114)
83818563
83828564 C++ includes: gdcmPixmapWriter.h ";
85148696
85158697 Set Preamble to the default one. ";
85168698
8517 %feature("docstring") gdcm::Preamble::Write "std::ostream const&
8699 %feature("docstring") gdcm::Preamble::Write "const std::ostream&
85188700 gdcm::Preamble::Write(std::ostream &os) const
85198701
85208702 Write Preamble. ";
85898771 "uint8_t gdcm::network::PresentationContextAC::GetReason() const ";
85908772
85918773 %feature("docstring")
8592 gdcm::network::PresentationContextAC::GetTransferSyntax "TransferSyntaxSub const&
8774 gdcm::network::PresentationContextAC::GetTransferSyntax "const
8775 TransferSyntaxSub&
85938776 gdcm::network::PresentationContextAC::GetTransferSyntax() const ";
85948777
85958778 %feature("docstring") gdcm::network::PresentationContextAC::Print "void gdcm::network::PresentationContextAC::Print(std::ostream &os)
86788861 VerificationSOPClass) ";
86798862
86808863 %feature("docstring")
8681 gdcm::PresentationContextGenerator::GetPresentationContexts "PresentationContextArrayType const&
8864 gdcm::PresentationContextGenerator::GetPresentationContexts "const
8865 PresentationContextArrayType&
86828866 gdcm::PresentationContextGenerator::GetPresentationContexts() ";
86838867
86848868 %feature("docstring")
87348918 gdcm::network::PresentationContextRQ::GetAbstractSyntax() ";
87358919
87368920 %feature("docstring")
8737 gdcm::network::PresentationContextRQ::GetAbstractSyntax "AbstractSyntax const&
8921 gdcm::network::PresentationContextRQ::GetAbstractSyntax "const
8922 AbstractSyntax&
87388923 gdcm::network::PresentationContextRQ::GetAbstractSyntax() const ";
87398924
87408925 %feature("docstring")
87528937 gdcm::network::PresentationContextRQ::GetTransferSyntax(SizeType i) ";
87538938
87548939 %feature("docstring")
8755 gdcm::network::PresentationContextRQ::GetTransferSyntax "TransferSyntaxSub const&
8940 gdcm::network::PresentationContextRQ::GetTransferSyntax "const
8941 TransferSyntaxSub&
87568942 gdcm::network::PresentationContextRQ::GetTransferSyntax(SizeType i)
87578943 const ";
87588944
87598945 %feature("docstring")
8760 gdcm::network::PresentationContextRQ::GetTransferSyntaxes "std::vector<TransferSyntaxSub> const&
8946 gdcm::network::PresentationContextRQ::GetTransferSyntaxes "const
8947 std::vector<TransferSyntaxSub>&
87618948 gdcm::network::PresentationContextRQ::GetTransferSyntaxes() const ";
87628949
87638950 %feature("docstring") gdcm::network::PresentationContextRQ::Print "void gdcm::network::PresentationContextRQ::Print(std::ostream &os)
93669553 formedness check only, and to some extent catch known error (non well-
93679554 formed document).
93689555
9369 Detailled description here
9556 Detailed description here
93709557
93719558 A DataSet DOES NOT contains group 0x0002 (see FileMetaInformation)
93729559
95399726 it was FLOAT32). Because VR:DS is closer to a 64bits floating point
95409727 type FLOAT64 is thus a best matching pixel type for the floating point
95419728 transformation. Example: Let say input is FLOAT64, and we want UINT16
9542 as ouput, we would do:
9729 as output, we would do:
95439730
95449731 handle floating point transformation back and forth to integer
95459732 properly (no loss)
96069793
96079794 By default (when UseTargetPixelType is false), a best matching Target
96089795 Pixel Type is computed. However user can override this auto selection
9609 by switching UseTargetPixelType:true and also specifying the specifix
9796 by switching UseTargetPixelType:true and also specifying the specific
96109797 Target Pixel Type ";
96119798
96129799 %feature("docstring") gdcm::Rescaler::SetUseTargetPixelType "void
97099896 Scanner.
97109897
97119898 This filter is meant for quickly browsing a FileSet (a set of files on
9712 disk). Special consideration are taken so as to read the mimimum
9899 disk). Special consideration are taken so as to read the minimum
97139900 amount of information in each file in order to retrieve the user
97149901 specified set of DICOM Attribute.
97159902
97749961 Will loop over all files and return the first file where value match
97759962 the reference value 'valueref' ";
97769963
9777 %feature("docstring") gdcm::Scanner::GetFilenames "Directory::FilenamesType const& gdcm::Scanner::GetFilenames() const ";
9964 %feature("docstring") gdcm::Scanner::GetFilenames "const
9965 Directory::FilenamesType& gdcm::Scanner::GetFilenames() const ";
97789966
97799967 %feature("docstring") gdcm::Scanner::GetKeys "Directory::FilenamesType gdcm::Scanner::GetKeys() const
97809968
97819969 Return the list of filename that are key in the internal map, which
97829970 means those filename were properly parsed ";
97839971
9784 %feature("docstring") gdcm::Scanner::GetMapping "TagToValue const&
9972 %feature("docstring") gdcm::Scanner::GetMapping "const TagToValue&
97859973 gdcm::Scanner::GetMapping(const char *filename) const
97869974
97879975 Get the std::map mapping filenames to value for file 'filename'. ";
97889976
9789 %feature("docstring") gdcm::Scanner::GetMappingFromTagToValue "TagToValue const& gdcm::Scanner::GetMappingFromTagToValue(Tag const
9790 &t, const char *value) const
9977 %feature("docstring") gdcm::Scanner::GetMappingFromTagToValue "const
9978 TagToValue& gdcm::Scanner::GetMappingFromTagToValue(Tag const &t,
9979 const char *value) const
97919980
97929981 See GetFilenameFromTagToValue(). This is simply
97939982 GetFilenameFromTagToValue followed. ";
97949983
9795 %feature("docstring") gdcm::Scanner::GetMappings "MappingType const&
9984 %feature("docstring") gdcm::Scanner::GetMappings "const MappingType&
97969985 gdcm::Scanner::GetMappings() const
97979986
97989987 Mappings are the mapping from a particular tag to the map, mapping
981410003 the TagToValue hash table. WARNING: Tag 't' should have been added
981510004 via AddTag() prior to the Scan() call ! ";
981610005
9817 %feature("docstring") gdcm::Scanner::GetValues "ValuesType const&
10006 %feature("docstring") gdcm::Scanner::GetValues "const ValuesType&
981810007 gdcm::Scanner::GetValues() const
981910008
982010009 Get all the values found (in lexicographic order) ";
984610035 Start the scan ! ";
984710036
984810037
10038 // File: classgdcm_1_1Scanner2.xml
10039 %feature("docstring") gdcm::Scanner2 "
10040
10041 Scanner2.
10042
10043 This filter is meant for quickly browsing a FileSet (a set of files on
10044 disk). Special consideration are taken so as to read the minimum
10045 amount of information in each file in order to retrieve the user
10046 specified set of DICOM Attribute.
10047
10048 This filter is dealing with both VRASCII and VRBINARY element, thanks
10049 to the help of StringFilter
10050
10051 WARNING: IMPORTANT In case of file where tags are not ordered
10052 (illegal as per DICOM specification), the output will be missing
10053 information
10054
10055 implementation details. All values are stored in a std::set of
10056 std::string. Then the address of the cstring underlying the
10057 std::string is used in the std::map. This class implement the
10058 Subject/Observer pattern trigger the following events: ProgressEvent
10059
10060 StartEvent
10061
10062 EndEvent
10063
10064 C++ includes: gdcmScanner2.h ";
10065
10066 %feature("docstring") gdcm::Scanner2::Scanner2 "gdcm::Scanner2::Scanner2() ";
10067
10068 %feature("docstring") gdcm::Scanner2::~Scanner2 "gdcm::Scanner2::~Scanner2() override ";
10069
10070 %feature("docstring") gdcm::Scanner2::AddPrivateTag "bool
10071 gdcm::Scanner2::AddPrivateTag(PrivateTag const &pt) ";
10072
10073 %feature("docstring") gdcm::Scanner2::AddPublicTag "bool
10074 gdcm::Scanner2::AddPublicTag(Tag const &t)
10075
10076 Add a tag that will need to be read. Those are root level tags. ";
10077
10078 %feature("docstring") gdcm::Scanner2::AddSkipTag "bool
10079 gdcm::Scanner2::AddSkipTag(Tag const &t)
10080
10081 Add a tag that will need to be skipped. Those are root level skip
10082 tags. ";
10083
10084 %feature("docstring") gdcm::Scanner2::Begin "PublicConstIterator
10085 gdcm::Scanner2::Begin() const ";
10086
10087 %feature("docstring") gdcm::Scanner2::ClearPrivateTags "void
10088 gdcm::Scanner2::ClearPrivateTags() ";
10089
10090 %feature("docstring") gdcm::Scanner2::ClearPublicTags "void
10091 gdcm::Scanner2::ClearPublicTags() ";
10092
10093 %feature("docstring") gdcm::Scanner2::ClearSkipTags "void
10094 gdcm::Scanner2::ClearSkipTags() ";
10095
10096 %feature("docstring") gdcm::Scanner2::End "PublicConstIterator
10097 gdcm::Scanner2::End() const ";
10098
10099 %feature("docstring")
10100 gdcm::Scanner2::GetAllFilenamesFromPrivateTagToValue "Directory::FilenamesType
10101 gdcm::Scanner2::GetAllFilenamesFromPrivateTagToValue(PrivateTag const
10102 &pt, const char *valueref) const ";
10103
10104 %feature("docstring")
10105 gdcm::Scanner2::GetAllFilenamesFromPublicTagToValue "Directory::FilenamesType
10106 gdcm::Scanner2::GetAllFilenamesFromPublicTagToValue(Tag const &t,
10107 const char *valueref) const
10108
10109 Will loop over all files and return a vector of std::strings of
10110 filenames where value match the reference value 'valueref' ";
10111
10112 %feature("docstring")
10113 gdcm::Scanner2::GetFilenameFromPrivateTagToValue "const char*
10114 gdcm::Scanner2::GetFilenameFromPrivateTagToValue(PrivateTag const &pt,
10115 const char *valueref) const ";
10116
10117 %feature("docstring") gdcm::Scanner2::GetFilenameFromPublicTagToValue
10118 "const char* gdcm::Scanner2::GetFilenameFromPublicTagToValue(Tag
10119 const &t, const char *valueref) const
10120
10121 Will loop over all files and return the first file where value match
10122 the reference value 'valueref' ";
10123
10124 %feature("docstring") gdcm::Scanner2::GetFilenames "const
10125 Directory::FilenamesType& gdcm::Scanner2::GetFilenames() const
10126
10127 Return the list of filenames. ";
10128
10129 %feature("docstring") gdcm::Scanner2::GetKeys "Directory::FilenamesType gdcm::Scanner2::GetKeys() const
10130
10131 Return the list of filename that are key in the internal map, which
10132 means those filename were properly parsed ";
10133
10134 %feature("docstring") gdcm::Scanner2::GetMappingFromPrivateTagToValue
10135 "const PrivateTagToValue&
10136 gdcm::Scanner2::GetMappingFromPrivateTagToValue(PrivateTag const &pt,
10137 const char *value) const ";
10138
10139 %feature("docstring") gdcm::Scanner2::GetMappingFromPublicTagToValue
10140 "const PublicTagToValue&
10141 gdcm::Scanner2::GetMappingFromPublicTagToValue(Tag const &t, const
10142 char *value) const
10143
10144 See GetFilenameFromTagToValue(). This is simply
10145 GetFilenameFromTagToValue followed. ";
10146
10147 %feature("docstring") gdcm::Scanner2::GetPrivateMapping "const
10148 PrivateTagToValue& gdcm::Scanner2::GetPrivateMapping(const char
10149 *filename) const ";
10150
10151 %feature("docstring") gdcm::Scanner2::GetPrivateMappings "const
10152 PrivateMappingType& gdcm::Scanner2::GetPrivateMappings() const ";
10153
10154 %feature("docstring") gdcm::Scanner2::GetPrivateOrderedValues "Directory::FilenamesType
10155 gdcm::Scanner2::GetPrivateOrderedValues(PrivateTag const &pt) const ";
10156
10157 %feature("docstring") gdcm::Scanner2::GetPrivateValue "const char*
10158 gdcm::Scanner2::GetPrivateValue(const char *filename, PrivateTag const
10159 &t) const ";
10160
10161 %feature("docstring") gdcm::Scanner2::GetPrivateValues "ValuesType
10162 gdcm::Scanner2::GetPrivateValues(PrivateTag const &pt) const
10163
10164 Get all the values found (in lexicographic order) associated with
10165 PrivateTag 'pt'. ";
10166
10167 %feature("docstring") gdcm::Scanner2::GetPublicMapping "const
10168 PublicTagToValue& gdcm::Scanner2::GetPublicMapping(const char
10169 *filename) const
10170
10171 Get the std::map mapping filenames to value for file 'filename'. ";
10172
10173 %feature("docstring") gdcm::Scanner2::GetPublicMappings "const
10174 PublicMappingType& gdcm::Scanner2::GetPublicMappings() const
10175
10176 Mappings are the mapping from a particular tag to the map, mapping
10177 filename to value: ";
10178
10179 %feature("docstring") gdcm::Scanner2::GetPublicOrderedValues "Directory::FilenamesType gdcm::Scanner2::GetPublicOrderedValues(Tag
10180 const &t) const
10181
10182 Get all the values found (in a vector) associated with Tag 't' This
10183 function is identical to GetValues, but is accessible from the wrapped
10184 layer (python, C#, java) ";
10185
10186 %feature("docstring") gdcm::Scanner2::GetPublicValue "const char*
10187 gdcm::Scanner2::GetPublicValue(const char *filename, Tag const &t)
10188 const
10189
10190 Retrieve the value found for tag: t associated with file: filename
10191 This is meant for a single short call. If multiple calls (multiple
10192 tags) should be done, prefer the GetMapping function, and then reuse
10193 the TagToValue hash table. WARNING: Tag 't' should have been added
10194 via AddTag() prior to the Scan() call ! ";
10195
10196 %feature("docstring") gdcm::Scanner2::GetPublicValues "ValuesType
10197 gdcm::Scanner2::GetPublicValues(Tag const &t) const
10198
10199 Get all the values found (in lexicographic order) associated with Tag
10200 't'. ";
10201
10202 %feature("docstring") gdcm::Scanner2::GetValues "const ValuesType&
10203 gdcm::Scanner2::GetValues() const
10204
10205 Get all the values found (in lexicographic order) ";
10206
10207 %feature("docstring") gdcm::Scanner2::IsKey "bool
10208 gdcm::Scanner2::IsKey(const char *filename) const
10209
10210 Check if filename is a key in the Mapping table. returns true only of
10211 file can be found, which means the file was indeed a DICOM file that
10212 could be processed ";
10213
10214 %feature("docstring") gdcm::Scanner2::Print "void
10215 gdcm::Scanner2::Print(std::ostream &os) const override
10216
10217 Print result. ";
10218
10219 %feature("docstring") gdcm::Scanner2::PrintTable "void
10220 gdcm::Scanner2::PrintTable(std::ostream &os, bool header=false) const
10221
10222 Print result as CSV table. ";
10223
10224 %feature("docstring") gdcm::Scanner2::PrivateBegin "PrivateConstIterator gdcm::Scanner2::PrivateBegin() const ";
10225
10226 %feature("docstring") gdcm::Scanner2::PrivateEnd "PrivateConstIterator gdcm::Scanner2::PrivateEnd() const ";
10227
10228 %feature("docstring") gdcm::Scanner2::Scan "bool
10229 gdcm::Scanner2::Scan(Directory::FilenamesType const &filenames)
10230
10231 Start the scan ! ";
10232
10233
984910234 // File: classgdcm_1_1Segment.xml
985010235 %feature("docstring") gdcm::Segment "
985110236
986710252
986810253 %feature("docstring") gdcm::Segment::GetAnatomicRegion "SegmentHelper::BasicCodedEntry& gdcm::Segment::GetAnatomicRegion() ";
986910254
9870 %feature("docstring") gdcm::Segment::GetAnatomicRegion "SegmentHelper::BasicCodedEntry const&
9871 gdcm::Segment::GetAnatomicRegion() const ";
10255 %feature("docstring") gdcm::Segment::GetAnatomicRegion "const
10256 SegmentHelper::BasicCodedEntry& gdcm::Segment::GetAnatomicRegion()
10257 const ";
987210258
987310259 %feature("docstring") gdcm::Segment::GetAnatomicRegionModifiers "BasicCodedEntryVector& gdcm::Segment::GetAnatomicRegionModifiers() ";
987410260
9875 %feature("docstring") gdcm::Segment::GetAnatomicRegionModifiers "BasicCodedEntryVector const&
10261 %feature("docstring") gdcm::Segment::GetAnatomicRegionModifiers "const BasicCodedEntryVector&
987610262 gdcm::Segment::GetAnatomicRegionModifiers() const ";
987710263
987810264 %feature("docstring") gdcm::Segment::GetPropertyCategory "SegmentHelper::BasicCodedEntry& gdcm::Segment::GetPropertyCategory()
987910265 ";
988010266
9881 %feature("docstring") gdcm::Segment::GetPropertyCategory "SegmentHelper::BasicCodedEntry const&
9882 gdcm::Segment::GetPropertyCategory() const ";
10267 %feature("docstring") gdcm::Segment::GetPropertyCategory "const
10268 SegmentHelper::BasicCodedEntry& gdcm::Segment::GetPropertyCategory()
10269 const ";
988310270
988410271 %feature("docstring") gdcm::Segment::GetPropertyType "SegmentHelper::BasicCodedEntry& gdcm::Segment::GetPropertyType() ";
988510272
9886 %feature("docstring") gdcm::Segment::GetPropertyType "SegmentHelper::BasicCodedEntry const& gdcm::Segment::GetPropertyType()
9887 const ";
10273 %feature("docstring") gdcm::Segment::GetPropertyType "const
10274 SegmentHelper::BasicCodedEntry& gdcm::Segment::GetPropertyType() const
10275 ";
988810276
988910277 %feature("docstring") gdcm::Segment::GetPropertyTypeModifiers "BasicCodedEntryVector& gdcm::Segment::GetPropertyTypeModifiers() ";
989010278
9891 %feature("docstring") gdcm::Segment::GetPropertyTypeModifiers "BasicCodedEntryVector const& gdcm::Segment::GetPropertyTypeModifiers()
9892 const ";
10279 %feature("docstring") gdcm::Segment::GetPropertyTypeModifiers "const
10280 BasicCodedEntryVector& gdcm::Segment::GetPropertyTypeModifiers() const
10281 ";
989310282
989410283 %feature("docstring") gdcm::Segment::GetSegmentAlgorithmName "const
989510284 char* gdcm::Segment::GetSegmentAlgorithmName() const ";
991410303 %feature("docstring") gdcm::Segment::GetSurfaces "SurfaceVector&
991510304 gdcm::Segment::GetSurfaces() ";
991610305
9917 %feature("docstring") gdcm::Segment::GetSurfaces "SurfaceVector
9918 const& gdcm::Segment::GetSurfaces() const ";
10306 %feature("docstring") gdcm::Segment::GetSurfaces "const
10307 SurfaceVector& gdcm::Segment::GetSurfaces() const ";
991910308
992010309 %feature("docstring") gdcm::Segment::SetAnatomicRegion "void
992110310 gdcm::Segment::SetAnatomicRegion(SegmentHelper::BasicCodedEntry const
1013610525
1013710526 Sets the actual SQ length. ";
1013810527
10139 %feature("docstring") gdcm::SequenceOfFragments::Write "std::ostream
10140 const& gdcm::SequenceOfFragments::Write(std::ostream &os) const ";
10528 %feature("docstring") gdcm::SequenceOfFragments::Write "const
10529 std::ostream& gdcm::SequenceOfFragments::Write(std::ostream &os) const
10530 ";
1014110531
1014210532 %feature("docstring") gdcm::SequenceOfFragments::WriteBuffer "bool
1014310533 gdcm::SequenceOfFragments::WriteBuffer(std::ostream &os) const ";
1024310633 %feature("docstring") gdcm::SequenceOfItems::SetNumberOfItems "void
1024410634 gdcm::SequenceOfItems::SetNumberOfItems(SizeType n) ";
1024510635
10246 %feature("docstring") gdcm::SequenceOfItems::Write "std::ostream
10247 const& gdcm::SequenceOfItems::Write(std::ostream &os) const ";
10636 %feature("docstring") gdcm::SequenceOfItems::Write "const
10637 std::ostream& gdcm::SequenceOfItems::Write(std::ostream &os) const ";
1024810638
1024910639
1025010640 // File: classgdcm_1_1SerieHelper.xml
1025110641 %feature("docstring") gdcm::SerieHelper "
1025210642
1025310643 SerieHelper DO NOT USE this class, it is only a temporary solution for
10254 ITK migration from GDCM 1.x to GDCM 2.x It will disapear soon, you've
10644 ITK migration from GDCM 1.x to GDCM 2.x It will disappear soon, you've
1025510645 been warned.
1025610646
1025710647 Instead see ImageHelper or IPPSorter
1058710977 See: http://www.davethehat.com/articles/smartp.htm and
1058810978 itk::SmartPointer
1058910979
10590 C++ includes: gdcmSmartPointer.h ";
10980 C++ includes: gdcmObject.h ";
1059110981
1059210982 %feature("docstring") gdcm::SmartPointer::SmartPointer "gdcm::SmartPointer< ObjectType >::SmartPointer() ";
1059310983
1066711057 provide a function of type: Sorter::SortFunction
1066811058
1066911059 WARNING: implementation details. For now there is no cache mechanism.
10670 Which means that everytime you call Sort, all files specified as input
10671 paramater are read
11060 Which means that every time you call Sort, all files specified as
11061 input parameter are read
1067211062
1067311063 See: Scanner
1067411064
1086411254
1086511255
1086611256 // File: structgdcm_1_1STATIC__ASSERTION__FAILURE.xml
10867 %feature("docstring") gdcm::STATIC_ASSERTION_FAILURE "";
11257 %feature("docstring") gdcm::STATIC_ASSERTION_FAILURE "C++ includes:
11258 gdcmStaticAssert.h ";
1086811259
1086911260
1087011261 // File: structgdcm_1_1STATIC__ASSERTION__FAILURE_3_01true_01_4.xml
1092911320 gdcm::StreamImageReader::GetDimensionsValueForResolution(unsigned int)
1093011321 ";
1093111322
10932 %feature("docstring") gdcm::StreamImageReader::GetFile "File const&
11323 %feature("docstring") gdcm::StreamImageReader::GetFile "const File&
1093311324 gdcm::StreamImageReader::GetFile() const
1093411325
1093511326 Returns the dataset read by ReadImageInformation Couple this with the
1104511436
1104611437 the conversion from void* to std::ostream (internally) fails
1104711438
11048 the given buffer isn't large enough to accomodate the desired pixel
11439 the given buffer isn't large enough to accommodate the desired pixel
1104911440 extent. This method has been implemented to look similar to the
1105011441 metaimageio in itk MUST have an extent defined, or else Read will
1105111442 return false. If no particular extent is required, use ImageReader
1106611457 StrictScanner.
1106711458
1106811459 This filter is meant for quickly browsing a FileSet (a set of files on
11069 disk). Special consideration are taken so as to read the mimimum
11460 disk). Special consideration are taken so as to read the minimum
1107011461 amount of information in each file in order to retrieve the user
1107111462 specified set of DICOM Attribute.
1107211463
1113411525 Will loop over all files and return the first file where value match
1113511526 the reference value 'valueref' ";
1113611527
11137 %feature("docstring") gdcm::StrictScanner::GetFilenames "Directory::FilenamesType const& gdcm::StrictScanner::GetFilenames()
11138 const ";
11528 %feature("docstring") gdcm::StrictScanner::GetFilenames "const
11529 Directory::FilenamesType& gdcm::StrictScanner::GetFilenames() const ";
1113911530
1114011531 %feature("docstring") gdcm::StrictScanner::GetKeys "Directory::FilenamesType gdcm::StrictScanner::GetKeys() const
1114111532
1114211533 Return the list of filename that are key in the internal map, which
1114311534 means those filename were properly parsed ";
1114411535
11145 %feature("docstring") gdcm::StrictScanner::GetMapping "TagToValue
11146 const& gdcm::StrictScanner::GetMapping(const char *filename) const
11536 %feature("docstring") gdcm::StrictScanner::GetMapping "const
11537 TagToValue& gdcm::StrictScanner::GetMapping(const char *filename)
11538 const
1114711539
1114811540 Get the std::map mapping filenames to value for file 'filename'. ";
1114911541
11150 %feature("docstring") gdcm::StrictScanner::GetMappingFromTagToValue "TagToValue const& gdcm::StrictScanner::GetMappingFromTagToValue(Tag
11542 %feature("docstring") gdcm::StrictScanner::GetMappingFromTagToValue "const TagToValue& gdcm::StrictScanner::GetMappingFromTagToValue(Tag
1115111543 const &t, const char *value) const
1115211544
1115311545 See GetFilenameFromTagToValue(). This is simply
1115411546 GetFilenameFromTagToValue followed. ";
1115511547
11156 %feature("docstring") gdcm::StrictScanner::GetMappings "MappingType
11157 const& gdcm::StrictScanner::GetMappings() const
11548 %feature("docstring") gdcm::StrictScanner::GetMappings "const
11549 MappingType& gdcm::StrictScanner::GetMappings() const
1115811550
1115911551 Mappings are the mapping from a particular tag to the map, mapping
1116011552 filename to value: ";
1117611568 the TagToValue hash table. WARNING: Tag 't' should have been added
1117711569 via AddTag() prior to the Scan() call ! ";
1117811570
11179 %feature("docstring") gdcm::StrictScanner::GetValues "ValuesType
11180 const& gdcm::StrictScanner::GetValues() const
11571 %feature("docstring") gdcm::StrictScanner::GetValues "const
11572 ValuesType& gdcm::StrictScanner::GetValues() const
1118111573
1118211574 Get all the values found (in lexicographic order) ";
1118311575
1120811600 Start the scan ! ";
1120911601
1121011602
11603 // File: classgdcm_1_1StrictScanner2.xml
11604 %feature("docstring") gdcm::StrictScanner2 "
11605
11606 StrictScanner2.
11607
11608 This filter is meant for quickly browsing a FileSet (a set of files on
11609 disk). Special consideration are taken so as to read the minimum
11610 amount of information in each file in order to retrieve the user
11611 specified set of DICOM Attribute.
11612
11613 This filter is dealing with both VRASCII and VRBINARY element, thanks
11614 to the help of StringFilter
11615
11616 WARNING: IMPORTANT In case of file where tags are not ordered
11617 (illegal as per DICOM specification), the output will be missing
11618 information
11619
11620 implementation details. All values are stored in a std::set of
11621 std::string. Then the address of the cstring underlying the
11622 std::string is used in the std::map. This class implement the
11623 Subject/Observer pattern trigger the following events: ProgressEvent
11624
11625 StartEvent
11626
11627 EndEvent
11628
11629 C++ includes: gdcmStrictScanner2.h ";
11630
11631 %feature("docstring") gdcm::StrictScanner2::StrictScanner2 "gdcm::StrictScanner2::StrictScanner2() ";
11632
11633 %feature("docstring") gdcm::StrictScanner2::~StrictScanner2 "gdcm::StrictScanner2::~StrictScanner2() override ";
11634
11635 %feature("docstring") gdcm::StrictScanner2::AddPrivateTag "bool
11636 gdcm::StrictScanner2::AddPrivateTag(PrivateTag const &pt) ";
11637
11638 %feature("docstring") gdcm::StrictScanner2::AddPublicTag "bool
11639 gdcm::StrictScanner2::AddPublicTag(Tag const &t)
11640
11641 Add a tag that will need to be read. Those are root level tags. ";
11642
11643 %feature("docstring") gdcm::StrictScanner2::AddSkipTag "bool
11644 gdcm::StrictScanner2::AddSkipTag(Tag const &t)
11645
11646 Add a tag that will need to be skipped. Those are root level skip
11647 tags. ";
11648
11649 %feature("docstring") gdcm::StrictScanner2::Begin "PublicConstIterator gdcm::StrictScanner2::Begin() const ";
11650
11651 %feature("docstring") gdcm::StrictScanner2::ClearPrivateTags "void
11652 gdcm::StrictScanner2::ClearPrivateTags() ";
11653
11654 %feature("docstring") gdcm::StrictScanner2::ClearPublicTags "void
11655 gdcm::StrictScanner2::ClearPublicTags() ";
11656
11657 %feature("docstring") gdcm::StrictScanner2::ClearSkipTags "void
11658 gdcm::StrictScanner2::ClearSkipTags() ";
11659
11660 %feature("docstring") gdcm::StrictScanner2::End "PublicConstIterator
11661 gdcm::StrictScanner2::End() const ";
11662
11663 %feature("docstring")
11664 gdcm::StrictScanner2::GetAllFilenamesFromPrivateTagToValue "Directory::FilenamesType
11665 gdcm::StrictScanner2::GetAllFilenamesFromPrivateTagToValue(PrivateTag
11666 const &pt, const char *valueref) const ";
11667
11668 %feature("docstring")
11669 gdcm::StrictScanner2::GetAllFilenamesFromPublicTagToValue "Directory::FilenamesType
11670 gdcm::StrictScanner2::GetAllFilenamesFromPublicTagToValue(Tag const
11671 &t, const char *valueref) const
11672
11673 Will loop over all files and return a vector of std::strings of
11674 filenames where value match the reference value 'valueref' ";
11675
11676 %feature("docstring")
11677 gdcm::StrictScanner2::GetFilenameFromPrivateTagToValue "const char*
11678 gdcm::StrictScanner2::GetFilenameFromPrivateTagToValue(PrivateTag
11679 const &pt, const char *valueref) const ";
11680
11681 %feature("docstring")
11682 gdcm::StrictScanner2::GetFilenameFromPublicTagToValue "const char*
11683 gdcm::StrictScanner2::GetFilenameFromPublicTagToValue(Tag const &t,
11684 const char *valueref) const
11685
11686 Will loop over all files and return the first file where value match
11687 the reference value 'valueref' ";
11688
11689 %feature("docstring") gdcm::StrictScanner2::GetFilenames "const
11690 Directory::FilenamesType& gdcm::StrictScanner2::GetFilenames() const
11691
11692 Return the list of filenames. ";
11693
11694 %feature("docstring") gdcm::StrictScanner2::GetKeys "Directory::FilenamesType gdcm::StrictScanner2::GetKeys() const
11695
11696 Return the list of filename that are key in the internal map, which
11697 means those filename were properly parsed ";
11698
11699 %feature("docstring")
11700 gdcm::StrictScanner2::GetMappingFromPrivateTagToValue "const
11701 PrivateTagToValue&
11702 gdcm::StrictScanner2::GetMappingFromPrivateTagToValue(PrivateTag const
11703 &pt, const char *value) const ";
11704
11705 %feature("docstring")
11706 gdcm::StrictScanner2::GetMappingFromPublicTagToValue "const
11707 PublicTagToValue&
11708 gdcm::StrictScanner2::GetMappingFromPublicTagToValue(Tag const &t,
11709 const char *value) const
11710
11711 See GetFilenameFromTagToValue(). This is simply
11712 GetFilenameFromTagToValue followed ";
11713
11714 %feature("docstring") gdcm::StrictScanner2::GetPrivateMapping "const
11715 PrivateTagToValue& gdcm::StrictScanner2::GetPrivateMapping(const char
11716 *filename) const ";
11717
11718 %feature("docstring") gdcm::StrictScanner2::GetPrivateMappings "const PrivateMappingType& gdcm::StrictScanner2::GetPrivateMappings()
11719 const ";
11720
11721 %feature("docstring") gdcm::StrictScanner2::GetPrivateOrderedValues "Directory::FilenamesType
11722 gdcm::StrictScanner2::GetPrivateOrderedValues(PrivateTag const &pt)
11723 const ";
11724
11725 %feature("docstring") gdcm::StrictScanner2::GetPrivateValue "const
11726 char* gdcm::StrictScanner2::GetPrivateValue(const char *filename,
11727 PrivateTag const &t) const ";
11728
11729 %feature("docstring") gdcm::StrictScanner2::GetPrivateValues "ValuesType gdcm::StrictScanner2::GetPrivateValues(PrivateTag const
11730 &pt) const
11731
11732 Get all the values found (in lexicographic order) associated with
11733 PrivateTag 'pt' ";
11734
11735 %feature("docstring") gdcm::StrictScanner2::GetPublicMapping "const
11736 PublicTagToValue& gdcm::StrictScanner2::GetPublicMapping(const char
11737 *filename) const
11738
11739 Get the std::map mapping filenames to value for file 'filename'. ";
11740
11741 %feature("docstring") gdcm::StrictScanner2::GetPublicMappings "const
11742 PublicMappingType& gdcm::StrictScanner2::GetPublicMappings() const
11743
11744 Mappings are the mapping from a particular tag to the map, mapping
11745 filename to value: ";
11746
11747 %feature("docstring") gdcm::StrictScanner2::GetPublicOrderedValues "Directory::FilenamesType
11748 gdcm::StrictScanner2::GetPublicOrderedValues(Tag const &t) const
11749
11750 Get all the values found (in a vector) associated with Tag 't' This
11751 function is identical to GetValues, but is accessible from the wrapped
11752 layer (python, C#, java) ";
11753
11754 %feature("docstring") gdcm::StrictScanner2::GetPublicValue "const
11755 char* gdcm::StrictScanner2::GetPublicValue(const char *filename, Tag
11756 const &t) const
11757
11758 Retrieve the value found for tag: t associated with file: filename
11759 This is meant for a single short call. If multiple calls (multiple
11760 tags) should be done, prefer the GetMapping function, and then reuse
11761 the TagToValue hash table. WARNING: Tag 't' should have been added
11762 via AddTag() prior to the Scan() call ! ";
11763
11764 %feature("docstring") gdcm::StrictScanner2::GetPublicValues "ValuesType gdcm::StrictScanner2::GetPublicValues(Tag const &t) const
11765
11766 Get all the values found (in lexicographic order) associated with Tag
11767 't'. ";
11768
11769 %feature("docstring") gdcm::StrictScanner2::GetValues "const
11770 ValuesType& gdcm::StrictScanner2::GetValues() const
11771
11772 Get all the values found (in lexicographic order) ";
11773
11774 %feature("docstring") gdcm::StrictScanner2::IsKey "bool
11775 gdcm::StrictScanner2::IsKey(const char *filename) const
11776
11777 Check if filename is a key in the Mapping table. returns true only of
11778 file can be found, which means the file was indeed a DICOM file that
11779 could be processed ";
11780
11781 %feature("docstring") gdcm::StrictScanner2::Print "void
11782 gdcm::StrictScanner2::Print(std::ostream &os) const override
11783
11784 Print result. ";
11785
11786 %feature("docstring") gdcm::StrictScanner2::PrintTable "void
11787 gdcm::StrictScanner2::PrintTable(std::ostream &os, bool header=false)
11788 const
11789
11790 Print result as CSV table. ";
11791
11792 %feature("docstring") gdcm::StrictScanner2::PrivateBegin "PrivateConstIterator gdcm::StrictScanner2::PrivateBegin() const ";
11793
11794 %feature("docstring") gdcm::StrictScanner2::PrivateEnd "PrivateConstIterator gdcm::StrictScanner2::PrivateEnd() const ";
11795
11796 %feature("docstring") gdcm::StrictScanner2::Scan "bool
11797 gdcm::StrictScanner2::Scan(Directory::FilenamesType const &filenames)
11798
11799 Start the scan ! ";
11800
11801
1121111802 // File: classgdcm_1_1String.xml
1121211803 %feature("docstring") gdcm::String "
1121311804
1121411805 String.
1121511806
1121611807 TDelimiter template parameter is used to separate multiple String (VM1
11217 >) TMaxLength is only a hint. Noone actually respect the max length
11808 >) TMaxLength is only a hint. No one actually respect the max length
1121811809 TPadChar is the string padding (0 or space)
1121911810
1122011811 C++ includes: gdcmString.h ";
1127211863
1127311864 Execute the XPATH query to find a value (as string) return false when
1127411865 attribute is not found (or an error in the XPATH query) You need to
11275 make sure that your XPATH query is syntatically correct ";
11866 make sure that your XPATH query is syntactically correct ";
1127611867
1127711868 %feature("docstring") gdcm::StringFilter::FromString "std::string
1127811869 gdcm::StringFilter::FromString(const Tag &t, const char *value, size_t
1136911960 gdcm::Subject::GetCommand(unsigned long tag)
1137011961
1137111962 Get the command associated with the given tag. NOTE: This returns a
11372 pointer to a Command, but it is safe to asign this to a
11963 pointer to a Command, but it is safe to assign this to a
1137311964 Command::Pointer. Since Command inherits from LightObject, at this
1137411965 point in the code, only a pointer or a reference to the Command can be
1137511966 used. ";
1141812009
1141912010 %feature("docstring") gdcm::Surface::GetAlgorithmFamily "SegmentHelper::BasicCodedEntry& gdcm::Surface::GetAlgorithmFamily() ";
1142012011
11421 %feature("docstring") gdcm::Surface::GetAlgorithmFamily "SegmentHelper::BasicCodedEntry const&
11422 gdcm::Surface::GetAlgorithmFamily() const ";
12012 %feature("docstring") gdcm::Surface::GetAlgorithmFamily "const
12013 SegmentHelper::BasicCodedEntry& gdcm::Surface::GetAlgorithmFamily()
12014 const ";
1142312015
1142412016 %feature("docstring") gdcm::Surface::GetAlgorithmName "const char*
1142512017 gdcm::Surface::GetAlgorithmName() const ";
1145112043
1145212044 %feature("docstring") gdcm::Surface::GetMeshPrimitive "MeshPrimitive& gdcm::Surface::GetMeshPrimitive() ";
1145312045
11454 %feature("docstring") gdcm::Surface::GetMeshPrimitive "MeshPrimitive
11455 const& gdcm::Surface::GetMeshPrimitive() const ";
12046 %feature("docstring") gdcm::Surface::GetMeshPrimitive "const
12047 MeshPrimitive& gdcm::Surface::GetMeshPrimitive() const ";
1145612048
1145712049 %feature("docstring") gdcm::Surface::GetNumberOfSurfacePoints "unsigned long gdcm::Surface::GetNumberOfSurfacePoints() const ";
1145812050
1147712069 %feature("docstring") gdcm::Surface::GetProcessingAlgorithm "SegmentHelper::BasicCodedEntry&
1147812070 gdcm::Surface::GetProcessingAlgorithm() ";
1147912071
11480 %feature("docstring") gdcm::Surface::GetProcessingAlgorithm "SegmentHelper::BasicCodedEntry const&
12072 %feature("docstring") gdcm::Surface::GetProcessingAlgorithm "const
12073 SegmentHelper::BasicCodedEntry&
1148112074 gdcm::Surface::GetProcessingAlgorithm() const ";
1148212075
1148312076 %feature("docstring") gdcm::Surface::GetRecommendedDisplayCIELabValue
1193912532 gdcm::Tag::ReadFromCommaSeparatedString(const char *str)
1194012533
1194112534 Read from a comma separated string. This is a highly user oriented
11942 function, the string should be formated as: 1234,5678 to specify the
12535 function, the string should be formatted as: 1234,5678 to specify the
1194312536 tag (0x1234,0x5678) The notation comes from the DICOM standard, and is
1194412537 handy to use from a command line program ";
1194512538
1227712870 This ULEvent is passed to the ULState, so that the transition to the
1227812871 next state can occur.
1227912872
12280 Actions are associated with Payloads be thos filestreams, AETitles to
12873 Actions are associated with Payloads be those filestreams, AETitles to
1228112874 establish connections, whatever. The actual parameters that the user
1228212875 will pass via an action will come through a Payload object, which
1228312876 should, in itself, be some gdcm-based object (but not all objects can
1258813181 %feature("docstring")
1258913182 gdcm::network::ULBasicCallback::~ULBasicCallback "gdcm::network::ULBasicCallback::~ULBasicCallback() override=default ";
1259013183
12591 %feature("docstring") gdcm::network::ULBasicCallback::GetDataSets "std::vector<DataSet> const&
13184 %feature("docstring") gdcm::network::ULBasicCallback::GetDataSets "const std::vector<DataSet>&
1259213185 gdcm::network::ULBasicCallback::GetDataSets() const ";
1259313186
12594 %feature("docstring") gdcm::network::ULBasicCallback::GetResponses "std::vector<DataSet> const&
13187 %feature("docstring") gdcm::network::ULBasicCallback::GetResponses "const std::vector<DataSet>&
1259513188 gdcm::network::ULBasicCallback::GetResponses() const ";
1259613189
1259713190 %feature("docstring") gdcm::network::ULBasicCallback::HandleDataSet "void gdcm::network::ULBasicCallback::HandleDataSet(const DataSet
1265113244 gdcm::network::ULConnection::GetAcceptedPresentationContexts() ";
1265213245
1265313246 %feature("docstring")
12654 gdcm::network::ULConnection::GetAcceptedPresentationContexts "std::vector<PresentationContextAC> const&
13247 gdcm::network::ULConnection::GetAcceptedPresentationContexts "const
13248 std::vector<PresentationContextAC>&
1265513249 gdcm::network::ULConnection::GetAcceptedPresentationContexts() const
1265613250 ";
1265713251
1268213276 const ";
1268313277
1268413278 %feature("docstring")
12685 gdcm::network::ULConnection::GetPresentationContexts "std::vector<PresentationContextRQ> const&
13279 gdcm::network::ULConnection::GetPresentationContexts "const
13280 std::vector<PresentationContextRQ>&
1268613281 gdcm::network::ULConnection::GetPresentationContexts() const ";
1268713282
1268813283 %feature("docstring") gdcm::network::ULConnection::GetProtocol "std::iostream* gdcm::network::ULConnection::GetProtocol() ";
1298913584
1299013585 %feature("docstring") gdcm::network::ULEvent::GetIStream "std::istream* gdcm::network::ULEvent::GetIStream() const ";
1299113586
12992 %feature("docstring") gdcm::network::ULEvent::GetPDUs "std::vector<BasePDU*> const& gdcm::network::ULEvent::GetPDUs() const
12993 ";
13587 %feature("docstring") gdcm::network::ULEvent::GetPDUs "const
13588 std::vector<BasePDU*>& gdcm::network::ULEvent::GetPDUs() const ";
1299413589
1299513590 %feature("docstring") gdcm::network::ULEvent::SetEvent "void
1299613591 gdcm::network::ULEvent::SetEvent(const EEventID &inEvent) ";
1338613981
1338713982
1338813983 // File: structgdcm_1_1VMToLength.xml
13389 %feature("docstring") gdcm::VMToLength "";
13984 %feature("docstring") gdcm::VMToLength "C++ includes: gdcmVM.h ";
1339013985
1339113986
1339213987 // File: classgdcm_1_1VR.xml
1343814033
1343914034 Class to read/write a DataElement as Explicit Data Element.
1344014035
13441 This class support 16 bits when finding an unkown VR: For instance:
14036 This class support 16 bits when finding an unknown VR: For instance:
1344214037 Siemens_CT_Sensation64_has_VR_RT.dcm
1344314038
1344414039 C++ includes: gdcmVR16ExplicitDataElement.h ";
1346014055
1346114056
1346214057 // File: structgdcm_1_1VRToEncoding.xml
13463 %feature("docstring") gdcm::VRToEncoding "";
14058 %feature("docstring") gdcm::VRToEncoding "C++ includes: gdcmVR.h ";
1346414059
1346514060
1346614061 // File: structgdcm_1_1VRToType.xml
13467 %feature("docstring") gdcm::VRToType "";
14062 %feature("docstring") gdcm::VRToType "C++ includes: gdcmVR.h ";
1346814063
1346914064
1347014065 // File: classgdcm_1_1VRVLSize.xml
13471 %feature("docstring") gdcm::VRVLSize "";
14066 %feature("docstring") gdcm::VRVLSize "C++ includes: gdcmAttribute.h
14067 ";
1347214068
1347314069
1347414070 // File: classgdcm_1_1VRVLSize_3_010_01_4.xml
1392414520 "vtkGDCMThreadedImageReader2::vtkSetVector6Macro(DataExtent, int) ";
1392514521
1392614522 %feature("docstring") vtkGDCMThreadedImageReader2::vtkTypeMacro "vtkGDCMThreadedImageReader2::vtkTypeMacro(vtkGDCMThreadedImageReader2,
13927 vtkThreadedImageAlgorithm) ";
13928
13929
13930 // File: classvtkGDCMThreadedImageReader3.xml
13931 %feature("docstring") vtkGDCMThreadedImageReader3 "C++ includes:
13932 vtkGDCMThreadedImageReader3.h ";
13933
13934 %feature("docstring") vtkGDCMThreadedImageReader3::GetFileName "virtual const char* vtkGDCMThreadedImageReader3::GetFileName(int i=0)
13935 ";
13936
13937 %feature("docstring") vtkGDCMThreadedImageReader3::PrintSelf "virtual void vtkGDCMThreadedImageReader3::PrintSelf(ostream &os,
13938 vtkIndent indent) ";
13939
13940 %feature("docstring") vtkGDCMThreadedImageReader3::SetFileName "virtual void vtkGDCMThreadedImageReader3::SetFileName(const char
13941 *filename) ";
13942
13943 %feature("docstring") vtkGDCMThreadedImageReader3::SetFileNames "virtual void vtkGDCMThreadedImageReader3::SetFileNames(vtkStringArray
13944 *) ";
13945
13946 %feature("docstring") vtkGDCMThreadedImageReader3::SplitExtent "int
13947 vtkGDCMThreadedImageReader3::SplitExtent(int splitExt[6], int
13948 startExt[6], int num, int total) ";
13949
13950 %feature("docstring") vtkGDCMThreadedImageReader3::vtkBooleanMacro "vtkGDCMThreadedImageReader3::vtkBooleanMacro(FileLowerLeft, int) ";
13951
13952 %feature("docstring") vtkGDCMThreadedImageReader3::vtkBooleanMacro "vtkGDCMThreadedImageReader3::vtkBooleanMacro(LoadOverlays, int) ";
13953
13954 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetMacro "vtkGDCMThreadedImageReader3::vtkGetMacro(DataScalarType, int) ";
13955
13956 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetMacro "vtkGDCMThreadedImageReader3::vtkGetMacro(FileLowerLeft, int) ";
13957
13958 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetMacro "vtkGDCMThreadedImageReader3::vtkGetMacro(LoadOverlays, int) ";
13959
13960 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetMacro "vtkGDCMThreadedImageReader3::vtkGetMacro(NumberOfOverlays, int) ";
13961
13962 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetMacro "vtkGDCMThreadedImageReader3::vtkGetMacro(NumberOfScalarComponents,
13963 int) ";
13964
13965 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetObjectMacro
13966 "vtkGDCMThreadedImageReader3::vtkGetObjectMacro(FileNames,
13967 vtkStringArray) ";
13968
13969 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetVector3Macro
13970 "vtkGDCMThreadedImageReader3::vtkGetVector3Macro(DataOrigin, double)
13971 ";
13972
13973 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetVector3Macro
13974 "vtkGDCMThreadedImageReader3::vtkGetVector3Macro(DataSpacing, double)
13975 ";
13976
13977 %feature("docstring") vtkGDCMThreadedImageReader3::vtkGetVector6Macro
13978 "vtkGDCMThreadedImageReader3::vtkGetVector6Macro(DataExtent, int) ";
13979
13980 %feature("docstring") vtkGDCMThreadedImageReader3::vtkSetMacro "vtkGDCMThreadedImageReader3::vtkSetMacro(DataScalarType, int) ";
13981
13982 %feature("docstring") vtkGDCMThreadedImageReader3::vtkSetMacro "vtkGDCMThreadedImageReader3::vtkSetMacro(FileLowerLeft, int) ";
13983
13984 %feature("docstring") vtkGDCMThreadedImageReader3::vtkSetMacro "vtkGDCMThreadedImageReader3::vtkSetMacro(LoadOverlays, int) ";
13985
13986 %feature("docstring") vtkGDCMThreadedImageReader3::vtkSetMacro "vtkGDCMThreadedImageReader3::vtkSetMacro(NumberOfScalarComponents,
13987 int) ";
13988
13989 %feature("docstring") vtkGDCMThreadedImageReader3::vtkSetVector3Macro
13990 "vtkGDCMThreadedImageReader3::vtkSetVector3Macro(DataOrigin, double)
13991 ";
13992
13993 %feature("docstring") vtkGDCMThreadedImageReader3::vtkSetVector3Macro
13994 "vtkGDCMThreadedImageReader3::vtkSetVector3Macro(DataSpacing, double)
13995 ";
13996
13997 %feature("docstring") vtkGDCMThreadedImageReader3::vtkSetVector6Macro
13998 "vtkGDCMThreadedImageReader3::vtkSetVector6Macro(DataExtent, int) ";
13999
14000 %feature("docstring")
14001 vtkGDCMThreadedImageReader3::vtkTypeRevisionMacro "vtkGDCMThreadedImageReader3::vtkTypeRevisionMacro(vtkGDCMThreadedImageReader3,
1400214523 vtkThreadedImageAlgorithm) ";
1400314524
1400414525
1449715018 This class is a non-validating writer, it will only performs well-
1449815019 formedness check only.
1449915020
14500 Detailled description here To avoid GDCM being yet another broken
14501 DICOM lib we try to be user level and avoid writing illegal stuff (odd
15021 Detailed description here To avoid GDCM being yet another broken DICOM
15022 lib we try to be user level and avoid writing illegal stuff (odd
1450215023 length, non-zero value for Item start/end length ...) Therefore you
1450315024 cannot (well unless you are really smart) write DICOM with even length
1450415025 tag. All the checks are consider basics: Correct Meta Information
1450815029
1450915030 Even length for any elements
1451015031
14511 Alphabetical order for elements (garanteed by design of internals)
15032 Alphabetical order for elements (guaranteed by design of internals)
1451215033
1451315034 32bits VR will be rewritten with 00
1451415035
1465315174 %feature("docstring") gdcm::network::add1 "static int
1465415175 gdcm::add1(char *buf, int n) ";
1465515176
14656 %feature("docstring") gdcm::network::backslash "ignore_char const
15177 %feature("docstring") gdcm::network::backslash "const ignore_char
1465715178 gdcm::backslash('\\\\\\\\') ";
1465815179
1465915180 %feature("docstring") gdcm::network::Clamp "static T gdcm::Clamp(int
1467215193 x) ";
1467315194
1467415195 %feature("docstring") gdcm::network::roundat "static int
14675 gdcm::roundat(char *buf, unsigned int i, int iexp) ";
15196 gdcm::roundat(char *buf, size_t bufLen, unsigned int i, int iexp) ";
1467615197
1467715198 %feature("docstring") gdcm::network::TYPETOENCODING "gdcm::TYPETOENCODING(SQ, VRBINARY, unsigned char) TYPETOENCODING(UN ";
1467815199
1480715328 // File: gdcmCFindMessages_8h.xml
1480815329
1480915330
15331 // File: gdcmCleaner_8h.xml
15332
15333
1481015334 // File: gdcmCMoveMessages_8h.xml
1481115335
1481215336
1492415448 // File: gdcmDirectoryHelper_8h.xml
1492515449
1492615450
15451 // File: gdcmDPath_8h.xml
15452
15453
1492715454 // File: gdcmDummyValueGenerator_8h.xml
1492815455
1492915456
1534115868 // File: gdcmScanner_8h.xml
1534215869
1534315870
15871 // File: gdcmScanner2_8h.xml
15872
15873
1534415874 // File: gdcmSegment_8h.xml
1534515875
1534615876
1541315943 // File: gdcmStrictScanner_8h.xml
1541415944
1541515945
15946 // File: gdcmStrictScanner2_8h.xml
15947
15948
1541615949 // File: gdcmString_8h.xml
1541715950
1541815951
1562916162 // File: vtkGDCMThreadedImageReader2_8h.xml
1563016163
1563116164
15632 // File: vtkGDCMThreadedImageReader3_8h.xml
15633
15634
1563516165 // File: vtkImageColorViewer_8h.xml
1563616166
1563716167
1566516195 // File: bug.xml
1566616196
1566716197
15668 // File: dir_041d54874d9fecec94d9cb4ae010b51e.xml
15669
15670
15671 // File: dir_8021392154ea27d3da33100afd5b42a1.xml
15672
15673
15674 // File: dir_83a82e6a2bc4a0f6429532cb237ca746.xml
15675
15676
15677 // File: dir_9760e222fce508c3b7270d68e6523d76.xml
15678
15679
15680 // File: dir_90174c188c639015dd869d1a853f914f.xml
15681
15682
15683 // File: dir_aceed280bd27dc60f64c2cb4efae4f90.xml
15684
15685
15686 // File: dir_5aab2906425e8d9a7aa9fea4f8d0a2fa.xml
15687
15688
15689 // File: dir_5daaa9a41ac240f7de3019ff61b11839.xml
15690
15691
15692 // File: dir_b138abe427a068e1da5116454e79caa4.xml
15693
15694
15695 // File: dir_6b1a62c3f439db8dff4e3363f340e91f.xml
15696
15697
15698 // File: dir_776c231028699256e0cc13f46def7474.xml
15699
15700
15701 // File: dir_6285418b2babf39982c6f35dbd05cbb5.xml
16198 // File: dir_e040de17c0346d6e352713ff147418d5.xml
16199
16200
16201 // File: dir_c76daeb6f6dec6f3ea799fce56f7d2d8.xml
16202
16203
16204 // File: dir_dbf95c1d90c5a901881337453263e002.xml
16205
16206
16207 // File: dir_244a85202b55a1c80976dd6ddbfc1a01.xml
16208
16209
16210 // File: dir_18f0eb58264c0e5251b09e2a1c43e69e.xml
16211
16212
16213 // File: dir_3f5e1a94e35e29d80741a422ee07169d.xml
16214
16215
16216 // File: dir_43e0a1f539e00dcfa1a6bc4d4fee4fc2.xml
16217
16218
16219 // File: dir_dbf5bd6b6031826eb661c0a6cc15a5dc.xml
16220
16221
16222 // File: dir_9bf5ea929d074a4376f8e7ab62cf44cb.xml
16223
16224
16225 // File: dir_1bf6655710ee689b67564d3c1ea81ded.xml
16226
16227
16228 // File: dir_1703a9a86ce09b357d10c179ef37187c.xml
16229
16230
16231 // File: dir_7d8a53dc7c6e118dc326634b1445bfbd.xml
16232
16233
16234 // File: dir_c65ec574e088a3fb8c01ccf67a472041.xml
16235
16236
16237 // File: dir_0fafd23c42ab1b7284b507a31c976ae7.xml
16238
16239
16240 // File: dir_b7bc1d3f8c76b5f778038891003f2f25.xml
16241
16242
16243 // File: dir_2e6026c62002f4bb8a32f565fccc2e09.xml
16244
16245
16246 // File: dir_6737ba0c6e4d2f00b8b2ea67e96033d0.xml
16247
16248
16249 // File: dir_fc26ec98c29cdba1e5d03a2a0f4491e0.xml
16250
16251
16252 // File: AddPrivateAttribute_8py-example.xml
16253
16254
16255 // File: AWTMedical3_8java-example.xml
16256
16257
16258 // File: BasicAnonymizer_8cs-example.xml
16259
16260
16261 // File: BasicImageAnonymizer_8cs-example.xml
16262
16263
16264 // File: CastConvertPhilips_8py-example.xml
16265
16266
16267 // File: ChangePrivateTags_8cxx-example.xml
16268
16269
16270 // File: ChangeSequenceUltrasound_8cxx-example.xml
16271
16272
16273 // File: CheckBigEndianBug_8cxx-example.xml
16274
16275
16276 // File: Cleaner_8cs-example.xml
16277
16278
16279 // File: ClinicalTrialAnnotate_8cxx-example.xml
16280
16281
16282 // File: ClinicalTrialIdentificationWorkflow_8cs-example.xml
16283
16284
16285 // File: CompressImage_8cxx-example.xml
16286
16287
16288 // File: CompressLossyJPEG_8cs-example.xml
16289
16290
16291 // File: Compute3DSpacing_8cxx-example.xml
16292
16293
16294 // File: Convert16BitsTo8Bits_8cxx-example.xml
16295
16296
16297 // File: ConvertMPL_8py-example.xml
16298
16299
16300 // File: ConvertMultiFrameToSingleFrame_8cxx-example.xml
16301
16302
16303 // File: ConvertNumpy_8py-example.xml
16304
16305
16306 // File: ConvertPIL_8py-example.xml
16307
16308
16309 // File: ConvertRGBToLuminance_8cxx-example.xml
16310
16311
16312 // File: ConvertSingleBitTo8Bits_8cxx-example.xml
16313
16314
16315 // File: ConvertToQImage_8cxx-example.xml
16316
16317
16318 // File: CreateARGBImage_8cxx-example.xml
16319
16320
16321 // File: CreateCMYKImage_8cxx-example.xml
16322
16323
16324 // File: CreateFakePET_8cxx-example.xml
16325
16326
16327 // File: CreateFakeRTDOSE_8cxx-example.xml
16328
16329
16330 // File: CreateJPIPDataSet_8cxx-example.xml
16331
16332
16333 // File: CreateRAWStorage_8py-example.xml
16334
16335
16336 // File: csa2img_8cxx-example.xml
16337
16338
16339 // File: CStoreQtProgress_8cxx-example.xml
16340
16341
16342 // File: DecompressImage_8cs-example.xml
16343
16344
16345 // File: DecompressImage_8java-example.xml
16346
16347
16348 // File: DecompressImage_8py-example.xml
16349
16350
16351 // File: DecompressImageMultiframe_8cs-example.xml
16352
16353
16354 // File: DecompressJPEGFile_8cs-example.xml
16355
16356
16357 // File: DecompressPixmap_8java-example.xml
16358
16359
16360 // File: DeriveSeries_8cxx-example.xml
16361
16362
16363 // File: DiffFile_8cxx-example.xml
16364
16365
16366 // File: DiscriminateVolume_8cxx-example.xml
16367
16368
16369 // File: DumbAnonymizer_8py-example.xml
16370
16371
16372 // File: DumpADAC_8cxx-example.xml
16373
16374
16375 // File: DumpCSA_8cs-example.xml
16376
16377
16378 // File: DumpExamCard_8cxx-example.xml
16379
16380
16381 // File: DumpGEMS_8cxx-example.xml
16382
16383
16384 // File: DumpGEMSMovieGroup_8cxx-example.xml
16385
16386
16387 // File: DumpImageHeaderInfo_8cxx-example.xml
16388
16389
16390 // File: DumpPhilipsECHO_8cxx-example.xml
16391
16392
16393 // File: DumpSiemensBase64_8cxx-example.xml
16394
16395
16396 // File: DumpToshibaDTI_8cxx-example.xml
16397
16398
16399 // File: DumpToshibaDTI2_8cxx-example.xml
16400
16401
16402 // File: DumpToSQLITE3_8cxx-example.xml
16403
16404
16405 // File: DumpVisusChange_8cxx-example.xml
16406
16407
16408 // File: DuplicatePCDE_8cxx-example.xml
16409
16410
16411 // File: ELSCINT1WaveToText_8cxx-example.xml
16412
16413
16414 // File: EmptyMask_8cxx-example.xml
16415
16416
16417 // File: EncapsulateFileInRawData_8cxx-example.xml
16418
16419
16420 // File: ExtractBinaryIntoCSV_8cxx-example.xml
16421
16422
16423 // File: ExtractEncapsulatedFile_8cs-example.xml
16424
16425
16426 // File: ExtractEncryptedContent_8cxx-example.xml
16427
16428
16429 // File: ExtractIconFromFile_8cxx-example.xml
16430
16431
16432 // File: ExtractImageRegion_8cs-example.xml
16433
16434
16435 // File: ExtractImageRegion_8java-example.xml
16436
16437
16438 // File: ExtractImageRegion_8py-example.xml
16439
16440
16441 // File: ExtractImageRegionWithLUT_8cs-example.xml
16442
16443
16444 // File: Extracting_All_Resolution_8cxx-example.xml
16445
16446
16447 // File: ExtractOneFrame_8cs-example.xml
16448
16449
16450 // File: Fake_Image_Using_Stream_Image_Writer_8cxx-example.xml
16451
16452
16453 // File: FileAnonymize_8cs-example.xml
16454
16455
16456 // File: FileAnonymize_8java-example.xml
16457
16458
16459 // File: FileChangeTS_8cs-example.xml
16460
16461
16462 // File: FileChangeTSLossy_8cs-example.xml
16463
16464
16465 // File: FileStreaming_8cs-example.xml
16466
16467
16468 // File: FindAllPatientName_8py-example.xml
16469
16470
16471 // File: FixBrokenJ2K_8cxx-example.xml
16472
16473
16474 // File: FixCommaBug_8py-example.xml
16475
16476
16477 // File: FixJAIBugJPEGLS_8cxx-example.xml
16478
16479
16480 // File: FixOrientation_8cxx-example.xml
16481
16482
16483 // File: gdcmorthoplanes_8cxx-example.xml
16484
16485
16486 // File: gdcmreslice_8cxx-example.xml
16487
16488
16489 // File: gdcmrtionplan_8cxx-example.xml
16490
16491
16492 // File: gdcmrtplan_8cxx-example.xml
16493
16494
16495 // File: gdcmscene_8cxx-example.xml
16496
16497
16498 // File: gdcmtexture_8cxx-example.xml
16499
16500
16501 // File: gdcmvolume_8cxx-example.xml
16502
16503
16504 // File: GenAllVR_8cxx-example.xml
16505
16506
16507 // File: GenerateDICOMDIR_8cs-example.xml
16508
16509
16510 // File: GenerateRTSTRUCT_8cxx-example.xml
16511
16512
16513 // File: GenerateStandardSOPClasses_8cxx-example.xml
16514
16515
16516 // File: GenFakeIdentifyFile_8cxx-example.xml
16517
16518
16519 // File: GenFakeImage_8cxx-example.xml
16520
16521
16522 // File: GenLongSeqs_8cxx-example.xml
16523
16524
16525 // File: GenSeqs_8cxx-example.xml
16526
16527
16528 // File: GetArray_8cs-example.xml
16529
16530
16531 // File: GetJPEGSamplePrecision_8cxx-example.xml
16532
16533
16534 // File: GetPortionCSAHeader_8py-example.xml
16535
16536
16537 // File: GetSequenceUltrasound_8cxx-example.xml
16538
16539
16540 // File: GetSubSequenceData_8cxx-example.xml
16541
16542
16543 // File: headsq2dcm_8py-example.xml
16544
16545
16546 // File: HelloActiviz_8cs-example.xml
16547
16548
16549 // File: HelloActiviz2_8cs-example.xml
16550
16551
16552 // File: HelloActiviz3_8cs-example.xml
16553
16554
16555 // File: HelloActiviz4_8cs-example.xml
16556
16557
16558 // File: HelloActiviz5_8cs-example.xml
16559
16560
16561 // File: HelloSimple_8java-example.xml
16562
16563
16564 // File: HelloVizWorld_8cxx-example.xml
16565
16566
16567 // File: HelloVTKWorld_8cs-example.xml
16568
16569
16570 // File: HelloVTKWorld_8java-example.xml
16571
16572
16573 // File: HelloVTKWorld2_8cs-example.xml
16574
16575
16576 // File: HelloWorld_8cxx-example.xml
16577
16578
16579 // File: HelloWorld_8py-example.xml
16580
16581
16582 // File: iU22tomultisc_8cxx-example.xml
16583
16584
16585 // File: LargeVRDSExplicit_8cxx-example.xml
16586
16587
16588 // File: MagnifyFile_8cxx-example.xml
16589
16590
16591 // File: MakeTemplate_8cxx-example.xml
16592
16593
16594 // File: ManipulateFile_8cs-example.xml
16595
16596
16597 // File: ManipulateFile_8py-example.xml
16598
16599
16600 // File: ManipulateSequence_8py-example.xml
16601
16602
16603 // File: MergeFile_8py-example.xml
16604
16605
16606 // File: MergeTwoFiles_8cxx-example.xml
16607
16608
16609 // File: MetaImageMD5Activiz_8cs-example.xml
16610
16611
16612 // File: MIPViewer_8java-example.xml
16613
16614
16615 // File: MpegVideoInfo_8cs-example.xml
16616
16617
16618 // File: MPRViewer_8java-example.xml
16619
16620
16621 // File: MPRViewer2_8java-example.xml
16622
16623
16624 // File: MrProtocol_8cxx-example.xml
16625
16626
16627 // File: NewSequence_8cs-example.xml
16628
16629
16630 // File: NewSequence_8py-example.xml
16631
16632
16633 // File: offscreenimage_8cxx-example.xml
16634
16635
16636 // File: PatchFile_8cxx-example.xml
16637
16638
16639 // File: PhilipsPrivateRescaleInterceptSlope_8py-example.xml
16640
16641
16642 // File: PlaySound_8py-example.xml
16643
16644
16645 // File: pmsct_rgb1_8cxx-example.xml
16646
16647
16648 // File: PrintLUT_8cxx-example.xml
16649
16650
16651 // File: PrivateDict_8py-example.xml
16652
16653
16654 // File: PublicDict_8cxx-example.xml
16655
16656
16657 // File: QIDO-RS_8cxx-example.xml
16658
16659
16660 // File: ReadAndDumpDICOMDIR_8cxx-example.xml
16661
16662
16663 // File: ReadAndDumpDICOMDIR_8py-example.xml
16664
16665
16666 // File: ReadAndDumpDICOMDIR2_8cxx-example.xml
16667
16668
16669 // File: ReadAndPrintAttributes_8cxx-example.xml
16670
16671
16672 // File: ReadExplicitLengthSQIVR_8cxx-example.xml
16673
16674
16675 // File: ReadFiles_8java-example.xml
16676
16677
16678 // File: ReadGEMSSDO_8cxx-example.xml
16679
16680
16681 // File: ReadMultiTimesException_8cxx-example.xml
16682
16683
16684 // File: ReadSeriesIntoVTK_8java-example.xml
16685
16686
16687 // File: ReadUTF8QtDir_8cxx-example.xml
16688
16689
16690 // File: RefCounting_8cs-example.xml
16691
16692
16693 // File: ReformatFile_8cs-example.xml
16694
16695
16696 // File: RemovePrivateTags_8py-example.xml
16697
16698
16699 // File: RescaleImage_8cs-example.xml
16700
16701
16702 // File: reslicesphere_8cxx-example.xml
16703
16704
16705 // File: ReWriteSCAsMR_8py-example.xml
16706
16707
16708 // File: rle2img_8cxx-example.xml
16709
16710
16711 // File: rtstructapp_8cxx-example.xml
16712
16713
16714 // File: ScanDirectory_8cs-example.xml
16715
16716
16717 // File: ScanDirectory_8java-example.xml
16718
16719
16720 // File: ScanDirectory_8py-example.xml
16721
16722
16723 // File: SendFileSCU_8cs-example.xml
16724
16725
16726 // File: SimplePrint_8cs-example.xml
16727
16728
16729 // File: SimplePrint_8java-example.xml
16730
16731
16732 // File: SimplePrintPatientName_8cs-example.xml
16733
16734
16735 // File: SimpleScanner_8cxx-example.xml
16736
16737
16738 // File: SortImage_8cxx-example.xml
16739
16740
16741 // File: SortImage_8py-example.xml
16742
16743
16744 // File: SortImage2_8cs-example.xml
16745
16746
16747 // File: StandardizeFiles_8cs-example.xml
16748
16749
16750 // File: StreamImageReaderTest_8cxx-example.xml
16751
16752
16753 // File: TemplateEmptyImage_8cxx-example.xml
1570216754
1570316755
1570416756 // File: TestByteSwap_8cxx-example.xml
1570516757
1570616758
15707 // File: PatchFile_8cxx-example.xml
15708
15709
15710 // File: SimplePrint_8cs-example.xml
15711
15712
1571316759 // File: TestReader_8cxx-example.xml
1571416760
1571516761
1571616762 // File: TestReader_8py-example.xml
1571716763
1571816764
15719 // File: DecompressJPEGFile_8cs-example.xml
15720
15721
15722 // File: ManipulateFile_8cs-example.xml
15723
15724
15725 // File: ClinicalTrialIdentificationWorkflow_8cs-example.xml
15726
15727
15728 // File: GenerateDICOMDIR_8cs-example.xml
15729
15730
15731 // File: GenFakeImage_8cxx-example.xml
15732
15733
15734 // File: ReformatFile_8cs-example.xml
15735
15736
15737 // File: DecompressImage_8cs-example.xml
15738
15739
15740 // File: StandardizeFiles_8cs-example.xml
15741
15742
15743 // File: ScanDirectory_8cs-example.xml
15744
15745
15746 // File: BasicAnonymizer_8cs-example.xml
15747
15748
15749 // File: BasicImageAnonymizer_8cs-example.xml
15750
15751
15752 // File: CompressLossyJPEG_8cs-example.xml
15753
15754
15755 // File: DecompressImageMultiframe_8cs-example.xml
15756
15757
15758 // File: DumpCSA_8cs-example.xml
15759
15760
15761 // File: ExtractEncapsulatedFile_8cs-example.xml
15762
15763
15764 // File: ExtractImageRegion_8cs-example.xml
15765
15766
15767 // File: ExtractImageRegionWithLUT_8cs-example.xml
15768
15769
15770 // File: ExtractOneFrame_8cs-example.xml
15771
15772
15773 // File: FileAnonymize_8cs-example.xml
15774
15775
15776 // File: FileChangeTS_8cs-example.xml
15777
15778
15779 // File: FileChangeTSLossy_8cs-example.xml
15780
15781
15782 // File: FileStreaming_8cs-example.xml
15783
15784
15785 // File: GetArray_8cs-example.xml
15786
15787
15788 // File: MpegVideoInfo_8cs-example.xml
15789
15790
15791 // File: NewSequence_8cs-example.xml
15792
15793
15794 // File: RescaleImage_8cs-example.xml
15795
15796
15797 // File: SendFileSCU_8cs-example.xml
15798
15799
15800 // File: SimplePrintPatientName_8cs-example.xml
15801
15802
15803 // File: SortImage2_8cs-example.xml
15804
15805
15806 // File: CStoreQtProgress_8cxx-example.xml
15807
15808
15809 // File: ChangePrivateTags_8cxx-example.xml
15810
15811
15812 // File: ChangeSequenceUltrasound_8cxx-example.xml
15813
15814
15815 // File: CheckBigEndianBug_8cxx-example.xml
15816
15817
15818 // File: ClinicalTrialAnnotate_8cxx-example.xml
15819
15820
15821 // File: CompressImage_8cxx-example.xml
15822
15823
15824 // File: ConvertToQImage_8cxx-example.xml
15825
15826
15827 // File: CreateARGBImage_8cxx-example.xml
15828
15829
15830 // File: CreateCMYKImage_8cxx-example.xml
15831
15832
15833 // File: CreateJPIPDataSet_8cxx-example.xml
15834
15835
15836 // File: DeriveSeries_8cxx-example.xml
15837
15838
15839 // File: DiffFile_8cxx-example.xml
15840
15841
15842 // File: DiscriminateVolume_8cxx-example.xml
15843
15844
15845 // File: DumpADAC_8cxx-example.xml
15846
15847
15848 // File: DumpExamCard_8cxx-example.xml
15849
15850
15851 // File: DumpGEMSMovieGroup_8cxx-example.xml
15852
15853
15854 // File: DumpImageHeaderInfo_8cxx-example.xml
15855
15856
15857 // File: DumpPhilipsECHO_8cxx-example.xml
15858
15859
15860 // File: DumpSiemensBase64_8cxx-example.xml
15861
15862
15863 // File: DumpToSQLITE3_8cxx-example.xml
15864
15865
15866 // File: DumpToshibaDTI_8cxx-example.xml
15867
15868
15869 // File: DumpVisusChange_8cxx-example.xml
15870
15871
15872 // File: DuplicatePCDE_8cxx-example.xml
15873
15874
15875 // File: ELSCINT1WaveToText_8cxx-example.xml
15876
15877
15878 // File: EmptyMask_8cxx-example.xml
15879
15880
15881 // File: EncapsulateFileInRawData_8cxx-example.xml
15882
15883
15884 // File: ExtractEncryptedContent_8cxx-example.xml
15885
15886
15887 // File: ExtractIconFromFile_8cxx-example.xml
15888
15889
15890 // File: Extracting_All_Resolution_8cxx-example.xml
15891
15892
15893 // File: Fake_Image_Using_Stream_Image_Writer_8cxx-example.xml
15894
15895
15896 // File: FixBrokenJ2K_8cxx-example.xml
15897
15898
15899 // File: FixJAIBugJPEGLS_8cxx-example.xml
15900
15901
15902 // File: FixOrientation_8cxx-example.xml
15903
15904
15905 // File: GenAllVR_8cxx-example.xml
15906
15907
15908 // File: GenFakeIdentifyFile_8cxx-example.xml
15909
15910
15911 // File: GenLongSeqs_8cxx-example.xml
15912
15913
15914 // File: GenSeqs_8cxx-example.xml
15915
15916
15917 // File: GenerateStandardSOPClasses_8cxx-example.xml
15918
15919
15920 // File: GetJPEGSamplePrecision_8cxx-example.xml
15921
15922
15923 // File: GetSequenceUltrasound_8cxx-example.xml
15924
15925
15926 // File: GetSubSequenceData_8cxx-example.xml
15927
15928
15929 // File: HelloVizWorld_8cxx-example.xml
15930
15931
15932 // File: HelloWorld_8cxx-example.xml
15933
15934
15935 // File: LargeVRDSExplicit_8cxx-example.xml
15936
15937
15938 // File: MakeTemplate_8cxx-example.xml
15939
15940
15941 // File: MergeTwoFiles_8cxx-example.xml
15942
15943
15944 // File: MrProtocol_8cxx-example.xml
15945
15946
15947 // File: PrintLUT_8cxx-example.xml
15948
15949
15950 // File: PublicDict_8cxx-example.xml
15951
15952
15953 // File: QIDO-RS_8cxx-example.xml
15954
15955
15956 // File: ReadAndDumpDICOMDIR_8cxx-example.xml
15957
15958
15959 // File: ReadAndDumpDICOMDIR2_8cxx-example.xml
15960
15961
15962 // File: ReadAndPrintAttributes_8cxx-example.xml
15963
15964
15965 // File: ReadExplicitLengthSQIVR_8cxx-example.xml
15966
15967
15968 // File: ReadGEMSSDO_8cxx-example.xml
15969
15970
15971 // File: ReadMultiTimesException_8cxx-example.xml
15972
15973
15974 // File: ReadUTF8QtDir_8cxx-example.xml
15975
15976
15977 // File: Rescale_8cxx-example.xml
15978
15979
15980 // File: SimpleScanner_8cxx-example.xml
15981
15982
15983 // File: SortImage_8cxx-example.xml
15984
15985
15986 // File: StreamImageReaderTest_8cxx-example.xml
15987
15988
15989 // File: TemplateEmptyImage_8cxx-example.xml
16765 // File: threadgdcm_8cxx-example.xml
1599016766
1599116767
1599216768 // File: TraverseModules_8cxx-example.xml
1599316769
1599416770
16771 // File: uid_unique_8cxx-example.xml
16772
16773
1599516774 // File: VolumeSorter_8cxx-example.xml
1599616775
1599716776
15998 // File: WrapCustomStorage_8cxx-example.xml
15999
16000
16001 // File: csa2img_8cxx-example.xml
16002
16003
16004 // File: iU22tomultisc_8cxx-example.xml
16005
16006
16007 // File: pmsct_rgb1_8cxx-example.xml
16008
16009
16010 // File: rle2img_8cxx-example.xml
16011
16012
16013 // File: sample_8cxx-example.xml
16014
16015
16016 // File: uid_unique_8cxx-example.xml
16017
16018
16019 // File: DecompressImage_8java-example.xml
16020
16021
16022 // File: DecompressPixmap_8java-example.xml
16023
16024
16025 // File: ExtractImageRegion_8java-example.xml
16026
16027
16028 // File: FileAnonymize_8java-example.xml
16029
16030
16031 // File: HelloSimple_8java-example.xml
16032
16033
16034 // File: ReadFiles_8java-example.xml
16035
16036
16037 // File: ScanDirectory_8java-example.xml
16038
16039
16040 // File: SimplePrint_8java-example.xml
16041
16042
16043 // File: AddPrivateAttribute_8py-example.xml
16044
16045
16046 // File: ConvertMPL_8py-example.xml
16047
16048
16049 // File: ConvertNumpy_8py-example.xml
16050
16051
16052 // File: ConvertPIL_8py-example.xml
16053
16054
16055 // File: CreateRAWStorage_8py-example.xml
16056
16057
16058 // File: DecompressImage_8py-example.xml
16059
16060
16061 // File: DumbAnonymizer_8py-example.xml
16062
16063
16064 // File: ExtractImageRegion_8py-example.xml
16065
16066
16067 // File: FindAllPatientName_8py-example.xml
16068
16069
16070 // File: FixCommaBug_8py-example.xml
16071
16072
16073 // File: GetPortionCSAHeader_8py-example.xml
16074
16075
16076 // File: HelloWorld_8py-example.xml
16077
16078
16079 // File: ManipulateFile_8py-example.xml
16080
16081
16082 // File: ManipulateSequence_8py-example.xml
16083
16084
16085 // File: MergeFile_8py-example.xml
16086
16087
16088 // File: NewSequence_8py-example.xml
16089
16090
16091 // File: PhilipsPrivateRescaleInterceptSlope_8py-example.xml
16092
16093
16094 // File: PlaySound_8py-example.xml
16095
16096
16097 // File: PrivateDict_8py-example.xml
16098
16099
16100 // File: ReWriteSCAsMR_8py-example.xml
16101
16102
16103 // File: ReadAndDumpDICOMDIR_8py-example.xml
16104
16105
16106 // File: RemovePrivateTags_8py-example.xml
16107
16108
16109 // File: ScanDirectory_8py-example.xml
16110
16111
16112 // File: SortImage_8py-example.xml
16113
16114
1611516777 // File: WriteBuffer_8py-example.xml
1611616778
1611716779
16118 // File: HelloActiviz_8cs-example.xml
16119
16120
16121 // File: HelloActiviz2_8cs-example.xml
16122
16123
16124 // File: HelloActiviz3_8cs-example.xml
16125
16126
16127 // File: HelloActiviz4_8cs-example.xml
16128
16129
16130 // File: HelloActiviz5_8cs-example.xml
16131
16132
16133 // File: HelloVTKWorld_8cs-example.xml
16134
16135
16136 // File: HelloVTKWorld2_8cs-example.xml
16137
16138
16139 // File: MetaImageMD5Activiz_8cs-example.xml
16140
16141
16142 // File: RefCounting_8cs-example.xml
16143
16144
16145 // File: Compute3DSpacing_8cxx-example.xml
16146
16147
16148 // File: Convert16BitsTo8Bits_8cxx-example.xml
16149
16150
16151 // File: ConvertMultiFrameToSingleFrame_8cxx-example.xml
16152
16153
16154 // File: ConvertRGBToLuminance_8cxx-example.xml
16155
16156
16157 // File: ConvertSingleBitTo8Bits_8cxx-example.xml
16158
16159
16160 // File: CreateFakePET_8cxx-example.xml
16161
16162
16163 // File: CreateFakeRTDOSE_8cxx-example.xml
16164
16165
16166 // File: GenerateRTSTRUCT_8cxx-example.xml
16167
16168
16169 // File: MagnifyFile_8cxx-example.xml
16170
16171
16172 // File: gdcmorthoplanes_8cxx-example.xml
16173
16174
16175 // File: gdcmreslice_8cxx-example.xml
16176
16177
16178 // File: gdcmrtionplan_8cxx-example.xml
16179
16180
16181 // File: gdcmrtplan_8cxx-example.xml
16182
16183
16184 // File: gdcmscene_8cxx-example.xml
16185
16186
16187 // File: gdcmtexture_8cxx-example.xml
16188
16189
16190 // File: gdcmvolume_8cxx-example.xml
16191
16192
16193 // File: offscreenimage_8cxx-example.xml
16194
16195
16196 // File: reslicesphere_8cxx-example.xml
16197
16198
16199 // File: rtstructapp_8cxx-example.xml
16200
16201
16202 // File: threadgdcm_8cxx-example.xml
16203
16204
16205 // File: AWTMedical3_8java-example.xml
16206
16207
16208 // File: HelloVTKWorld_8java-example.xml
16209
16210
16211 // File: MIPViewer_8java-example.xml
16212
16213
16214 // File: MPRViewer_8java-example.xml
16215
16216
16217 // File: MPRViewer2_8java-example.xml
16218
16219
16220 // File: ReadSeriesIntoVTK_8java-example.xml
16221
16222
16223 // File: CastConvertPhilips_8py-example.xml
16224
16225
16226 // File: headsq2dcm_8py-example.xml
16227
16228
1622916780 // File: indexpage.xml
1623016781