def create_dicom_plan(self): """ Create a dummy DICOM RT-plan object. The only data which is forwarded to this object, is self.patient_name. :returns: a DICOM RT-plan object. """ meta = Dataset() meta.MediaStorageSOPClassUID = '1.2.840.10008.5.1.4.1.1.2' # CT Image Storage meta.MediaStorageSOPInstanceUID = "1.2.3" meta.ImplementationClassUID = "1.2.3.4" meta.TransferSyntaxUID = UID.ImplicitVRLittleEndian # Implicit VR Little Endian - Default Transfer Syntax ds = FileDataset("file", {}, file_meta=meta, preamble=b"\0" * 128) ds.PatientsName = self.patient_name if self.patient_id in (None, ''): ds.PatientID = datetime.datetime.today().strftime('%Y%m%d-%H%M%S') else: ds.PatientID = self.patient_id # Patient ID tag 0x0010,0x0020 (type LO - Long String) ds.PatientsSex = '' # Patient's Sex tag 0x0010,0x0040 (type CS - Code String) # Enumerated Values: M = male F = female O = other. ds.PatientsBirthDate = '19010101' ds.SpecificCharacterSet = 'ISO_IR 100' ds.SOPClassUID = '1.2.840.10008.5.1.4.1.1.2' # CT Image Storage # Study Instance UID tag 0x0020,0x000D (type UI - Unique Identifier) # self._dicom_study_instance_uid may be either set in __init__ when creating new object # or set when import a DICOM file # Study Instance UID for structures is the same as Study Instance UID for CTs ds.StudyInstanceUID = self._dicom_study_instance_uid # Series Instance UID tag 0x0020,0x000E (type UI - Unique Identifier) # self._pl_dicom_series_instance_uid may be either set in __init__ when creating new object # Series Instance UID might be different than Series Instance UID for CTs ds.SeriesInstanceUID = self._plan_dicom_series_instance_uid ds.Modality = "RTPLAN" ds.SeriesDescription = 'RT Plan' ds.RTPlanDate = datetime.datetime.today().strftime('%Y%m%d') ds.RTPlanGeometry = '' ds.RTPlanLabel = 'B1' ds.RTPlanTime = datetime.datetime.today().strftime('%H%M%S') structure_ref = Dataset() structure_ref.RefdSOPClassUID = '1.2.840.10008.5.1.4.1.1.481.3' # RT Structure Set Storage structure_ref.RefdSOPInstanceUID = '1.2.3' ds.RefdStructureSets = Sequence([structure_ref]) dose_ref = Dataset() dose_ref.DoseReferenceNumber = 1 dose_ref.DoseReferenceStructureType = 'SITE' dose_ref.DoseReferenceType = 'TARGET' dose_ref.TargetPrescriptionDose = self.target_dose dose_ref.DoseReferenceDescription = "TUMOR" ds.DoseReferences = Sequence([dose_ref]) return ds
def create_dicom_plan(self): """ Create a dummy Dicom RT-plan object. The only data which is forwarded to this object, is self.patient_name. :returns: a Dicom RT-plan object. """ meta = Dataset() meta.MediaStorageSOPClassUID = '1.2.840.10008.5.1.4.1.1.2' # CT Image Storage meta.MediaStorageSOPInstanceUID = "1.2.3" meta.ImplementationClassUID = "1.2.3.4" meta.TransferSyntaxUID = UID.ImplicitVRLittleEndian # Implicit VR Little Endian - Default Transfer Syntax ds = FileDataset("file", {}, file_meta=meta, preamble=b"\0" * 128) ds.PatientsName = self.patient_name ds.PatientID = "123456" ds.PatientsSex = '0' ds.PatientsBirthDate = '19010101' ds.SpecificCharacterSet = 'ISO_IR 100' ds.SOPClassUID = '1.2.840.10008.5.1.4.1.1.2' # CT Image Storage ds.StudyInstanceUID = '1.2.3' ds.SOPInstanceUID = '1.2.3' ds.Modality = "RTPLAN" ds.SeriesDescription = 'RT Plan' ds.SeriesInstanceUID = '2.16.840.1.113662.2.12.0.3057.1241703565.43' ds.RTPlanDate = '19010101' ds.RTPlanGeometry = '' ds.RTPlanLabel = 'B1' ds.RTPlanTime = '000000' structure_ref = Dataset() structure_ref.RefdSOPClassUID = '1.2.840.10008.5.1.4.1.1.481.3' # RT Structure Set Storage structure_ref.RefdSOPInstanceUID = '1.2.3' ds.RefdStructureSets = Sequence([structure_ref]) dose_ref = Dataset() dose_ref.DoseReferenceNumber = 1 dose_ref.DoseReferenceStructureType = 'SITE' dose_ref.DoseReferenceType = 'TARGET' dose_ref.TargetPrescriptionDose = self.target_dose dose_ref.DoseReferenceDescription = "TUMOR" ds.DoseReferences = Sequence([dose_ref]) return ds