New upstream version 3.0.16
Mathieu Malaterre
1 year, 8 months ago
533 | 533 | const char *in = filenames[i].c_str(); |
534 | 534 | const char *out = outfilenames[i].c_str(); |
535 | 535 | if (!CleanOneFile(cleaner, in, out, skipmeta > 0 ? true : false, |
536 | continuemode)) { | |
536 | continuemode > 0 ? true : false)) { | |
537 | 537 | return 1; |
538 | 538 | } |
539 | 539 | } |
48 | 48 | #include "gdcmASN1.h" |
49 | 49 | #include "gdcmAttribute.h" |
50 | 50 | #include "gdcmBase64.h" |
51 | #include "gdcmMEC_MR3.h" | |
51 | 52 | #include "gdcmTagKeywords.h" |
52 | 53 | |
53 | 54 | #include <string> |
492 | 493 | os << " UserAdress4: " << std::string(UserAdress4,32) << "\n"; |
493 | 494 | os << " UserAdress5: " << std::string(UserAdress5,32) << "\n"; |
494 | 495 | os << " RecDate: " << std::string(RecDate,8) << "\n"; |
495 | os << " RecTime: " << std::string(RecTime,64) << "\n"; | |
496 | os << " RecTime: " << std::string(RecTime,6) << "\n"; | |
496 | 497 | os << " RecPlace: " << std::string(RecPlace,64) << "\n"; |
497 | 498 | os << " RecSource: " << std::string(RecSource,64) << "\n"; |
498 | 499 | os << " DF1: " << std::string(DF1,64) << "\n"; |
852 | 853 | return ret; |
853 | 854 | } |
854 | 855 | |
855 | static int PrintPMTF(const std::string & filename, bool verbose) | |
856 | static int PrintMEC_MR3(const std::string & filename, bool verbose) | |
856 | 857 | { |
857 | 858 | (void)verbose; |
858 | 859 | gdcm::Reader reader; |
864 | 865 | } |
865 | 866 | |
866 | 867 | 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; | |
868 | 901 | { |
869 | 902 | const gdcm::PrivateTag tpmtf(0x0029,0x1,"PMTF INFORMATION DATA"); |
870 | 903 | const gdcm::PrivateTag tseq(0x0029,0x90,"PMTF INFORMATION DATA"); |
1210 | 1243 | std::cout << " or TOSHIBA_MEC_MR3 sub-sequences (0029,01,TOSHIBA_MEC_MR3)." << std::endl; |
1211 | 1244 | std::cout << " or CANON_MEC_MR3 sub-sequences (0029,01,CANON_MEC_MR3)." << std::endl; |
1212 | 1245 | 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; | |
1213 | 1247 | std::cout << " -A --asn1 print encapsulated ASN1 structure >(0400,0520)." << std::endl; |
1214 | 1248 | std::cout << " --map-uid-names map UID to names." << std::endl; |
1215 | 1249 | std::cout << "General Options:" << std::endl; |
1243 | 1277 | int printvepro = 0; |
1244 | 1278 | int printsds = 0; // MR Series Data Storage |
1245 | 1279 | int printct3 = 0; // TOSHIBA_MEC_CT3 |
1280 | int printmecmr3 = 0; // TOSHIBA_MEC_MR3 | |
1246 | 1281 | int printpmtf = 0; // TOSHIBA / PMTF INFORMATION DATA & TOSHIBA / TOSHIBA_MEC_MR3 & CANON_MEC_MR3 |
1247 | 1282 | int verbose = 0; |
1248 | 1283 | int warning = 0; |
1292 | 1327 | {"pmtf", 0, &printpmtf, 1}, |
1293 | 1328 | {"mecmr3", 0, &printpmtf, 1}, |
1294 | 1329 | {"medcom", 0, &printmedcom, 1}, |
1330 | {"mr3", 0, &printmecmr3, 1}, | |
1295 | 1331 | {nullptr, 0, nullptr, 0} // required |
1296 | 1332 | }; |
1297 | 1333 | static const char short_options[] = "i:xrpdcCPAVWDEhvI"; |
1513 | 1549 | { |
1514 | 1550 | res += PrintPMTF(*it, verbose!= 0); |
1515 | 1551 | } |
1552 | else if( printmecmr3 ) | |
1553 | { | |
1554 | res += PrintMEC_MR3(*it, verbose!=0); | |
1555 | } | |
1516 | 1556 | else if( printmedcom ) |
1517 | 1557 | { |
1518 | res += PrintMedComHistory(*it, csaname); | |
1558 | res += PrintMedComHistory(*it, verbose!=0); | |
1519 | 1559 | } |
1520 | 1560 | else if( printelscint ) |
1521 | 1561 | { |
1575 | 1615 | else if( printpmtf ) |
1576 | 1616 | { |
1577 | 1617 | res += PrintPMTF(filename, verbose!= 0); |
1618 | } | |
1619 | else if( printmecmr3 ) | |
1620 | { | |
1621 | res += PrintMEC_MR3(filename, verbose!= 0); | |
1578 | 1622 | } |
1579 | 1623 | else if( printmedcom ) |
1580 | 1624 | { |
16 | 16 | #---------------------------------------------------------------------------- |
17 | 17 | |
18 | 18 | project(GDCM |
19 | VERSION 3.0.14 | |
19 | VERSION 3.0.16 | |
20 | 20 | LANGUAGES CXX C |
21 | 21 | ) |
22 | 22 | ## NOTE: the "DESCRIPTION" feature of project() was introduced in cmake 3.10.0 |
27 | 27 | set(GDCM_MINOR_VERSION ${GDCM_VERSION_MINOR}) |
28 | 28 | set(GDCM_BUILD_VERSION ${GDCM_VERSION_PATCH}) |
29 | 29 | 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}") | |
30 | 31 | |
31 | 32 | mark_as_advanced(CMAKE_BACKWARDS_COMPATIBILITY CMAKE_BUILD_TYPE CMAKE_INSTALL_PREFIX) |
32 | 33 | set(GDCM_CMAKE_DIR "${GDCM_SOURCE_DIR}/CMake" CACHE INTERNAL "") |
131 | 132 | set(LIBRARY_OUTPUT_PATH ${GDCM_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.") |
132 | 133 | mark_as_advanced(LIBRARY_OUTPUT_PATH) |
133 | 134 | 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}) | |
134 | 141 | |
135 | 142 | #----------------------------------------------------------------------------- |
136 | 143 | # Adding GDCM_DATA_ROOT |
649 | 656 | mark_as_advanced(VTK_DIR) |
650 | 657 | set(GDCM_VTK_DIR ${VTK_DIR}) |
651 | 658 | 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() | |
653 | 749 | endif() |
654 | 750 | endif() |
655 | 751 |
35 | 35 | |
36 | 36 | --> |
37 | 37 | <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"/--> | |
39 | 39 | <!--entry name="General Image Attributes" type="1" vr=" " vm=" " description=""/--> |
40 | 40 | <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"/> |
41 | 41 | <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"/> |
69 | 69 | <entry name="ScanOptions" type="2" vr="CS" vm="1-n" description="Parameters of scanning sequence"/> |
70 | 70 | <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"/> |
71 | 71 | <!--entry name=" " type="1" vr=" " vm=" " description=" "/--> |
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"/> | |
73 | 73 | <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"/> | |
75 | 75 | <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)"/> |
76 | 76 | <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"/> |
77 | 77 | <entry name="NumberOfAverages" type="3" vr="DS" vm="1" description="Number of times a given pulse sequence is repeated before any parameter has changed"/> |
96 | 96 | <entry name="Skip Beats" type="3" vr="IS" vm="1" description="Number of beats skipped after a detected arrhythmia"/> |
97 | 97 | <entry name="HeartRate" type="3" vr="IS" vm="1" description="Beats per minute"/> |
98 | 98 | <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"/> | |
100 | 100 | <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"/> |
101 | 101 | <entry name="Receive Coil" type="3" vr="SH" vm="1" description="Received coil used"/> |
102 | 102 | <entry name="TransmittingCoil" type="3" vr="SH" vm="1" description="Transmitted coil used"/> |
145 | 145 | <entry name="InstitutionName" type="3" vr="LO" vm="1" description="Institution where the equipment is located that produced the digital images"/> |
146 | 146 | <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"/> |
147 | 147 | <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"/> | |
149 | 149 | <entry name="SoftwareVersions" type="3" vr="LO" vm="1-n" description="Manufacturer's designation of software of the equipment that produced the digital images"/> |
150 | 150 | <!--entry name="Overlay Idendification Attributes" type="1" vr=" " vm=" " description=" "/--> |
151 | 151 | <entry name="OverlayRows" type="1" vr="US" vm="1" description="Number of Rows in Overlay"/> |
207 | 207 | <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)"/> |
208 | 208 | <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"/> |
209 | 209 | <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"/> | |
212 | 212 | <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)"/> |
213 | 213 | <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"/> |
214 | 214 | <entry name="NumberOfAverages" type="1" vr="DS" vm="1" description="Number of averages"/> |
123 | 123 | #print "Other Full line:", s2 |
124 | 124 | self.AddOutputLine(s2) |
125 | 125 | else: |
126 | # we have a suspicioulsy long line, so what that could | |
126 | # we have a suspiciously long line, so what that could | |
127 | 127 | # happen, let's check: |
128 | 128 | if self.IsAFullLine(previousbuffer): |
129 | 129 | self.AddOutputLine(previousbuffer) |
16 | 16 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-1><B>Type</B></FONT></TD> |
17 | 17 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-1><B>VR</B></FONT></TD> |
18 | 18 | <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> | |
20 | 20 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-1><B>Creator</B></FONT></TD> |
21 | 21 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-1><B>Unit</B></FONT></TD> |
22 | 22 | </TR> |
163 | 163 | <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD> |
164 | 164 | <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>IS</FONT></TD> |
165 | 165 | <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> | |
167 | 167 | <TD BGCOLOR=#FFFFFF ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
168 | 168 | <TD BGCOLOR=#FFFFFF ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
169 | 169 | </TR> |
203 | 203 | <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD> |
204 | 204 | <TD BGCOLOR=#FFFFFF ALIGN="center"><FONT FACE="Arial" SIZE=-2>IS</FONT></TD> |
205 | 205 | <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> | |
207 | 207 | <TD BGCOLOR=#FFFFFF ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
208 | 208 | <TD BGCOLOR=#FFFFFF ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
209 | 209 | </TR> |
356 | 356 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD> |
357 | 357 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>SH</FONT></TD> |
358 | 358 | <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> | |
360 | 360 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
361 | 361 | <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
362 | 362 | </TR> |
379 | 379 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>2C</FONT></TD> |
380 | 380 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>DS</FONT></TD> |
381 | 381 | <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> | |
383 | 383 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
384 | 384 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>msec</FONT></TD> |
385 | 385 | </TR> |
632 | 632 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD> |
633 | 633 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>IS</FONT></TD> |
634 | 634 | <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> | |
636 | 636 | <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
637 | 637 | <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
638 | 638 | </TR> |
1119 | 1119 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>3</FONT></TD> |
1120 | 1120 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>LO</FONT></TD> |
1121 | 1121 | <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> | |
1123 | 1123 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition/application</FONT></TD> |
1124 | 1124 | <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1125 | 1125 | </TR> |
1313 | 1313 | Example: |
1314 | 1314 | channel 0: 00000001 |
1315 | 1315 | channel 3: 00000111 |
1316 | ·</FONT></TD> | |
1316 | �</FONT></TD> | |
1317 | 1317 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
1318 | 1318 | <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1319 | 1319 | </TR> |
1435 | 1435 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>1</FONT></TD> |
1436 | 1436 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>UL</FONT></TD> |
1437 | 1437 | <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> | |
1439 | 1439 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
1440 | 1440 | <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1441 | 1441 | </TR> |
1535 | 1535 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1536 | 1536 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>DS</FONT></TD> |
1537 | 1537 | <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> | |
1539 | 1539 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
1540 | 1540 | <TD ALIGN="right"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1541 | 1541 | </TR> |
1745 | 1745 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1746 | 1746 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>SH</FONT></TD> |
1747 | 1747 | <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> | |
1749 | 1749 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
1750 | 1750 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1751 | 1751 | </TR> |
1755 | 1755 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1756 | 1756 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>DS</FONT></TD> |
1757 | 1757 | <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> | |
1759 | 1759 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
1760 | 1760 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
1761 | 1761 | </TR> |
2163 | 2163 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
2164 | 2164 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2>UL</FONT></TD> |
2165 | 2165 | <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> | |
2167 | 2167 | <TD ALIGN="left"><FONT FACE="Arial" SIZE=-2>acquisition</FONT></TD> |
2168 | 2168 | <TD ALIGN="center"><FONT FACE="Arial" SIZE=-2> </FONT></TD> |
2169 | 2169 | </TR> |
63 | 63 | {"SequenceVariant","1",VR::CS,VM::VM1_n,"Variant of the Scanning Sequence"}, |
64 | 64 | {"ScanOptions","2",VR::CS,VM::VM1_n,"Parameters of scanning sequence"}, |
65 | 65 | {"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"}, | |
67 | 67 | {"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"}, | |
69 | 69 | {"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)"}, |
70 | 70 | {"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"}, |
71 | 71 | {"NumberOfAverages","3",VR::DS,VM::VM1,"Number of times a given pulse sequence is repeated before any parameter has changed"}, |
90 | 90 | {"Skip Beats","3",VR::IS,VM::VM1,"Number of beats skipped after a detected arrhythmia"}, |
91 | 91 | {"HeartRate","3",VR::IS,VM::VM1,"Beats per minute"}, |
92 | 92 | {"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"}, | |
94 | 94 | {"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"}, |
95 | 95 | {"Receive Coil","3",VR::SH,VM::VM1,"Received coil used"}, |
96 | 96 | {"TransmittingCoil","3",VR::SH,VM::VM1,"Transmitted coil used"}, |
133 | 133 | {"InstitutionName","3",VR::LO,VM::VM1,"Institution where the equipment is located that produced the digital images"}, |
134 | 134 | {"InstitutionAddress","3",VR::ST,VM::VM1,"Mailing address of the institution where the equipment is located that produced the digital images"}, |
135 | 135 | {"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"}, | |
137 | 137 | {"SoftwareVersions","3",VR::LO,VM::VM1_n,"Manufacturer's designation of software of the equipment that produced the digital images"}, |
138 | 138 | {"OverlayRows","1",VR::US,VM::VM1,"Number of Rows in Overlay"}, |
139 | 139 | {"OverlayColumns","1",VR::US,VM::VM1,"Number of Columns in Overlay"}, |
191 | 191 | {"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)"}, |
192 | 192 | //{"PatientOrientation","1",VR::CS,VM::VM1,"Patient direction of the rows and columns of the image. Not required for MR images"}, |
193 | 193 | {"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"}, | |
196 | 196 | //{"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)"}, |
197 | 197 | //{"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"}, |
198 | 198 | //{"NumberOfAverages","1",VR::DS,VM::VM1,"Number of averages"}, |
40 | 40 | {0x0019,"SPIA","SPI Acquisition"}, |
41 | 41 | {0x0020,"IMG","Image"}, |
42 | 42 | {0x0021,"SPIIM","SPI Image"}, |
43 | {0x0022,"OPHY","Ophtalmology"}, | |
43 | {0x0022,"OPHY","Ophthalmology"}, | |
44 | 44 | {0x0028,"IMGP","Image Presentation"}, |
45 | 45 | {0x0032,"SDY","Study"}, |
46 | 46 | {0x0038,"VIS","Visit"}, |
2687 | 2687 | {0x0019,0x0070,"GE ??? From Adantage Review CS",VR::LO,VM::VM1,"CR Image Serial Number",false }, |
2688 | 2688 | {0x0019,0x0080,"GE ??? From Adantage Review CS",VR::LO,VM::VM1,"CR Bar Code Number",false }, |
2689 | 2689 | {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 }, | |
2691 | 2691 | {0x0053,0x0020,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"ShuttleFlag",false }, |
2692 | 2692 | {0x0053,0x0021,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"TableSpeedNotReachesTargetFlag",false }, |
2693 | 2693 | {0x0053,0x0040,"GEHC_CT_ADVAPP_001",VR::SH,VM::VM1,"IterativeReconAnnotation",false }, |
2701 | 2701 | {0x0053,0x0065,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"Shutter Mode Percent",false }, |
2702 | 2702 | {0x0053,0x0066,"GEHC_CT_ADVAPP_001",VR::LO,VM::VM1,"Image Browser Annotation",false }, |
2703 | 2703 | {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 }, | |
2705 | 2705 | {0x0053,0x006a,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"ODMFlag",false }, |
2706 | 2706 | {0x0053,0x006b,"GEHC_CT_ADVAPP_001",VR::IS,VM::VM1,"ODMReductionPercent",false }, |
2707 | 2707 | {0x0053,0x006c,"GEHC_CT_ADVAPP_001",VR::DS,VM::VM1,"?",false }, |
3406 | 3406 | {0x0045,0x0062,"GEMS_FALCON_03",VR::IS,VM::VM1,"User Window Center",false }, |
3407 | 3407 | {0x0045,0x0063,"GEMS_FALCON_03",VR::IS,VM::VM1,"User Window Width",false }, |
3408 | 3408 | {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 }, | |
3410 | 3410 | {0x0045,0x0069,"GEMS_FALCON_03",VR::IS,VM::VM1,"Collimator rotation",false }, |
3411 | 3411 | {0x0045,0x0072,"GEMS_FALCON_03",VR::DS,VM::VM1,"Collimator Width",false }, |
3412 | 3412 | {0x0045,0x0073,"GEMS_FALCON_03",VR::DS,VM::VM1,"Collimator Height",false }, |
8550 | 8550 | {0x0055,0x0093,"SIEMENS MED NM",VR::FL,VM::VM1,"Filter Cutoff Frequency",false }, |
8551 | 8551 | {0x0055,0x0094,"SIEMENS MED NM",VR::FL,VM::VM1,"Filter Alpha Coefficient",false }, |
8552 | 8552 | {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 }, | |
8554 | 8554 | {0x0055,0x0097,"SIEMENS MED NM",VR::SS,VM::VM1,"Percent Ray",false }, |
8555 | 8555 | {0x0055,0x0098,"SIEMENS MED NM",VR::SS,VM::VM1,"Astigmatic Collimator 1 Neuro 2 Cardiac",false }, |
8556 | 8556 | {0x0055,0x0099,"SIEMENS MED NM",VR::SS,VM::VM1,"XP0",false }, |
2122 | 2122 | <entry owner="GE ??? From Adantage Review CS" group="0019" element="xx70" vr="LO" vm="1" name="CR Image Serial Number"/> |
2123 | 2123 | <entry owner="GE ??? From Adantage Review CS" group="0019" element="xx80" vr="LO" vm="1" name="CR Bar Code Number"/> |
2124 | 2124 | <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"/> | |
2126 | 2126 | <entry owner="GEHC_CT_ADVAPP_001" group="0053" element="xx20" vr="IS" vm="1" name="ShuttleFlag"/> |
2127 | 2127 | <entry owner="GEHC_CT_ADVAPP_001" group="0053" element="xx21" vr="IS" vm="1" name="TableSpeedNotReachesTargetFlag"/> |
2128 | 2128 | <entry owner="GEHC_CT_ADVAPP_001" group="0053" element="xx40" vr="SH" vm="1" name="IterativeReconAnnotation"/> |
2831 | 2831 | <entry owner="GEMS_FALCON_03" group="0045" element="xx62" vr="IS" vm="1" name="User Window Center"/> |
2832 | 2832 | <entry owner="GEMS_FALCON_03" group="0045" element="xx63" vr="IS" vm="1" name="User Window Width"/> |
2833 | 2833 | <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"/> | |
2835 | 2835 | <entry owner="GEMS_FALCON_03" group="0045" element="xx69" vr="IS" vm="1" name="Collimator rotation"/> |
2836 | 2836 | <entry owner="GEMS_FALCON_03" group="0045" element="xx72" vr="DS" vm="1" name="Collimator Width"/> |
2837 | 2837 | <entry owner="GEMS_FALCON_03" group="0045" element="xx73" vr="DS" vm="1" name="Collimator Height"/> |
7309 | 7309 | <entry owner="SIEMENS MED NM" group="0055" element="xx93" vr="FL" vm="1" name="Filter Cutoff Frequency"/> |
7310 | 7310 | <entry owner="SIEMENS MED NM" group="0055" element="xx94" vr="FL" vm="1" name="Filter Alpha Coefficient"/> |
7311 | 7311 | <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"/> | |
7313 | 7313 | <entry owner="SIEMENS MED NM" group="0055" element="xx97" vr="SS" vm="1" name="Percent Ray"/> |
7314 | 7314 | <entry owner="SIEMENS MED NM" group="0055" element="xx98" vr="SS" vm="1" name="Astigmatic Collimator 1 Neuro 2 Cardiac"/> |
7315 | 7315 | <entry owner="SIEMENS MED NM" group="0055" element="xx99" vr="SS" vm="1" name="XP0"/> |
66 | 66 | CSAHeader():InternalDataSet(),InternalType(UNKNOWN),InterfileData(nullptr) {}; |
67 | 67 | ~CSAHeader() = default; |
68 | 68 | |
69 | /// Divers format of CSAHeader as found 'in the wild' | |
69 | /// Diverse format of CSAHeader as found 'in the wild' | |
70 | 70 | typedef enum { |
71 | 71 | UNKNOWN = 0, |
72 | 72 | SV10, |
155 | 155 | return nullptr; |
156 | 156 | } |
157 | 157 | } |
158 | catch ( ... ) | |
159 | { | |
160 | gdcmErrorMacro( "Could not read SQ, unknown exception" ); | |
161 | delete sqi; | |
162 | return nullptr; | |
163 | } | |
158 | 164 | } |
159 | 165 | return sqi; |
160 | 166 | } |
59 | 59 | /// \brief Appends a Fragment to the already added ones |
60 | 60 | void AddFragment(Fragment const &item); |
61 | 61 | |
62 | // Compute the length of all fragments (and framents only!). | |
62 | // Compute the length of all fragments (and fragments only!). | |
63 | 63 | // Basically the size of the PixelData as stored (in bytes). |
64 | 64 | unsigned long ComputeByteLength() const; |
65 | 65 |
13160 | 13160 | |
13161 | 13161 | Defined Terms: |
13162 | 13162 | ION_SQUARE = square ion applicator |
13163 | ION_RECT = rectangluar ion applicator | |
13163 | ION_RECT = rectangular ion applicator | |
13164 | 13164 | ION_CIRC = circular ion applicator |
13165 | 13165 | ION_SHORT = short ion applicator |
13166 | 13166 | ION_OPEN = open (dummy) ion applicator |
13735 | 13735 | |
13736 | 13736 | Defined Terms: |
13737 | 13737 | ION_SQUARE = square ion applicator |
13738 | ION_RECT = rectangluar ion applicator | |
13738 | ION_RECT = rectangular ion applicator | |
13739 | 13739 | ION_CIRC = circular ion applicator |
13740 | 13740 | ION_SHORT = short ion applicator |
13741 | 13741 | ION_OPEN = open (dummy) ion applicator |
14991 | 14991 | 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. |
14992 | 14992 | |
14993 | 14993 | 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. | |
14995 | 14995 | 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. |
14996 | 14996 | 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. |
14997 | 14997 | The three values of the LUT Descriptor (0028,3002) describe the format of the LUT Data (0028,3006). |
15014 | 15014 | 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. |
15015 | 15015 | |
15016 | 15016 | 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. | |
15018 | 15018 | 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. |
15019 | 15019 | 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. |
15020 | 15020 | The three values of the LUT Descriptor (0028,3002) describe the format of the LUT Data (0028,3006). |
15044 | 15044 | 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. |
15045 | 15045 | |
15046 | 15046 | 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. | |
15048 | 15048 | 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. |
15049 | 15049 | 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. |
15050 | 15050 | The three values of the LUT Descriptor (0028,3002) describe the format of the LUT Data (0028,3006). |
15066 | 15066 | 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. |
15067 | 15067 | |
15068 | 15068 | 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. | |
15070 | 15070 | 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. |
15071 | 15071 | 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. |
15072 | 15072 | The three values of the LUT Descriptor (0028,3002) describe the format of the LUT Data (0028,3006). |
20051 | 20051 | Required if present and consistent in the contributing SOP Instances.</description> |
20052 | 20052 | </entry> |
20053 | 20053 | </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"> | |
20055 | 20055 | <entry group="0008" element="2112" name="Source Image Sequence" type="1C"> |
20056 | 20056 | <description>A Sequence that identifies the set of Images that constitute this acquisition context. |
20057 | 20057 | Required if the reconstruction is created from DICOM SOP Instances. |
1 | 1 | <!--We need the DICOM Tag (group,element) but the Attribute is not necessary I don't see |
2 | 2 | why we should repeat it. Type is compulsory and Description is not necessary either.--> |
3 | 3 | <!-- 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 --> | |
5 | 5 | <!-- Sample XML file to test XML parser --> |
6 | 6 | |
7 | 7 | <Table Name="Template"> |
40 | 40 | Modules &GetModules() { return Part3Modules; } |
41 | 41 | |
42 | 42 | /// 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 | |
44 | 44 | const Macros &GetMacros() const { return Part3Macros; } |
45 | 45 | Macros &GetMacros() { return Part3Macros; } |
46 | 46 |
1 | 1 | # MSFF |
2 | 2 | set(MSFF_SRCS |
3 | 3 | gdcmEmptyMaskGenerator.cxx |
4 | gdcmMEC_MR3.cxx | |
4 | 5 | gdcmEquipmentManufacturer.cxx |
5 | 6 | gdcmFileStreamer.cxx |
6 | 7 | gdcmCleaner.cxx |
107 | 108 | ) |
108 | 109 | |
109 | 110 | 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 | |
111 | 115 | ) |
112 | 116 | |
113 | 117 | # Do the proper thing when building static...if only there was configured |
19 | 19 | #include "gdcmEvent.h" |
20 | 20 | #include "gdcmGlobal.h" |
21 | 21 | |
22 | #include "gdcmcsa/csa.h" | |
22 | #include "gdcmext/csa.h" | |
23 | #include "gdcmext/mec_mr3.h" | |
23 | 24 | |
24 | 25 | namespace gdcm { |
25 | 26 | |
635 | 636 | bool Scrub(PrivateTag const &pt) { |
636 | 637 | static const PrivateTag &csa1 = CSAHeader::GetCSAImageHeaderInfoTag(); |
637 | 638 | 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) { | |
639 | 643 | scrub_privatetags.insert(pt); |
640 | 644 | return true; |
641 | 645 | } |
766 | 770 | return true; |
767 | 771 | } |
768 | 772 | 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(©[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"); | |
769 | 844 | return false; |
770 | 845 | } |
771 | 846 | |
959 | 1034 | |
960 | 1035 | static const PrivateTag &csa1 = CSAHeader::GetCSAImageHeaderInfoTag(); |
961 | 1036 | 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"); | |
962 | 1040 | |
963 | 1041 | if (pt == csa1) { |
964 | 1042 | const bool ret = CleanCSA(ds, de); |
965 | 1043 | if (!ret) return false; |
966 | 1044 | } else if (pt == csa2) { |
967 | 1045 | 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); | |
968 | 1055 | if (!ret) return false; |
969 | 1056 | } else { |
970 | 1057 | gdcmErrorMacro(" not implemented"); |
979 | 1066 | return true; |
980 | 1067 | } |
981 | 1068 | |
982 | Cleaner::Cleaner() : pimpl(new impl) {} | |
1069 | Cleaner::Cleaner() : F(new File), pimpl(new impl) {} | |
983 | 1070 | |
984 | 1071 | Cleaner::~Cleaner() { delete pimpl; } |
985 | 1072 |
29 | 29 | * As a side note there is also a problem with const reference to enum type: |
30 | 30 | * - http://sourceforge.net/mailarchive/forum.php?thread_name=bf0c3b3f0802290552y5163989t76572b80a044ce28%40mail.gmail.com&forum_name=swig-user |
31 | 31 | * |
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: | |
33 | 33 | * |
34 | 34 | * - http://sourceforge.net/mailarchive/forum.php?thread_name=bf0c3b3f0802290552y5163989t76572b80a044ce28%40mail.gmail.com&forum_name=swig-user |
35 | 35 | */ |
287 | 287 | |
288 | 288 | /* |
289 | 289 | * 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. | |
291 | 291 | * |
292 | 292 | * TODO: Need to make sure that Series belong to the same Study... |
293 | 293 | */ |
123 | 123 | const VR &devr = de.GetVR(); |
124 | 124 | if( devr != refvr ) |
125 | 125 | { |
126 | if(!refvr.Compatible(devr)) | |
126 | if(!refvr.Compatible(devr)) { | |
127 | 127 | gdcmWarningMacro("Inconsistent VR: " << devr << " should be " << refvr << " for: [" << (owner ? owner : "<null>") << "]" << " de is: " << de ); |
128 | } | |
128 | 129 | } |
129 | 130 | } |
130 | 131 |
1008 | 1008 | const Tag tfgs(0x5200,0x9230); |
1009 | 1009 | if( ds.FindDataElement( tfgs ) ) |
1010 | 1010 | { |
1011 | SmartPointer<SequenceOfItems> sqi = ds.GetDataElement( tfgs ).GetValueAsSQ(); | |
1011 | const DataElement &de = ds.GetDataElement( tfgs ); | |
1012 | SmartPointer<SequenceOfItems> sqi = de.GetValueAsSQ(); | |
1012 | 1013 | assert( sqi ); |
1013 | sqi->SetLengthToUndefined(); | |
1014 | 1014 | 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 | } | |
1015 | 1024 | } |
1016 | 1025 | } |
1017 | 1026 |
305 | 305 | { |
306 | 306 | #if 0 |
307 | 307 | // 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 | |
309 | 309 | // into an 8bits allocated indexed Pixel Data with 8bits LUT... this is just not |
310 | 310 | // possible in the general case |
311 | 311 | 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 |
61 | 61 | "You need to decompress first." ); |
62 | 62 | return false; |
63 | 63 | } |
64 | #if 1 | |
64 | 65 | gdcm::PhotometricInterpretation pi = this->GetPhotometricInterpretation(); |
65 | #if 0 | |
66 | 66 | if( pi != gdcm::PhotometricInterpretation::MONOCHROME2 ) { |
67 | 67 | gdcmErrorMacro( "Bogus PI" << pi ); |
68 | 68 | return false; |
46 | 46 | friend class Bitmap; |
47 | 47 | friend std::ostream& operator<<(std::ostream &_os, const PixelFormat &pf); |
48 | 48 | 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) | |
50 | 50 | typedef enum { |
51 | 51 | UINT8, |
52 | 52 | INT8, |
87 | 87 | /// By default (when UseTargetPixelType is false), a best |
88 | 88 | /// matching Target Pixel Type is computed. However user can override |
89 | 89 | /// this auto selection by switching UseTargetPixelType:true and |
90 | /// also specifying the specifix Target Pixel Type | |
90 | /// also specifying the specific Target Pixel Type | |
91 | 91 | void SetTargetPixelType( PixelFormat const & targetst ); |
92 | 92 | |
93 | 93 | /// Override default behavior of Rescale |
65 | 65 | |
66 | 66 | /// Execute the XPATH query to find a value (as string) |
67 | 67 | /// 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 | |
69 | 69 | bool ExecuteQuery(std::string const &query, std::string & value) const; |
70 | 70 | |
71 | 71 | protected: |
379 | 379 | } |
380 | 380 | |
381 | 381 | //****** Surface Mesh Primitives *****// |
382 | // Two exemples : | |
382 | // Two examples : | |
383 | 383 | // (0066,0013) SQ (Sequence with undefined length #=1) # u/l, 1 Surface Mesh Primitives Sequence |
384 | 384 | // (fffe,e000) na (Item with undefined length #=1) # u/l, 1 Item |
385 | 385 | // (0066,0042) OL # 0, 1 Long Edge Point Index List |
52 | 52 | /// successfully been tested for a root of size 26 bytes. Any longer root should work (the Generate() |
53 | 53 | /// function will return a string), but will truncate the high bits of the 128bits UUID until the |
54 | 54 | /// 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. | |
56 | 56 | static void SetRoot(const char * root); |
57 | 57 | static const char *GetRoot(); |
58 | 58 |
75 | 75 | public: |
76 | 76 | /* |
77 | 77 | Message ID M U |
78 | Message ID Being Responded To  M | |
78 | Message ID Being Responded To M | |
79 | 79 | Affected SOP Class UID M U(=) |
80 | Status  M | |
80 | Status M | |
81 | 81 | */ |
82 | 82 | }; |
83 | 83 |
20 | 20 | |
21 | 21 | name and date: 25 Sept 2010 mmr |
22 | 22 | |
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 | |
24 | 24 | class to construct specific instances of PDUs, and return the BasePDU class. |
25 | 25 | */ |
26 | 26 | #include "gdcmPDUFactory.h" |
88 | 88 | mConnection->GetTimer().SetTimeout(inTimeout); |
89 | 89 | |
90 | 90 | // 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. | |
92 | 92 | // if one push_pack |
93 | 93 | // (1, Secondary) |
94 | 94 | // (1, Verification) |
273 | 273 | |
274 | 274 | |
275 | 275 | // 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. | |
277 | 277 | // if one push_pack |
278 | 278 | // (1, Secondary) |
279 | 279 | // (1, Verification) |
69 | 69 | ULConnectionManager(); |
70 | 70 | ~ULConnectionManager() override; |
71 | 71 | |
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 | |
73 | 73 | // them as internal for now. |
74 | 74 | |
75 | 75 | // \internal |
45 | 45 | const DataSet &ds = GetQueryDataSet(); |
46 | 46 | if (ds.Size() == 0) return false; |
47 | 47 | |
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 | |
50 | 50 | |
51 | 51 | bool theReturn = true ; |
52 | 52 | DataSet validDs = GetValidDataSet(); |
53 | 53 | } // namespace gdcm |
54 | 54 | |
55 | 55 | struct TestCleaner4Impl { |
56 | virtual ~TestCleaner4Impl() {} | |
56 | 57 | virtual bool check_before(gdcm::DataSet &ds) = 0; |
57 | 58 | virtual bool check_after(gdcm::DataSet &ds, bool preservePatientName) = 0; |
58 | 59 | int run(std::string const &filename, std::string const &outfilename, |
0 | 0 | # Build the vtk-gdcm simple viewer |
1 | 1 | include_directories( |
2 | ${GDCM_BINARY_DIR}/Utilities/VTK | |
2 | 3 | ${GDCM_SOURCE_DIR}/Utilities/VTK |
3 | 4 | ) |
4 | 5 | |
39 | 40 | if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" GREATER 5.0 ) |
40 | 41 | target_link_libraries(${app} vtkWidgets vtkHybrid) |
41 | 42 | endif() |
43 | elseif(VTK_VERSION VERSION_LESS 8.90) | |
44 | # >= 6.0 and < 8.90 | |
45 | target_link_libraries(${app} ${VTK_LIBRARIES} vtkIOXML) | |
42 | 46 | 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() | |
45 | 60 | endif() |
46 | 61 | if(WIN32 AND NOT CYGWIN) |
47 | 62 | target_link_libraries(${app} gdcmgetopt) |
15 | 15 | ) |
16 | 16 | endif() |
17 | 17 | |
18 | #if( ${VTK_VERSION_MAJOR} LESS 7 ) | |
18 | if(VTK_VERSION VERSION_LESS 8.90) | |
19 | 19 | 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() | |
21 | 26 | |
22 | 27 | if( ${VTK_MAJOR_VERSION} GREATER 5 ) |
23 | 28 | list(APPEND vtkgdcm_SRCS |
40 | 45 | ${GDCM_SOURCE_DIR}/Source/DataStructureAndEncodingDefinition |
41 | 46 | ${GDCM_SOURCE_DIR}/Source/MediaStorageAndFileFormat |
42 | 47 | ${GDCM_SOURCE_DIR}/Source/DataDictionary |
48 | ${GDCM_BINARY_DIR}/Utilities/VTK | |
43 | 49 | ${GDCM_SOURCE_DIR}/Utilities/VTK |
44 | 50 | ) |
45 | 51 | |
62 | 68 | vtkRendering |
63 | 69 | ) |
64 | 70 | endif() |
65 | else() | |
71 | elseif(VTK_VERSION VERSION_LESS 8.90) | |
66 | 72 | set(vtkgdcm_LIBS |
67 | 73 | vtkCommonCore |
68 | 74 | vtkImagingCore |
91 | 97 | endif() |
92 | 98 | endforeach() |
93 | 99 | endforeach() |
100 | elseif() # (VTK_VERSION VERSION_LESS 8.90) | |
101 | # for VTK 9, target dependencies are handled automatically | |
102 | set(vtkgdcm_LIBS) | |
94 | 103 | endif() |
95 | 104 | |
96 | 105 | # Use wrapping hints for this project. |
97 | 106 | #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) | |
101 | 107 | |
102 | 108 | # Create the instantiator for these classes. |
103 | 109 | # FIXME: Are instantiator really needed when only doing python wrapping ? |
157 | 163 | endif() |
158 | 164 | endif() |
159 | 165 | |
166 | if(VTK_VERSION VERSION_LESS 8.90) | |
167 | ||
160 | 168 | #Hum... not sure why this is needed. |
161 | 169 | #if(NOT VTK_BUILD_SHARED_LIBS AND GDCM_BUILD_SHARED_LIBS) |
162 | 170 | # add_library(vtkgdcm STATIC ${vtkgdcm_SRCS} ${vtkgdcmInstantiator_SRCS}) |
183 | 191 | # endif() |
184 | 192 | endif() |
185 | 193 | |
194 | # Generate the header file for VTKGDCM_EXPORT | |
195 | configure_file(vtkgdcmModule.h.in | |
196 | "${CMAKE_CURRENT_BINARY_DIR}/vtkgdcmModule.h" COPYONLY) | |
197 | ||
186 | 198 | 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") | |
188 | 200 | if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" LESS 4.5 ) |
189 | 201 | set(header_files_glob ${header_files_glob} |
190 | 202 | "VTK4/*.h" |
194 | 206 | install(FILES ${header_files} |
195 | 207 | DESTINATION ${GDCM_INSTALL_INCLUDE_DIR} COMPONENT VTKHeaders |
196 | 208 | ) |
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) | |
197 | 223 | endif() |
198 | 224 | |
199 | 225 | if(GDCM_WRAP_PHP) |
641 | 667 | |
642 | 668 | endif() |
643 | 669 | |
670 | if(VTK_VERSION VERSION_LESS 8.90) | |
671 | ||
644 | 672 | if( (GDCM_WRAP_JAVA AND VTK_WRAP_JAVA) OR |
645 | 673 | (GDCM_WRAP_PYTHON AND VTK_WRAP_PYTHON) ) |
646 | 674 | if( ${VTK_MAJOR_VERSION} GREATER 7 ) |
832 | 860 | add_subdirectory(Testing) |
833 | 861 | endif() |
834 | 862 | |
863 | endif() #(VTK_VERSION VERSION_LESS 8.90) | |
864 | ||
835 | 865 | if(BUILD_APPLICATIONS) |
836 | 866 | add_subdirectory(Applications) |
837 | 867 | endif() |
0 | 0 | include_directories( |
1 | ${GDCM_BINARY_DIR}/Utilities/VTK | |
1 | 2 | ${GDCM_SOURCE_DIR}/Utilities/VTK |
2 | 3 | ) |
3 | 4 | |
7 | 8 | CreateFakeRTDOSE |
8 | 9 | CreateFakePET |
9 | 10 | ConvertSingleBitTo8Bits |
10 | GenerateRTSTRUCT | |
11 | offscreenimage | |
12 | 11 | ) |
12 | if(VTK_USE_RENDERING OR vtkRenderingCore_LOADED) | |
13 | set(GDCM_VTK_APPS | |
14 | ${GDCM_VTK_APPS} | |
15 | GenerateRTSTRUCT | |
16 | offscreenimage | |
17 | ) | |
18 | endif() | |
13 | 19 | if( ${VTK_MAJOR_VERSION} GREATER 5 ) |
14 | 20 | set(GDCM_VTK_APPS |
15 | 21 | ${GDCM_VTK_APPS} |
57 | 63 | # gdcmTesting is in Common: |
58 | 64 | target_link_libraries(${app} gdcmCommon) |
59 | 65 | 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 ) | |
61 | 78 | target_link_libraries(${app} ${VTK_LIBRARIES}) |
62 | 79 | else() |
63 | 80 | if( "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" GREATER 5.0 ) |
13 | 13 | #include "vtkGDCMImageReader2.h" |
14 | 14 | #include "vtkImageChangeInformation.h" |
15 | 15 | #include "vtkStringArray.h" |
16 | #include "vtkVersion.h" | |
16 | 17 | #include "gdcmIPPSorter.h" |
17 | 18 | |
18 | 19 | #ifndef vtkFloatingPointType |
14 | 14 | #include "vtkGDCMImageWriter.h" |
15 | 15 | #include "vtkImageData.h" |
16 | 16 | #include "vtkImageCast.h" |
17 | #include "vtkVersion.h" | |
17 | 18 | |
18 | 19 | #include "gdcmTesting.h" |
19 | 20 | // The following file is 16/16/15 but the scalar range of the image is [0,192] |
14 | 14 | #include "vtkGDCMImageWriter.h" |
15 | 15 | #include "vtkImageData.h" |
16 | 16 | #include "vtkStringArray.h" |
17 | #include "vtkVersion.h" | |
17 | 18 | |
18 | 19 | #include "gdcmTesting.h" |
19 | 20 | #include "gdcmFilenameGenerator.h" |
14 | 14 | #include "vtkGDCMImageWriter.h" |
15 | 15 | #include "vtkImageData.h" |
16 | 16 | #include "vtkImageLuminance.h" |
17 | #include "vtkVersion.h" | |
17 | 18 | |
18 | 19 | #include "gdcmTesting.h" |
19 | 20 |
17 | 17 | #include "vtkPointData.h" |
18 | 18 | #include "vtkBitArray.h" |
19 | 19 | #include "vtkUnsignedCharArray.h" |
20 | #include "vtkVersion.h" | |
20 | 21 | |
21 | 22 | int main(int argc, char *argv[]) |
22 | 23 | { |
18 | 18 | #include "vtkDataArray.h" |
19 | 19 | #include "vtkMedicalImageProperties.h" |
20 | 20 | #include "vtkStringArray.h" |
21 | #include "vtkVersion.h" | |
21 | 22 | |
22 | 23 | #include "gdcmTrace.h" |
23 | 24 | #include "gdcmReader.h" |
17 | 17 | #include "vtkPointData.h" |
18 | 18 | #include "vtkDataArray.h" |
19 | 19 | #include "vtkMedicalImageProperties.h" |
20 | #include "vtkVersion.h" | |
20 | 21 | |
21 | 22 | #include "gdcmTrace.h" |
22 | 23 | #include "gdcmReader.h" |
30 | 30 | #include "vtkProperty.h" |
31 | 31 | #include "vtkProperty2D.h" |
32 | 32 | #include "vtkImageData.h" |
33 | #include "vtkVersion.h" | |
33 | 34 | |
34 | 35 | #include <algorithm> //for std::find |
35 | 36 |
15 | 15 | #include "vtkImageData.h" |
16 | 16 | #include "vtkImageMagnify.h" |
17 | 17 | #include "vtkImageCast.h" |
18 | #include "vtkVersion.h" | |
18 | 19 | |
19 | 20 | #include "gdcmTesting.h" |
20 | 21 | #include "gdcmSystem.h" |
44 | 44 | #include "vtkGDCMImageReader.h" |
45 | 45 | #include "vtkGDCMImageWriter.h" |
46 | 46 | #include "vtkStringArray.h" |
47 | #include "vtkVersion.h" | |
47 | 48 | |
48 | 49 | #include "gdcmSystem.h" |
49 | 50 | #include "gdcmDirectory.h" |
31 | 31 | #include "vtkLookupTable.h" |
32 | 32 | #include "vtkTexture.h" |
33 | 33 | #include "vtkPlaneSource.h" |
34 | #include "vtkVersion.h" | |
34 | 35 | |
35 | 36 | int main( int argc, char *argv[] ) |
36 | 37 | { |
24 | 24 | #include <vtkXMLPolyDataWriter.h> |
25 | 25 | #include <vtkRenderWindowInteractor.h> |
26 | 26 | #include <vtkImageColorViewer.h> |
27 | #include "vtkVersion.h" | |
27 | 28 | |
28 | 29 | #include "gdcmReader.h" |
29 | 30 | #include "gdcmAttribute.h" |
23 | 23 | #include <vtkXMLImageDataWriter.h> |
24 | 24 | #include <vtkRenderWindowInteractor.h> |
25 | 25 | #include <vtkImageColorViewer.h> |
26 | #include "vtkVersion.h" | |
26 | 27 | |
27 | 28 | #include "gdcmReader.h" |
28 | 29 | #include "gdcmAttribute.h" |
24 | 24 | #include "vtkCamera.h" |
25 | 25 | #include "vtkProperty.h" |
26 | 26 | #include "vtkProperty2D.h" |
27 | #include "vtkVersion.h" | |
27 | 28 | |
28 | 29 | |
29 | 30 | // gdcmDataExtra/gdcmNonImageData/exRT_Structure_Set_Storage.dcm |
29 | 29 | #include "vtkLookupTable.h" |
30 | 30 | #include "vtkTexture.h" |
31 | 31 | #include "vtkPlaneSource.h" |
32 | #include "vtkVersion.h" | |
32 | 33 | |
33 | 34 | int main( int argc, char *argv[] ) |
34 | 35 | { |
25 | 25 | #include "vtkRenderWindow.h" |
26 | 26 | #include "vtkImageClip.h" |
27 | 27 | #include "vtkRenderWindowInteractor.h" |
28 | #include "vtkVersion.h" | |
28 | 29 | |
29 | 30 | |
30 | 31 | // gdcmvolume gdcmData/GE_DLX-8-MONO2-Multiframe-Jpeg_Lossless.dcm |
18 | 18 | #include "vtkPNGWriter.h" |
19 | 19 | #include "vtkWindowToImageFilter.h" |
20 | 20 | #include "vtkMedicalImageProperties.h" |
21 | #include "vtkVersion.h" | |
21 | 22 | |
22 | 23 | int main(int argc, char *argv[]) |
23 | 24 | { |
58 | 58 | #include <vtkProperty2D.h> |
59 | 59 | #include <vtkGDCMImageReader.h> |
60 | 60 | #include <vtkImageChangeInformation.h> |
61 | #include <vtkVersion.h> | |
61 | 62 | |
62 | 63 | #include "gdcmDirectory.h" |
63 | 64 | #include "gdcmTesting.h" |
26 | 26 | #include "vtkProperty2D.h" |
27 | 27 | #include "vtkAppendPolyData.h" |
28 | 28 | #include "vtkImageData.h" |
29 | #include "vtkVersion.h" | |
29 | 30 | |
30 | 31 | /* |
31 | 32 | * Small example to read in a RTSTUCT and write it out (displays it too). |
17 | 17 | |
18 | 18 | #include "vtkImageData.h" |
19 | 19 | #include "vtkStructuredPointsWriter.h" |
20 | #include "vtkVersion.h" | |
20 | 21 | |
21 | 22 | #include <pthread.h> |
22 | 23 |
54 | 54 | endif() |
55 | 55 | |
56 | 56 | # 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 | ||
57 | 72 | include_directories( |
58 | "${GDCM_SOURCE_DIR}/Utilities/VTK" | |
59 | 73 | "${GDCM_BINARY_DIR}/Testing/Source/Data" # for gdcmDataImages.h |
60 | 74 | ) |
61 | 75 | |
64 | 78 | ) |
65 | 79 | add_executable(gdcmvtkGDCMTests ${vtkGDCMTests}) |
66 | 80 | 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() | |
73 | 90 | 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) | |
79 | 98 | endif() |
80 | 99 | |
81 | 100 | # Need full path to executable: |
42 | 42 | #error Something went terribly wrong |
43 | 43 | #endif |
44 | 44 | |
45 | #include "vtkgdcmModule.h" | |
45 | 46 | #include "vtkObject.h" |
46 | 47 | |
47 | 48 | class vtkMedicalImagePropertiesInternals; |
48 | 49 | |
49 | class VTK_IO_EXPORT vtkMedicalImageProperties : public vtkObject | |
50 | class VTKGDCM_EXPORT vtkMedicalImageProperties : public vtkObject | |
50 | 51 | { |
51 | 52 | public: |
52 | 53 | static vtkMedicalImageProperties *New(); |
24 | 24 | #error Something went terribly wrong |
25 | 25 | #endif |
26 | 26 | |
27 | #include "vtkgdcmModule.h" | |
27 | 28 | #include "vtkObject.h" |
28 | 29 | |
29 | 30 | #include <string> |
30 | 31 | |
31 | 32 | class vtkStringArrayInternals; |
32 | class VTK_EXPORT vtkStringArray : public vtkObject | |
33 | class VTKGDCM_EXPORT vtkStringArray : public vtkObject | |
33 | 34 | { |
34 | 35 | public: |
35 | 36 | static vtkStringArray *New(); |
63 | 63 | #ifndef VTKGDCMIMAGEREADER_H |
64 | 64 | #define VTKGDCMIMAGEREADER_H |
65 | 65 | |
66 | #include "vtkgdcmModule.h" | |
66 | 67 | #include "vtkMedicalImageReader2.h" |
67 | 68 | #include "vtkImageData.h" |
68 | 69 | #include "vtkVersion.h" |
99 | 100 | namespace gdcm { class ImageReader; } |
100 | 101 | //ETX |
101 | 102 | class vtkMatrix4x4; |
102 | class VTK_EXPORT vtkGDCMImageReader : public vtkMedicalImageReader2 | |
103 | class VTKGDCM_EXPORT vtkGDCMImageReader : public vtkMedicalImageReader2 | |
103 | 104 | { |
104 | 105 | public: |
105 | 106 | static vtkGDCMImageReader *New(); |
63 | 63 | #ifndef VTKGDCMIMAGEREADER2_H |
64 | 64 | #define VTKGDCMIMAGEREADER2_H |
65 | 65 | |
66 | #include "vtkgdcmModule.h" | |
66 | 67 | #include "vtkMedicalImageReader2.h" |
67 | 68 | #include "vtkImageData.h" |
68 | 69 | |
90 | 91 | namespace gdcm { class ImageReader; } |
91 | 92 | //ETX |
92 | 93 | class vtkMatrix4x4; |
93 | class VTK_EXPORT vtkGDCMImageReader2 : public vtkMedicalImageReader2 | |
94 | class VTKGDCM_EXPORT vtkGDCMImageReader2 : public vtkMedicalImageReader2 | |
94 | 95 | { |
95 | 96 | public: |
96 | 97 | static vtkGDCMImageReader2 *New(); |
37 | 37 | #ifndef VTKGDCMIMAGEWRITER_H |
38 | 38 | #define VTKGDCMIMAGEWRITER_H |
39 | 39 | |
40 | #include "vtkgdcmModule.h" | |
40 | 41 | #include "vtkImageWriter.h" |
41 | 42 | #include "vtkVersion.h" |
42 | 43 | |
44 | 45 | class vtkMedicalImageProperties; |
45 | 46 | class vtkMatrix4x4; |
46 | 47 | class vtkStringArray; |
47 | class VTK_EXPORT vtkGDCMImageWriter : public vtkImageWriter | |
48 | class VTKGDCM_EXPORT vtkGDCMImageWriter : public vtkImageWriter | |
48 | 49 | { |
49 | 50 | public: |
50 | 51 | static vtkGDCMImageWriter *New(); |
22 | 22 | #ifndef VTKGDCMMEDICALIMAGEPROPERTIES_H |
23 | 23 | #define VTKGDCMMEDICALIMAGEPROPERTIES_H |
24 | 24 | |
25 | #include "vtkgdcmModule.h" | |
25 | 26 | #include "vtkMedicalImageProperties.h" |
26 | 27 | |
27 | 28 | class vtkGDCMMedicalImagePropertiesInternals; |
29 | 30 | namespace gdcm { class File; } |
30 | 31 | //ETX |
31 | 32 | |
32 | class VTK_EXPORT vtkGDCMMedicalImageProperties : public vtkMedicalImageProperties | |
33 | class VTKGDCM_EXPORT vtkGDCMMedicalImageProperties : public vtkMedicalImageProperties | |
33 | 34 | { |
34 | 35 | public: |
35 | 36 | static vtkGDCMMedicalImageProperties *New(); |
27 | 27 | #ifndef VTKGDCMPOLYDATAREADER_H |
28 | 28 | #define VTKGDCMPOLYDATAREADER_H |
29 | 29 | |
30 | #include "vtkgdcmModule.h" | |
30 | 31 | #include "vtkPolyDataAlgorithm.h" |
31 | 32 | |
32 | 33 | class vtkMedicalImageProperties; |
34 | 35 | //BTX |
35 | 36 | namespace gdcm { class Reader; } |
36 | 37 | //ETX |
37 | class VTK_EXPORT vtkGDCMPolyDataReader : public vtkPolyDataAlgorithm | |
38 | class VTKGDCM_EXPORT vtkGDCMPolyDataReader : public vtkPolyDataAlgorithm | |
38 | 39 | { |
39 | 40 | public: |
40 | 41 | static vtkGDCMPolyDataReader *New(); |
495 | 495 | sqi = new SequenceOfItems; |
496 | 496 | |
497 | 497 | vtkIdType npts = 0; |
498 | #if VTK_MAJOR_VERSION >= 9 | |
499 | const vtkIdType *indx = 0; | |
500 | #else | |
498 | 501 | vtkIdType *indx = 0; |
502 | #endif | |
499 | 503 | double v[3]; |
500 | 504 | unsigned int cellnum = 0; |
501 | 505 | |
758 | 762 | vtkPoints *pts; |
759 | 763 | vtkCellArray *polys; |
760 | 764 | vtkIdType npts = 0; |
765 | #if VTK_MAJOR_VERSION >= 9 | |
766 | const vtkIdType *indx = 0; | |
767 | #else | |
761 | 768 | vtkIdType *indx = 0; |
769 | #endif | |
762 | 770 | pts = theData->GetPoints(); |
763 | 771 | polys = theData->GetPolys(); |
764 | 772 | vtkCellArray* lines = theData->GetLines(); |
24 | 24 | #ifndef VTKGDCMPOLYDATAWRITER_H |
25 | 25 | #define VTKGDCMPOLYDATAWRITER_H |
26 | 26 | |
27 | #include "vtkgdcmModule.h" | |
27 | 28 | #include "vtkPolyDataWriter.h" |
28 | 29 | #include "vtkStringArray.h" |
29 | 30 | #include "vtkStdString.h" |
34 | 35 | //BTX |
35 | 36 | namespace gdcm { class File; } |
36 | 37 | //ETX |
37 | class VTK_EXPORT vtkGDCMPolyDataWriter : public vtkPolyDataWriter | |
38 | class VTKGDCM_EXPORT vtkGDCMPolyDataWriter : public vtkPolyDataWriter | |
38 | 39 | { |
39 | 40 | public: |
40 | 41 | static vtkGDCMPolyDataWriter *New(); |
20 | 20 | #ifndef VTKGDCMTESTING_H |
21 | 21 | #define VTKGDCMTESTING_H |
22 | 22 | |
23 | #include "vtkgdcmModule.h" | |
23 | 24 | #include "vtkObject.h" |
24 | 25 | |
25 | class VTK_EXPORT vtkGDCMTesting : public vtkObject | |
26 | class VTKGDCM_EXPORT vtkGDCMTesting : public vtkObject | |
26 | 27 | { |
27 | 28 | public: |
28 | 29 | static vtkGDCMTesting *New(); |
36 | 36 | #ifndef VTKGDCMTHREADEDIMAGEREADER_H |
37 | 37 | #define VTKGDCMTHREADEDIMAGEREADER_H |
38 | 38 | |
39 | #include "vtkgdcmModule.h" | |
39 | 40 | #include "vtkGDCMImageReader.h" |
40 | 41 | #include "vtkVersion.h" |
41 | 42 | |
42 | class VTK_EXPORT vtkGDCMThreadedImageReader : public vtkGDCMImageReader | |
43 | class VTKGDCM_EXPORT vtkGDCMThreadedImageReader : public vtkGDCMImageReader | |
43 | 44 | { |
44 | 45 | public: |
45 | 46 | static vtkGDCMThreadedImageReader *New(); |
42 | 42 | #ifndef VTKGDCMTHREADEDIMAGEREADER2_H |
43 | 43 | #define VTKGDCMTHREADEDIMAGEREADER2_H |
44 | 44 | |
45 | #include "vtkgdcmModule.h" | |
45 | 46 | #include "vtkThreadedImageAlgorithm.h" |
46 | 47 | |
47 | 48 | class vtkStringArray; |
48 | class VTK_EXPORT vtkGDCMThreadedImageReader2 : public vtkThreadedImageAlgorithm | |
49 | class VTKGDCM_EXPORT vtkGDCMThreadedImageReader2 : public vtkThreadedImageAlgorithm | |
49 | 50 | { |
50 | 51 | public: |
51 | 52 | static vtkGDCMThreadedImageReader2 *New(); |
52 | 52 | #ifndef VTKIMAGECOLORVIEWER_H |
53 | 53 | #define VTKIMAGECOLORVIEWER_H |
54 | 54 | |
55 | #include "vtkgdcmModule.h" | |
55 | 56 | #include "vtkObject.h" |
56 | 57 | #include "vtkVersion.h" |
57 | 58 | |
67 | 68 | class vtkRenderWindowInteractor; |
68 | 69 | class vtkPolyData; |
69 | 70 | |
70 | class VTK_EXPORT vtkImageColorViewer : public vtkObject | |
71 | class VTKGDCM_EXPORT vtkImageColorViewer : public vtkObject | |
71 | 72 | { |
72 | 73 | public: |
73 | 74 | static vtkImageColorViewer *New(); |
41 | 41 | #define VTKIMAGEMAPTOCOLORS16_H |
42 | 42 | |
43 | 43 | |
44 | #include "vtkgdcmModule.h" | |
44 | 45 | #include "vtkThreadedImageAlgorithm.h" |
45 | 46 | |
46 | 47 | class vtkScalarsToColors; |
47 | 48 | |
48 | class VTK_EXPORT vtkImageMapToColors16 : public vtkThreadedImageAlgorithm | |
49 | class VTKGDCM_EXPORT vtkImageMapToColors16 : public vtkThreadedImageAlgorithm | |
49 | 50 | { |
50 | 51 | public: |
51 | 52 | static vtkImageMapToColors16 *New(); |
35 | 35 | #include "vtkObjectFactory.h" |
36 | 36 | #include "vtkScalarsToColors.h" |
37 | 37 | #include "vtkPointData.h" |
38 | ||
39 | #include <cmath> | |
38 | 40 | |
39 | 41 | //vtkCxxRevisionMacro(vtkImageMapToWindowLevelColors2, "$Revision: 1.3 $") |
40 | 42 | vtkStandardNewMacro(vtkImageMapToWindowLevelColors2) |
42 | 42 | #ifndef VTKIMAGEMAPTOWINDOWLEVELCOLORS2_H |
43 | 43 | #define VTKIMAGEMAPTOWINDOWLEVELCOLORS2_H |
44 | 44 | |
45 | #include "vtkgdcmModule.h" | |
45 | 46 | #include "vtkImageMapToColors.h" |
46 | 47 | |
47 | class VTK_EXPORT vtkImageMapToWindowLevelColors2 : public vtkImageMapToColors | |
48 | class VTKGDCM_EXPORT vtkImageMapToWindowLevelColors2 : public vtkImageMapToColors | |
48 | 49 | { |
49 | 50 | public: |
50 | 51 | static vtkImageMapToWindowLevelColors2 *New(); |
36 | 36 | #ifndef VTKIMAGEPLANARCOMPONENTSTOCOMPONENTS_H |
37 | 37 | #define VTKIMAGEPLANARCOMPONENTSTOCOMPONENTS_H |
38 | 38 | |
39 | #include "vtkgdcmModule.h" | |
39 | 40 | #include "vtkImageAlgorithm.h" |
40 | 41 | |
41 | 42 | // everything is now handled within the vtkGDCMImageReader as Planar Configuration can not |
43 | 44 | |
44 | 45 | #error do not use this class |
45 | 46 | |
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 | |
48 | 49 | { |
49 | 50 | public: |
50 | 51 | static vtkImagePlanarComponentsToComponents *New(); |
38 | 38 | #ifndef VTKIMAGERGBTOYBR_H |
39 | 39 | #define VTKIMAGERGBTOYBR_H |
40 | 40 | |
41 | #include "vtkgdcmModule.h" | |
41 | 42 | #include "vtkThreadedImageAlgorithm.h" |
42 | 43 | |
43 | class VTK_EXPORT vtkImageRGBToYBR : public vtkThreadedImageAlgorithm | |
44 | class VTKGDCM_EXPORT vtkImageRGBToYBR : public vtkThreadedImageAlgorithm | |
44 | 45 | { |
45 | 46 | public: |
46 | 47 | static vtkImageRGBToYBR *New(); |
38 | 38 | #ifndef VTKIMAGEYBRTORGB_H |
39 | 39 | #define VTKIMAGEYBRTORGB_H |
40 | 40 | |
41 | #include "vtkgdcmModule.h" | |
41 | 42 | #include "vtkThreadedImageAlgorithm.h" |
42 | 43 | |
43 | class VTK_EXPORT vtkImageYBRToRGB : public vtkThreadedImageAlgorithm | |
44 | class VTKGDCM_EXPORT vtkImageYBRToRGB : public vtkThreadedImageAlgorithm | |
44 | 45 | { |
45 | 46 | public: |
46 | 47 | static vtkImageYBRToRGB *New(); |
37 | 37 | #ifndef VTKLOOKUPTABLE16_H |
38 | 38 | #define VTKLOOKUPTABLE16_H |
39 | 39 | |
40 | #include "vtkgdcmModule.h" | |
40 | 41 | #include "vtkLookupTable.h" |
41 | 42 | #include "vtkUnsignedShortArray.h" |
42 | 43 | |
43 | class VTK_EXPORT vtkLookupTable16 : public vtkLookupTable | |
44 | class VTKGDCM_EXPORT vtkLookupTable16 : public vtkLookupTable | |
44 | 45 | { |
45 | 46 | public: |
46 | 47 | static vtkLookupTable16 *New(); |
19 | 19 | #ifndef VTKRTSTRUCTSETPROPERTIES_H |
20 | 20 | #define VTKRTSTRUCTSETPROPERTIES_H |
21 | 21 | |
22 | #include "vtkgdcmModule.h" | |
22 | 23 | #include "vtkObject.h" |
23 | 24 | |
24 | 25 | class vtkRTStructSetPropertiesInternals; |
25 | 26 | |
26 | class VTK_EXPORT vtkRTStructSetProperties : public vtkObject | |
27 | class VTKGDCM_EXPORT vtkRTStructSetProperties : public vtkObject | |
27 | 28 | { |
28 | 29 | public: |
29 | 30 | static vtkRTStructSetProperties *New(); |
125 | 125 | |
126 | 126 | #define GDCM_EXPORT |
127 | 127 | #define VTK_EXPORT |
128 | #define VTKGDCM_EXPORT | |
128 | 129 | #define VTK_COMMON_EXPORT |
129 | 130 | #define VTK_FILTERING_EXPORT |
130 | 131 | #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 |
121 | 121 | <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> |
122 | 122 | </listitem> |
123 | 123 | <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> | |
125 | 125 | </listitem> |
126 | 126 | </itemizedlist> |
127 | 127 | </para> |
131 | 131 | --empty PN --preserve /0010,0010 \ |
132 | 132 | --empty PatientID --empty "0070,0084" \ |
133 | 133 | --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" \ | |
135 | 137 | input_folder output_folder |
136 | 138 | </literallayout></para> |
137 | 139 | </refsection> |
61 | 61 | --sds print Philips MR Series Data Storage (1.3.46.670589.11.0.0.12.2) Information (2005,32,Philips MR Imaging DD 002). |
62 | 62 | --ct3 print CT Private Data 2 (7005,10,TOSHIBA_MEC_CT3). |
63 | 63 | --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) | |
65 | 66 | --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). | |
66 | 68 | -A --asn1 print encapsulated ASN1 structure >(0400,0520). |
67 | 69 | --map-uid-names map UID to names. |
68 | 70 | </literallayout></para> |
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 | #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 |
155 | 155 | "; |
156 | 156 | |
157 | 157 | %feature("docstring") |
158 | gdcm::network::AAssociateRQPDU::GetPresentationContext "PresentationContextRQ const& | |
158 | gdcm::network::AAssociateRQPDU::GetPresentationContext "const | |
159 | PresentationContextRQ& | |
159 | 160 | gdcm::network::AAssociateRQPDU::GetPresentationContext(SizeType i) |
160 | 161 | const "; |
161 | 162 | |
172 | 173 | const "; |
173 | 174 | |
174 | 175 | %feature("docstring") |
175 | gdcm::network::AAssociateRQPDU::GetPresentationContexts "PresentationContextArrayType const& | |
176 | gdcm::network::AAssociateRQPDU::GetPresentationContexts "const | |
177 | PresentationContextArrayType& | |
176 | 178 | gdcm::network::AAssociateRQPDU::GetPresentationContexts() "; |
177 | 179 | |
178 | 180 | %feature("docstring") |
287 | 289 | |
288 | 290 | Return the StringName associated with the event. "; |
289 | 291 | |
290 | %feature("docstring") gdcm::AnonymizeEvent::GetTag "Tag const& | |
292 | %feature("docstring") gdcm::AnonymizeEvent::GetTag "const Tag& | |
291 | 293 | gdcm::AnonymizeEvent::GetTag() const "; |
292 | 294 | |
293 | 295 | %feature("docstring") gdcm::AnonymizeEvent::MakeObject "::gdcm::Event* gdcm::AnonymizeEvent::MakeObject() const override |
376 | 378 | if it protects all Attributes that might be used by unauthorized |
377 | 379 | entities to identify the patient. NOT THREAD SAFE "; |
378 | 380 | |
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 | ||
379 | 398 | %feature("docstring") gdcm::Anonymizer::Empty "bool |
380 | 399 | gdcm::Anonymizer::Empty(Tag const &t) |
381 | 400 | |
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) "; | |
384 | 402 | |
385 | 403 | %feature("docstring") gdcm::Anonymizer::GetCryptographicMessageSyntax |
386 | 404 | "const CryptographicMessageSyntax* |
390 | 408 | gdcm::Anonymizer::GetFile() "; |
391 | 409 | |
392 | 410 | %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 | |
393 | 420 | gdcm::Anonymizer::Remove(Tag const &t) |
394 | 421 | |
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) "; | |
397 | 423 | |
398 | 424 | %feature("docstring") gdcm::Anonymizer::RemoveGroupLength "bool |
399 | 425 | gdcm::Anonymizer::RemoveGroupLength() |
410 | 436 | |
411 | 437 | Main function that loop over all elements and remove retired element. |
412 | 438 | "; |
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) "; | |
413 | 446 | |
414 | 447 | %feature("docstring") gdcm::Anonymizer::Replace "bool |
415 | 448 | gdcm::Anonymizer::Replace(Tag const &t, const char *value) |
657 | 690 | %feature("docstring") gdcm::Attribute " |
658 | 691 | |
659 | 692 | 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 | |
661 | 694 | public dictionary. |
662 | 695 | |
663 | 696 | Typical example that compile is: Attribute<0x0008,0x9007> a = |
697 | 730 | gdcm::Attribute< Group, Element, TVR, TVM >::GetValue(unsigned int |
698 | 731 | idx=0) "; |
699 | 732 | |
700 | %feature("docstring") gdcm::Attribute::GetValue "ArrayType const& | |
733 | %feature("docstring") gdcm::Attribute::GetValue "const ArrayType& | |
701 | 734 | gdcm::Attribute< Group, Element, TVR, TVM >::GetValue(unsigned int |
702 | 735 | idx=0) const "; |
703 | 736 | |
763 | 796 | >::GetValue() "; |
764 | 797 | |
765 | 798 | %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, | |
767 | 800 | VM::VM1 >::GetValue() const "; |
768 | 801 | |
769 | 802 | %feature("docstring") gdcm::Attribute< Group, Element, TVR, VM::VM1 |
850 | 883 | VM::VM1_n >::GetValue(unsigned int idx=0) "; |
851 | 884 | |
852 | 885 | %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, | |
854 | 887 | VM::VM1_n >::GetValue(unsigned int idx=0) const "; |
855 | 888 | |
856 | 889 | %feature("docstring") gdcm::Attribute< Group, Element, TVR, VM::VM1_n |
1102 | 1135 | %feature("docstring") gdcm::BaseQuery::GetQueryDataSet "DataSet& |
1103 | 1136 | gdcm::BaseQuery::GetQueryDataSet() "; |
1104 | 1137 | |
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 | |
1107 | 1140 | |
1108 | 1141 | Set/Get the internal representation of the query as a DataSet. "; |
1109 | 1142 | |
1225 | 1258 | %feature("docstring") gdcm::SegmentHelper::BasicCodedEntry::IsEmpty "bool gdcm::SegmentHelper::BasicCodedEntry::IsEmpty(const bool |
1226 | 1259 | checkOptionalAttributes=false) const |
1227 | 1260 | |
1228 | Check if each attibutes of the basic coded entry is defined. | |
1261 | Check if each attributes of the basic coded entry is defined. | |
1229 | 1262 | |
1230 | 1263 | Parameters: |
1231 | 1264 | ----------- |
1272 | 1305 | %feature("docstring") gdcm::Bitmap::GetBuffer "bool |
1273 | 1306 | gdcm::Bitmap::GetBuffer(char *buffer) const |
1274 | 1307 | |
1275 | Acces the raw data. "; | |
1308 | Access the raw data. "; | |
1276 | 1309 | |
1277 | 1310 | %feature("docstring") gdcm::Bitmap::GetBufferLength "unsigned long |
1278 | 1311 | gdcm::Bitmap::GetBufferLength() const |
1519 | 1552 | |
1520 | 1553 | ByteBuffer. |
1521 | 1554 | |
1522 | Detailled description here looks like a std::streambuf or std::filebuf | |
1555 | Detailed description here looks like a std::streambuf or std::filebuf | |
1523 | 1556 | class with the get and peek pointer |
1524 | 1557 | |
1525 | 1558 | C++ includes: gdcmByteBuffer.h "; |
1544 | 1577 | |
1545 | 1578 | ByteSwap. |
1546 | 1579 | |
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 ... | |
1549 | 1582 | |
1550 | 1583 | C++ includes: gdcmByteSwap.h "; |
1551 | 1584 | |
1656 | 1689 | %feature("docstring") gdcm::ByteValue::SetLength "void |
1657 | 1690 | gdcm::ByteValue::SetLength(VL vl) override "; |
1658 | 1691 | |
1659 | %feature("docstring") gdcm::ByteValue::Write "std::ostream const& | |
1692 | %feature("docstring") gdcm::ByteValue::Write "const std::ostream& | |
1660 | 1693 | gdcm::ByteValue::Write(std::ostream &os) const "; |
1661 | 1694 | |
1662 | %feature("docstring") gdcm::ByteValue::Write "std::ostream const& | |
1695 | %feature("docstring") gdcm::ByteValue::Write "const std::ostream& | |
1663 | 1696 | gdcm::ByteValue::Write(std::ostream &os) const "; |
1664 | 1697 | |
1665 | 1698 | %feature("docstring") gdcm::ByteValue::WriteBuffer "bool |
1801 | 1834 | "std::vector<PresentationDataValue> |
1802 | 1835 | gdcm::network::CFindRSP::ConstructPDVByDataSet(const DataSet |
1803 | 1836 | *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. "; | |
1804 | 1932 | |
1805 | 1933 | |
1806 | 1934 | // File: classgdcm_1_1network_1_1CMoveCancelRq.xml |
2059 | 2187 | |
2060 | 2188 | Class to do handle the crypto factory. |
2061 | 2189 | |
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 | |
2063 | 2191 | crypto engine. It can be: CAPI (windows only) |
2064 | 2192 | |
2065 | 2193 | OPENSSL (portable) |
2163 | 2291 | %feature("docstring") gdcm::CSAElement::GetValue "Value& |
2164 | 2292 | gdcm::CSAElement::GetValue() "; |
2165 | 2293 | |
2166 | %feature("docstring") gdcm::CSAElement::GetValue "Value const& | |
2294 | %feature("docstring") gdcm::CSAElement::GetValue "const Value& | |
2167 | 2295 | gdcm::CSAElement::GetValue() const |
2168 | 2296 | |
2169 | 2297 | Set/Get Value (bytes array, SQ of items, SQ of fragments): "; |
2173 | 2301 | |
2174 | 2302 | Set/Get VM. "; |
2175 | 2303 | |
2176 | %feature("docstring") gdcm::CSAElement::GetVR "VR const& | |
2304 | %feature("docstring") gdcm::CSAElement::GetVR "const VR& | |
2177 | 2305 | gdcm::CSAElement::GetVR() const |
2178 | 2306 | |
2179 | 2307 | Set/Get VR. "; |
2425 | 2553 | %feature("docstring") gdcm::Curve::GetAsPoints "void |
2426 | 2554 | gdcm::Curve::GetAsPoints(float *array) const "; |
2427 | 2555 | |
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 "; | |
2430 | 2559 | |
2431 | 2560 | %feature("docstring") gdcm::Curve::GetDataValueRepresentation "unsigned short gdcm::Curve::GetDataValueRepresentation() const "; |
2432 | 2561 | |
2554 | 2683 | %feature("docstring") gdcm::DataElement::GetValue "Value& |
2555 | 2684 | gdcm::DataElement::GetValue() "; |
2556 | 2685 | |
2557 | %feature("docstring") gdcm::DataElement::GetValue "Value const& | |
2686 | %feature("docstring") gdcm::DataElement::GetValue "const Value& | |
2558 | 2687 | gdcm::DataElement::GetValue() const |
2559 | 2688 | |
2560 | 2689 | Set/Get Value (bytes array, SQ of items, SQ of fragments): "; |
2563 | 2692 | |
2564 | 2693 | Interpret the Value stored in the DataElement. This is more robust |
2565 | 2694 | (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(); "; | |
2572 | 2700 | |
2573 | 2701 | %feature("docstring") gdcm::DataElement::GetVL "VL& |
2574 | 2702 | gdcm::DataElement::GetVL() "; |
2578 | 2706 | |
2579 | 2707 | Get VL. "; |
2580 | 2708 | |
2581 | %feature("docstring") gdcm::DataElement::GetVR "VR const& | |
2709 | %feature("docstring") gdcm::DataElement::GetVR "const VR& | |
2582 | 2710 | gdcm::DataElement::GetVR() const |
2583 | 2711 | |
2584 | 2712 | Get VR do not set VR::SQ on bytevalue data element "; |
2773 | 2901 | %feature("docstring") gdcm::DataSet::GetPrivateCreator "std::string |
2774 | 2902 | gdcm::DataSet::GetPrivateCreator(const Tag &t) const |
2775 | 2903 | |
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. "; | |
2777 | 2912 | |
2778 | 2913 | %feature("docstring") gdcm::DataSet::Insert "void |
2779 | 2914 | gdcm::DataSet::Insert(const DataElement &de) |
2840 | 2975 | %feature("docstring") gdcm::DataSet::Size "SizeType |
2841 | 2976 | gdcm::DataSet::Size() const "; |
2842 | 2977 | |
2843 | %feature("docstring") gdcm::DataSet::Write "std::ostream const& | |
2978 | %feature("docstring") gdcm::DataSet::Write "const std::ostream& | |
2844 | 2979 | gdcm::DataSet::Write(std::ostream &os) const "; |
2845 | 2980 | |
2846 | 2981 | |
2865 | 3000 | gdcm::DataSetEvent::CheckEvent(const ::gdcm::Event *e) const override |
2866 | 3001 | "; |
2867 | 3002 | |
2868 | %feature("docstring") gdcm::DataSetEvent::GetDataSet "DataSet const& | |
3003 | %feature("docstring") gdcm::DataSetEvent::GetDataSet "const DataSet& | |
2869 | 3004 | gdcm::DataSetEvent::GetDataSet() const "; |
2870 | 3005 | |
2871 | 3006 | %feature("docstring") gdcm::DataSetEvent::GetEventName "const char* |
2963 | 3098 | gdcm::Defs::GetMacros() const |
2964 | 3099 | |
2965 | 3100 | 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 "; | |
2968 | 3103 | |
2969 | 3104 | %feature("docstring") gdcm::Defs::GetModules "Modules& |
2970 | 3105 | gdcm::Defs::GetModules() "; |
3399 | 3534 | Class for manipulation directories. |
3400 | 3535 | |
3401 | 3536 | This implementation provide a cross platform implementation for |
3402 | manipulating directores: basically traversing directories and | |
3537 | manipulating directories: basically traversing directories and | |
3403 | 3538 | harvesting files |
3404 | 3539 | |
3405 | 3540 | will not take into account unix type hidden file recursive option will |
3414 | 3549 | |
3415 | 3550 | %feature("docstring") gdcm::Directory::~Directory "gdcm::Directory::~Directory()=default "; |
3416 | 3551 | |
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 | |
3419 | 3554 | |
3420 | 3555 | Return the Directories traversed. "; |
3421 | 3556 | |
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 | |
3424 | 3559 | |
3425 | 3560 | Set/Get the file names within the directory. "; |
3426 | 3561 | |
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 | |
3429 | 3564 | |
3430 | 3565 | Get the name of the toplevel directory. "; |
3431 | 3566 | |
3459 | 3594 | C++ includes: gdcmDirectoryHelper.h "; |
3460 | 3595 | |
3461 | 3596 | |
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 | ||
3462 | 3623 | // File: classgdcm_1_1DummyValueGenerator.xml |
3463 | 3624 | %feature("docstring") gdcm::DummyValueGenerator " |
3464 | 3625 | |
3713 | 3874 | process over all files using the same input Series Instance UID so |
3714 | 3875 | that a proper mapping from the old Series UID is done to the new one. |
3715 | 3876 | 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 | |
3717 | 3878 | made sense here. |
3718 | 3879 | |
3719 | 3880 | C++ includes: gdcmEmptyMaskGenerator.h "; |
3758 | 3919 | |
3759 | 3920 | EncodingImplementation. |
3760 | 3921 | |
3761 | TODO "; | |
3922 | TODO | |
3923 | ||
3924 | C++ includes: gdcmElement.h "; | |
3762 | 3925 | |
3763 | 3926 | |
3764 | 3927 | // File: classgdcm_1_1EncodingImplementation_3_01VR_1_1VRASCII_01_4.xml |
3806 | 3969 | // File: classgdcm_1_1EquipmentManufacturer.xml |
3807 | 3970 | %feature("docstring") gdcm::EquipmentManufacturer " |
3808 | 3971 | |
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 | ||
3809 | 3977 | C++ includes: gdcmEquipmentManufacturer.h "; |
3810 | 3978 | |
3811 | 3979 | |
4008 | 4176 | |
4009 | 4177 | Set File Meta Information. "; |
4010 | 4178 | |
4011 | %feature("docstring") gdcm::File::Write "std::ostream const& | |
4179 | %feature("docstring") gdcm::File::Write "const std::ostream& | |
4012 | 4180 | gdcm::File::Write(std::ostream &os) const |
4013 | 4181 | |
4014 | 4182 | Write. "; |
4196 | 4364 | description of the deriation applied to the new image data from the |
4197 | 4365 | original. Both these context groups are extensible. |
4198 | 4366 | |
4199 | File Derivation is compulsary when creating a lossy derived image. | |
4367 | File Derivation is compulsory when creating a lossy derived image. | |
4200 | 4368 | |
4201 | 4369 | C++ includes: gdcmFileDerivation.h "; |
4202 | 4370 | |
4267 | 4435 | After changing a file from Implicit to Explicit representation (see |
4268 | 4436 | ImageChangeTransferSyntax) one operation is to make sure the VR of |
4269 | 4437 | 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 | |
4271 | 4439 | not stored directly in the file. |
4272 | 4440 | |
4273 | 4441 | WARNING: changing an implicit dataset to an explicit dataset is NOT a |
4417 | 4585 | |
4418 | 4586 | Class to manipulate file name's. |
4419 | 4587 | |
4420 | OS independant representation of a filename (to query path, name and | |
4588 | OS independent representation of a filename (to query path, name and | |
4421 | 4589 | extension from a filename) |
4422 | 4590 | |
4423 | 4591 | C++ includes: gdcmFilename.h "; |
4536 | 4704 | |
4537 | 4705 | Get a particular filename (call after Generate) "; |
4538 | 4706 | |
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 | |
4540 | 4709 | |
4541 | 4710 | Return all filenames. "; |
4542 | 4711 | |
4585 | 4754 | |
4586 | 4755 | Deprecated . Does nothing "; |
4587 | 4756 | |
4588 | %feature("docstring") gdcm::FileSet::GetFiles "FilesType const& | |
4757 | %feature("docstring") gdcm::FileSet::GetFiles "const FilesType& | |
4589 | 4758 | gdcm::FileSet::GetFiles() const "; |
4590 | 4759 | |
4591 | 4760 | %feature("docstring") gdcm::FileSet::SetFiles "void |
4860 | 5029 | |
4861 | 5030 | Append path at the end of the path list WARNING: not thread safe ! "; |
4862 | 5031 | |
4863 | %feature("docstring") gdcm::Global::GetDefs "Defs const& | |
5032 | %feature("docstring") gdcm::Global::GetDefs "const Defs& | |
4864 | 5033 | gdcm::Global::GetDefs() const |
4865 | 5034 | |
4866 | 5035 | retrieve the default/internal (Part 3) You need to explicitly call |
4869 | 5038 | %feature("docstring") gdcm::Global::GetDicts "Dicts& |
4870 | 5039 | gdcm::Global::GetDicts() "; |
4871 | 5040 | |
4872 | %feature("docstring") gdcm::Global::GetDicts "Dicts const& | |
5041 | %feature("docstring") gdcm::Global::GetDicts "const Dicts& | |
4873 | 5042 | gdcm::Global::GetDicts() const |
4874 | 5043 | |
4875 | 5044 | retrieve the default/internal dicts (Part 6) This dict is filled up at |
4904 | 5073 | |
4905 | 5074 | %feature("docstring") gdcm::GroupDict::~GroupDict "gdcm::GroupDict::~GroupDict()=default "; |
4906 | 5075 | |
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& | |
4911 | 5080 | gdcm::GroupDict::GetName(uint16_t num) const "; |
4912 | 5081 | |
4913 | 5082 | %feature("docstring") gdcm::GroupDict::Size "size_t |
5126 | 5295 | gdcm::Image::GetSpacing() const |
5127 | 5296 | |
5128 | 5297 | 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). | |
5130 | 5299 | WARNING: when the spacing is not specifier, a default value of 1 will |
5131 | 5300 | be returned "; |
5132 | 5301 | |
5205 | 5374 | |
5206 | 5375 | ImageChangePhotometricInterpretation class. |
5207 | 5376 | |
5208 | Class to change the Photometric Interpetation of an input DICOM | |
5377 | Class to change the Photometric Interpretation of an input DICOM | |
5209 | 5378 | |
5210 | 5379 | C++ includes: gdcmImageChangePhotometricInterpretation.h "; |
5211 | 5380 | |
5246 | 5415 | ImageChangePlanarConfiguration class. |
5247 | 5416 | |
5248 | 5417 | 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 | |
5251 | 5420 | |
5252 | 5421 | C++ includes: gdcmImageChangePlanarConfiguration.h "; |
5253 | 5422 | |
5595 | 5764 | hold the whole uncompressed image as defined by Region region. 0 upon |
5596 | 5765 | error "; |
5597 | 5766 | |
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 "; | |
5600 | 5769 | |
5601 | 5770 | %feature("docstring") gdcm::ImageRegionReader::ReadInformation "bool |
5602 | 5771 | gdcm::ImageRegionReader::ReadInformation() |
6002 | 6171 | gdcm::IPPSorter::SetZSpacingTolerance(double tol) |
6003 | 6172 | |
6004 | 6173 | 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 "; | |
6007 | 6176 | |
6008 | 6177 | %feature("docstring") gdcm::IPPSorter::Sort "bool |
6009 | 6178 | gdcm::IPPSorter::Sort(std::vector< std::string > const &filenames) |
6011 | 6180 | |
6012 | 6181 | Main entry point to the sorter. It will execute the filter, option |
6013 | 6182 | 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 | |
6015 | 6184 | NOT imply that spacing is consistent, it only means the file are |
6016 | 6185 | sorted according to IPP You should check if ZSpacing is 0 or not to |
6017 | 6186 | deduce if file are actually a 3D volume "; |
6025 | 6194 | A component of the value of a Data Element that is of Value |
6026 | 6195 | Representation Sequence of Items. An Item contains a Data Set . See PS |
6027 | 6196 | 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 | |
6029 | 6198 | Element Tag of Value (FFFE,E000). The Item Tag is followed by a 4 byte |
6030 | 6199 | Item Length field encoded in one of the following two ways Explicit/ |
6031 | 6200 | Implicit ITEM: A component of the Value of a Data Element that is of |
6606 | 6775 | gdcmScanner.h "; |
6607 | 6776 | |
6608 | 6777 | |
6778 | // File: structgdcm_1_1Scanner2_1_1ltstr.xml | |
6779 | %feature("docstring") gdcm::Scanner2::ltstr "C++ includes: | |
6780 | gdcmScanner2.h "; | |
6781 | ||
6782 | ||
6609 | 6783 | // File: structgdcm_1_1StrictScanner_1_1ltstr.xml |
6610 | 6784 | %feature("docstring") gdcm::StrictScanner::ltstr "C++ includes: |
6611 | 6785 | gdcmStrictScanner.h "; |
6612 | 6786 | |
6613 | 6787 | |
6788 | // File: structgdcm_1_1StrictScanner2_1_1ltstr.xml | |
6789 | %feature("docstring") gdcm::StrictScanner2::ltstr "C++ includes: | |
6790 | gdcmStrictScanner2.h "; | |
6791 | ||
6792 | ||
6614 | 6793 | // File: classgdcm_1_1Macro.xml |
6615 | 6794 | %feature("docstring") gdcm::Macro " |
6616 | 6795 | |
6628 | 6807 | %feature("docstring") gdcm::Macro::AddMacroEntry "void |
6629 | 6808 | gdcm::Macro::AddMacroEntry(const Tag &tag, const MacroEntry &module) |
6630 | 6809 | |
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- | |
6632 | 6811 | included level. "; |
6633 | 6812 | |
6634 | 6813 | %feature("docstring") gdcm::Macro::Clear "void gdcm::Macro::Clear() |
6971 | 7150 | gdcm::Module::AddModuleEntry(const Tag &tag, const ModuleEntry |
6972 | 7151 | &module) |
6973 | 7152 | |
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- | |
6975 | 7154 | included level. "; |
6976 | 7155 | |
6977 | 7156 | %feature("docstring") gdcm::Module::Clear "void |
7615 | 7794 | |
7616 | 7795 | see AreOverlaysInPixelData Todo Is there actually any way to recognize |
7617 | 7796 | 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). | |
7619 | 7798 | |
7620 | 7799 | Example: |
7621 | 7800 | |
7809 | 7988 | |
7810 | 7989 | Parser ala XML_Parser from expat (SAX) |
7811 | 7990 | |
7812 | Detailled description here Simple API for DICOM | |
7991 | Detailed description here Simple API for DICOM | |
7813 | 7992 | |
7814 | 7993 | C++ includes: gdcmParser.h "; |
7815 | 7994 | |
7871 | 8050 | "; |
7872 | 8051 | |
7873 | 8052 | %feature("docstring") |
7874 | gdcm::network::PDataTFPDU::GetPresentationDataValue "PresentationDataValue const& | |
8053 | gdcm::network::PDataTFPDU::GetPresentationDataValue "const | |
8054 | PresentationDataValue& | |
7875 | 8055 | gdcm::network::PDataTFPDU::GetPresentationDataValue(SizeType i) const |
7876 | 8056 | "; |
7877 | 8057 | |
7934 | 8114 | |
7935 | 8115 | WARNING: : the API of this class might change. |
7936 | 8116 | |
8117 | WARNING: : SEDESC is not always pure ASCII it can contains latin1 | |
8118 | ||
7937 | 8119 | See: CSAHeader |
7938 | 8120 | |
7939 | 8121 | C++ includes: gdcmPDBHeader.h "; |
8110 | 8292 | |
8111 | 8293 | PixelFormat. |
8112 | 8294 | |
8113 | By default the Pixel Type will be instanciated with the following | |
8295 | By default the Pixel Type will be instantiated with the following | |
8114 | 8296 | parameters: SamplesPerPixel : 1 |
8115 | 8297 | |
8116 | 8298 | BitsAllocated : 8 |
8376 | 8558 | DataSet. |
8377 | 8559 | |
8378 | 8560 | 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 | |
8380 | 8562 | definitely needed to mark this dataset as Lossy (typically 0028,2114) |
8381 | 8563 | |
8382 | 8564 | C++ includes: gdcmPixmapWriter.h "; |
8514 | 8696 | |
8515 | 8697 | Set Preamble to the default one. "; |
8516 | 8698 | |
8517 | %feature("docstring") gdcm::Preamble::Write "std::ostream const& | |
8699 | %feature("docstring") gdcm::Preamble::Write "const std::ostream& | |
8518 | 8700 | gdcm::Preamble::Write(std::ostream &os) const |
8519 | 8701 | |
8520 | 8702 | Write Preamble. "; |
8589 | 8771 | "uint8_t gdcm::network::PresentationContextAC::GetReason() const "; |
8590 | 8772 | |
8591 | 8773 | %feature("docstring") |
8592 | gdcm::network::PresentationContextAC::GetTransferSyntax "TransferSyntaxSub const& | |
8774 | gdcm::network::PresentationContextAC::GetTransferSyntax "const | |
8775 | TransferSyntaxSub& | |
8593 | 8776 | gdcm::network::PresentationContextAC::GetTransferSyntax() const "; |
8594 | 8777 | |
8595 | 8778 | %feature("docstring") gdcm::network::PresentationContextAC::Print "void gdcm::network::PresentationContextAC::Print(std::ostream &os) |
8678 | 8861 | VerificationSOPClass) "; |
8679 | 8862 | |
8680 | 8863 | %feature("docstring") |
8681 | gdcm::PresentationContextGenerator::GetPresentationContexts "PresentationContextArrayType const& | |
8864 | gdcm::PresentationContextGenerator::GetPresentationContexts "const | |
8865 | PresentationContextArrayType& | |
8682 | 8866 | gdcm::PresentationContextGenerator::GetPresentationContexts() "; |
8683 | 8867 | |
8684 | 8868 | %feature("docstring") |
8734 | 8918 | gdcm::network::PresentationContextRQ::GetAbstractSyntax() "; |
8735 | 8919 | |
8736 | 8920 | %feature("docstring") |
8737 | gdcm::network::PresentationContextRQ::GetAbstractSyntax "AbstractSyntax const& | |
8921 | gdcm::network::PresentationContextRQ::GetAbstractSyntax "const | |
8922 | AbstractSyntax& | |
8738 | 8923 | gdcm::network::PresentationContextRQ::GetAbstractSyntax() const "; |
8739 | 8924 | |
8740 | 8925 | %feature("docstring") |
8752 | 8937 | gdcm::network::PresentationContextRQ::GetTransferSyntax(SizeType i) "; |
8753 | 8938 | |
8754 | 8939 | %feature("docstring") |
8755 | gdcm::network::PresentationContextRQ::GetTransferSyntax "TransferSyntaxSub const& | |
8940 | gdcm::network::PresentationContextRQ::GetTransferSyntax "const | |
8941 | TransferSyntaxSub& | |
8756 | 8942 | gdcm::network::PresentationContextRQ::GetTransferSyntax(SizeType i) |
8757 | 8943 | const "; |
8758 | 8944 | |
8759 | 8945 | %feature("docstring") |
8760 | gdcm::network::PresentationContextRQ::GetTransferSyntaxes "std::vector<TransferSyntaxSub> const& | |
8946 | gdcm::network::PresentationContextRQ::GetTransferSyntaxes "const | |
8947 | std::vector<TransferSyntaxSub>& | |
8761 | 8948 | gdcm::network::PresentationContextRQ::GetTransferSyntaxes() const "; |
8762 | 8949 | |
8763 | 8950 | %feature("docstring") gdcm::network::PresentationContextRQ::Print "void gdcm::network::PresentationContextRQ::Print(std::ostream &os) |
9366 | 9553 | formedness check only, and to some extent catch known error (non well- |
9367 | 9554 | formed document). |
9368 | 9555 | |
9369 | Detailled description here | |
9556 | Detailed description here | |
9370 | 9557 | |
9371 | 9558 | A DataSet DOES NOT contains group 0x0002 (see FileMetaInformation) |
9372 | 9559 | |
9539 | 9726 | it was FLOAT32). Because VR:DS is closer to a 64bits floating point |
9540 | 9727 | type FLOAT64 is thus a best matching pixel type for the floating point |
9541 | 9728 | transformation. Example: Let say input is FLOAT64, and we want UINT16 |
9542 | as ouput, we would do: | |
9729 | as output, we would do: | |
9543 | 9730 | |
9544 | 9731 | handle floating point transformation back and forth to integer |
9545 | 9732 | properly (no loss) |
9606 | 9793 | |
9607 | 9794 | By default (when UseTargetPixelType is false), a best matching Target |
9608 | 9795 | 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 | |
9610 | 9797 | Target Pixel Type "; |
9611 | 9798 | |
9612 | 9799 | %feature("docstring") gdcm::Rescaler::SetUseTargetPixelType "void |
9709 | 9896 | Scanner. |
9710 | 9897 | |
9711 | 9898 | 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 | |
9713 | 9900 | amount of information in each file in order to retrieve the user |
9714 | 9901 | specified set of DICOM Attribute. |
9715 | 9902 | |
9774 | 9961 | Will loop over all files and return the first file where value match |
9775 | 9962 | the reference value 'valueref' "; |
9776 | 9963 | |
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 "; | |
9778 | 9966 | |
9779 | 9967 | %feature("docstring") gdcm::Scanner::GetKeys "Directory::FilenamesType gdcm::Scanner::GetKeys() const |
9780 | 9968 | |
9781 | 9969 | Return the list of filename that are key in the internal map, which |
9782 | 9970 | means those filename were properly parsed "; |
9783 | 9971 | |
9784 | %feature("docstring") gdcm::Scanner::GetMapping "TagToValue const& | |
9972 | %feature("docstring") gdcm::Scanner::GetMapping "const TagToValue& | |
9785 | 9973 | gdcm::Scanner::GetMapping(const char *filename) const |
9786 | 9974 | |
9787 | 9975 | Get the std::map mapping filenames to value for file 'filename'. "; |
9788 | 9976 | |
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 | |
9791 | 9980 | |
9792 | 9981 | See GetFilenameFromTagToValue(). This is simply |
9793 | 9982 | GetFilenameFromTagToValue followed. "; |
9794 | 9983 | |
9795 | %feature("docstring") gdcm::Scanner::GetMappings "MappingType const& | |
9984 | %feature("docstring") gdcm::Scanner::GetMappings "const MappingType& | |
9796 | 9985 | gdcm::Scanner::GetMappings() const |
9797 | 9986 | |
9798 | 9987 | Mappings are the mapping from a particular tag to the map, mapping |
9814 | 10003 | the TagToValue hash table. WARNING: Tag 't' should have been added |
9815 | 10004 | via AddTag() prior to the Scan() call ! "; |
9816 | 10005 | |
9817 | %feature("docstring") gdcm::Scanner::GetValues "ValuesType const& | |
10006 | %feature("docstring") gdcm::Scanner::GetValues "const ValuesType& | |
9818 | 10007 | gdcm::Scanner::GetValues() const |
9819 | 10008 | |
9820 | 10009 | Get all the values found (in lexicographic order) "; |
9846 | 10035 | Start the scan ! "; |
9847 | 10036 | |
9848 | 10037 | |
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 | ||
9849 | 10234 | // File: classgdcm_1_1Segment.xml |
9850 | 10235 | %feature("docstring") gdcm::Segment " |
9851 | 10236 | |
9867 | 10252 | |
9868 | 10253 | %feature("docstring") gdcm::Segment::GetAnatomicRegion "SegmentHelper::BasicCodedEntry& gdcm::Segment::GetAnatomicRegion() "; |
9869 | 10254 | |
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 "; | |
9872 | 10258 | |
9873 | 10259 | %feature("docstring") gdcm::Segment::GetAnatomicRegionModifiers "BasicCodedEntryVector& gdcm::Segment::GetAnatomicRegionModifiers() "; |
9874 | 10260 | |
9875 | %feature("docstring") gdcm::Segment::GetAnatomicRegionModifiers "BasicCodedEntryVector const& | |
10261 | %feature("docstring") gdcm::Segment::GetAnatomicRegionModifiers "const BasicCodedEntryVector& | |
9876 | 10262 | gdcm::Segment::GetAnatomicRegionModifiers() const "; |
9877 | 10263 | |
9878 | 10264 | %feature("docstring") gdcm::Segment::GetPropertyCategory "SegmentHelper::BasicCodedEntry& gdcm::Segment::GetPropertyCategory() |
9879 | 10265 | "; |
9880 | 10266 | |
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 "; | |
9883 | 10270 | |
9884 | 10271 | %feature("docstring") gdcm::Segment::GetPropertyType "SegmentHelper::BasicCodedEntry& gdcm::Segment::GetPropertyType() "; |
9885 | 10272 | |
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 | "; | |
9888 | 10276 | |
9889 | 10277 | %feature("docstring") gdcm::Segment::GetPropertyTypeModifiers "BasicCodedEntryVector& gdcm::Segment::GetPropertyTypeModifiers() "; |
9890 | 10278 | |
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 | "; | |
9893 | 10282 | |
9894 | 10283 | %feature("docstring") gdcm::Segment::GetSegmentAlgorithmName "const |
9895 | 10284 | char* gdcm::Segment::GetSegmentAlgorithmName() const "; |
9914 | 10303 | %feature("docstring") gdcm::Segment::GetSurfaces "SurfaceVector& |
9915 | 10304 | gdcm::Segment::GetSurfaces() "; |
9916 | 10305 | |
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 "; | |
9919 | 10308 | |
9920 | 10309 | %feature("docstring") gdcm::Segment::SetAnatomicRegion "void |
9921 | 10310 | gdcm::Segment::SetAnatomicRegion(SegmentHelper::BasicCodedEntry const |
10136 | 10525 | |
10137 | 10526 | Sets the actual SQ length. "; |
10138 | 10527 | |
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 | "; | |
10141 | 10531 | |
10142 | 10532 | %feature("docstring") gdcm::SequenceOfFragments::WriteBuffer "bool |
10143 | 10533 | gdcm::SequenceOfFragments::WriteBuffer(std::ostream &os) const "; |
10243 | 10633 | %feature("docstring") gdcm::SequenceOfItems::SetNumberOfItems "void |
10244 | 10634 | gdcm::SequenceOfItems::SetNumberOfItems(SizeType n) "; |
10245 | 10635 | |
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 "; | |
10248 | 10638 | |
10249 | 10639 | |
10250 | 10640 | // File: classgdcm_1_1SerieHelper.xml |
10251 | 10641 | %feature("docstring") gdcm::SerieHelper " |
10252 | 10642 | |
10253 | 10643 | 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 | |
10255 | 10645 | been warned. |
10256 | 10646 | |
10257 | 10647 | Instead see ImageHelper or IPPSorter |
10587 | 10977 | See: http://www.davethehat.com/articles/smartp.htm and |
10588 | 10978 | itk::SmartPointer |
10589 | 10979 | |
10590 | C++ includes: gdcmSmartPointer.h "; | |
10980 | C++ includes: gdcmObject.h "; | |
10591 | 10981 | |
10592 | 10982 | %feature("docstring") gdcm::SmartPointer::SmartPointer "gdcm::SmartPointer< ObjectType >::SmartPointer() "; |
10593 | 10983 | |
10667 | 11057 | provide a function of type: Sorter::SortFunction |
10668 | 11058 | |
10669 | 11059 | 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 | |
10672 | 11062 | |
10673 | 11063 | See: Scanner |
10674 | 11064 | |
10864 | 11254 | |
10865 | 11255 | |
10866 | 11256 | // 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 "; | |
10868 | 11259 | |
10869 | 11260 | |
10870 | 11261 | // File: structgdcm_1_1STATIC__ASSERTION__FAILURE_3_01true_01_4.xml |
10929 | 11320 | gdcm::StreamImageReader::GetDimensionsValueForResolution(unsigned int) |
10930 | 11321 | "; |
10931 | 11322 | |
10932 | %feature("docstring") gdcm::StreamImageReader::GetFile "File const& | |
11323 | %feature("docstring") gdcm::StreamImageReader::GetFile "const File& | |
10933 | 11324 | gdcm::StreamImageReader::GetFile() const |
10934 | 11325 | |
10935 | 11326 | Returns the dataset read by ReadImageInformation Couple this with the |
11045 | 11436 | |
11046 | 11437 | the conversion from void* to std::ostream (internally) fails |
11047 | 11438 | |
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 | |
11049 | 11440 | extent. This method has been implemented to look similar to the |
11050 | 11441 | metaimageio in itk MUST have an extent defined, or else Read will |
11051 | 11442 | return false. If no particular extent is required, use ImageReader |
11066 | 11457 | StrictScanner. |
11067 | 11458 | |
11068 | 11459 | 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 | |
11070 | 11461 | amount of information in each file in order to retrieve the user |
11071 | 11462 | specified set of DICOM Attribute. |
11072 | 11463 | |
11134 | 11525 | Will loop over all files and return the first file where value match |
11135 | 11526 | the reference value 'valueref' "; |
11136 | 11527 | |
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 "; | |
11139 | 11530 | |
11140 | 11531 | %feature("docstring") gdcm::StrictScanner::GetKeys "Directory::FilenamesType gdcm::StrictScanner::GetKeys() const |
11141 | 11532 | |
11142 | 11533 | Return the list of filename that are key in the internal map, which |
11143 | 11534 | means those filename were properly parsed "; |
11144 | 11535 | |
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 | |
11147 | 11539 | |
11148 | 11540 | Get the std::map mapping filenames to value for file 'filename'. "; |
11149 | 11541 | |
11150 | %feature("docstring") gdcm::StrictScanner::GetMappingFromTagToValue "TagToValue const& gdcm::StrictScanner::GetMappingFromTagToValue(Tag | |
11542 | %feature("docstring") gdcm::StrictScanner::GetMappingFromTagToValue "const TagToValue& gdcm::StrictScanner::GetMappingFromTagToValue(Tag | |
11151 | 11543 | const &t, const char *value) const |
11152 | 11544 | |
11153 | 11545 | See GetFilenameFromTagToValue(). This is simply |
11154 | 11546 | GetFilenameFromTagToValue followed. "; |
11155 | 11547 | |
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 | |
11158 | 11550 | |
11159 | 11551 | Mappings are the mapping from a particular tag to the map, mapping |
11160 | 11552 | filename to value: "; |
11176 | 11568 | the TagToValue hash table. WARNING: Tag 't' should have been added |
11177 | 11569 | via AddTag() prior to the Scan() call ! "; |
11178 | 11570 | |
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 | |
11181 | 11573 | |
11182 | 11574 | Get all the values found (in lexicographic order) "; |
11183 | 11575 | |
11208 | 11600 | Start the scan ! "; |
11209 | 11601 | |
11210 | 11602 | |
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 | ||
11211 | 11802 | // File: classgdcm_1_1String.xml |
11212 | 11803 | %feature("docstring") gdcm::String " |
11213 | 11804 | |
11214 | 11805 | String. |
11215 | 11806 | |
11216 | 11807 | 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 | |
11218 | 11809 | TPadChar is the string padding (0 or space) |
11219 | 11810 | |
11220 | 11811 | C++ includes: gdcmString.h "; |
11272 | 11863 | |
11273 | 11864 | Execute the XPATH query to find a value (as string) return false when |
11274 | 11865 | 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 "; | |
11276 | 11867 | |
11277 | 11868 | %feature("docstring") gdcm::StringFilter::FromString "std::string |
11278 | 11869 | gdcm::StringFilter::FromString(const Tag &t, const char *value, size_t |
11369 | 11960 | gdcm::Subject::GetCommand(unsigned long tag) |
11370 | 11961 | |
11371 | 11962 | 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 | |
11373 | 11964 | Command::Pointer. Since Command inherits from LightObject, at this |
11374 | 11965 | point in the code, only a pointer or a reference to the Command can be |
11375 | 11966 | used. "; |
11418 | 12009 | |
11419 | 12010 | %feature("docstring") gdcm::Surface::GetAlgorithmFamily "SegmentHelper::BasicCodedEntry& gdcm::Surface::GetAlgorithmFamily() "; |
11420 | 12011 | |
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 "; | |
11423 | 12015 | |
11424 | 12016 | %feature("docstring") gdcm::Surface::GetAlgorithmName "const char* |
11425 | 12017 | gdcm::Surface::GetAlgorithmName() const "; |
11451 | 12043 | |
11452 | 12044 | %feature("docstring") gdcm::Surface::GetMeshPrimitive "MeshPrimitive& gdcm::Surface::GetMeshPrimitive() "; |
11453 | 12045 | |
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 "; | |
11456 | 12048 | |
11457 | 12049 | %feature("docstring") gdcm::Surface::GetNumberOfSurfacePoints "unsigned long gdcm::Surface::GetNumberOfSurfacePoints() const "; |
11458 | 12050 | |
11477 | 12069 | %feature("docstring") gdcm::Surface::GetProcessingAlgorithm "SegmentHelper::BasicCodedEntry& |
11478 | 12070 | gdcm::Surface::GetProcessingAlgorithm() "; |
11479 | 12071 | |
11480 | %feature("docstring") gdcm::Surface::GetProcessingAlgorithm "SegmentHelper::BasicCodedEntry const& | |
12072 | %feature("docstring") gdcm::Surface::GetProcessingAlgorithm "const | |
12073 | SegmentHelper::BasicCodedEntry& | |
11481 | 12074 | gdcm::Surface::GetProcessingAlgorithm() const "; |
11482 | 12075 | |
11483 | 12076 | %feature("docstring") gdcm::Surface::GetRecommendedDisplayCIELabValue |
11939 | 12532 | gdcm::Tag::ReadFromCommaSeparatedString(const char *str) |
11940 | 12533 | |
11941 | 12534 | 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 | |
11943 | 12536 | tag (0x1234,0x5678) The notation comes from the DICOM standard, and is |
11944 | 12537 | handy to use from a command line program "; |
11945 | 12538 | |
12277 | 12870 | This ULEvent is passed to the ULState, so that the transition to the |
12278 | 12871 | next state can occur. |
12279 | 12872 | |
12280 | Actions are associated with Payloads be thos filestreams, AETitles to | |
12873 | Actions are associated with Payloads be those filestreams, AETitles to | |
12281 | 12874 | establish connections, whatever. The actual parameters that the user |
12282 | 12875 | will pass via an action will come through a Payload object, which |
12283 | 12876 | should, in itself, be some gdcm-based object (but not all objects can |
12588 | 13181 | %feature("docstring") |
12589 | 13182 | gdcm::network::ULBasicCallback::~ULBasicCallback "gdcm::network::ULBasicCallback::~ULBasicCallback() override=default "; |
12590 | 13183 | |
12591 | %feature("docstring") gdcm::network::ULBasicCallback::GetDataSets "std::vector<DataSet> const& | |
13184 | %feature("docstring") gdcm::network::ULBasicCallback::GetDataSets "const std::vector<DataSet>& | |
12592 | 13185 | gdcm::network::ULBasicCallback::GetDataSets() const "; |
12593 | 13186 | |
12594 | %feature("docstring") gdcm::network::ULBasicCallback::GetResponses "std::vector<DataSet> const& | |
13187 | %feature("docstring") gdcm::network::ULBasicCallback::GetResponses "const std::vector<DataSet>& | |
12595 | 13188 | gdcm::network::ULBasicCallback::GetResponses() const "; |
12596 | 13189 | |
12597 | 13190 | %feature("docstring") gdcm::network::ULBasicCallback::HandleDataSet "void gdcm::network::ULBasicCallback::HandleDataSet(const DataSet |
12651 | 13244 | gdcm::network::ULConnection::GetAcceptedPresentationContexts() "; |
12652 | 13245 | |
12653 | 13246 | %feature("docstring") |
12654 | gdcm::network::ULConnection::GetAcceptedPresentationContexts "std::vector<PresentationContextAC> const& | |
13247 | gdcm::network::ULConnection::GetAcceptedPresentationContexts "const | |
13248 | std::vector<PresentationContextAC>& | |
12655 | 13249 | gdcm::network::ULConnection::GetAcceptedPresentationContexts() const |
12656 | 13250 | "; |
12657 | 13251 | |
12682 | 13276 | const "; |
12683 | 13277 | |
12684 | 13278 | %feature("docstring") |
12685 | gdcm::network::ULConnection::GetPresentationContexts "std::vector<PresentationContextRQ> const& | |
13279 | gdcm::network::ULConnection::GetPresentationContexts "const | |
13280 | std::vector<PresentationContextRQ>& | |
12686 | 13281 | gdcm::network::ULConnection::GetPresentationContexts() const "; |
12687 | 13282 | |
12688 | 13283 | %feature("docstring") gdcm::network::ULConnection::GetProtocol "std::iostream* gdcm::network::ULConnection::GetProtocol() "; |
12989 | 13584 | |
12990 | 13585 | %feature("docstring") gdcm::network::ULEvent::GetIStream "std::istream* gdcm::network::ULEvent::GetIStream() const "; |
12991 | 13586 | |
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 "; | |
12994 | 13589 | |
12995 | 13590 | %feature("docstring") gdcm::network::ULEvent::SetEvent "void |
12996 | 13591 | gdcm::network::ULEvent::SetEvent(const EEventID &inEvent) "; |
13386 | 13981 | |
13387 | 13982 | |
13388 | 13983 | // File: structgdcm_1_1VMToLength.xml |
13389 | %feature("docstring") gdcm::VMToLength ""; | |
13984 | %feature("docstring") gdcm::VMToLength "C++ includes: gdcmVM.h "; | |
13390 | 13985 | |
13391 | 13986 | |
13392 | 13987 | // File: classgdcm_1_1VR.xml |
13438 | 14033 | |
13439 | 14034 | Class to read/write a DataElement as Explicit Data Element. |
13440 | 14035 | |
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: | |
13442 | 14037 | Siemens_CT_Sensation64_has_VR_RT.dcm |
13443 | 14038 | |
13444 | 14039 | C++ includes: gdcmVR16ExplicitDataElement.h "; |
13460 | 14055 | |
13461 | 14056 | |
13462 | 14057 | // File: structgdcm_1_1VRToEncoding.xml |
13463 | %feature("docstring") gdcm::VRToEncoding ""; | |
14058 | %feature("docstring") gdcm::VRToEncoding "C++ includes: gdcmVR.h "; | |
13464 | 14059 | |
13465 | 14060 | |
13466 | 14061 | // File: structgdcm_1_1VRToType.xml |
13467 | %feature("docstring") gdcm::VRToType ""; | |
14062 | %feature("docstring") gdcm::VRToType "C++ includes: gdcmVR.h "; | |
13468 | 14063 | |
13469 | 14064 | |
13470 | 14065 | // File: classgdcm_1_1VRVLSize.xml |
13471 | %feature("docstring") gdcm::VRVLSize ""; | |
14066 | %feature("docstring") gdcm::VRVLSize "C++ includes: gdcmAttribute.h | |
14067 | "; | |
13472 | 14068 | |
13473 | 14069 | |
13474 | 14070 | // File: classgdcm_1_1VRVLSize_3_010_01_4.xml |
13924 | 14520 | "vtkGDCMThreadedImageReader2::vtkSetVector6Macro(DataExtent, int) "; |
13925 | 14521 | |
13926 | 14522 | %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, | |
14002 | 14523 | vtkThreadedImageAlgorithm) "; |
14003 | 14524 | |
14004 | 14525 | |
14497 | 15018 | This class is a non-validating writer, it will only performs well- |
14498 | 15019 | formedness check only. |
14499 | 15020 | |
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 | |
14502 | 15023 | length, non-zero value for Item start/end length ...) Therefore you |
14503 | 15024 | cannot (well unless you are really smart) write DICOM with even length |
14504 | 15025 | tag. All the checks are consider basics: Correct Meta Information |
14508 | 15029 | |
14509 | 15030 | Even length for any elements |
14510 | 15031 | |
14511 | Alphabetical order for elements (garanteed by design of internals) | |
15032 | Alphabetical order for elements (guaranteed by design of internals) | |
14512 | 15033 | |
14513 | 15034 | 32bits VR will be rewritten with 00 |
14514 | 15035 | |
14653 | 15174 | %feature("docstring") gdcm::network::add1 "static int |
14654 | 15175 | gdcm::add1(char *buf, int n) "; |
14655 | 15176 | |
14656 | %feature("docstring") gdcm::network::backslash "ignore_char const | |
15177 | %feature("docstring") gdcm::network::backslash "const ignore_char | |
14657 | 15178 | gdcm::backslash('\\\\\\\\') "; |
14658 | 15179 | |
14659 | 15180 | %feature("docstring") gdcm::network::Clamp "static T gdcm::Clamp(int |
14672 | 15193 | x) "; |
14673 | 15194 | |
14674 | 15195 | %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) "; | |
14676 | 15197 | |
14677 | 15198 | %feature("docstring") gdcm::network::TYPETOENCODING "gdcm::TYPETOENCODING(SQ, VRBINARY, unsigned char) TYPETOENCODING(UN "; |
14678 | 15199 | |
14807 | 15328 | // File: gdcmCFindMessages_8h.xml |
14808 | 15329 | |
14809 | 15330 | |
15331 | // File: gdcmCleaner_8h.xml | |
15332 | ||
15333 | ||
14810 | 15334 | // File: gdcmCMoveMessages_8h.xml |
14811 | 15335 | |
14812 | 15336 | |
14924 | 15448 | // File: gdcmDirectoryHelper_8h.xml |
14925 | 15449 | |
14926 | 15450 | |
15451 | // File: gdcmDPath_8h.xml | |
15452 | ||
15453 | ||
14927 | 15454 | // File: gdcmDummyValueGenerator_8h.xml |
14928 | 15455 | |
14929 | 15456 | |
15341 | 15868 | // File: gdcmScanner_8h.xml |
15342 | 15869 | |
15343 | 15870 | |
15871 | // File: gdcmScanner2_8h.xml | |
15872 | ||
15873 | ||
15344 | 15874 | // File: gdcmSegment_8h.xml |
15345 | 15875 | |
15346 | 15876 | |
15413 | 15943 | // File: gdcmStrictScanner_8h.xml |
15414 | 15944 | |
15415 | 15945 | |
15946 | // File: gdcmStrictScanner2_8h.xml | |
15947 | ||
15948 | ||
15416 | 15949 | // File: gdcmString_8h.xml |
15417 | 15950 | |
15418 | 15951 | |
15629 | 16162 | // File: vtkGDCMThreadedImageReader2_8h.xml |
15630 | 16163 | |
15631 | 16164 | |
15632 | // File: vtkGDCMThreadedImageReader3_8h.xml | |
15633 | ||
15634 | ||
15635 | 16165 | // File: vtkImageColorViewer_8h.xml |
15636 | 16166 | |
15637 | 16167 | |
15665 | 16195 | // File: bug.xml |
15666 | 16196 | |
15667 | 16197 | |
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 | |
15702 | 16754 | |
15703 | 16755 | |
15704 | 16756 | // File: TestByteSwap_8cxx-example.xml |
15705 | 16757 | |
15706 | 16758 | |
15707 | // File: PatchFile_8cxx-example.xml | |
15708 | ||
15709 | ||
15710 | // File: SimplePrint_8cs-example.xml | |
15711 | ||
15712 | ||
15713 | 16759 | // File: TestReader_8cxx-example.xml |
15714 | 16760 | |
15715 | 16761 | |
15716 | 16762 | // File: TestReader_8py-example.xml |
15717 | 16763 | |
15718 | 16764 | |
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 | |
15990 | 16766 | |
15991 | 16767 | |
15992 | 16768 | // File: TraverseModules_8cxx-example.xml |
15993 | 16769 | |
15994 | 16770 | |
16771 | // File: uid_unique_8cxx-example.xml | |
16772 | ||
16773 | ||
15995 | 16774 | // File: VolumeSorter_8cxx-example.xml |
15996 | 16775 | |
15997 | 16776 | |
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 | ||
16115 | 16777 | // File: WriteBuffer_8py-example.xml |
16116 | 16778 | |
16117 | 16779 | |
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 | ||
16229 | 16780 | // File: indexpage.xml |
16230 | 16781 |