OFFIS DCMTK  Version 3.6.0
dsrdoc.h
1 /*
2  *
3  * Copyright (C) 2000-2010, OFFIS e.V.
4  * All rights reserved. See COPYRIGHT file for details.
5  *
6  * This software and supporting documentation were developed by
7  *
8  * OFFIS e.V.
9  * R&D Division Health
10  * Escherweg 2
11  * D-26121 Oldenburg, Germany
12  *
13  *
14  * Module: dcmsr
15  *
16  * Author: Joerg Riesmeier
17  *
18  * Purpose:
19  * classes: DSRDocument
20  *
21  * Last Update: $Author: joergr $
22  * Update Date: $Date: 2010-10-14 13:16:32 $
23  * CVS/RCS Revision: $Revision: 1.53 $
24  * Status: $State: Exp $
25  *
26  * CVS/RCS Log at end of file
27  *
28  */
29 
30 
31 #ifndef DSRDOC_H
32 #define DSRDOC_H
33 
34 #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
35 
36 #include "dcmtk/dcmsr/dsrdoctr.h"
37 #include "dcmtk/dcmsr/dsrsoprf.h"
38 #include "dcmtk/dcmsr/dsrcsidl.h"
39 
40 #include "dcmtk/ofstd/ofstream.h"
41 
42 
43 /*---------------------*
44  * class declaration *
45  *---------------------*/
46 
53  : protected DSRTypes
54 {
55 
56  public:
57 
58  // --- constructors and destructor ---
59 
64  DSRDocument(const E_DocumentType documentType = DT_BasicTextSR);
65 
68  virtual ~DSRDocument();
69 
70 
71  // --- misc routines ---
72 
75  void clear();
76 
82  OFBool isValid();
83 
91  OFBool isFinalized() const;
92 
93 
94  // --- input and output ---
95 
102  OFCondition print(STD_NAMESPACE ostream &stream,
103  const size_t flags = 0);
104 
123  OFCondition read(DcmItem &dataset,
124  const size_t flags = 0);
125 
139  OFCondition write(DcmItem &dataset,
140  DcmStack *markedItems = NULL);
141 
152  OFCondition readXML(const OFString &filename,
153  const size_t flags = 0);
154 
162  OFCondition writeXML(STD_NAMESPACE ostream &stream,
163  const size_t flags = 0);
164 
172  OFCondition renderHTML(STD_NAMESPACE ostream &stream,
173  const size_t flags = 0,
174  const char *styleSheet = NULL);
175 
176 
177  // --- get/set misc attributes ---
178 
183 
188  {
189  return DocumentTree;
190  }
191 
200 
206 
212 
218 
223  const char *getCompletionFlagDescription() const;
224 
230  const OFString &getCompletionFlagDescription(OFString &description) const;
231 
237 
246 
261  OFCondition getVerifyingObserver(const size_t idx,
262  OFString &dateTime,
263  OFString &observerName,
264  OFString &organization);
265 
282  OFCondition getVerifyingObserver(const size_t idx,
283  OFString &dateTime,
284  OFString &observerName,
285  DSRCodedEntryValue &observerCode,
286  OFString &organization);
287 
301 
316 
332 
342 
349 
350 
351  // --- get DICOM string attributes (C string) ---
352  // --- (these functions return the whole string value,
353  // --- i.e. all components of multi-valued attributes)
354 
358  const char *getModality() const;
359 
363  const char *getSOPClassUID() const;
364 
368  const char *getStudyInstanceUID() const;
369 
373  const char *getSeriesInstanceUID() const;
374 
378  const char *getSOPInstanceUID() const;
379 
383  const char *getInstanceCreatorUID() const;
384 
388  const char *getSpecificCharacterSet() const;
389 
393  const char *getPatientName() const;
394 
398  const char *getPatientBirthDate() const;
399 
403  const char *getPatientSex() const;
404 
408  const char *getReferringPhysicianName() const;
409 
413  const char *getStudyDescription() const;
414 
418  const char *getSeriesDescription() const;
419 
423  const char *getManufacturer() const;
424 
428  const char *getManufacturerModelName() const;
429 
433  const char *getDeviceSerialNumber() const;
434 
438  const char *getSoftwareVersions() const;
439 
443  const char *getStudyDate() const;
444 
448  const char *getStudyTime() const;
449 
453  const char *getInstanceCreationDate() const;
454 
458  const char *getInstanceCreationTime() const;
459 
463  const char *getContentDate() const;
464 
468  const char *getContentTime() const;
469 
473  const char *getStudyID() const;
474 
478  const char *getPatientID() const;
479 
483  const char *getSeriesNumber() const;
484 
488  const char *getInstanceNumber() const;
489 
493  const char *getAccessionNumber() const;
494 
495 
496  // --- get DICOM string attributes (C++ string) ---
497  // --- (these functions return only the first
498  // --- component of multi-valued attributes)
499 
504  const OFString &getModality(OFString &value) const;
505 
510  const OFString &getSOPClassUID(OFString &value) const;
511 
516  const OFString &getStudyInstanceUID(OFString &value) const;
517 
522  const OFString &getSeriesInstanceUID(OFString &value) const;
523 
528  const OFString &getSOPInstanceUID(OFString &value) const;
529 
534  const OFString &getInstanceCreatorUID(OFString &value) const;
535 
540  const OFString &getSpecificCharacterSet(OFString &value) const;
541 
546  const OFString &getPatientName(OFString &value) const;
547 
552  const OFString &getPatientBirthDate(OFString &value) const;
553 
558  const OFString &getPatientSex(OFString &value) const;
559 
564  const OFString &getReferringPhysicianName(OFString &value) const;
565 
570  const OFString &getStudyDescription(OFString &value) const;
571 
576  const OFString &getSeriesDescription(OFString &value) const;
577 
582  const OFString &getManufacturer(OFString &value) const;
583 
588  const OFString &getManufacturerModelName(OFString &value) const;
589 
594  const OFString &getDeviceSerialNumber(OFString &value) const;
595 
600  const OFString &getSoftwareVersions(OFString &value) const;
601 
606  const OFString &getStudyDate(OFString &value) const;
607 
612  const OFString &getStudyTime(OFString &value) const;
613 
618  const OFString &getInstanceCreationDate(OFString &value) const;
619 
624  const OFString &getInstanceCreationTime(OFString &value) const;
625 
630  const OFString &getContentDate(OFString &value) const;
631 
636  const OFString &getContentTime(OFString &value) const;
637 
642  const OFString &getStudyID(OFString &value) const;
643 
648  const OFString &getPatientID(OFString &value) const;
649 
654  const OFString &getSeriesNumber(OFString &value) const;
655 
660  const OFString &getInstanceNumber(OFString &value) const;
661 
666  const OFString &getAccessionNumber(OFString &value) const;
667 
668 
669  // --- set DICOM string attributes ---
670 
678 
686 
694 
700  OFCondition setPatientName(const OFString &value);
701 
708 
714  OFCondition setPatientSex(const OFString &value);
715 
722 
729 
736 
742  OFCondition setManufacturer(const OFString &value);
743 
750 
757 
764 
772  OFCondition setContentDate(const OFString &value);
773 
781  OFCondition setContentTime(const OFString &value);
782 
788  OFCondition setStudyID(const OFString &value);
789 
795  OFCondition setPatientID(const OFString &value);
796 
804  OFCondition setSeriesNumber(const OFString &value);
805 
813  OFCondition setInstanceNumber(const OFString &value);
814 
821 
822 
823  // --- document management functions ---
824 
830  void createNewStudy();
831 
837  void createNewSeries();
838 
847 
859  void createNewSOPInstance();
860 
867 
874  OFCondition createNewDocument(const E_DocumentType documentType);
875 
893  OFCondition createRevisedVersion(const OFBool clearList = OFTrue);
894 
903 
913  OFCondition completeDocument(const OFString &description);
914 
927  OFCondition verifyDocument(const OFString &observerName,
928  const OFString &organization);
929 
940  OFCondition verifyDocument(const OFString &observerName,
941  const OFString &organization,
942  const OFString &dateTime /*= ""*/);
943 
957  OFCondition verifyDocument(const OFString &observerName,
958  const DSRCodedEntryValue &observerCode,
959  const OFString &organization);
960 
972  OFCondition verifyDocument(const OFString &observerName,
973  const DSRCodedEntryValue &observerCode,
974  const OFString &organization,
975  const OFString &dateTime /*= ""*/);
976 
984  void removeVerification();
985 
1000 
1001 
1002  protected:
1003 
1011  DSRXMLCursor cursor,
1012  const size_t flags);
1013 
1021  DSRXMLCursor cursor,
1022  const size_t flags);
1023 
1031  DSRXMLCursor cursor,
1032  const size_t flags);
1033 
1041  DSRXMLCursor cursor,
1042  const size_t flags);
1043 
1051  DSRXMLCursor cursor,
1052  const size_t flags);
1053 
1061  DSRXMLCursor cursor,
1062  const size_t flags);
1063 
1071  DSRXMLCursor cursor,
1072  const size_t flags);
1073 
1078  void renderHTMLPatientData(STD_NAMESPACE ostream &stream,
1079  const size_t flags);
1080 
1086  void renderHTMLReferenceList(STD_NAMESPACE ostream &stream,
1087  DSRSOPInstanceReferenceList &refList,
1088  const size_t flags);
1089 
1099  E_DocumentType &documentType);
1100 
1106  void updateAttributes(const OFBool updateAll = OFTrue);
1107 
1108 
1109  private:
1110 
1113 
1124 
1125  // DICOM attributes are listed ordered by module.
1126  // The comments for each attribute describe "Name: (VR, VM, Type)".
1127  // Please note that for particular SR documents (e.g. Key Object Selection)
1128  // other rules might apply. See DICOM standard for further reference.
1129 
1130  // --- SOP Common Module (M) ---
1131  // (see SR Document General Module)
1132 
1147 
1148  // --- General Study Module (M) ---
1149 
1164 
1165  // --- Patient Module (M) ---
1166 
1175 
1176  // --- General Equipment Module (M) ---
1177 
1186 
1187  // --- Enhanced General Equipment Module (M - for some IODs) ---
1188 
1189  // Manufacturer: (LO, 1, 1)
1190  // - see 'General Equipment Module'
1192  // - see 'General Equipment Module'
1194  // - see 'General Equipment Module'
1196  // - see 'General Equipment Module'
1197 
1198  // --- Frame of Reference (C) ---
1199 
1200  // tbd: conditional module for X-Ray Radiation Dose SR not yet supported
1201 
1202  // --- SR Document Series Module (M) ---
1203 
1214 
1215  // --- SR Document General Module (M) ---
1216 
1237  // Referenced Request Sequence: (SQ, 1, 1C)
1238  // -- not yet supported --
1245 
1246  // --- declaration of copy constructor and assignment operator ---
1247 
1248  DSRDocument(const DSRDocument &);
1249  DSRDocument &operator=(const DSRDocument &);
1250 };
1251 
1252 
1253 #endif
1254 
1255 
1256 /*
1257  * CVS/RCS Log:
1258  * $Log: dsrdoc.h,v $
1259  * Revision 1.53 2010-10-14 13:16:32 joergr
1260  * Updated copyright header. Added reference to COPYRIGHT file.
1261  *
1262  * Revision 1.52 2010-09-30 08:49:40 joergr
1263  * Fixed incomplete comment.
1264  *
1265  * Revision 1.51 2010-09-29 15:07:06 joergr
1266  * Enhanced comments on attributes from Enhanced General Equipment Module.
1267  *
1268  * Revision 1.50 2010-09-29 10:07:12 joergr
1269  * Added support for the recently introduced, optional PreliminaryFlag.
1270  *
1271  * Revision 1.49 2010-09-28 16:26:43 joergr
1272  * Added support for Enhanced General Equipment Module which is required for
1273  * both X-Ray Radiation Dose SR and Colon CAD SR.
1274  *
1275  * Revision 1.48 2010-08-09 13:26:25 joergr
1276  * Updated data dictionary to 2009 edition of the DICOM standard. From now on,
1277  * the official "keyword" is used for the attribute name which results in a
1278  * number of minor changes (e.g. "PatientsName" is now called "PatientName").
1279  *
1280  * Revision 1.47 2010-07-01 13:40:33 joergr
1281  * Moved SeriesDescription (0008,103E) from General Series to SR Document Series
1282  * Module (according to CP 703).
1283  *
1284  * Revision 1.46 2009-10-13 14:57:50 uli
1285  * Switched to logging mechanism provided by the "new" oflog module.
1286  *
1287  * Revision 1.45 2009-04-21 08:32:38 joergr
1288  * Fixed typo.
1289  *
1290  * Revision 1.44 2007/11/15 16:33:30 joergr
1291  * Added support for output in XHTML 1.1 format.
1292  *
1293  * Revision 1.43 2006/12/06 11:50:42 joergr
1294  * Updated various citations according to the latest version of the DICOM
1295  * standard (incl. CP 584). Removed references to a particular edition of the
1296  * standard.
1297  *
1298  * Revision 1.42 2006/08/15 16:40:03 meichel
1299  * Updated the code in module dcmsr to correctly compile when
1300  * all standard C++ classes remain in namespace std.
1301  *
1302  * Revision 1.41 2006/07/25 13:19:53 joergr
1303  * Renamed member variable "ReferencedPerformedProcedureStepSequence" to
1304  * "ReferencedPerformedProcedureStep" for consistency reasons.
1305  *
1306  * Revision 1.40 2006/06/01 15:23:14 joergr
1307  * Removed explicit reference to a particular edition of the DICOM standard.
1308  *
1309  * Revision 1.39 2006/05/11 09:18:21 joergr
1310  * Moved containsExtendedCharacters() from dcmsr to dcmdata module.
1311  *
1312  * Revision 1.38 2005/12/08 16:04:59 meichel
1313  * Changed include path schema for all DCMTK header files
1314  *
1315  * Revision 1.37 2005/11/30 12:00:24 joergr
1316  * Added support for X-Ray Radiation Dose SR documents.
1317  *
1318  * Revision 1.36 2005/07/27 16:41:55 joergr
1319  * Updated reference to DICOM standard edition.
1320  *
1321  * Revision 1.35 2004/11/22 16:39:09 meichel
1322  * Added method that checks if the SR document contains non-ASCII characters
1323  * in any of the strings affected by SpecificCharacterSet.
1324  *
1325  * Revision 1.34 2004/04/16 13:24:07 joergr
1326  * Restructured code to avoid default parameter values for "complex types" like
1327  * OFString. Required for Sun CC 2.0.1.
1328  *
1329  * Revision 1.33 2004/01/05 14:36:02 joergr
1330  * Removed acknowledgements with e-mail addresses from CVS log.
1331  *
1332  * Revision 1.32 2003/10/30 17:53:23 joergr
1333  * Added full support for the ContentTemplateSequence (read/write, get/set
1334  * template identification). Template constraints are not checked yet.
1335  *
1336  * Revision 1.31 2003/10/09 13:18:16 joergr
1337  * Added text from Supplement 66 to getCurrentRequestedProcedureEvidence() API
1338  * comment.
1339  *
1340  * Revision 1.30 2003/09/10 13:16:13 joergr
1341  * Replaced PrivateCodingSchemeUID by new CodingSchemeIdentificationSequence as
1342  * required by CP 324.
1343  *
1344  * Revision 1.29 2003/08/07 18:01:42 joergr
1345  * Removed libxml dependency from header files.
1346  *
1347  * Revision 1.28 2003/08/07 12:31:46 joergr
1348  * Added readXML functionality.
1349  * Updated documentation to get rid of doxygen warnings.
1350  * Made method isFinalized() const.
1351  * Added new option to createRevisedVersion() which allows to keep the current
1352  * list of predecessor documents.
1353  * Changed interface to access the list of predecessor documents. Now using the
1354  * existing class DSRSOPInstanceReferenceList.
1355  * Added preliminary support for the Identical Documents Sequence.
1356  * Renamed parameters/variables "string" to avoid name clash with STL class.
1357  *
1358  * Revision 1.27 2002/05/14 08:15:24 joergr
1359  * Updated comments.
1360  *
1361  * Revision 1.26 2002/05/07 12:49:31 joergr
1362  * Added support for the Current Requested Procedure Evidence Sequence and the
1363  * Pertinent Other Evidence Sequence to the dcmsr module.
1364  *
1365  * Revision 1.25 2002/04/16 13:50:52 joergr
1366  * Added configurable support for C++ ANSI standard includes (e.g. streams).
1367  *
1368  * Revision 1.24 2001/11/09 16:10:48 joergr
1369  * Added preliminary support for Mammography CAD SR.
1370  *
1371  * Revision 1.23 2001/09/26 13:04:06 meichel
1372  * Adapted dcmsr to class OFCondition
1373  *
1374  * Revision 1.22 2001/04/03 08:24:01 joergr
1375  * Added new command line option: ignore relationship content constraints
1376  * specified for each SR document class.
1377  *
1378  * Revision 1.21 2001/01/29 17:37:14 joergr
1379  * Added methods to support a new state of finalized and unfinalized documents.
1380  *
1381  * Revision 1.20 2001/01/25 11:48:43 joergr
1382  * Corrected typos / enhanced comments.
1383  *
1384  * Revision 1.19 2001/01/18 15:53:33 joergr
1385  * Added support for digital signatures.
1386  *
1387  * Revision 1.18 2000/12/08 13:42:40 joergr
1388  * Renamed createNewSeries(studyUID) to createNewSeriesInStudy(studyUID).
1389  *
1390  * Revision 1.17 2000/11/16 13:31:27 joergr
1391  * Corrected behaviour of updateDicomAttributes().
1392  *
1393  * Revision 1.16 2000/11/14 17:27:25 joergr
1394  * Added method to remove verification information.
1395  *
1396  * Revision 1.15 2000/11/14 16:36:21 joergr
1397  * Added methods to set the content date/time.
1398  *
1399  * Revision 1.14 2000/11/14 11:45:50 joergr
1400  * Corrected behaviour of method createRevisedVersion().
1401  *
1402  * Revision 1.13 2000/11/13 14:19:06 joergr
1403  * Updated comments.
1404  *
1405  * Revision 1.12 2000/11/13 10:26:21 joergr
1406  * Added output of optional observation datetime to rendered HTML page.
1407  *
1408  * Revision 1.11 2000/11/10 18:10:20 joergr
1409  * Corrected behaviour of createNewSOPInstance() and createRevisedDocument().
1410  *
1411  * Revision 1.10 2000/11/10 17:44:49 joergr
1412  * Added new methods to set the completion flag description, create new study/
1413  * series UIDs. Added missing type 2 sequence to dataset. Corrected wrong format
1414  * of predecessor documents sequence. Changed behaviour of completion/verification
1415  * flags. Improved HTML and print/dump output.
1416  *
1417  * Revision 1.9 2000/11/09 20:32:07 joergr
1418  * Added support for non-ASCII characters in HTML 3.2 (use numeric value).
1419  *
1420  * Revision 1.8 2000/11/07 18:12:25 joergr
1421  * Enhanced rendered HTML output of date, time, datetime and pname.
1422  *
1423  * Revision 1.7 2000/11/01 16:16:33 joergr
1424  * Added support for conversion to XML.
1425  * Added support for Cascading Style Sheet (CSS) used optionally for HTML
1426  * rendering.
1427  * Enhanced support for specific character sets.
1428  *
1429  * Revision 1.6 2000/10/26 14:17:06 joergr
1430  * Added support for "Comprehensive SR".
1431  *
1432  * Revision 1.5 2000/10/18 17:01:47 joergr
1433  * Made some functions inline.
1434  *
1435  * Revision 1.4 2000/10/17 12:35:05 joergr
1436  * Added methods to retrieve information on predecessor documents and
1437  * verifying observers.
1438  *
1439  * Revision 1.3 2000/10/16 16:30:23 joergr
1440  * Added missing get/setSeriesDescription() methods.
1441  * Updated comments.
1442  *
1443  * Revision 1.2 2000/10/16 11:59:04 joergr
1444  * Made method creating a new SOP instance public. Added check for correct SOP
1445  * instance UID and SOP class UID to validity check.
1446  *
1447  * Revision 1.1 2000/10/13 07:49:25 joergr
1448  * Added new module 'dcmsr' providing access to DICOM structured reporting
1449  * documents (supplement 23). Doc++ documentation not yet completed.
1450  *
1451  *
1452  */


Generated on Thu Dec 20 2012 for OFFIS DCMTK Version 3.6.0 by Doxygen 1.8.2