Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

dcddirif.h

00001 /*
00002  *
00003  *  Copyright (C) 2002-2004, OFFIS
00004  *
00005  *  This software and supporting documentation were developed by
00006  *
00007  *    Kuratorium OFFIS e.V.
00008  *    Healthcare Information and Communication Systems
00009  *    Escherweg 2
00010  *    D-26121 Oldenburg, Germany
00011  *
00012  *  THIS SOFTWARE IS MADE AVAILABLE,  AS IS,  AND OFFIS MAKES NO  WARRANTY
00013  *  REGARDING  THE  SOFTWARE,  ITS  PERFORMANCE,  ITS  MERCHANTABILITY  OR
00014  *  FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES  OR
00015  *  ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND
00016  *  PERFORMANCE OF THE SOFTWARE IS WITH THE USER.
00017  *
00018  *  Module:  dcmdata
00019  *
00020  *  Author:  Joerg Riesmeier
00021  *
00022  *  Purpose: Interface class for simplified creation of a DICOMDIR
00023  *
00024  *  Last Update:      $Author: joergr $
00025  *  Update Date:      $Date: 2004/02/13 17:36:46 $
00026  *  CVS/RCS Revision: $Revision: 1.3 $
00027  *  Status:           $State: Exp $
00028  *
00029  *  CVS/RCS Log at end of file
00030  *
00031  */
00032 
00033 
00034 #ifndef DCDDIRIF_H
00035 #define DCDDIRIF_H
00036 
00037 #include "osconfig.h"
00038 
00039 #include "dcdicdir.h"
00040 
00041 
00042 /*-----------------------------------*
00043  *  contant declarations and macros  *
00044  *-----------------------------------*/
00045 
00046 // default fileset ID
00047 #define DEFAULT_FILESETID "DCMTK_MEDIA_DEMO"
00048 // default specific character set of fileset descriptor file
00049 #define DEFAULT_DESCRIPTOR_CHARSET "ISO_IR 100"
00050 
00051 
00052 /*----------------------*
00053  *  class declarations  *
00054  *----------------------*/
00055 
00061 class DicomDirImagePlugin
00062 {
00063   public:
00064 
00067     virtual ~DicomDirImagePlugin() {}
00068 
00079     virtual OFBool scaleData(const Uint8 *srcData,
00080                              const unsigned int srcWidth,
00081                              const unsigned int srcHeight,
00082                              Uint8 *dstData,
00083                              const unsigned int dstWidth,
00084                              const unsigned int dstHeight) const = 0;
00085 
00096     virtual OFBool scaleImage(DcmItem *dataset,
00097                               Uint8 *pixel,
00098                               const unsigned long count,
00099                               const unsigned long frame,
00100                               const unsigned int width,
00101                               const unsigned int height) const = 0;
00102 
00103   protected:
00104 
00107     DicomDirImagePlugin() {}
00108 };
00109 
00110 
00113 class DicomDirInterface
00114 {
00115 
00116   public:
00117 
00120     enum E_ApplicationProfile
00121     {
00123         AP_None,
00125         AP_GeneralPurpose,
00127         AP_Default = AP_GeneralPurpose,
00129         AP_BasicCardiac,
00131         AP_XrayAngiographic,
00133         AP_CTandMR,
00135         AP_UltrasoundIDSF,
00137         AP_UltrasoundSCSF,
00139         AP_UltrasoundCCSF,
00141         AP_UltrasoundIDMF,
00143         AP_UltrasoundSCMF,
00145         AP_UltrasoundCCMF,
00147         AP_TwelveLeadECG,
00149         AP_HemodynamicWaveform
00150     };
00151 
00156     DicomDirInterface();
00157 
00161     virtual ~DicomDirInterface();
00162 
00166     void cleanup();
00167 
00172     OFBool isDicomDirValid() const;
00173 
00185     OFCondition createNewDicomDir(const E_ApplicationProfile profile = AP_GeneralPurpose,
00186                                   const char *filename = DEFAULT_DICOMDIR_NAME,
00187                                   const char *filesetID = DEFAULT_FILESETID);
00188 
00200     OFCondition appendToDicomDir(const E_ApplicationProfile profile,
00201                                  const char *filename);
00202 
00209     OFCondition writeDicomDir(const E_EncodingType encodingType = EET_UndefinedLength,
00210                               const E_GrpLenEncoding groupLength = EGL_withoutGL);
00211 
00221     OFBool isFilenameValid(const char *filename,
00222                            const OFBool allowEmpty = OFFalse);
00223 
00231     OFBool isCharsetValid(const char *charset);
00232 
00243     OFCondition checkDicomFile(const char *filename,
00244                                const char *directory = NULL);
00245 
00255     OFCondition addDicomFile(const char *filename,
00256                              const char *directory = NULL);
00257 
00267     OFCondition setFilesetDescriptor(const char *filename,
00268                                      const char *charset = DEFAULT_DESCRIPTOR_CHARSET);
00269 
00276     OFCondition setIconSize(const unsigned int size);
00277 
00286     OFCondition setIconPrefix(const char *prefix);
00287 
00295     OFCondition setDefaultIcon(const char *filename);
00296 
00300     OFBool verboseMode() const
00301     {
00302         return VerboseMode;
00303     }
00304 
00309     OFBool abortMode() const
00310     {
00311         return AbortMode;
00312     }
00313 
00318     OFBool mapFilenamesMode() const
00319     {
00320         return MapFilenamesMode;
00321     }
00322 
00327     OFBool inventMode() const
00328     {
00329         return InventMode;
00330     }
00331 
00336     OFBool inventPatientIDMode() const
00337     {
00338         return InventPatientIDMode;
00339     }
00340 
00345     OFBool iconImageMode() const
00346     {
00347         return IconImageMode;
00348     }
00349 
00354     OFBool backupMode() const
00355     {
00356         return BackupMode;
00357     }
00358 
00363     OFBool resolutionCheck() const
00364     {
00365         return ResolutionCheck;
00366     }
00367 
00372     OFBool consistencyCheck() const
00373     {
00374         return ConsistencyCheck;
00375     }
00376 
00384     OFBool enableVerboseMode(const OFBool newMode = OFTrue);
00385 
00393     OFBool enableAbortMode(const OFBool newMode = OFTrue);
00394 
00402     OFBool enableMapFilenamesMode(const OFBool newMode = OFTrue);
00403 
00411     OFBool enableInventMode(const OFBool newMode = OFTrue);
00412 
00421     OFBool enableInventPatientIDMode(const OFBool newMode = OFTrue);
00422 
00432     OFBool enableIconImageMode(const OFBool newMode = OFTrue);
00433 
00442     OFBool disableBackupMode(const OFBool newMode = OFFalse);
00443 
00453     OFBool disableResolutionCheck(const OFBool newMode = OFFalse);
00454 
00463     OFBool disableConsistencyCheck(const OFBool newMode = OFFalse);
00464 
00471     OFBool addImageSupport(DicomDirImagePlugin *plugin);
00472 
00477     void setLogStream(OFConsole *stream);
00478 
00479     /* -- static function -- */
00480 
00485     static const char *getProfileName(const E_ApplicationProfile profile);
00486 
00487 
00488   protected:
00489 
00494     OFCondition selectApplicationProfile(const E_ApplicationProfile profile);
00495 
00502     OFCondition loadAndCheckDicomFile(const char *filename,
00503                                       const char *directory,
00504                                       DcmFileFormat &fileformat);
00505 
00512     OFCondition checkSOPClassAndXfer(DcmMetaInfo *metainfo,
00513                                      DcmItem *dataset,
00514                                      const char *filename);
00515 
00521     OFCondition checkBasicCardiacAttributes(DcmItem *dataset,
00522                                             const char *filename);
00523 
00530     OFCondition checkXrayAngiographicAttributes(DcmItem *dataset,
00531                                                 const OFString &sopClass,
00532                                                 const char *filename);
00533 
00540     OFCondition checkCTandMRAttributes(DcmItem *dataset,
00541                                        const OFString &sopClass,
00542                                        const char *filename);
00543 
00550     OFCondition checkUltrasoundAttributes(DcmItem *dataset,
00551                                           const OFString &transferSyntax,
00552                                           const char *filename);
00553 
00560     OFCondition checkMandatoryAttributes(DcmMetaInfo *metainfo,
00561                                          DcmItem *dataset,
00562                                          const char *filename);
00563 
00573     OFBool recordMatchesDataset(DcmDirectoryRecord *record,
00574                                 DcmItem *dataset);
00575 
00582     DcmDirectoryRecord *findExistingRecord(DcmDirectoryRecord *parent,
00583                                            const E_DirRecType recordType,
00584                                            DcmItem* dataset);
00585 
00591     DcmDirectoryRecord *buildPatientRecord(DcmItem *dataset,
00592                                            const OFString &sourceFilename);
00593 
00599     DcmDirectoryRecord *buildStudyRecord(DcmItem *dataset,
00600                                          const OFString &sourceFilename);
00601 
00607     DcmDirectoryRecord *buildSeriesRecord(DcmItem *dataset,
00608                                           const OFString &sourceFilename);
00609 
00616     DcmDirectoryRecord *buildOverlayRecord(DcmItem *dataset,
00617                                            const OFString &referencedFileID,
00618                                            const OFString &sourceFilename);
00619 
00626     DcmDirectoryRecord *buildModalityLutRecord(DcmItem *dataset,
00627                                                const OFString &referencedFileID,
00628                                                const OFString &sourceFilename);
00629 
00636     DcmDirectoryRecord *buildVoiLutRecord(DcmItem *dataset,
00637                                           const OFString &referencedFileID,
00638                                           const OFString &sourceFilename);
00639 
00646     DcmDirectoryRecord *buildCurveRecord(DcmItem *dataset,
00647                                          const OFString &referencedFileID,
00648                                          const OFString &sourceFilename);
00649 
00656     DcmDirectoryRecord *buildStructReportRecord(DcmItem *dataset,
00657                                                 const OFString &referencedFileID,
00658                                                 const OFString &sourceFilename);
00659 
00666     DcmDirectoryRecord *buildPresentationRecord(DcmItem *dataset,
00667                                                 const OFString &referencedFileID,
00668                                                 const OFString &sourceFilename);
00669 
00676     DcmDirectoryRecord *buildWaveformRecord(DcmItem *dataset,
00677                                             const OFString &referencedFileID,
00678                                             const OFString &sourceFilename);
00679 
00686     DcmDirectoryRecord *buildRTDoseRecord(DcmItem *dataset,
00687                                           const OFString &referencedFileID,
00688                                           const OFString &sourceFilename);
00689 
00696     DcmDirectoryRecord *buildRTStructureSetRecord(DcmItem *dataset,
00697                                                   const OFString &referencedFileID,
00698                                                   const OFString &sourceFilename);
00699 
00706     DcmDirectoryRecord *buildRTPlanRecord(DcmItem *dataset,
00707                                           const OFString &referencedFileID,
00708                                           const OFString &sourceFilename);
00709 
00716     DcmDirectoryRecord *buildRTTreatmentRecord(DcmItem *dataset,
00717                                                const OFString &referencedFileID,
00718                                                const OFString &sourceFilename);
00719 
00726     DcmDirectoryRecord *buildStoredPrintRecord(DcmItem *dataset,
00727                                                const OFString &referencedFileID,
00728                                                const OFString &sourceFilename);
00729 
00736     DcmDirectoryRecord *buildKeyObjectDocRecord(DcmItem *dataset,
00737                                                 const OFString &referencedFileID,
00738                                                 const OFString &sourceFilename);
00739 
00746     DcmDirectoryRecord *buildRegistrationRecord(DcmItem *dataset,
00747                                                 const OFString &referencedFileID,
00748                                                 const OFString &sourceFilename);
00749 
00756     DcmDirectoryRecord *buildFiducialRecord(DcmItem *dataset,
00757                                             const OFString &referencedFileID,
00758                                             const OFString &sourceFilename);
00759 
00766     DcmDirectoryRecord *buildRawDataRecord(DcmItem *dataset,
00767                                            const OFString &referencedFileID,
00768                                            const OFString &sourceFilename);
00769 
00776     DcmDirectoryRecord *buildSpectroscopyRecord(DcmItem *dataset,
00777                                                 const OFString &referencedFileID,
00778                                                 const OFString &sourceFilename);
00779 
00786     DcmDirectoryRecord *buildImageRecord(DcmItem *dataset,
00787                                          const OFString &referencedFileID,
00788                                          const OFString &sourceFilename);
00789 
00800     OFBool getIconFromFile(const OFString &filename,
00801                            Uint8 *pixel,
00802                            const unsigned long count,
00803                            const unsigned int width,
00804                            const unsigned int height);
00805 
00815     OFBool getIconFromDataset(DcmItem *dataset,
00816                               Uint8 *pixel,
00817                               const unsigned long count,
00818                               const unsigned int width,
00819                               const unsigned int height);
00820 
00831     OFCondition addIconImage(DcmDirectoryRecord *record,
00832                              DcmItem *dataset,
00833                              const unsigned int size,
00834                              const OFString &sourceFilename);
00835 
00845     DcmDirectoryRecord *addRecord(DcmDirectoryRecord *parent,
00846                                   const E_DirRecType recordType,
00847                                   DcmItem *dataset,
00848                                   const OFString &referencedFileID,
00849                                   const OFString &sourceFilename);
00850 
00856     void inventMissingAttributes(DcmDirectoryRecord *parent,
00857                                  const OFBool recurse = OFTrue);
00858 
00862     void inventMissingStudyLevelAttributes(DcmDirectoryRecord *parent);
00863 
00867     void inventMissingSeriesLevelAttributes(DcmDirectoryRecord *parent);
00868 
00872     void inventMissingInstanceLevelAttributes(DcmDirectoryRecord *parent);
00873 
00877     void createDicomDirBackup(const char *filename);
00878 
00881     void deleteDicomDirBackup();
00882 
00887     void printMessage(const char *message,
00888                       const char *suffix = NULL);
00889 
00895     void printWarningMessage(const char *message,
00896                              const char *suffix = NULL);
00897 
00903     void printErrorMessage(const char *message,
00904                            const char *suffix = NULL);
00905 
00913     void printUnexpectedValueMessage(const DcmTagKey &key,
00914                                      const char *filename = NULL,
00915                                      const OFBool errorMsg = OFTrue);
00916 
00924     void printRequiredAttributeMessage(const DcmTagKey &key,
00925                                        const char *filename = NULL,
00926                                        const OFBool emptyMsg = OFFalse);
00927 
00935     void printAttributeErrorMessage(const DcmTagKey &key,
00936                                     const OFCondition &error,
00937                                     const char *operation);
00938 
00946     void printRecordErrorMessage(const OFCondition &error,
00947                                  const E_DirRecType recordType,
00948                                  const char *operation);
00949 
00956     void printFileErrorMessage(const OFCondition &error,
00957                                const char *operation,
00958                                const char *filename);
00959 
00965     OFBool copyFile(const char *fromFilename,
00966                     const char *toFilename);
00967 
00975     OFBool warnAboutInconsistantAttributes(DcmDirectoryRecord *record,
00976                                            DcmItem *dataset,
00977                                            const OFString &sourceFilename,
00978                                            const OFBool abortCheck = OFFalse);
00979 
00984     OFBool checkFilesetID(const OFString &filesetID);
00985 
00992     OFBool checkExists(DcmItem *dataset,
00993                        const DcmTagKey &key,
00994                        const char *filename = NULL);
00995 
01002     OFBool checkExistsWithValue(DcmItem *dataset,
01003                                 const DcmTagKey &key,
01004                                 const char *filename = NULL);
01005 
01013     OFBool checkExistsWithStringValue(DcmItem *dataset,
01014                                       const DcmTagKey &key,
01015                                       const OFString &value,
01016                                       const char *filename = NULL);
01017 
01025     OFBool checkExistsWithIntegerValue(DcmItem *dataset,
01026                                        const DcmTagKey &key,
01027                                        const long value,
01028                                        const char *filename = NULL);
01029 
01039     OFBool checkExistsWithMinMaxValue(DcmItem *dataset,
01040                                       const DcmTagKey &key,
01041                                       const long min,
01042                                       const long max,
01043                                       const char *filename = NULL,
01044                                       const OFBool reject = OFTrue);
01045 
01053     OFString &getStringFromDataset(DcmItem *dataset,
01054                                    const DcmTagKey &key,
01055                                    OFString &result,
01056                                    OFBool searchIntoSub = OFFalse);
01057 
01065     OFString &getStringFromFile(const char *filename,
01066                                 const DcmTagKey &key,
01067                                 OFString &result,
01068                                 OFBool searchIntoSub = OFFalse);
01069 
01076     void copyElement(DcmItem *dataset,
01077                      const DcmTagKey &key,
01078                      DcmDirectoryRecord *record,
01079                      const OFBool optional = OFFalse);
01080 
01089     void copyStringWithDefault(DcmItem *dataset,
01090                                const DcmTagKey &key,
01091                                DcmDirectoryRecord *record,
01092                                const char *defaultValue = "",
01093                                const OFBool printWarning = OFFalse);
01094 
01102     OFBool compareStringAttributes(DcmItem *dataset,
01103                                    DcmTagKey &key,
01104                                    DcmDirectoryRecord *record,
01105                                    const OFString &sourceFilename);
01106 
01114     OFBool compareSequenceAttributes(DcmItem *dataset,
01115                                      DcmTagKey &key,
01116                                      DcmDirectoryRecord *record,
01117                                      const OFString &sourceFilename);
01118 
01125     void setDefaultValue(DcmDirectoryRecord *record,
01126                          const DcmTagKey &key,
01127                          const unsigned long number,
01128                          const char *prefix = NULL);
01129 
01130 
01131   private:
01132 
01134     OFConsole *LogStream;
01135 
01137     DcmDicomDir *DicomDir;
01138 
01140     DicomDirImagePlugin *ImagePlugin;
01141 
01143     E_ApplicationProfile ApplicationProfile;
01144 
01146     OFBool VerboseMode;
01148     OFBool BackupMode;
01150     OFBool AbortMode;
01152     OFBool MapFilenamesMode;
01154     OFBool InventMode;
01156     OFBool InventPatientIDMode;
01158     OFBool ResolutionCheck;
01160     OFBool ConsistencyCheck;
01162     OFBool IconImageMode;
01163 
01165     OFString BackupFilename;
01167     OFBool BackupCreated;
01168 
01170     unsigned int IconSize;
01172     OFString IconPrefix;
01174     OFString DefaultIcon;
01175 
01177     OFBool JPEGSupport;
01179     OFBool RLESupport;
01180 
01182     unsigned long AutoPatientNumber;
01184     unsigned long AutoStudyNumber;
01186     unsigned long AutoSeriesNumber;
01188     unsigned long AutoInstanceNumber;
01190     unsigned long AutoOverlayNumber;
01192     unsigned long AutoLutNumber;
01194     unsigned long AutoCurveNumber;
01195 
01197     DicomDirInterface(const DicomDirInterface &obj);
01198 
01200     DicomDirInterface &operator=(const DicomDirInterface &obj);
01201 };
01202 
01203 
01204 #endif
01205 
01206 
01207 /*
01208  *
01209  * CVS/RCS Log:
01210  * $Log: dcddirif.h,v $
01211  * Revision 1.3  2004/02/13 17:36:46  joergr
01212  * Added support for new directory records RAW DATA and SPECTROSCOPY introduced
01213  * with CP 343.
01214  *
01215  * Revision 1.2  2004/02/13 14:11:15  joergr
01216  * Added support for new directory records REGISTRATION and FIDUCIAL introduced
01217  * with supplement 73 (Spatial Registration Storage SOP Classes).
01218  *
01219  * Revision 1.1  2003/08/12 14:35:00  joergr
01220  * Added new interface class for simplified creation of a DICOMDIR.
01221  *
01222  *
01223  *
01224  */


Generated on 8 Dec 2004 for OFFIS DCMTK Version 3.5.3 by Doxygen 1.3.9.1