Virtual Server with local cache and readdicom

  • Hi,


    I have one conquest instance configured as virtual server for two DICOM servers with data (happen to be conquest as well). I have a lua script where I have a need to read specific SOPInstance in order to get certain RT related tags (such as RTPlanLabel). I understand that for virtual server to be able to access SOPInstance it first need to fetch the actual data from the storage nodes and store it locally. From documentation it looks like the readdicom function in lua should support such behavior but maybe I missed something because it does not work in my case:

    Code
    dcm = newdicomobject();
    readdicom(dcm, stuid .. '\\' .. seuid .. '\\' .. sopuid);
    print([[ "RTPlanName": "]] .. dcm.RTPlanName .. [[", ]]);


    The above snippet works if the SOPInstance is cached locally on the virtual server, but it does not work if the data is only available on the storage nodes (does not trigger the fetch).


    Does anybody has an idea how to implement the behavior that I described? From my experience WADO requests on virtual server are triggering the fetch of requested DICOM SOPInstances. Maybe one option would be to trigger WADO request on virtual server from lua before readdicom.


    Note: running on version 1.4.19b


    best


    Tomas

  • Hi Tomas,


    A WADO request will start by initiating a move from the local conquest to the local conquest. That will bring the virtual server data in. Now I found this note in my update history for 1.4.17d:


    Note: DicomObject:Read('p:sop') does not access virtual servers while DicomObject:Read('stu\ser\sop') does


    WADO and readdicom (same as :Read), share the same code, so I expected your code to actually work!


    Can you test again?


    Marcel

  • Thanks for quick response Marcel. I was also expecting DicomObject:Read('stu\ser\sop') to work with virtual servers but I tested it again and sadly no luck there. For now I use the dicommove from local to local in case that dicomread does not return the object and retry of dicomread after the dicommove. This works for me.


    Glad that you mention this local to local trick, I will use it in some other usecases where I want to prefetch the data on the virtual server so that I can zip and download from there... I was probing all storage nodes in order to locate which one has data to be moved to virtual but that is not very elegant.


    best


    Tomas

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!