Posts by kakarr0t

    dicom.ini file, HERE. (posted separately from post above)

    Hi Marcel, we've been having a lot of intermittent "Forward failed to connect" errors for quite some time, with no apparent rhyme or reason, and it only seems to be getting worse. We archive several days worth of logs (serverstatus.log, PacsTrouble, etc). After doing a grep of these files (on 3 of our conquest servers all running CentOS and Conquest 1417e) we're able to get a tally of how often and on which days we're seeing errors in the last several days (see below). Sometimes getting these failed forwards just needs a reboot and it magically works, other times our only option is to manually delete the potentially faulty file... But we often don't know what's faulty about it because the logs don't return detailed enough information.


    We're wondering a couple things.

    1) is there a way to get better logging for when image-sends fail? We have it on debug, however, we're not actually getting a real reason why the "forward failed to connect..."

    2) do you think upgrading to Conquest 1419b will either

    a) fix some of these failure instances

         b) and/or give us better logging?

    3) do you have any other recommendations?


    We're also seeing sometimes images will be sucessfully delivered to Conquest and then no other movement or errors or logging will occur on these images... We're not sure what to make of this. I'll post the config below as well.


    Errors | forward failed to connect, HERE.



    Our dicom.ini file, posted separately.

    For reference to the above question, here's what our LUA script looks like.


    Hi Marcel, we're looking for help using the destroy command within a LUA script.
    We're configuring this in Linux, but using the windowsmanual.pdf file. The only info available that I can find is this...


    Code
    1. destroy ( ) Special for server events, See e.g. script ('destroy')


    What should be inside the "( )" if we're intending to get rid of some data that we don't want?


    We tried it and it gave us an error.


    Code
    1. Thu Mar 8 11:14:59 2018 *** lua run error lua/ic-cqus.lua:19: attempt to call global 'destroy' (a nil value) in 'dofile('lua/ic-cqus.lua')'


    I think it needs to be like destroy(filename.dcm) or something, but not sure. Thanks. --Tim

    Hi Marcel. We're having trouble getting a lua script to show us the sending device's IP address. With our current lua script, it's simply giving us 0.0.0.0. I think I saw a couple other posts where people were needing the same thing, however, I wasn't able to find a solution.


    Here's the script located at this destination: lua/ic-announcer.lua

    Code
    1. print ('ImportConverter0 (ic-announcer.lua) Receiving on AETitle:', Association.Called, 'from AETitle: ', Association.Calling, ' IP: ' , Association.ConnectedIP, ' Modality: ', Data.Modality, ' PatientID: ', Data.PatientID, ' PatientName: ', Data.PatientName, 'Accession: ', Data.AccessionNumber, ' StudyUID: ', Data.StudyInstanceUID, ' SeriesUID: ', Data.SeriesInstanceUID, ' SeriesNo: ', Data.SeriesNumber, ' SOPuid: ', Data.SOPInstanceUID)lua/ic-announcer.lua (END)


    And here's the output where it's printing the sending device's IP as 0.0.0.0.

    Code
    1. Thu Feb 8 12:11:15 2018 ImportConverter0 (ic-announcer.lua) Receiving on AETitle: CONQUESTSRV1 from AETitle: DEVICE01 IP: 0.0.0.0 Modality: DX PatientID: 123456 PatientName: PATIENTLAST^PATIENTFIRST Accession: 7891011 StudyUID: 1.
    2. 2.840.114350.2.431.2.798268.2.46360523.1 SeriesUID: 1.3.12.2.1107.5.3.49.23739.2.201802081203410765 SeriesNo: 2 SOPuid: 1.3.12.2.1107.5.3.49.23739.12.201802081203410765GG


    Do you know how we could get the lua to show us the actual sending modality's IP address? Thanks. --Tim

    looks like it should be like this....


    instead of:

    Code
    1. ImportConverter6 = dofile(lua/importconverter6.lua)


    it should have these --> '

    Code
    1. ImportConverter6 = dofile('lua/importconverter6.lua')


    and inside of the new lua file, instead of using the # symbol for comments, it should be using "--"


    Thanks for your help. --Tim

    Ok thanks for your help.


    We've changed the dicom.ini entry to this:

    Code
    1. ImportConverter6 = dofile(lua/importconverter6.lua)


    Added a file under the lua folder called: lua/importconverter6.lua


    The file has this inside:

    Code
    1. #Separate and create unique Series with US Cine's#If called "CQUS" and SOPClassUID equals the SOPClass for US Cine's, then Obtain the last 7 characters from the SOP Instance UID(SOPSubs) and remove 10 characters from SeriesInstanceUID.#If new SeriesInstanceUID ends in a period, remove 11 characters from the original SeriesInstanceUID.#Concatinates the values from the new SeriesInstanceUID and new SOPSubs to make a unique US Cine SeriesInstanceUID.#Rename SeriesDescription to "CINE"if Association.Called == 'CQUS' and Data.SOPClassUID == '1.2.840.10008.5.1.4.1.1.3.1' then SOPSubs = string.sub(Data.SOPInstanceUID, -7) SeriesInstanceUID = string.sub(Data.SeriesInstanceUID, 1, -10) if string.byte(SeriesInstanceUID, -1) == 46 then SeriesInstanceUID = string.sub(Data.SeriesInstanceUID, 1, -11) end Data.SeriesInstanceUID = SeriesInstanceUID..SOPSubs..'.24' Data.SeriesDescription = 'CINE' print('ImportConverter6.0 received an US Cine on AETitle CQUS and has modified SeriesInstanceUID to ', Data.SeriesInstanceUID)end


    And getting this error now:

    Code
    1. Wed Feb 7 15:20:10 2018 *** lua run error [string "dofile(lua/importconverter6.lua)"]:1: attempt to index global 'importconverter6' (a nil value) in 'dofile(lua/importconverter6.lua)'


    Are we missing something? Thanks! --Tim

    Hi Marcel. We're on Conquest Version 1417d. Linux centOS.


    And are developing some custom LUA scripts and are wondering if you might be able to assist with why this doesn't seem to be working.


    This version currently works just fine.

    Code
    1. #Separate and create unique Series with US Cine's#If called "CQUS" and SOPClassUID equals the SOPClass for US Cine's, then Obtain the last 7 characters from the SOP Instance UID(SOPSubs) and remove 10 characters from SeriesInstanceUID.#If new SeriesInstanceUID ends in a period, remove 11 characters from the original SeriesInstanceUID.#Concatinates the values from the new SeriesInstanceUID and new SOPSubs to make a unique US Cine SeriesInstanceUID.ImportConverter6 = if Association.Called == 'CQUS' and Data.SOPClassUID == '1.2.840.10008.5.1.4.1.1.3.1' then SOPSubs = string.sub(Data.SOPInstanceUID, -7); SeriesInstanceUID = string.sub(Data.SeriesInstanceUID, 1, -10); if string.byte(SeriesInstanceUID, -1) == 46 then SeriesInstanceUID = string.sub(Data.SeriesInstanceUID, 1, -11) end; Data.SeriesInstanceUID = SeriesInstanceUID..SOPSubs..'.24'; print('ImportConverter6.0 received an US Cine on AETitle CQUS and has modified SeriesInstanceUID to ', Data.SeriesInstanceUID) end


    When we add in a line to rename the SeriesDescription to "CINE"
    , see near the end right before the "print" command: "Data.SeriesDescription = 'CINE';".

    Code
    1. #Separate and create unique Series with US Cine's#If called "CQUS" and SOPClassUID equals the SOPClass for US Cine's, then Obtain the last 7 characters from the SOP Instance UID(SOPSubs) and remove 10 characters from SeriesInstanceUID.#If new SeriesInstanceUID ends in a period, remove 11 characters from the original SeriesInstanceUID.#Concatinates the values from the new SeriesInstanceUID and new SOPSubs to make a unique US Cine SeriesInstanceUID.#Rename SeriesDescription to "CINE"ImportConverter6 = if Association.Called == 'CQUS' and Data.SOPClassUID == '1.2.840.10008.5.1.4.1.1.3.1' then SOPSubs = string.sub(Data.SOPInstanceUID, -7); SeriesInstanceUID = string.sub(Data.SeriesInstanceUID, 1, -10); if string.byte(SeriesInstanceUID, -1) == 46 then SeriesInstanceUID = string.sub(Data.SeriesInstanceUID, 1, -11) end; Data.SeriesInstanceUID = SeriesInstanceUID..SOPSubs..'.24'; Data.SeriesDescription = 'CINE'; print('ImportConverter6.0 received an US Cine on AETitle CQUS and has modified SeriesInstanceUID to ', Data.SeriesInstanceUID) end


    Here's the error we get when adding this line and sending a study that matches the ImportConverter6 requirements of CQUS

    Code
    1. Tue Feb 6 16:19:36 2018 *** lua syntax error [string "if Association.Called == 'CQUS' and Data.SOPClassUID == '1.2.84..."]:1: unfinished string near '<eof>' in 'if Association.Called == 'CQUS' and Data.SOPClassUID == '1.2.840.10008.5.1.4.1.1.3.1' then SOPSubs = string.sub(Data.SOPInstanceUID, -7); SeriesInstanceUID = string.sub(Data.SeriesInstanceUID, 1, -10); if string.byte(SeriesInstanceUID, -1) == 46 then SeriesInstanceUID = string.sub(Data.SeriesInstanceUID, 1, -11) end; Data.SeriesInstanceUID = SeriesInstanceUID..SOPSubs..'.24'; Data.SeriesDescription = 'CINE'; print('ImportConverter6.0 received an US Cine on AETitle CQUS and has modified SeriesInstanceUID t'


    Any thoughts on why this LUA script might be failing when we add that extra line to rename the SeriesDescription?

    Hi Marcel, we recently received some image data which was missing the MRN, DOB, Patient Name, and Gender (See below). It caused conquest to clog and not be able to process any additional images. We then attempted to delete that patient data via the DGATE command, however, that also didn't work.


    Conquest stored this data in a folder /conquest/data/unknown.


    I ended up having to manually move this patient image data to a temp directory to get Conquest moving again.


    What I would like to do is create a LUA script that automatically handles this type of problem in the future without causing any clogs.


    For instance, LUA script will look to see if these fields are empty or null...


    0010,0020 PatientID
    0010,0010 PatientName
    0010,0030 PatientBirthDate
    0010,0040 PatientSex


    If any of those fields are empty or null, then the LUA script will copy the patient image data into a temp directory, then delete the patient data out of the database via a DGATE script.


    My question is, is this possible?
    The main thing I'm unsure of is can LUA manipulate data on a file level, such as cp /conquest/data/unkown /conquest/temp/?
    Do you see any way that a script like this can be created, specifically the move part? Thanks! --Tim


    Unknown patient log in serverstatus.log


    unkown patient data dicom dump

    I think we got it.


    Code
    1. ImportConverter8 = if Data.StudyDescription and Data.StudyDescription:upper() ~= Data.StudyDescription then Data.StudyDescription = Data.StudyDescription:upper(); print('ImportConverter8.0 Modified StudyDescription to ', Data.StudyDescription) end; if Data.PatientName and Data.PatientName:upper() ~= Data.PatientName then Data.PatientName = Data.PatientName:upper(); print('ImportConverter8.0 Modified PatientName to ', Data.PatientName) end

    Thanks for the help Marcel.


    Made a modification by adding 2 functions in in [lua] string, plus printing the results with a more detailed description of the work it did.


    The part I don't understand is, why is this running with every single data import, rather than abiding by the IF statement and only running when data meets the correct criteria? Thanks. --Tim


    Code
    1. ImportConverter8 = if Data.StudyDescription and Data.StudyDescription:upper() ~= Data.StudyDescription then Data.StudyDescription = Data.StudyDescription:upper() end; print('ImportConverter8.0 Modified StudyDescription to ', Data.StudyDescription); if Data.PatientName and Data.PatientName:upper() ~= Data.PatientName then Data.PatientName = Data.PatientName:upper(); print('ImportConverter8.0 Modified PatientName to ', Data.PatientName) end

    Hi Marcel,


    I tried to make up my own Lua string for this, however, I'm not sure that it's working. Would you mind weighing in on it? Thanks.



    Quote

    ImportConverter8 = if Data.StudyDescription:upper() ~= Data.StudyDescription then Data.StudyDescription = Data.StudyDescription:upper() end



    Ideally, it should look to see if the data field is already upper case, if not, it should make it upper case. --Tim

    Hi Marcel. Do you know if there's a way to configure the import converter to convert all patient demographics to UPPERCASE?


    For instance ::


    a) if a name comes in as :: User, Test --> an import converter converts it to --> USER, TEST


    b) if a study description comes in as :: Head and Chest w/o --> an import converter converts it to --> HEAD AND CHEST W/O


    Thanks! --Tim