From c966787741e88599f6843763ac41dedbb225678f Mon Sep 17 00:00:00 2001 From: Abhijeet Parida Date: Wed, 31 Jan 2024 17:37:25 -0500 Subject: [PATCH] feat(repersonlization): add customizable fields (#59) * feat: add customize repersonalization fields * update readme * Added file with accession number * Add test for custom fields --------- Co-authored-by: Ashley Rudelsheim <49853479+ashrude@users.noreply.github.com> Co-authored-by: Ashley Rudelsheim Co-authored-by: Ashley Rudelsheim --- README.md | 19 ++++++++++++++- pdf2dcm/base.py | 17 +++++++------ pdf2dcm/pdf2encaps.py | 10 +++++--- pdf2dcm/pdf2rgb.py | 6 +++-- tests/conftest.py | 10 ++++++++ tests/test_03_repersonalisation.py | 23 ++++++++++++++++++ tests/test_data/CT_small_accession_number.dcm | Bin 0 -> 39240 bytes 7 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 tests/test_data/CT_small_accession_number.dcm diff --git a/README.md b/README.md index 07045d3..d1647ca 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ Returns: ## Repersonalisation -It is the process of copying over data regarding the identity of the encapsualted pdf from a template dicom. Currently, the fileds that are repersonalised are- +It is the process of copying over data regarding the identity of the encapsualted pdf from a template dicom. Currently, the fields that are repersonalised by default are- - PatientName - PatientID @@ -103,3 +103,20 @@ It is the process of copying over data regarding the identity of the encapsualte - ~~SOPInstanceUID~~ The fields `SeriesInstanceUID` and `SOPInstanceUID` have been removed from the repersonalization by copying as it violates the DICOM standards. + +You can set the fields to repersonalize by passing repersonalisation_fields into `Pdf2EncapsDCM()`, or `Pdf2RgbSC()` + +Example: + +```python +fields = [ + "PatientName", + "PatientID", + "PatientSex", + "StudyInstanceUID", + "AccessionNumber" +] +converter = Pdf2RgbSC(repersonalisation_fields=fields) +``` + +note: this will overwrite the default fields. \ No newline at end of file diff --git a/pdf2dcm/base.py b/pdf2dcm/base.py index ceba830..be53266 100644 --- a/pdf2dcm/base.py +++ b/pdf2dcm/base.py @@ -14,13 +14,16 @@ class BaseConverter(ABC): - def __init__(self): - self.repersonalisation_fields = [ - "PatientName", - "PatientID", - "PatientSex", - "StudyInstanceUID", - ] + def __init__(self, repersonalisation_fields=[]): + if len(repersonalisation_fields): + self.repersonalisation_fields = repersonalisation_fields + else: + self.repersonalisation_fields = [ + "PatientName", + "PatientID", + "PatientSex", + "StudyInstanceUID", + ] def personalize_dcm( self, template_dcm_path: Path, pdf_dcm: FileDataset diff --git a/pdf2dcm/pdf2encaps.py b/pdf2dcm/pdf2encaps.py index 96e3b52..1f405b1 100644 --- a/pdf2dcm/pdf2encaps.py +++ b/pdf2dcm/pdf2encaps.py @@ -7,9 +7,13 @@ class Pdf2EncapsDCM(BaseConverter): - def __init__(self): - """Class for Encapsulated PDF generation""" - super().__init__() + def __init__(self, repersonalisation_fields=[]): + """Class for Encapsulated PDF generation + + Args: + repersonalisation_fields (List, optional): fields to be copied to the new image + """ + super().__init__(repersonalisation_fields=repersonalisation_fields) def _get_encapspdf_meta(self) -> FileMetaDataset: """Get and set the file meta information for the pdf encaps dicom diff --git a/pdf2dcm/pdf2rgb.py b/pdf2dcm/pdf2rgb.py index f8c610a..033b810 100644 --- a/pdf2dcm/pdf2rgb.py +++ b/pdf2dcm/pdf2rgb.py @@ -11,16 +11,18 @@ class Pdf2RgbSC(BaseConverter): - def __init__(self, dpi=144, merge_pages=False): + def __init__(self, dpi=144, merge_pages=False, repersonalisation_fields=[]): """Class for the generation RGB Secondary capture Args: dpi (int, optional): dots per inch, set resolution of the image. Defaults to 144. merge_pages (bool, optional): multiple pgs must be put into 1 dicom. Defaults to False. + repersonalisation_fields (List, optional): fields to be copied to the new image + """ self.merge_pages_flag = merge_pages self.dpi = dpi - super().__init__() + super().__init__(repersonalisation_fields=repersonalisation_fields) def _get_rgbsc_meta(self) -> FileMetaDataset: """Get and set the file meta information for the rgb secondary capture dicom diff --git a/tests/conftest.py b/tests/conftest.py index aafd61a..d07512f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -23,3 +23,13 @@ def pdfencapsconverter(): @pytest.fixture def rgbscconverter(): yield Pdf2RgbSC() + +@pytest.fixture +def pdfrepersonconverter(): + yield Pdf2EncapsDCM(repersonalisation_fields=[ + "PatientName", + "PatientID", + "PatientSex", + "StudyInstanceUID", + "AccessionNumber" + ]) \ No newline at end of file diff --git a/tests/test_03_repersonalisation.py b/tests/test_03_repersonalisation.py index 97a5a2d..aa41f69 100644 --- a/tests/test_03_repersonalisation.py +++ b/tests/test_03_repersonalisation.py @@ -71,3 +71,26 @@ def test_03_2_name_missing(pdfencapsconverter): assert dcm_ds.PatientName == "" os.remove(stored_path) + +@pytest.mark.reperson +def test_03_4_additional_fields_personlisation(pdfrepersonconverter): + path_pdf = "tests/test_data/test_file.pdf" + ref_dicom = "tests/test_data/CT_small_accession_number.dcm" + + # with personalisation + stored_path = pdfrepersonconverter.run(path_pdf, ref_dicom)[0] + + assert os.path.exists(stored_path) + assert pdfrepersonconverter.check_valid_dcm(stored_path) + + dcm_ds = pydicom.dcmread(stored_path) + ref_dcm_ds = pydicom.dcmread(ref_dicom) + + # check repersonaliation attribute + assert len(dcm_ds.EncapsulatedDocument) == 898332 + assert dcm_ds.PatientName == ref_dcm_ds.PatientName + assert dcm_ds.PatientID == ref_dcm_ds.PatientID + assert dcm_ds.PatientSex == ref_dcm_ds.PatientSex + assert dcm_ds.AccessionNumber == ref_dcm_ds.AccessionNumber + + os.remove(stored_path) \ No newline at end of file diff --git a/tests/test_data/CT_small_accession_number.dcm b/tests/test_data/CT_small_accession_number.dcm new file mode 100644 index 0000000000000000000000000000000000000000..fba03edd1ea789d7bfc03fcee2e360b14374d011 GIT binary patch literal 39240 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

O6jfv%6L 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 literal 0 HcmV?d00001