Can OL CDS IR (2.5) be used to produce reports for external data?

My lab is in the midst of pushing for automating calculations via intelligent reporter. I've been able to manage what we need so far, but not all of our data is produced with agilent systems. It would be great if we could use IR to automate our calculations for other systems. I'm aware of custom code and custom assemblies and have an inkling of how this would work, but have not used those two much to this point. The minimum requirements would be to be able to take in data in a file format (CSV, XML, or similar), then be able to work with it by filtering, sorting, and using said data in expressions much like in datasets produced by agilent systems.

I'm fully aware that the structure of said data would be entirely determined by the input file and may never be the same as how it is in agilent data sets and will likely be lacking in many of the different fields normally provided. Additionally, I am aware that any reports to be used will need to be adjusted to work with these differences. Lastly, I know that any data reported on will likely fall outside of the umbrella safety net provided for traceability and security. The raw data would be secured through the system it was produced by and the purpose of this would purely be to automate calculations and print out a nice looking report in a system we already are familiar with doing so in.

Is this possible? If so, how would one get started?

Parents
  • Hello,

    Yes, you can use custom code and custom assemblies to read and write data from external files but not in the manner you are suggesting, at least not with any of the standard tools. I am not an expert on what can be done with the OpenLab SDK so it is possible that would allow more options. Using custom code or assemblies, I do not know any method to read your external data in a way it could be treated as the OpenLab ACAML data. An example of something I have done in a custom assembly, is to write a function to which I send the file name for the exported CSV chromatogram and use that to read the x,y data into an array.  A second function in the same assembly accepts a RT and time range from IR, I use those values with the array to calculate an average signal for that time range, this value is passed back to IR, and I report the value. I have created other solution where I store RT index calibration in an externa file and read those back for later samples. Typically, you are using the function to do more complex calculations or logic flows than you can do within IR directly.

    Marty

  • Hm, you see I need the filtering and repeating capabilities in order for this to be at all worthwhile. The reason being that what we save by doing this is the effort to validate an entire different reporting system and instead just need to validate the data reading. We would apply our already validated reports to the data with minor changes in the best case.

    I haven't played around with it extensively, but can groups repeat by values custom code variables? I can set up a similar data structure to CDS and use that if it's possible for it to repeat. I'm fairly certain I could get filtering to work in some way, but the repeating almost certainly relies on a key in the Acaml file in order to work. Without a corresponding data set to key, I'm not sure it could be done.

    Or is there a way to convert to an ACAML file that the system accepts? Even just having an empty data set of the same number of injections and signals might be enough as I can set up the custom code variables to key by those after loading the external data, which could make repeating work properly. Would it be possible to make an empty data set with things like a specific number of injections and signals that could be used for this purpose?

  • Hello,

    The issue is the reporting software is setup for CDS data and was not intended to work with large amounts of outside data. If you try and read data into variables, they will almost need to be specific variables or aggregators. If you try and used keyed variable that would require the keys to be in the ACAML. Trying to convert outside and write useable ACAML files would be very difficult as IR uses ACAML files across several locations. Unlike Chemstation where there was one central ACAML rollup file that IR drew from, CDS has a sequence ACAML plus each rx file and method file has their own ACAML as part of the zip. One other issue is that you cannot write directly to the data files when processing or creating reports as at that point it is in the secure work area. This is the case even on a file-based system from what I have seen. You could talk to your local sales about the OpenLab SDK to see what options that might add to this process. I think you will always be fighting with this as an unintended use of IR. If you just wanted to go out and read a file from another system to add some values to a CDS report that would be fairly straightforward but that is not what you are asking in this case. 

    Marty 

  • Thanks for your response! Sounds like we will need to just deal with the other reporting systems.

    However, I'm interested in the possibility of using custom code to generate sequence-wide custom variables. As it stands, there are no sequence or processing method custom parameters, which leads to a lot of duplicate entries in things such as validated compound LOD values as well as having processes in place to ensure entry is done properly in all relevant places. Ideally, we could read said values from a file that is produced by analytical managers so chemists are really only tasked with entering the information that may change from sequence to sequence. How would one go about this? Which base language is used and is there anything important I should know about file locations or similar in order for the process to work smoothly?

  • Hello,

    So first of all, if the entries you need are numeric and per compound, I would use a CC constants file. There are ways to create one big constants file for all your compounds and use keys values to pull specific columns by method or other values as needed. The only issue with this is you need to copy the file between projects if changes are made. If you want to use custom code or custom assemblies, you can use VB or C#. If you want to read or write files from a central network share the OS user on clients or the instrument service user on AIC would need access to that location. Typically, I would write a function to read the file and build a lookup table using an array, array list, or objects depending on the data structure. You can call that function in a hidden field at the top of the report. You can then create a second function where you can send a key or keys to return the value you need from the fie. The other option if the file is large or you only need to return a single value it may not be necessary to hold the contents in memory and you could use a single function to read the file directly with a key value as a filter. 

    Marty

Reply
  • Hello,

    So first of all, if the entries you need are numeric and per compound, I would use a CC constants file. There are ways to create one big constants file for all your compounds and use keys values to pull specific columns by method or other values as needed. The only issue with this is you need to copy the file between projects if changes are made. If you want to use custom code or custom assemblies, you can use VB or C#. If you want to read or write files from a central network share the OS user on clients or the instrument service user on AIC would need access to that location. Typically, I would write a function to read the file and build a lookup table using an array, array list, or objects depending on the data structure. You can call that function in a hidden field at the top of the report. You can then create a second function where you can send a key or keys to return the value you need from the fie. The other option if the file is large or you only need to return a single value it may not be necessary to hold the contents in memory and you could use a single function to read the file directly with a key value as a filter. 

    Marty

Children
No Data
Was this helpful?