00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef DSRDOC_H
00036 #define DSRDOC_H
00037
00038 #include "dcmtk/config/osconfig.h"
00039
00040 #include "dcmtk/dcmsr/dsrdoctr.h"
00041 #include "dcmtk/dcmsr/dsrsoprf.h"
00042 #include "dcmtk/dcmsr/dsrcsidl.h"
00043
00044 #include "dcmtk/ofstd/ofstream.h"
00045
00046
00047
00048
00049
00050
00056 class DSRDocument
00057 : protected DSRTypes
00058 {
00059
00060 public:
00061
00062
00063
00068 DSRDocument(const E_DocumentType documentType = DT_BasicTextSR);
00069
00072 virtual ~DSRDocument();
00073
00074
00075
00076
00079 void clear();
00080
00086 OFBool isValid();
00087
00095 OFBool isFinalized() const;
00096
00103 void setLogStream(OFConsole *stream);
00104
00105
00106
00107
00114 OFCondition print(ostream &stream,
00115 const size_t flags = 0);
00116
00135 OFCondition read(DcmItem &dataset,
00136 const size_t flags = 0);
00137
00151 OFCondition write(DcmItem &dataset,
00152 DcmStack *markedItems = NULL);
00153
00165 OFCondition readXML(const OFString &filename,
00166 const size_t flags = 0);
00167
00175 OFCondition writeXML(ostream &stream,
00176 const size_t flags = 0);
00177
00185 OFCondition renderHTML(ostream &stream,
00186 const size_t flags = 0,
00187 const char *styleSheet = NULL);
00188
00193 virtual OFBool containsExtendedCharacters();
00194
00195
00196
00200 E_DocumentType getDocumentType() const;
00201
00205 inline DSRDocumentTree &getTree()
00206 {
00207 return DocumentTree;
00208 }
00209
00217 E_CharacterSet getSpecificCharacterSetType() const;
00218
00223 OFCondition setSpecificCharacterSetType(const E_CharacterSet characterSet);
00224
00229 E_CompletionFlag getCompletionFlag() const;
00230
00235 const char *getCompletionFlagDescription() const;
00236
00242 const OFString &getCompletionFlagDescription(OFString &description) const;
00243
00248 E_VerificationFlag getVerificationFlag() const;
00249
00257 size_t getNumberOfVerifyingObservers();
00258
00273 OFCondition getVerifyingObserver(const size_t idx,
00274 OFString &dateTime,
00275 OFString &observerName,
00276 OFString &organization);
00277
00294 OFCondition getVerifyingObserver(const size_t idx,
00295 OFString &dateTime,
00296 OFString &observerName,
00297 DSRCodedEntryValue &observerCode,
00298 OFString &organization);
00299
00312 DSRSOPInstanceReferenceList &getPredecessorDocuments();
00313
00327 DSRSOPInstanceReferenceList &getIdenticalDocuments();
00328
00343 DSRSOPInstanceReferenceList &getCurrentRequestedProcedureEvidence();
00344
00353 DSRSOPInstanceReferenceList &getPertinentOtherEvidence();
00354
00360 DSRCodingSchemeIdentificationList &getCodingSchemeIdentification();
00361
00362
00363
00364
00365
00369 const char *getModality() const;
00370
00374 const char *getSOPClassUID() const;
00375
00379 const char *getStudyInstanceUID() const;
00380
00384 const char *getSeriesInstanceUID() const;
00385
00389 const char *getSOPInstanceUID() const;
00390
00394 const char *getInstanceCreatorUID() const;
00395
00399 const char *getSpecificCharacterSet() const;
00400
00404 const char *getPatientsName() const;
00405
00409 const char *getPatientsBirthDate() const;
00410
00414 const char *getPatientsSex() const;
00415
00419 const char *getReferringPhysiciansName() const;
00420
00424 const char *getStudyDescription() const;
00425
00429 const char *getSeriesDescription() const;
00430
00434 const char *getManufacturer() const;
00435
00439 const char *getStudyDate() const;
00440
00444 const char *getStudyTime() const;
00445
00449 const char *getInstanceCreationDate() const;
00450
00454 const char *getInstanceCreationTime() const;
00455
00459 const char *getContentDate() const;
00460
00464 const char *getContentTime() const;
00465
00469 const char *getStudyID() const;
00470
00474 const char *getPatientID() const;
00475
00479 const char *getSeriesNumber() const;
00480
00484 const char *getInstanceNumber() const;
00485
00489 const char *getAccessionNumber() const;
00490
00491
00492
00493
00494
00495
00500 const OFString &getModality(OFString &value) const;
00501
00506 const OFString &getSOPClassUID(OFString &value) const;
00507
00512 const OFString &getStudyInstanceUID(OFString &value) const;
00513
00518 const OFString &getSeriesInstanceUID(OFString &value) const;
00519
00524 const OFString &getSOPInstanceUID(OFString &value) const;
00525
00530 const OFString &getInstanceCreatorUID(OFString &value) const;
00531
00536 const OFString &getSpecificCharacterSet(OFString &value) const;
00537
00542 const OFString &getPatientsName(OFString &value) const;
00543
00548 const OFString &getPatientsBirthDate(OFString &value) const;
00549
00554 const OFString &getPatientsSex(OFString &value) const;
00555
00560 const OFString &getReferringPhysiciansName(OFString &value) const;
00561
00566 const OFString &getStudyDescription(OFString &value) const;
00567
00572 const OFString &getSeriesDescription(OFString &value) const;
00573
00578 const OFString &getManufacturer(OFString &value) const;
00579
00584 const OFString &getStudyDate(OFString &value) const;
00585
00590 const OFString &getStudyTime(OFString &value) const;
00591
00596 const OFString &getInstanceCreationDate(OFString &value) const;
00597
00602 const OFString &getInstanceCreationTime(OFString &value) const;
00603
00608 const OFString &getContentDate(OFString &value) const;
00609
00614 const OFString &getContentTime(OFString &value) const;
00615
00620 const OFString &getStudyID(OFString &value) const;
00621
00626 const OFString &getPatientID(OFString &value) const;
00627
00632 const OFString &getSeriesNumber(OFString &value) const;
00633
00638 const OFString &getInstanceNumber(OFString &value) const;
00639
00644 const OFString &getAccessionNumber(OFString &value) const;
00645
00646
00647
00648
00655 OFCondition setSpecificCharacterSet(const OFString &value);
00656
00663 OFCondition setCompletionFlagDescription(const OFString &value);
00664
00670 OFCondition setPatientsName(const OFString &value);
00671
00677 OFCondition setPatientsBirthDate(const OFString &value);
00678
00684 OFCondition setPatientsSex(const OFString &value);
00685
00691 OFCondition setReferringPhysiciansName(const OFString &value);
00692
00698 OFCondition setStudyDescription(const OFString &value);
00699
00705 OFCondition setSeriesDescription(const OFString &value);
00706
00712 OFCondition setManufacturer(const OFString &value);
00713
00721 OFCondition setContentDate(const OFString &value);
00722
00730 OFCondition setContentTime(const OFString &value);
00731
00737 OFCondition setStudyID(const OFString &value);
00738
00744 OFCondition setPatientID(const OFString &value);
00745
00753 OFCondition setSeriesNumber(const OFString &value);
00754
00762 OFCondition setInstanceNumber(const OFString &value);
00763
00769 OFCondition setAccessionNumber(const OFString &value);
00770
00771
00772
00773
00779 void createNewStudy();
00780
00786 void createNewSeries();
00787
00795 OFCondition createNewSeriesInStudy(const OFString &studyUID);
00796
00808 void createNewSOPInstance();
00809
00815 OFCondition createNewDocument();
00816
00823 OFCondition createNewDocument(const E_DocumentType documentType);
00824
00842 OFCondition createRevisedVersion(const OFBool clearList = OFTrue);
00843
00851 OFCondition completeDocument();
00852
00862 OFCondition completeDocument(const OFString &description);
00863
00876 OFCondition verifyDocument(const OFString &observerName,
00877 const OFString &organization);
00878
00889 OFCondition verifyDocument(const OFString &observerName,
00890 const OFString &organization,
00891 const OFString &dateTime );
00892
00906 OFCondition verifyDocument(const OFString &observerName,
00907 const DSRCodedEntryValue &observerCode,
00908 const OFString &organization);
00909
00921 OFCondition verifyDocument(const OFString &observerName,
00922 const DSRCodedEntryValue &observerCode,
00923 const OFString &organization,
00924 const OFString &dateTime );
00925
00933 void removeVerification();
00934
00947 OFCondition finalizeDocument();
00948
00949
00950 protected:
00951
00958 OFCondition readXMLDocumentHeader(DSRXMLDocument &doc,
00959 DSRXMLCursor cursor,
00960 const size_t flags);
00961
00968 OFCondition readXMLPatientData(const DSRXMLDocument &doc,
00969 DSRXMLCursor cursor,
00970 const size_t flags);
00971
00978 OFCondition readXMLStudyData(const DSRXMLDocument &doc,
00979 DSRXMLCursor cursor,
00980 const size_t flags);
00981
00988 OFCondition readXMLSeriesData(const DSRXMLDocument &doc,
00989 DSRXMLCursor cursor,
00990 const size_t flags);
00991
00998 OFCondition readXMLInstanceData(const DSRXMLDocument &doc,
00999 DSRXMLCursor cursor,
01000 const size_t flags);
01001
01008 OFCondition readXMLDocumentData(const DSRXMLDocument &doc,
01009 DSRXMLCursor cursor,
01010 const size_t flags);
01011
01018 OFCondition readXMLVerifyingObserverData(const DSRXMLDocument &doc,
01019 DSRXMLCursor cursor,
01020 const size_t flags);
01021
01026 void renderHTMLPatientData(ostream &stream,
01027 const size_t flags);
01028
01034 void renderHTMLReferenceList(ostream &stream,
01035 DSRSOPInstanceReferenceList &refList,
01036 const size_t flags);
01037
01046 OFCondition checkDatasetForReading(DcmItem &dataset,
01047 E_DocumentType &documentType);
01048
01054 void updateAttributes(const OFBool updateAll = OFTrue);
01055
01056
01057 private:
01058
01060 DSRDocumentTree DocumentTree;
01061
01063 OFConsole *LogStream;
01064
01066 OFBool FinalizedFlag;
01068 E_CompletionFlag CompletionFlagEnum;
01070 E_VerificationFlag VerificationFlagEnum;
01072 E_CharacterSet SpecificCharacterSetEnum;
01073
01074
01075
01076
01077
01078
01079
01080
01081
01083 DcmUniqueIdentifier SOPClassUID;
01085 DcmUniqueIdentifier SOPInstanceUID;
01087 DcmCodeString SpecificCharacterSet;
01089 DcmDate InstanceCreationDate;
01091 DcmTime InstanceCreationTime;
01093 DcmUniqueIdentifier InstanceCreatorUID;
01095 DSRCodingSchemeIdentificationList CodingSchemeIdentification;
01096
01097
01098
01100 DcmUniqueIdentifier StudyInstanceUID;
01102 DcmDate StudyDate;
01104 DcmTime StudyTime;
01106 DcmPersonName ReferringPhysiciansName;
01108 DcmShortString StudyID;
01110 DcmShortString AccessionNumber;
01112 DcmLongString StudyDescription;
01113
01114
01115
01116
01118 DcmLongString SeriesDescription;
01119
01120
01121
01123 DcmPersonName PatientsName;
01125 DcmLongString PatientID;
01127 DcmDate PatientsBirthDate;
01129 DcmCodeString PatientsSex;
01130
01131
01132
01134 DcmLongString Manufacturer;
01135
01136
01137
01138
01139
01140
01141
01143 DcmCodeString Modality;
01145 DcmUniqueIdentifier SeriesInstanceUID;
01147 DcmIntegerString SeriesNumber;
01149 DcmSequenceOfItems ReferencedPerformedProcedureStepSequence;
01150
01151
01152
01154 DcmIntegerString InstanceNumber;
01156 DcmCodeString CompletionFlag;
01158 DcmLongString CompletionFlagDescription;
01160 DcmCodeString VerificationFlag;
01162 DcmDate ContentDate;
01164 DcmTime ContentTime;
01166 DcmSequenceOfItems VerifyingObserver;
01168 DSRSOPInstanceReferenceList PredecessorDocuments;
01170 DSRSOPInstanceReferenceList IdenticalDocuments;
01171
01172
01174 DcmSequenceOfItems PerformedProcedureCode;
01176 DSRSOPInstanceReferenceList CurrentRequestedProcedureEvidence;
01178 DSRSOPInstanceReferenceList PertinentOtherEvidence;
01179
01180
01181
01182 DSRDocument(const DSRDocument &);
01183 DSRDocument &operator=(const DSRDocument &);
01184 };
01185
01186
01187 #endif
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211
01212
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259
01260
01261
01262
01263
01264
01265
01266
01267
01268
01269
01270
01271
01272
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284
01285
01286
01287
01288
01289
01290
01291
01292
01293
01294
01295
01296
01297
01298
01299
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330
01331
01332
01333