• Question about StudyInstanceUID usage & MWL

    From Stephen Douglas Scotti@21:1/5 to All on Fri Apr 30 11:16:56 2021
    Just found this forum. We have been designing a RIS to be used in conjunction with Orthanc as a PACS server. We now have MRI scanner hooked up to Orthanc. Orthanc comes with a MWL plug-in that basically listens for C-find requests from the modality,
    and that is all working as far as sending a response to the scanner, and most of the tags are getting populated from the MWL values.

    Apparently, Orthanc does not support MPPS out-of-the-box, see:

    https://groups.google.com/g/orthanc-users/c/Tec0xgD4s2c

    but down the road might be nice to implement that with a Python Plug-in as mentioned in that post. For now, mostly interested in using the MWL with one or more SPS's without MPPS yet implemented. The RIS has a way to delete the MWL files once the
    requested studies are completed.

    First question I have is regarding the StudyInstanceID. The scanner has an option to use the machine generated StudyInstanceID, or it can use one provided in the MWL file. I was examining the tags when using a StudyInstanceID from the MWL and noticed
    that the StudyInstanceID is ours, whereas the SeriesUID's and other UID's are using the scanner's root, or so it seems, e.g. Their root looks like: 1.3.76.2.1.1.4.1.3.5388.

    (0020,000d) UI [1.3.6.1.4.1.xxxxx.1. . . . . ] # StudyInstanceUID (our root)
    (0020,000e) UI [1.3.76.2.1.1.4.1.3.5388.670335607] # SeriesInstanceUID

    Just wondering if that is "normal" behavior, or if the scanner has to be somehow configured to use our root if it is provided as the StudyInstanceUID in the MWL. I have various algorithms to guarantee the uniqueness of our StudyInstanceUID. Also read
    somewhere that the StudyInstanceUID should be padded with a NULL byte in some instances ?

    I have quite a few other questions about appropriately setting up the MWL template so that it does what is needed. Still playing around with that, so I'll follow up with another post regarding that after further investigation. The scanner is an Esaote
    G-scan, and I have looked through the Dicom Conformance statement for some guidance.

    Below is a partially 'working' version of the MWL .wl file that Orthanc is serving. That is generated from and HL7 message as a .txt template and then a .wl file is created using dump2dcm. I have a lot of flexibility when it comes to configuring that.
    There are some placeholders for some of the values:

    # Dicom-Data-Set
    # Used TransferSyntax: Little Endian Explicit
    (0008,0005) CS [ISO_IR 192] # 10, 1 SpecificCharacterSet
    (0008,0050) SH [AccessionNumber] # 14, 1 AccessionNumber
    (0008,0090) PN [0002:^^^^] # 30, 1 ReferringPhysicianName
    (0008,1030) LO [Daily QC] # 8, 1 StudyDescription
    (0008,1080) LO [AdmittingDiagnosesDescription] # 22, 1 AdmittingDiagnosesDescription
    (0010,0010) PN [QC^Esaote G-scan^] # 18, 1 PatientName (0010,0020) LO [5388.PatientID] # 14, 1 PatientID (0010,0030) DA [20210415] # 8, 1 PatientBirthDate
    (0010,0040) CS [M] # 2, 1 PatientSex (0010,1020) DS [1.8542037108333] # 16, 1 PatientSize (0010,1030) DS [97.5223719555] # 14, 1 PatientWeight (0010,1040) LO [PatientAddress] # 56, 1 PatientAddress
    (0010,2000) LO (no value available) # 0, 0 MedicalAlerts (0010,2110) LO (no value available) # 0, 0 Allergies (0010,2180) SH [Occupation] # 10, 1 Occupation (0010,21b0) LT [Daily QC] # 8, 1 AdditionalPatientHistory
    (0010,4000) LT [PatientComments] # 16, 1 PatientComments
    (0020,000d) UI [1.3.6.1.4.1.56016.1....] # 34, 1 StudyInstanceUID (0032,1060) LO [Daily QC] # 8, 1 RequestedProcedureDescription
    (0032,1064) SQ (Sequence with explicit length #=1) # 66, 1 RequestedProcedureCodeSequence
    (fffe,e000) na (Item with explicit length #=3) # 58, 1 Item
    (0008,0100) SH [CodeValue] # 10, 1 CodeValue
    (0008,0102) SH [SCT] # 12, 1 CodingSchemeDesignator
    (0008,0104) LO [CodeMeaning] # 12, 1 CodeMeaning
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (0040,0100) SQ (Sequence with explicit length #=1) # 172, 1 ScheduledProcedureStepSequence
    (fffe,e000) na (Item with explicit length #=7) # 164, 1 Item
    (0008,0060) CS [MR] # 2, 1 Modality
    (0040,0001) AE [NmrEsaote] # 10, 1 ScheduledStationAETitle
    (0040,0002) DA [20210430] # 8, 1 ScheduledProcedureStepStartDate
    (0040,0003) TM [080000] # 6, 1 ScheduledProcedureStepStartTime
    (0040,0007) LO [Daily QC] # 8, 1 ScheduledProcedureStepDescription
    (0040,0008) SQ (Sequence with explicit length #=1) # 66, 1 ScheduledProtocolCodeSequence
    (fffe,e000) na (Item with explicit length #=3) # 58, 1 Item
    (0008,0100) SH [CodeValue] # 10, 1 CodeValue
    (0008,0102) SH [SCT] # 12, 1 CodingSchemeDesignator
    (0008,0104) LO [CodeMeaning] # 12, 1 CodeMeaning
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (0040,0009) SH [0041] # 4, 1 ScheduledProcedureStepID
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (0040,1001) SH [0041]

    The Dicom Trace in Orthanc for the request from the scanner is like:

    I0426 15:53:22.363754 PluginsManager.cpp:172] (plugins) Received worklist query from remote modality NmrEsaote:
    {
    "0008,0050" : "",
    "0008,0090" : "",
    "0008,1080" : "",
    "0008,1110" : [],
    "0010,0010" : "",
    "0010,0020" : "",
    "0010,0030" : "",
    "0010,0040" : "",
    "0010,1020" : "",
    "0010,1030" : "",
    "0010,2180" : "",
    "0010,21b0" : "",
    "0010,4000" : "",
    "0020,000d" : "",
    "0032,1060" : "",
    "0032,1064" : [],
    "0040,0100" : [
    {
    "0008,0060" : "MR",
    "0040,0001" : "NmrEsaote",
    "0040,0002" : "20210426-20210426",
    "0040,0003" : "",
    "0040,0007" : "",
    "0040,0008" : [],
    "0040,0009" : ""
    }
    ],
    "0040,1001" : ""
    }

    Thanks.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Markus Sabin@21:1/5 to All on Mon May 10 08:17:57 2021
    Hi Stephen,

    Freitag, 30. April 2021 um 20:16:58 UTC+2:
    First question I have is regarding the StudyInstanceID. The scanner has an option to use the machine generated StudyInstanceID, or it can use one provided in the MWL file. I was examining the tags when using a StudyInstanceID from the MWL and noticed
    that the StudyInstanceID is ours, whereas the SeriesUID's and other UID's are using the scanner's root, or so it seems, e.g. Their root looks like: 1.3.76.2.1.1.4.1.3.5388.

    (0020,000d) UI [1.3.6.1.4.1.xxxxx.1. . . . . ] # StudyInstanceUID (our root) (0020,000e) UI [1.3.76.2.1.1.4.1.3.5388.670335607] # SeriesInstanceUID

    Just wondering if that is "normal" behavior, or if the scanner has to be somehow configured to use our root if it is provided as the StudyInstanceUID in the MWL. I have various algorithms to guarantee the uniqueness of our StudyInstanceUID.

    Yes, that is the normal behavior. A Study may span different series created by different equipment. Still the user wants to see all these series in a study context. To achieve that, patient- and study attributes are obtained from the worklist and from
    the series level onwards, the attributes are equipment-generated. This includes the Series- and SOP Instance UID. Maybe this nice diagram from the standard makes it more clear:
    http://dicom.nema.org/dicom/2013/output/chtml/part03/chapter_7.html


    Also read somewhere that the StudyInstanceUID should be padded with a NULL byte in some instances ?

    Yes, this is true and comes from the requirement that each DICOM attribute is required to have an even length. So if your uniquely generated UID is of odd length, it must be padded with a NULL character. See here (section 9.1):
    http://dicom.nema.org/dicom/2013/output/chtml/part05/chapter_9.html


    I have quite a few other questions about appropriately setting up the MWL template so that it does what is needed. Still playing around with that, so I'll follow up with another post regarding that after further investigation. The scanner is an Esaote
    G-scan, and I have looked through the Dicom Conformance statement for some guidance.

    Below is a partially 'working' version of the MWL .wl file that Orthanc is serving. That is generated from and HL7 message as a .txt template and then a .wl file is created using dump2dcm. I have a lot of flexibility when it comes to configuring that.
    There are some placeholders for some of the values:

    # Dicom-Data-Set
    # Used TransferSyntax: Little Endian Explicit
    (0008,0005) CS [ISO_IR 192] # 10, 1 SpecificCharacterSet
    [...]

    If this is supposed to be a question, I do not fully get what you are asking for. If there is a problem with your query, I would have a first look at the Specific Character Set. In your sample, it says "UTF-8" (ISO_IR 192), and the Esaote system queries
    for "nothing" which means "US-ASCII". Since your worklist match does not seem to include any character that cannot be encoded in ASCII, you may try just removing (0008,0005) from your worklist record and see if it works.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stephen Douglas Scotti@21:1/5 to All on Mon May 10 10:22:05 2021
    Hey Markus, thank you for the response.

    For a StudyInstanceID, Orthanc is apparently going to support using a ROOT ID specified as a config item in a future release, in which case I think it would be the ROOT ID followed by the internal uuid that orthanc generates on demand. Still exploring
    how to create one in PHP from a ROOT, but looking at something like this:

    $rootid = Config::get('DEFAULT_DICOM_ROOT').Config::get('RIS_ID').$id . "." . $insert . "." . time();

    where DEFAULT_DICOM_ROOT is the user's root with trailing '.', RIS_ID is a unique software application ID with '.', $id is a unique device id for the RIS app with '.', $insert is a unique ID for the MWL order and time() is UTC time stamp. With Orthanc
    allowing for a Root ID, that would be much easier.

    In PHP, using:

    if (strlen($order->StudyInstanceUID) % 2 == 1) {
    order->StudyInstanceUID .= "\x00";
    }

    To pad.

    There does not seem to be a problem with the MWL query itself, just with getting some tags for the Study populated, mostly the StudyDescription. The logs on Orthanc for the C-FIND request and the response are shown below. I actually added a Lua script
    to add some tags to the incoming query because the scanner does ask for those by default. The issue I have been having is that the StudyDescription tag is not getting populated on the instances sent to PACS by the MRI unit, and StudyDescription does not
    show up on the MRI console prepopulated. The operator has to enter that manually for some reason. That may just be the way the system is setup.

    On Orthanc MPPS is not setup either, so that might be a way to get around populating the tags for a study from the RIS once a MPPS message is sent, or on ingress of instances into PACS using a Lua script. The simple solution is to figure out how to
    setup the MWL or the scanner to use the StudyDescription from the MWL file. I could add the (0032,1064) to the MWL. Have not tried that yet.

    function IncomingWorklistRequestFilter(query, origin)

    -- PrintRecursive(query)
    -- PrintRecursive(origin)

    -- Implements the same behavior as the "FilterIssuerAet"
    -- option of the sample worklist plugin
    -- Scheduled Procedure Step Sequence 0040,0100
    query['0040,0100'][1]['0008,0050'] = '' -- AccessionNumber
    query['0040,0100'][1]['0008,1030'] = '' -- StudyDescription
    -- query['0040,0100'][1]['0020,000d'] = '' -- StudyInstanceUID
    query['0008,1030'] = "" -- StudyDescription
    -- query['0008,0096'] = "" -- ReferringPhysicianIdentificationSequence
    return query

    end

    I0510 15:46:21.714677 PluginsManager.cpp:172] (plugins) Received worklist query from remote modality NmrEsaote:
    {
    "0008,0005" : "ISO_IR 192",
    "0008,0050" : "",
    "0008,0090" : "",
    "0008,1030" : "",
    "0008,1080" : "",
    "0008,1110" : [],
    "0010,0010" : "",
    "0010,0020" : "PatientID",
    "0010,0030" : "",
    "0010,0040" : "",
    "0010,1020" : "",
    "0010,1030" : "",
    "0010,2180" : "",
    "0010,21b0" : "",
    "0010,4000" : "",
    "0020,000d" : "1.3.6.1.4.1.56016.0.1.1.131.1620648192",
    "0032,1060" : "",
    "0032,1064" : [],
    "0040,0100" : [
    {
    "0008,0050" : "",
    "0008,0060" : "MR",
    "0008,1030" : "",
    "0040,0001" : "NmrEsaote",
    "0040,0002" : "20210510-20210510",
    "0040,0003" : "",
    "0040,0007" : "",
    "0040,0008" : [],
    "0040,0009" : "0041"
    }
    ],
    "0040,1001" : ""
    }

    and the current MWL response looks like:

    T0510 15:46:21.717385 FindScp.cpp:326] (dicom) Sending C-FIND Response 1/1:

    # Dicom-Data-Set
    # Used TransferSyntax: Little Endian Explicit
    (0008,0005) CS [ISO_IR 192] # 10, 1 SpecificCharacterSet
    (0008,0050) SH [DEVACC00000053] # 14, 1 AccessionNumber
    (0008,0090) PN [ReferringPhysicianName] # 30, 1 ReferringPhysicianName (0008,1030) LO [Daily QC] # 8, 1 StudyDescription
    (0008,1080) LO [AdmittingDiagnosesDescription] # 22, 1 AdmittingDiagnosesDescription
    (0010,0010) PN [QC^Esaote G-scan^] # 18, 1 PatientName (0010,0020) LO [PatientID] # 14, 1 PatientID (0010,0030) DA [20210415] # 8, 1 PatientBirthDate
    (0010,0040) CS [M] # 2, 1 PatientSex (0010,1020) DS (no value available) # 0, 0 PatientSize (0010,1030) DS (no value available) # 0, 0 PatientWeight (0010,2180) SH (no value available) # 0, 0 Occupation (0010,21b0) LT [Type the Title for Study into the Console (Study Description)] # 62, 1 AdditionalPatientHistory
    (0010,4000) LT (no value available) # 0, 0 PatientComments
    (0020,000d) UI [1.3.6.1.4.1.56016.0.1.1.131.1620648192] # 38, 1 StudyInstanceUID
    (0032,1060) LO [Daily QC] # 8, 1 RequestedProcedureDescription
    (0040,0100) SQ (Sequence with explicit length #=1) # 0, 1 ScheduledProcedureStepSequence
    (fffe,e000) na (Item with undefined length #=9) # u/l, 1 Item
    (0008,0050) SH [DEVACC00000053] # 14, 1 AccessionNumber
    (0008,0060) CS [MR] # 2, 1 Modality
    (0008,1030) LO [Daily QC] # 8, 1 StudyDescription
    (0040,0001) AE [NmrEsaote] # 10, 1 ScheduledStationAETitle
    (0040,0002) DA [20210510] # 8, 1 ScheduledProcedureStepStartDate
    (0040,0003) TM [080000] # 6, 1 ScheduledProcedureStepStartTime
    (0040,0007) LO [Daily QC] # 8, 1 ScheduledProcedureStepDescription
    (0040,0008) SQ (Sequence with explicit length #=1) # 0, 1 ScheduledProtocolCodeSequence
    (fffe,e000) na (Item with explicit length #=3) # 54, 1 Item
    (0008,0100) SH [0040,0008] # 10, 1 CodeValue
    (0008,0102) SH [0040,0008] # 10, 1 CodingSchemeDesignator
    (0008,0104) LO [0040,0008] # 10, 1 CodeMeaning
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (0040,0009) SH [0041] # 4, 1 ScheduledProcedureStepID
    (fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (0040,1001) SH [0041] # 4, 1 RequestedProcedureID

    Followed by:

    T0510 15:46:21.700881 CommandDispatcher.cpp:291] (dicom) Received Association Parameters:
    ====================== BEGIN A-ASSOCIATE-RQ =====================
    ....
    ======================= END A-ASSOCIATE-RQ ======================

    ====================== BEGIN A-ASSOCIATE-AC =====================
    ...
    ======================= END A-ASSOCIATE-AC ======================

    ===================== INCOMING DIMSE MESSAGE ====================
    Message Type : C-STORE RQ
    Presentation Context ID : 209
    Message ID : 5
    Affected SOP Class UID : MRImageStorage
    Affected SOP Instance UID : 1.3.76.2.1.1.4.1.3.5388.671276871.0
    Data Set : present
    Priority : medium
    ======================= END DIMSE MESSAGE =======================
    . . . . .

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Markus Sabin@21:1/5 to All on Tue May 11 05:20:36 2021
    As for the Study Description, there is unfortunately no standard-way (that I am aware of) to safely transfer this to the modality. The worklist has a Requested Procedure Description; Study Description is not an attribute that is part of a worklist
    response according to PS3.4, Table K.6-1. DICOM does not put any requirements on how the Study Description is generated on the modality, and IHE recommends (i.e. no hard requirement) to set it to a value equal to Performed Procedure Step Description (
    0040,0254). This attribute is "equipment generated" however, i.e. assigned on the modality.

    You may want to look into the DICOM Conformance Statement of the modality in question to see where the attribute's value is obtained from. But whatever solution you will find, it is far from being guaranteed to work with other equipment as well.

    BTW: The code sequence item for the Scheduled Protocol Code Sequence in your response does not look healthy ;-)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stephen Douglas Scotti@21:1/5 to All on Tue May 11 19:12:15 2021
    Thank you again.

    I actually have: (0032,1060) LO [Daily QC] # 8, 1 RequestedProcedureDescription in the MWL file, and that tag is also in the C-FIND request, so presumably the modality is getting that in the response.

    I was playing around with some Lua scripts to: 1. Modify the C-FIND query so that tags not requested by the modality might be returned also (bad idea I think) and 2. Modifying instances after they are stored to update / add the missing tags. A Lua
    script could do that, but it is resource intensive I think, and it is possible to do that sort of thing at the Study Level after the exam is marked as complete by the technologist, or even programmatically after the study becomes "Stable". The latter
    would require a little checking to verify that a MWL file still exist and that the ingest is from an AET that you want to modify tags for, but that would work actually also as long as what is in the MWL file matches what was actually done. Still, to get
    the technologist, that would have to sent by the scanner itself or by the RIS after manually marking the study as complete.

    I do have some sample tags from an instance that was generated by the scanner after using an MWL file, some tags deleted or somewhat anonymized even though it is a test study. Note the note to the technologist, which did not happen: (0010,21b0) LT [
    Type the Title for Study into the Console (Study Description)] # 62, 1 AdditionalPatientHistory. The tags of primary interest are probably the ones below. I am pretty sure that when / if the technologist manually enters a StudyDescription that is
    shows up in a Performed Procedure Step Description (0040,0254) tag, which is missing below, although the preceding tags are there. You are correct about ScheduledProtocolCodeSequence. That is sort of a placeholder. I may not need that actually.

    I have not looked too deeply into using MPPS because that requires some development as far as use with Orthanc is concerned.

    Orthanc does however have a method to add / update tags at the study level. That might actually be the easiest and most modality independent since there is also apparently a regulatory requirement to have the Technicians / Operator Tag populated as well
    ?? (0070,0084), although various viewers appear to be a little inconsistent about what annotations are shown on images. I would want the AccessionNumber and Operator to show up on the annotations, or at least be configurable.

    One thing that would be easy to try is to have the technologist mark the exam as "Complete" in the RIS once QA is done and the study approved. Already do that. Kind of hard these days to get a human to push a button consistently sometimes since it
    seems like the desire is to have everything work by AI. The RIS can then: 1. Delete the MWL File (does that). 2. Capture any additional Tags the need to be added to the Study at the time of completion (i.e. The Actual Study Performed & the
    Technologist who performed the Study, or the signed in user in our case). 3. Via a REST API, Orthanc can then update the tags and indexing at the Study Level and everyone might be happy. That is probably sort of what the MPPS does, but I'd have to
    build that. This method would be easy to test, and in a low volume environment not too resource intensive.

    BTW, kind or hard to do some of the MWL testing in a development environment without a scanner. I've tried using FINDSCU to simulate a worklist C-FIND request and that only partially works, and I've started to look around for something to emulate MPPS.
    It is a little bit tricky with a live scanner, even if it isn't fully operational yet because the tech has

    (0040,0244) DA [20210510] # 8, 1 PerformedProcedureStepStartDate
    (0040,0245) TM [104641] # 6, 1 PerformedProcedureStepStartTime
    (0040,0253) SH [671276801] # 10, 1 PerformedProcedureStepID

    (0040,0275) SQ (Sequence with explicit length #=1) # 138, 1 RequestAttributesSequence
    (fffe,e000) na (Item with explicit length #=5) # 130, 1 Item
    (0032,1060) LO [Daily QC] # 8, 1 RequestedProcedureDescription
    (0040,0007) LO [Daily QC] # 8, 1 ScheduledProcedureStepDescription
    (0040,0008) SQ (Sequence with explicit length #=1) # 62, 1 ScheduledProtocolCodeSequence
    (fffe,e000) na (Item with explicit length #=3) # 54, 1 Item
    (0008,0100) SH [0040,0008] # 10, 1 CodeValue
    (0008,0102) SH [0040,0008] # 10, 1 CodingSchemeDesignator
    (0008,0104) LO [0040,0008] # 10, 1 CodeMeaning
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (0040,0009) SH [0041] # 4, 1 ScheduledProcedureStepID
    (0040,1001) SH [0041] # 4, 1 RequestedProcedureID
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem


    ________________________________________________

    (0020,0010) SH [0041] # 4, 1 StudyID

    # Dicom-Meta-Information-Header
    # Used TransferSyntax: Little Endian Explicit
    (0002,0000) UL 180 # 4, 1 FileMetaInformationGroupLength
    (0002,0001) OB 00\01 # 2, 1 FileMetaInformationVersion
    (0002,0002) UI =MRImageStorage # 26, 1 MediaStorageSOPClassUID
    (0002,0003) UI [1.3.76.2.1.1.4.1.3.5388.671276871.2] # 36, 1 MediaStorageSOPInstanceUID
    (0002,0010) UI =LittleEndianExplicit # 20, 1 TransferSyntaxUID
    (0002,0012) UI [1.2.276.0.7230010.3.0.3.6.4] # 28, 1 ImplementationClassUID
    (0002,0013) SH [OFFIS_DCMTK_364] # 16, 1 ImplementationVersionName

    # Dicom-Data-Set
    # Used TransferSyntax: Little Endian Explicit
    (0008,0005) CS [ISO_IR 100] # 10, 1 SpecificCharacterSet
    (0008,0008) CS [ORIGINAL\PRIMARY\T1 MAP] # 24, 3 ImageType (0008,0016) UI =MRImageStorage # 26, 1 SOPClassUID (0008,0018) UI [1.3.76.2.1.1.4.1.3.5388.671276871.2] # 36, 1 SOPInstanceUID (0008,0020) DA [20210510] # 8, 1 StudyDate (0008,0021) DA [20210510] # 8, 1 SeriesDate (0008,0022) DA [20210510] # 8, 1 AcquisitionDate
    (0008,0023) DA [20210510] # 8, 1 ContentDate (0008,0030) TM [104641] # 6, 1 StudyTime (0008,0031) TM [104750] # 6, 1 SeriesTime (0008,0032) TM [104750] # 6, 1 AcquisitionTime
    (0008,0033) TM [104751] # 6, 1 ContentTime (0008,0050) SH [DEVACC00000053] # 14, 1 AccessionNumber
    (0008,0060) CS [MR] # 2, 1 Modality (0008,0070) LO [ESAOTE] # 6, 1 Manufacturer (0008,0080) LO [InstitutionName] # 20, 1 InstitutionName (0008,0090) PN [ReferringPhysicianName] # 24, 1 ReferringPhysicianName
    (0008,1010) SH [G-scan Brio MRI] # 16, 1 StationName (0008,103e) LO [0? - Scout] # 10, 1 SeriesDescription
    (0008,1040) LO [InstitutionalDepartmentName] # 26, 1 InstitutionalDepartmentName
    (0008,1090) LO [G-scan Brio] # 12, 1 ManufacturerModelName
    (0008,1111) SQ (Sequence with explicit length #=1) # 82, 1 ReferencedPerformedProcedureStepSequence
    (fffe,e000) na (Item with explicit length #=2) # 74, 1 Item
    (0008,1150) UI =ModalityPerformedProcedureStepSOPClass # 24, 1 ReferencedSOPClassUID
    (0008,1155) UI [1.3.76.2.1.1.4.1.5.5388.671276795] # 34, 1 ReferencedSOPInstanceUID
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (0010,0010) PN [PatientName] # 16, 1 PatientName (0010,0020) LO [PatientID] # 14, 1 PatientID (0010,0030) DA [PatientBirthDate] # 8, 1 PatientBirthDate
    (0010,0040) CS [M] # 2, 1 PatientSex (0010,1020) DS [0] # 2, 1 PatientSize (0010,21b0) LT [Type the Title for Study into the Console (Study Description)] # 62, 1 AdditionalPatientHistory
    (0011,0010) LO [V1] # 2, 1 PrivateCreator (0011,1001) OB 39\33\fe\a9\73\7d\d4\11\8d\b4\00\60\97\e3\f6\5e\90\ab\12\fe\30\00... # 8058, 1 Unknown Tag & Data
    (0011,1002) DS [0.021004001] # 12, 1 Unknown Tag & Data
    (0011,1003) DS [239\3583] # 8, 2 Unknown Tag & Data
    (0011,1004) DS [315.06732] # 10, 1 Unknown Tag & Data
    (0011,1008) DS [13020.833] # 10, 1 Unknown Tag & Data
    (0018,0015) CS [OTHER] # 6, 1 BodyPartExamined
    (0018,0020) CS [SE] # 2, 1 ScanningSequence
    (0018,0021) CS [NONE] # 4, 1 SequenceVariant
    (0018,0022) CS [PFP\PFF] # 8, 2 ScanOptions (0018,0023) CS [2D] # 2, 1 MRAcquisitionType
    (0018,0024) SH [SCOUT] # 6, 1 SequenceName (0018,0050) DS [7] # 2, 1 SliceThickness (0018,0080) DS [100] # 4, 1 RepetitionTime (0018,0081) DS [16] # 2, 1 EchoTime (0018,0083) DS [1] # 2, 1 NumberOfAverages
    (0018,0084) DS [10.359198] # 10, 1 ImagingFrequency
    (0018,0085) SH [1H] # 2, 1 ImagedNucleus (0018,0086) IS [1] # 2, 1 EchoNumbers (0018,0087) DS [0.25] # 4, 1 MagneticFieldStrength
    (0018,0091) IS [1] # 2, 1 EchoTrainLength
    (0018,0095) DS [81.380211] # 10, 1 PixelBandwidth (0018,1000) LO [5388] # 4, 1 DeviceSerialNumber
    (0018,1020) LO [Release 7.01.01 F070102 E-MRI Brio] # 34, 1 SoftwareVersions
    (0018,1250) SH [1] # 2, 1 ReceiveCoilName
    (0018,1310) US 0\160\128\0 # 8, 4 AcquisitionMatrix
    (0018,1312) CS [ROW] # 4, 1 InPlanePhaseEncodingDirection
    (0018,1314) DS [90] # 2, 1 FlipAngle (0018,5100) CS [FFS] # 4, 1 PatientPosition
    (0020,000d) UI [1.3.6.1.4.1.56016.0.1.1.131.1620648192] # 38, 1 StudyInstanceUID
    (0020,000e) UI [1.3.76.2.1.1.4.1.3.5388.671276871] # 34, 1 SeriesInstanceUID
    (0020,0010) SH [0041] # 4, 1 StudyID (0020,0011) IS [1] # 2, 1 SeriesNumber (0020,0013) IS [3] # 2, 1 InstanceNumber (0020,0032) DS [-90\0\90] # 8, 3 ImagePositionPatient
    (0020,0037) DS [1\0\0\0\0\-1] # 12, 6 ImageOrientationPatient
    (0020,0052) UI [1.3.76.2.1.1.4.1.4.5388.671276870] # 34, 1 FrameOfReferenceUID
    (0020,1002) IS [3] # 2, 1 ImagesInAcquisition
    (0020,1040) LO (no value available) # 0, 0 PositionReferenceIndicator
    (0020,1041) DS [0] # 2, 1 SliceLocation (0028,0002) US 1 # 2, 1 SamplesPerPixel
    (0028,0004) CS [MONOCHROME2] # 12, 1 PhotometricInterpretation
    (0028,0010) US 256 # 2, 1 Rows (0028,0011) US 256 # 2, 1 Columns (0028,0030) DS [0.703125\0.703125] # 18, 2 PixelSpacing (0028,0100) US 16 # 2, 1 BitsAllocated (0028,0101) US 12 # 2, 1 BitsStored (0028,0102) US 11 # 2, 1 HighBit (0028,0103) US 0 # 2, 1 PixelRepresentation
    (0028,1050) DS [1255] # 4, 1 WindowCenter (0028,1051) DS [2484] # 4, 1 WindowWidth (0028,2110) CS [00] # 2, 1 LossyImageCompression
    (0040,0244) DA [20210510] # 8, 1 PerformedProcedureStepStartDate
    (0040,0245) TM [104641] # 6, 1 PerformedProcedureStepStartTime
    (0040,0253) SH [671276801] # 10, 1 PerformedProcedureStepID
    (0040,0275) SQ (Sequence with explicit length #=1) # 138, 1 RequestAttributesSequence
    (fffe,e000) na (Item with explicit length #=5) # 130, 1 Item
    (0032,1060) LO [Daily QC] # 8, 1 RequestedProcedureDescription
    (0040,0007) LO [Daily QC] # 8, 1 ScheduledProcedureStepDescription
    (0040,0008) SQ (Sequence with explicit length #=1) # 62, 1 ScheduledProtocolCodeSequence
    (fffe,e000) na (Item with explicit length #=3) # 54, 1 Item
    (0008,0100) SH [0040,0008] # 10, 1 CodeValue
    (0008,0102) SH [0040,0008] # 10, 1 CodingSchemeDesignator
    (0008,0104) LO [0040,0008] # 10, 1 CodeMeaning
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (0040,0009) SH [0041] # 4, 1 ScheduledProcedureStepID
    (0040,1001) SH [0041] # 4, 1 RequestedProcedureID
    (fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
    (7fe0,0010) OW 0000\0000\0000\0000\0001\0001\0001\0001\0001\0001\0001\0001\0001... # 131072, 1 PixelData

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Herman Oosterwijk@21:1/5 to All on Thu May 13 11:16:03 2021
    BTW, kind or hard to do some of the MWL testing in a development environment without a scanner. I've tried using FINDSCU to simulate a worklist C-FIND request and that only partially works, and I've started to look around for something to emulate MPPS.
    It is a little bit tricky with a live scanner, even if it isn't fully operational yet because the tech has

    You can use DVTK as a modality worklist SCU simulator. Conquest also provides a simple MWL SCU. I do have a modality simulator but that is not free, you can contact me through linked in and I can get you more info.

    Herman O.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)