00001 /* 00002 * 00003 * Copyright (C) 2002-2010, OFFIS e.V. 00004 * All rights reserved. See COPYRIGHT file for details. 00005 * 00006 * This software and supporting documentation were developed by 00007 * 00008 * OFFIS e.V. 00009 * R&D Division Health 00010 * Escherweg 2 00011 * D-26121 Oldenburg, Germany 00012 * 00013 * 00014 * Module: dcmdata 00015 * 00016 * Author: Joerg Riesmeier 00017 * 00018 * Purpose: Interface class for simplified creation of a DICOMDIR 00019 * 00020 * Last Update: $Author: joergr $ 00021 * Update Date: $Date: 2010-11-05 13:11:11 $ 00022 * CVS/RCS Revision: $Revision: 1.23 $ 00023 * Status: $State: Exp $ 00024 * 00025 * CVS/RCS Log at end of file 00026 * 00027 */ 00028 00029 00030 #ifndef DCDDIRIF_H 00031 #define DCDDIRIF_H 00032 00033 #include "dcmtk/config/osconfig.h" 00034 00035 #include "dcmtk/dcmdata/dcdicdir.h" 00036 00037 00038 /*-----------------------------------* 00039 * contant declarations and macros * 00040 *-----------------------------------*/ 00041 00042 // default fileset ID 00043 #define DEFAULT_FILESETID "DCMTK_MEDIA_DEMO" 00044 // default specific character set of fileset descriptor file 00045 #define DEFAULT_DESCRIPTOR_CHARSET "ISO_IR 100" 00046 00047 00048 /*----------------------* 00049 * class declarations * 00050 *----------------------*/ 00051 00057 class DicomDirImagePlugin 00058 { 00059 public: 00060 00063 virtual ~DicomDirImagePlugin() {} 00064 00075 virtual OFBool scaleData(const Uint8 *srcData, 00076 const unsigned int srcWidth, 00077 const unsigned int srcHeight, 00078 Uint8 *dstData, 00079 const unsigned int dstWidth, 00080 const unsigned int dstHeight) const = 0; 00081 00093 virtual OFBool scaleImage(DcmItem *dataset, 00094 Uint8 *pixel, 00095 const unsigned long count, 00096 const unsigned long frame, 00097 const unsigned int width, 00098 const unsigned int height, 00099 const OFBool decompressAll = OFFalse) const = 0; 00100 00101 protected: 00102 00105 DicomDirImagePlugin() {} 00106 }; 00107 00108 00111 class DicomDirInterface 00112 { 00113 00114 public: 00115 00118 enum E_ApplicationProfile 00119 { 00121 AP_GeneralPurpose, 00123 AP_Default = AP_GeneralPurpose, 00125 AP_GeneralPurposeDVD, 00127 AP_GeneralPurposeMIME, 00129 AP_USBandFlash, 00131 AP_MPEG2MPatMLDVD, 00133 AP_BasicCardiac, 00135 AP_XrayAngiographic, 00137 AP_XrayAngiographicDVD, 00139 AP_DentalRadiograph, 00141 AP_CTandMR, 00143 AP_UltrasoundIDSF, 00145 AP_UltrasoundSCSF, 00147 AP_UltrasoundCCSF, 00149 AP_UltrasoundIDMF, 00151 AP_UltrasoundSCMF, 00153 AP_UltrasoundCCMF, 00155 AP_TwelveLeadECG, 00157 AP_HemodynamicWaveform 00158 }; 00159 00164 DicomDirInterface(); 00165 00169 virtual ~DicomDirInterface(); 00170 00174 void cleanup(); 00175 00180 OFBool isDicomDirValid() const; 00181 00193 OFCondition createNewDicomDir(const E_ApplicationProfile profile = AP_GeneralPurpose, 00194 const char *filename = DEFAULT_DICOMDIR_NAME, 00195 const char *filesetID = DEFAULT_FILESETID); 00196 00208 OFCondition appendToDicomDir(const E_ApplicationProfile profile, 00209 const char *filename); 00210 00222 OFCondition updateDicomDir(const E_ApplicationProfile profile, 00223 const char *filename); 00224 00231 OFCondition writeDicomDir(const E_EncodingType encodingType = EET_UndefinedLength, 00232 const E_GrpLenEncoding groupLength = EGL_withoutGL); 00233 00243 OFBool isFilenameValid(const char *filename, 00244 const OFBool allowEmpty = OFFalse); 00245 00253 OFBool isCharsetValid(const char *charset); 00254 00265 OFCondition checkDicomFile(const char *filename, 00266 const char *directory = NULL); 00267 00277 OFCondition addDicomFile(const char *filename, 00278 const char *directory = NULL); 00279 00289 OFCondition setFilesetDescriptor(const char *filename, 00290 const char *charset = DEFAULT_DESCRIPTOR_CHARSET); 00291 00298 OFCondition setIconSize(const unsigned int size); 00299 00308 OFCondition setIconPrefix(const char *prefix); 00309 00317 OFCondition setDefaultIcon(const char *filename); 00318 00323 OFBool abortMode() const 00324 { 00325 return AbortMode; 00326 } 00327 00332 OFBool mapFilenamesMode() const 00333 { 00334 return MapFilenamesMode; 00335 } 00336 00341 OFBool inventMode() const 00342 { 00343 return InventMode; 00344 } 00345 00350 OFBool inventPatientIDMode() const 00351 { 00352 return InventPatientIDMode; 00353 } 00354 00359 OFBool retiredSOPClassSupport() const 00360 { 00361 return RetiredSOPClassSupport; 00362 } 00363 00368 OFBool iconImageMode() const 00369 { 00370 return IconImageMode; 00371 } 00372 00377 OFBool backupMode() const 00378 { 00379 return BackupMode; 00380 } 00381 00386 OFBool encodingCheck() const 00387 { 00388 return EncodingCheck; 00389 } 00390 00395 OFBool resolutionCheck() const 00396 { 00397 return ResolutionCheck; 00398 } 00399 00404 OFBool transferSyntaxCheck() const 00405 { 00406 return TransferSyntaxCheck; 00407 } 00408 00413 OFBool consistencyCheck() const 00414 { 00415 return ConsistencyCheck; 00416 } 00417 00425 OFBool enableAbortMode(const OFBool newMode = OFTrue); 00426 00434 OFBool enableMapFilenamesMode(const OFBool newMode = OFTrue); 00435 00443 OFBool enableInventMode(const OFBool newMode = OFTrue); 00444 00453 OFBool enableInventPatientIDMode(const OFBool newMode = OFTrue); 00454 00462 OFBool enableRetiredSOPClassSupport(const OFBool newMode = OFTrue); 00463 00473 OFBool enableIconImageMode(const OFBool newMode = OFTrue); 00474 00483 OFBool disableBackupMode(const OFBool newMode = OFFalse); 00484 00494 OFBool disableEncodingCheck(const OFBool newMode = OFFalse); 00495 00505 OFBool disableResolutionCheck(const OFBool newMode = OFFalse); 00506 00516 OFBool disableTransferSyntaxCheck(const OFBool newMode = OFFalse); 00517 00526 OFBool disableConsistencyCheck(const OFBool newMode = OFFalse); 00527 00534 OFBool addImageSupport(DicomDirImagePlugin *plugin); 00535 00536 /* -- static function -- */ 00537 00542 static const char *getProfileName(const E_ApplicationProfile profile); 00543 00544 00545 protected: 00546 00551 OFCondition selectApplicationProfile(const E_ApplicationProfile profile); 00552 00559 OFCondition loadAndCheckDicomFile(const char *filename, 00560 const char *directory, 00561 DcmFileFormat &fileformat); 00562 00569 OFCondition checkSOPClassAndXfer(DcmMetaInfo *metainfo, 00570 DcmItem *dataset, 00571 const char *filename); 00572 00578 OFCondition checkBasicCardiacAttributes(DcmItem *dataset, 00579 const char *filename); 00580 00587 OFCondition checkXrayAngiographicAttributes(DcmItem *dataset, 00588 const OFString &sopClass, 00589 const char *filename); 00590 00596 OFCondition checkDentalRadiographAttributes(DcmItem *dataset, 00597 const char *filename); 00598 00605 OFCondition checkCTandMRAttributes(DcmItem *dataset, 00606 const OFString &sopClass, 00607 const char *filename); 00608 00615 OFCondition checkUltrasoundAttributes(DcmItem *dataset, 00616 const OFString &transferSyntax, 00617 const char *filename); 00618 00625 OFCondition checkMandatoryAttributes(DcmMetaInfo *metainfo, 00626 DcmItem *dataset, 00627 const char *filename); 00628 00638 OFBool recordMatchesDataset(DcmDirectoryRecord *record, 00639 DcmItem *dataset); 00640 00647 DcmDirectoryRecord *findExistingRecord(DcmDirectoryRecord *parent, 00648 const E_DirRecType recordType, 00649 DcmItem* dataset); 00650 00657 DcmDirectoryRecord *buildPatientRecord(DcmDirectoryRecord *record, 00658 DcmItem *dataset, 00659 const OFString &sourceFilename); 00660 00667 DcmDirectoryRecord *buildStudyRecord(DcmDirectoryRecord *record, 00668 DcmItem *dataset, 00669 const OFString &sourceFilename); 00670 00677 DcmDirectoryRecord *buildSeriesRecord(DcmDirectoryRecord *record, 00678 DcmItem *dataset, 00679 const OFString &sourceFilename); 00680 00688 DcmDirectoryRecord *buildOverlayRecord(DcmDirectoryRecord *record, 00689 DcmItem *dataset, 00690 const OFString &referencedFileID, 00691 const OFString &sourceFilename); 00692 00700 DcmDirectoryRecord *buildModalityLutRecord(DcmDirectoryRecord *record, 00701 DcmItem *dataset, 00702 const OFString &referencedFileID, 00703 const OFString &sourceFilename); 00704 00712 DcmDirectoryRecord *buildVoiLutRecord(DcmDirectoryRecord *record, 00713 DcmItem *dataset, 00714 const OFString &referencedFileID, 00715 const OFString &sourceFilename); 00716 00724 DcmDirectoryRecord *buildCurveRecord(DcmDirectoryRecord *record, 00725 DcmItem *dataset, 00726 const OFString &referencedFileID, 00727 const OFString &sourceFilename); 00728 00736 DcmDirectoryRecord *buildStructReportRecord(DcmDirectoryRecord *record, 00737 DcmItem *dataset, 00738 const OFString &referencedFileID, 00739 const OFString &sourceFilename); 00740 00748 DcmDirectoryRecord *buildPresentationRecord(DcmDirectoryRecord *record, 00749 DcmItem *dataset, 00750 const OFString &referencedFileID, 00751 const OFString &sourceFilename); 00752 00760 DcmDirectoryRecord *buildWaveformRecord(DcmDirectoryRecord *record, 00761 DcmItem *dataset, 00762 const OFString &referencedFileID, 00763 const OFString &sourceFilename); 00764 00772 DcmDirectoryRecord *buildRTDoseRecord(DcmDirectoryRecord *record, 00773 DcmItem *dataset, 00774 const OFString &referencedFileID, 00775 const OFString &sourceFilename); 00776 00784 DcmDirectoryRecord *buildRTStructureSetRecord(DcmDirectoryRecord *record, 00785 DcmItem *dataset, 00786 const OFString &referencedFileID, 00787 const OFString &sourceFilename); 00788 00796 DcmDirectoryRecord *buildRTPlanRecord(DcmDirectoryRecord *record, 00797 DcmItem *dataset, 00798 const OFString &referencedFileID, 00799 const OFString &sourceFilename); 00800 00808 DcmDirectoryRecord *buildRTTreatmentRecord(DcmDirectoryRecord *record, 00809 DcmItem *dataset, 00810 const OFString &referencedFileID, 00811 const OFString &sourceFilename); 00812 00820 DcmDirectoryRecord *buildStoredPrintRecord(DcmDirectoryRecord *record, 00821 DcmItem *dataset, 00822 const OFString &referencedFileID, 00823 const OFString &sourceFilename); 00824 00832 DcmDirectoryRecord *buildKeyObjectDocRecord(DcmDirectoryRecord *record, 00833 DcmItem *dataset, 00834 const OFString &referencedFileID, 00835 const OFString &sourceFilename); 00836 00844 DcmDirectoryRecord *buildRegistrationRecord(DcmDirectoryRecord *record, 00845 DcmItem *dataset, 00846 const OFString &referencedFileID, 00847 const OFString &sourceFilename); 00848 00856 DcmDirectoryRecord *buildFiducialRecord(DcmDirectoryRecord *record, 00857 DcmItem *dataset, 00858 const OFString &referencedFileID, 00859 const OFString &sourceFilename); 00860 00868 DcmDirectoryRecord *buildRawDataRecord(DcmDirectoryRecord *record, 00869 DcmItem *dataset, 00870 const OFString &referencedFileID, 00871 const OFString &sourceFilename); 00872 00880 DcmDirectoryRecord *buildSpectroscopyRecord(DcmDirectoryRecord *record, 00881 DcmItem *dataset, 00882 const OFString &referencedFileID, 00883 const OFString &sourceFilename); 00884 00892 DcmDirectoryRecord *buildEncapDocRecord(DcmDirectoryRecord *record, 00893 DcmItem *dataset, 00894 const OFString &referencedFileID, 00895 const OFString &sourceFilename); 00896 00904 DcmDirectoryRecord *buildValueMapRecord(DcmDirectoryRecord *record, 00905 DcmItem *dataset, 00906 const OFString &referencedFileID, 00907 const OFString &sourceFilename); 00908 00916 DcmDirectoryRecord *buildHangingProtocolRecord(DcmDirectoryRecord *record, 00917 DcmItem *dataset, 00918 const OFString &referencedFileID, 00919 const OFString &sourceFilename); 00920 00928 DcmDirectoryRecord *buildStereometricRecord(DcmDirectoryRecord *record, 00929 DcmItem *dataset, 00930 const OFString &referencedFileID, 00931 const OFString &sourceFilename); 00932 00940 DcmDirectoryRecord *buildPaletteRecord(DcmDirectoryRecord *record, 00941 DcmItem *dataset, 00942 const OFString &referencedFileID, 00943 const OFString &sourceFilename); 00944 00952 DcmDirectoryRecord *buildSurfaceRecord(DcmDirectoryRecord *record, 00953 DcmItem *dataset, 00954 const OFString &referencedFileID, 00955 const OFString &sourceFilename); 00956 00964 DcmDirectoryRecord *buildMeasurementRecord(DcmDirectoryRecord *record, 00965 DcmItem *dataset, 00966 const OFString &referencedFileID, 00967 const OFString &sourceFilename); 00968 00976 DcmDirectoryRecord *buildImplantRecord(DcmDirectoryRecord *record, 00977 DcmItem *dataset, 00978 const OFString &referencedFileID, 00979 const OFString &sourceFilename); 00980 00988 DcmDirectoryRecord *buildImplantGroupRecord(DcmDirectoryRecord *record, 00989 DcmItem *dataset, 00990 const OFString &referencedFileID, 00991 const OFString &sourceFilename); 00992 01000 DcmDirectoryRecord *buildImplantAssyRecord(DcmDirectoryRecord *record, 01001 DcmItem *dataset, 01002 const OFString &referencedFileID, 01003 const OFString &sourceFilename); 01004 01012 DcmDirectoryRecord *buildImageRecord(DcmDirectoryRecord *record, 01013 DcmItem *dataset, 01014 const OFString &referencedFileID, 01015 const OFString &sourceFilename); 01016 01027 OFBool getIconFromFile(const OFString &filename, 01028 Uint8 *pixel, 01029 const unsigned long count, 01030 const unsigned int width, 01031 const unsigned int height); 01032 01042 OFBool getIconFromDataset(DcmItem *dataset, 01043 Uint8 *pixel, 01044 const unsigned long count, 01045 const unsigned int width, 01046 const unsigned int height); 01047 01058 OFCondition addIconImage(DcmDirectoryRecord *record, 01059 DcmItem *dataset, 01060 const unsigned int size, 01061 const OFString &sourceFilename); 01062 01072 DcmDirectoryRecord *addRecord(DcmDirectoryRecord *parent, 01073 const E_DirRecType recordType, 01074 DcmItem *dataset, 01075 const OFString &referencedFileID, 01076 const OFString &sourceFilename); 01077 01084 OFBool checkReferencedSOPInstance(DcmDirectoryRecord *record, 01085 DcmItem *dataset, 01086 const OFString &referencedFileID, 01087 const OFString &sourceFilename); 01088 01094 void inventMissingAttributes(DcmDirectoryRecord *parent, 01095 const OFBool recurse = OFTrue); 01096 01100 void inventMissingStudyLevelAttributes(DcmDirectoryRecord *parent); 01101 01105 void inventMissingSeriesLevelAttributes(DcmDirectoryRecord *parent); 01106 01110 void inventMissingInstanceLevelAttributes(DcmDirectoryRecord *parent); 01111 01115 void createDicomDirBackup(const char *filename); 01116 01119 void deleteDicomDirBackup(); 01120 01128 void printUnexpectedValueMessage(const DcmTagKey &key, 01129 const char *filename = NULL, 01130 const OFBool errorMsg = OFTrue); 01131 01139 void printRequiredAttributeMessage(const DcmTagKey &key, 01140 const char *filename = NULL, 01141 const OFBool emptyMsg = OFFalse); 01142 01150 void printAttributeErrorMessage(const DcmTagKey &key, 01151 const OFCondition &error, 01152 const char *operation); 01153 01161 void printRecordErrorMessage(const OFCondition &error, 01162 const E_DirRecType recordType, 01163 const char *operation); 01164 01170 OFBool copyFile(const char *fromFilename, 01171 const char *toFilename); 01172 01180 OFBool warnAboutInconsistentAttributes(DcmDirectoryRecord *record, 01181 DcmItem *dataset, 01182 const OFString &sourceFilename, 01183 const OFBool abortCheck = OFFalse); 01184 01189 OFBool checkFilesetID(const OFString &filesetID); 01190 01197 OFBool checkExists(DcmItem *dataset, 01198 const DcmTagKey &key, 01199 const char *filename = NULL); 01200 01207 OFBool checkExistsWithValue(DcmItem *dataset, 01208 const DcmTagKey &key, 01209 const char *filename = NULL); 01210 01218 OFBool checkExistsWithStringValue(DcmItem *dataset, 01219 const DcmTagKey &key, 01220 const OFString &value, 01221 const char *filename = NULL); 01222 01231 OFBool checkExistsWithIntegerValue(DcmItem *dataset, 01232 const DcmTagKey &key, 01233 const long value, 01234 const char *filename = NULL, 01235 const OFBool reject = OFTrue); 01236 01246 OFBool checkExistsWithMinMaxValue(DcmItem *dataset, 01247 const DcmTagKey &key, 01248 const long min, 01249 const long max, 01250 const char *filename = NULL, 01251 const OFBool reject = OFTrue); 01252 01260 OFString &getStringFromDataset(DcmItem *dataset, 01261 const DcmTagKey &key, 01262 OFString &result, 01263 OFBool searchIntoSub = OFFalse); 01264 01273 OFString &getStringComponentFromDataset(DcmItem *dataset, 01274 const DcmTagKey &key, 01275 OFString &result, 01276 const unsigned long pos, 01277 OFBool searchIntoSub = OFFalse); 01278 01286 OFString &getStringFromFile(const char *filename, 01287 const DcmTagKey &key, 01288 OFString &result, 01289 OFBool searchIntoSub = OFFalse); 01290 01299 void copyElement(DcmItem *dataset, 01300 const DcmTagKey &key, 01301 DcmDirectoryRecord *record, 01302 const OFString &sourceFilename, 01303 const OFBool optional = OFFalse, 01304 const OFBool copyEmpty = OFTrue); 01305 01312 void copyElementType1(DcmItem *dataset, 01313 const DcmTagKey &key, 01314 DcmDirectoryRecord *record, 01315 const OFString &sourceFilename) 01316 { 01317 copyElement(dataset, key, record, sourceFilename, OFFalse /*optional*/, OFFalse /*copyEmpty*/); 01318 } 01319 01326 void copyElementType1C(DcmItem *dataset, 01327 const DcmTagKey &key, 01328 DcmDirectoryRecord *record, 01329 const OFString &sourceFilename) 01330 { 01331 copyElement(dataset, key, record, sourceFilename, OFTrue /*optional*/, OFFalse /*copyEmpty*/); 01332 } 01333 01340 void copyElementType2(DcmItem *dataset, 01341 const DcmTagKey &key, 01342 DcmDirectoryRecord *record, 01343 const OFString &sourceFilename) 01344 { 01345 copyElement(dataset, key, record, sourceFilename, OFFalse /*optional*/, OFTrue /*copyEmpty*/); 01346 } 01347 01354 void copyElementType3(DcmItem *dataset, 01355 const DcmTagKey &key, 01356 DcmDirectoryRecord *record, 01357 const OFString &sourceFilename) 01358 { 01359 copyElement(dataset, key, record, sourceFilename, OFTrue /*optional*/, OFTrue /*copyEmpty*/); 01360 } 01361 01371 void copyStringWithDefault(DcmItem *dataset, 01372 const DcmTagKey &key, 01373 DcmDirectoryRecord *record, 01374 const OFString &sourceFilename, 01375 const char *defaultValue = "", 01376 const OFBool printWarning = OFFalse); 01377 01387 OFBool compareStringAttributes(DcmItem *dataset, 01388 const DcmTagKey &datKey, 01389 DcmDirectoryRecord *record, 01390 const DcmTagKey &recKey, 01391 const OFString &sourceFilename, 01392 const OFBool errorMsg = OFFalse); 01393 01401 OFBool compareSequenceAttributes(DcmItem *dataset, 01402 DcmTagKey &key, 01403 DcmDirectoryRecord *record, 01404 const OFString &sourceFilename); 01405 01412 void setDefaultValue(DcmDirectoryRecord *record, 01413 const DcmTagKey &key, 01414 const unsigned long number, 01415 const char *prefix = NULL); 01416 01417 01418 private: 01419 01421 DcmDicomDir *DicomDir; 01422 01424 DicomDirImagePlugin *ImagePlugin; 01425 01427 E_ApplicationProfile ApplicationProfile; 01428 01430 OFBool BackupMode; 01432 OFBool AbortMode; 01434 OFBool MapFilenamesMode; 01436 OFBool InventMode; 01438 OFBool InventPatientIDMode; 01440 OFBool RetiredSOPClassSupport; 01442 OFBool EncodingCheck; 01444 OFBool ResolutionCheck; 01446 OFBool TransferSyntaxCheck; 01448 OFBool ConsistencyCheck; 01450 OFBool IconImageMode; 01452 OFBool FilesetUpdateMode; 01453 01455 OFString BackupFilename; 01457 OFBool BackupCreated; 01458 01460 unsigned int IconSize; 01462 OFString IconPrefix; 01464 OFString DefaultIcon; 01465 01467 OFBool RLESupport; 01469 OFBool JPEGSupport; 01471 OFBool JP2KSupport; 01472 01474 unsigned long AutoPatientNumber; 01476 unsigned long AutoStudyNumber; 01478 unsigned long AutoSeriesNumber; 01480 unsigned long AutoInstanceNumber; 01482 unsigned long AutoOverlayNumber; 01484 unsigned long AutoLutNumber; 01486 unsigned long AutoCurveNumber; 01487 01489 DicomDirInterface(const DicomDirInterface &obj); 01490 01492 DicomDirInterface &operator=(const DicomDirInterface &obj); 01493 }; 01494 01495 01496 #endif 01497 01498 01499 /* 01500 * 01501 * CVS/RCS Log: 01502 * $Log: dcddirif.h,v $ 01503 * Revision 1.23 2010-11-05 13:11:11 joergr 01504 * Added support for new directory record types IMPLANT, IMPLANT GROUP and 01505 * IMPLANT ASSY from Supplement 131 (Implant Templates). 01506 * 01507 * Revision 1.22 2010-10-14 13:15:40 joergr 01508 * Updated copyright header. Added reference to COPYRIGHT file. 01509 * 01510 * Revision 1.21 2010-10-04 16:14:53 joergr 01511 * Fixed various Doxygen API documentation issues. 01512 * 01513 * Revision 1.20 2010-10-01 08:09:31 joergr 01514 * Added support for new non-image Storage SOP Classes that require the new 01515 * directory record type MEASUREMENT. Also fixed issues with other record types. 01516 * 01517 * Revision 1.19 2010-09-30 17:18:10 joergr 01518 * Added support for new non-image Storage SOP Classes that require the new 01519 * directory record types PALETTE and SURFACE. Also updated existing records. 01520 * 01521 * Revision 1.18 2010-08-10 11:02:58 uli 01522 * Removed undefined function printFileErrorMessage(). 01523 * 01524 * Revision 1.17 2010-08-09 13:02:56 joergr 01525 * Updated data dictionary to 2009 edition of the DICOM standard. From now on, 01526 * the official "keyword" is used for the attribute name which results in a 01527 * number of minor changes (e.g. "PatientsName" is now called "PatientName"). 01528 * 01529 * Revision 1.16 2009-11-25 13:31:05 joergr 01530 * Adapted code for new approach to access individual frames of a DICOM image. 01531 * 01532 * Revision 1.15 2009-11-04 09:58:07 uli 01533 * Switched to logging mechanism provided by the "new" oflog module 01534 * 01535 * Revision 1.14 2009-01-15 10:16:40 joergr 01536 * Added check whether (possibly required) JPEG 2000 decoder is registered. 01537 * 01538 * Revision 1.13 2008-06-23 12:05:37 joergr 01539 * Added check on value representation of data elements copied from the 01540 * referenced DICOM file to the DICOMDIR (compare VR with data dictionary). 01541 * 01542 * Revision 1.12 2007/02/02 16:01:51 joergr 01543 * Added error message when existing SOP instance is inconsistent with new 01544 * directory record in update mode (e.g. different SOP class UID). 01545 * Fixed incomplete warning message in update mode (filename was missing). 01546 * 01547 * Revision 1.11 2007/01/10 13:02:59 joergr 01548 * Added new option that enables support for retired SOP classes. 01549 * 01550 * Revision 1.10 2006/12/15 14:56:57 joergr 01551 * Added new option that allows to update existing entries in a DICOMDIR. This 01552 * also adds support for mixed media stored application profiles. 01553 * Changed name of enum value for the MPEG2-DVD application profile in order to 01554 * be more consistent with other names. 01555 * Slightly revised handling of type 1, 1C and 2 elements in Directory Records. 01556 * Fixed small bug in cardiac application profiles when checking the ImageType 01557 * (0008,0008). 01558 * 01559 * Revision 1.9 2006/07/27 13:05:05 joergr 01560 * Added support for DICOMDIR record type "STEREOMETRIC" (CP 628). 01561 * 01562 * Revision 1.8 2005/12/15 15:40:48 joergr 01563 * Removed unsused parameter. 01564 * 01565 * Revision 1.7 2005/12/08 16:28:03 meichel 01566 * Changed include path schema for all DCMTK header files 01567 * 01568 * Revision 1.6 2005/10/27 13:31:21 joergr 01569 * Added support for Encapsulated Document, Real World Value Mapping and 01570 * Hanging Protocol objects to DICOMDIR tools. 01571 * 01572 * Revision 1.5 2005/06/13 14:36:41 joergr 01573 * Added new options to disable check on pixel encoding and transfer syntax. 01574 * 01575 * Revision 1.4 2005/03/09 17:53:34 joergr 01576 * Added support for new Media Storage Application Profiles according to DICOM 01577 * PS 3.12-2004. Removed support for non-standard conformant "No profile". 01578 * Added support for UTF-8 for the contents of the fileset descriptor file. 01579 * 01580 * Revision 1.3 2004/02/13 17:36:46 joergr 01581 * Added support for new directory records RAW DATA and SPECTROSCOPY introduced 01582 * with CP 343. 01583 * 01584 * Revision 1.2 2004/02/13 14:11:15 joergr 01585 * Added support for new directory records REGISTRATION and FIDUCIAL introduced 01586 * with supplement 73 (Spatial Registration Storage SOP Classes). 01587 * 01588 * Revision 1.1 2003/08/12 14:35:00 joergr 01589 * Added new interface class for simplified creation of a DICOMDIR. 01590 * 01591 * 01592 */