RSNA / anonymizer

RSNA DICOM Anonymizer
Other
8 stars 2 forks source link

no attribute 'SOPClassUID' error #11

Open gkowalski opened 1 day ago

gkowalski commented 1 day ago

Trying to download various Accessions and the query works , but the "Import and Anonymize" always errors out with a no attribute 'SOPClassUID' error. Any ideas where to look :


2024-09-23 13:40:49,825 DEBUG GetStudyUIDHierarchies pydicom.data_element_generator.215 000000c2: 31 20                                  b'1 '
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2069
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2070 # Response Identifier
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0052) CS [SERIES]                                 # 1 QueryRetrieveLevel
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0054) AE [ALI_QUERY_SCP]                          # 1 RetrieveAETitle
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0060) CS [DX]                                     # 1 Modality
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,103E) LO [LAT]                                    # 1 SeriesDescription
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,000D) UI [1.2.840.114350.2.35.2.798268.2.474531864.1] # 1 StudyInstanceUID
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,000E) UI [1.2.392.200046.100.14.46852710304164419972798132664950223240] # 1 SeriesInstanceUID
2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,0011) IS [3]                                      # 1 SeriesNumber
2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,1209) IS [1]                                      # 1 NumberOfSeriesRelatedInstances
2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2073
2024-09-23 13:40:49,827 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 'Dataset' object has no attribute 'SOPClassUID'
2024-09-23 13:40:49,827 DEBUG Thread-9 (run_reactor) pynetdicom.dsutils.decode.114 pydicom.read_dataset() TransferSyntax="Little Endian Implicit"```
gkowalski commented 1 day ago

Interesting . I've verified by pulling down this same accession that all the images and SR have SOPClassUID in them ( Im using HOROS tool to download them ) . But in PACS it shows that there are 278 things in this accession. But when I pull them down I only get 276 actual DICOM objects of various SOPClassUID's . I'm wondering if HOROS is just dropping those other objects on the request to download.

gkowalski commented 1 day ago

ok , as a test I set the Storage classes permitted to only have one :

CT Image Storage   | 1.2.840.10008.5.1.4.1.1.1.2

Now it gets past the initial error and get :

2024-09-23 14:06:16,581 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 Unable to retrieve UID Hierarchy for reliable import operation via DICOM C-MOVE. QUERY Server did not return the number of instances in a series. Standard DICOM field (0020,1209) NumberOfSeriesRelatedInstances is missing in the query response.

Any way of playing with the tags it's expecting to see , or have it at least ignore them ?

mdevans commented 1 day ago

Please check the dataset metadata in the DICOM file header, it must have a SOPClassUID element with a valid value for it to be a valid DICOM file.

You can use dcmdump (or DICOM viewer with metadata function) to see the header

On Mon, 23 Sept 2024 at 20:48, George Kowalski @.***> wrote:

Trying to download various Accessions and the query works , but the "Import and Anonymize" always errors out with a no attribute 'SOPClassUID' error. Any ideas where to look :

2024-09-23 13:40:49,825 DEBUG GetStudyUIDHierarchies pydicom.data_element_generator.215 000000c2: 31 20 b'1 ' 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2069 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2070 # Response Identifier 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0052) CS [SERIES] # 1 QueryRetrieveLevel 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0054) AE [ALI_QUERY_SCP] # 1 RetrieveAETitle 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0060) CS [DX] # 1 Modality 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,103E) LO [LAT] # 1 SeriesDescription 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,000D) UI [1.2.840.114350.2.35.2.798268.2.474531864.1] # 1 StudyInstanceUID 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,000E) UI [1.2.392.200046.100.14.46852710304164419972798132664950223240] # 1 SeriesInstanceUID 2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,0011) IS [3] # 1 SeriesNumber 2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,1209) IS [1] # 1 NumberOfSeriesRelatedInstances 2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2073 2024-09-23 13:40:49,827 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 'Dataset' object has no attribute 'SOPClassUID' 2024-09-23 13:40:49,827 DEBUG Thread-9 (run_reactor) pynetdicom.dsutils.decode.114 pydicom.read_dataset() TransferSyntax="Little Endian Implicit"```

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFID45HLQMJOD3F3DRGTZYBO6FAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43ASLTON2WKOZSGU2DGMZZGQZDGMI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

mdevans commented 1 day ago

Try using a different Move level using the drop down box next to the Import & Anonymizer button

For explanation of C-MOVE issues please refer to documentation

On Mon, 23 Sept 2024 at 21:10, George Kowalski @.***> wrote:

ok , as a test I set the SStorage class to only have :

CT Image Storage | 1.2.840.10008.5.1.4.1.1.1.2

Now it gets past the initial error and get :

2024-09-23 14:06:16,581 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 Unable to retrieve UID Hierarchy for reliable import operation via DICOM C-MOVE. QUERY Server did not return the number of instances in a series. Standard DICOM field (0020,1209) NumberOfSeriesRelatedInstances is missing in the query response.

Any way of playing with the tags it's expecting to see , or have it at least ignore them ?

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11#issuecomment-2369144812, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFIFZQU4QA7OYTNYLVCTZYBRTXAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGE2DIOBRGI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

mdevans commented 1 day ago

Which server are you querying?

On Mon, 23 Sept 2024 at 21:13, Michael Evans @.***> wrote:

Try using a different Move level using the drop down box next to the Import & Anonymizer button

For explanation of C-MOVE issues please refer to documentation

On Mon, 23 Sept 2024 at 21:10, George Kowalski @.***> wrote:

ok , as a test I set the SStorage class to only have :

CT Image Storage | 1.2.840.10008.5.1.4.1.1.1.2

Now it gets past the initial error and get :

2024-09-23 14:06:16,581 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 Unable to retrieve UID Hierarchy for reliable import operation via DICOM C-MOVE. QUERY Server did not return the number of instances in a series. Standard DICOM field (0020,1209) NumberOfSeriesRelatedInstances is missing in the query response.

Any way of playing with the tags it's expecting to see , or have it at least ignore them ?

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11#issuecomment-2369144812, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFIFZQU4QA7OYTNYLVCTZYBRTXAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGE2DIOBRGI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

mdevans commented 1 day ago

They could possibly be presentation objects or similar, when you do the Query, what do you see next to this study in the column: "Modalities" next to "Accession No." column?

On Mon, 23 Sept 2024 at 21:03, George Kowalski @.***> wrote:

Interesting . I've verified by pulling down this same accession that all the images and SR have SOPClassUID in them ( Im using HOROS tool to download them ) . But in PACS it shows that there are 278 things in this accession. But when I pull them down I only get 276 actual DICOM objects of various SOPClassUID's . I'm wondering if HOROS is just dropping those other objects on the request to download.

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11#issuecomment-2369129607, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFIFE6NYRMTKGA44EAVLZYBQZVAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGEZDSNRQG4 . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

gkowalski commented 1 day ago

So I tried :

gkowalski commented 1 day ago

at least importing from the filesystem works . I will try downloading the same accession with horos, then importing the same data set with anonymizer

gkowalski commented 1 day ago

Well Import of those same images shows that some were QUARANTINE'ed . Dumped one

dcmdump IM-0003-0001.dcm

# Dicom-File-Format

# Dicom-Meta-Information-Header
# Used TransferSyntax: Little Endian Explicit
(0002,0000) UL 212                                      #   4, 1 FileMetaInformationGroupLength
(0002,0001) OB 00\01                                    #   2, 1 FileMetaInformationVersion
(0002,0002) UI =KeyObjectSelectionDocumentStorage       #  30, 1 MediaStorageSOPClassUID
(0002,0003) UI [1.2.840.113711.97687293.4.37484.747694861.365657005.125803] #  58, 1 MediaStorageSOPInstanceUID
(0002,0010) UI =LittleEndianExplicit                    #  20, 1 TransferSyntaxUID
(0002,0012) UI [1.2.276.0.7238010.5.0.3.5.4]            #  28, 1 ImplementationClassUID
(0002,0013) SH [OSIRIX]                                 #   6, 1 ImplementationVersionName
(0002,0016) AE [MCW_SCU]                                #   8, 1 SourceApplicationEntityTitle

# Dicom-Data-Set
# Used TransferSyntax: Little Endian Explicit
(0008,0005) CS [ISO_IR 100]                             #  10, 1 SpecificCharacterSet
(0008,0016) UI =KeyObjectSelectionDocumentStorage       #  30, 1 SOPClassUID

ok m that's a wierd SOPClassUID .

mdevans commented 1 day ago

Please can you send me a few sample files to analyze

On Mon, 23 Sept 2024 at 22:17, George Kowalski @.***> wrote:

Well Import of those same images shows that some were QUARANTINE'ed . Dumped one

dcmdump IM-0003-0001.dcm

Dicom-File-Format

Dicom-Meta-Information-Header

Used TransferSyntax: Little Endian Explicit

(0002,0000) UL 212 # 4, 1 FileMetaInformationGroupLength (0002,0001) OB 00\01 # 2, 1 FileMetaInformationVersion (0002,0002) UI =KeyObjectSelectionDocumentStorage # 30, 1 MediaStorageSOPClassUID (0002,0003) UI [1.2.840.113711.97687293.4.37484.747694861.365657005.125803] # 58, 1 MediaStorageSOPInstanceUID (0002,0010) UI =LittleEndianExplicit # 20, 1 TransferSyntaxUID (0002,0012) UI [1.2.276.0.7238010.5.0.3.5.4] # 28, 1 ImplementationClassUID (0002,0013) SH [OSIRIX] # 6, 1 ImplementationVersionName (0002,0016) AE [MCW_SCU] # 8, 1 SourceApplicationEntityTitle

Dicom-Data-Set

Used TransferSyntax: Little Endian Explicit

(0008,0005) CS [ISO_IR 100] # 10, 1 SpecificCharacterSet (0008,0016) UI =KeyObjectSelectionDocumentStorage # 30, 1 SOPClassUID

ok m that's a wierd SOPClassUID .

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11#issuecomment-2369291663, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFIATVIH7XUCNZGIMMYLZYBZPNAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGI4TCNRWGM . You are receiving this because you commented.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989