From a738ed3d378e4a74efae8f821863ff122db70d4e Mon Sep 17 00:00:00 2001 From: zachcran <15938371+zachcran@users.noreply.github.com> Date: Tue, 30 Jun 2026 07:40:39 -0700 Subject: [PATCH 1/8] Update README with install instructions and basic usage instructions with images --- README.md | 73 +++++++++++++++--- docs/_media/main_window_with_spectra.png | Bin 0 -> 25773 bytes .../_media/select_report_directory_dialog.png | Bin 0 -> 11322 bytes 3 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 docs/_media/main_window_with_spectra.png create mode 100644 docs/_media/select_report_directory_dialog.png diff --git a/README.md b/README.md index 82ff531..7fa5eac 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,68 @@ # ReactIR Report Parser -This plugin parses report files output from a ReactIR(TM) to -extract the peak intensity of an analyte. The plugin will average the results -of three scans before reporting a new concentration value to Rxn Rover. -A sample report is included with the plugin, whose format must be matched -exactly for the parser to work. +This plugin parses report files output from a [Mettler Toledo ReactIR](https://www.mt.com/ph/en/home/products/L1_AutochemProducts/ftir-and-raman-spectrometers/ftir-spectrometers.html) to extract the intensity of a specified peak. The plugin will average the results of a default of three scans before reporting a new concentration value to Rxn Rover. -**Note:** The ReactIR trademark is owned by Mettler Toledo -and its affiliated entities. +## Table of Contents + +
+Click to expand + +- [Installation](#installation) + - [Prerequisites](#prerequisites) + - [As a VIPM Package (Recommended)](#as-a-vipm-package-recommended) + - [Manual Installation](#manual-installation) +- [Basic Usage](#basic-usage) + - [ReactIR Setup](#reactir-setup) + - [Choosing a Report Directory](#choosing-a-report-directory) + - [Main Window](#main-window) + +
## Installation -Download this plugin by clicking the "Code" button in the top right of its -GitHub repository and selecting "Download ZIP". Extract the ZIP file into your -`/RxnRover/Plugins/Analyzers` directory to finish installation. -Create the `Analyzers` subdirectory if it does not already exist. \ No newline at end of file +### Prerequisites + +- [Dynamic Reentrant](https://github.com/RxnRover/DynamicReentrant/releases/) >= 2, < 3 +- [JKI VI Package Manager](https://www.vipm.io/) (if installing through VIPM package; commonly installed by default with LabVIEW) + +### As a VIPM Package (Recommended) + +1. Navigate to the [latest release](https://github.com/RxnRover/plugin_reactir_report_parser/releases/) +2. Download the latest `*.vip` file +3. Double click to install it via VIPM + +### Manual Installation + +1. Navigate to the [plugin repo](https://github.com/RxnRover/plugin_reactir_report_parser). +2. Download this plugin by clicking the "Code" button in the top right of its GitHub repository and selecting "Download ZIP". +3. Extract the ZIP file into your `/RxnRover/Plugins/Analyzers` directory. Create the `Analyzers` subdirectory if it does not already exist. + +## Basic Usage + +### ReactIR Setup + +Before running this plugin, in the ReactIR software, set a folder where spectra will be output (``) and ensure that they are output in CSV format. The files must be named to match the following pattern, `SPC_*.CSV`, where `*` should be a monotonically ascending report number (leading zeroes are allowed). + +**NOTE:** See `examples/` in the [plugin repository](https://github.com/RxnRover/plugin_reactir_report_parser) for examples of valid spectra and report directories for testing. + +### Choosing a Report Directory + +Once the plugin is started, use the first "Select Report Directory" to select this ``. You can manually paste the report directory path into the path input filed or use the "Browse for folder" button with a folder icon. Then, press "Confirm" to use the chosen folder or "Cancel" to quit the plugin. + +![Dialog window to select the report directory. There is a LabVIEW path input field on the left side with a "Browse for folder" button to its right. On the right side of the window is a "Confirm" button above a "Cancel" button.](docs/_media/select_report_directory_dialog.png) + +**NOTE:** Existing spectra will be ignored! Only spectra files created after the report directory is chosen will be detected. + +### Main Window + +Once a report directory (``) is selected, you will be presented with the main plugin window. Along with a plot of the parsed spectra to be averaged, the following features are available to configure plugin behavior: + +1. The target peak wavenumber ($cm^{-1}$) can be specified, defaulting to 3600 $cm^{-1}$. +2. The target peak tolerance ($\pm\ x\ cm^{-1}$) can be specified to accomodate shifting peaks. +3. The number of points to be averaged before a peak intensity is reported to Rxn Rover or another remote connection. This defaults to 3 spectra. To disable averaging, set this to 1. +4. The reported absorbance from the plugin can be scaled by a max absorbance value. This is a simple division of the measured intensity by the max intensity after averaging. The max intensity defaults to 1 which has no scaling effect. +5. The averaged, scaled absorbance reported to Rxn Rover or another remote connection. + + + +![Main plugin window displaying three parsed spectra in a wavenumber vs. absorbance plot at the top. Below the plot are the plugin behavior settings described in the text: Target Peak, Peak Tolerance, Points to Average, Max Absorbance, and reported Scaled Absorbance. At the bottom of the window are indicators for the chosen report directory and most recently parsed spectrum file.](docs/_media/main_window_with_spectra.png) diff --git a/docs/_media/main_window_with_spectra.png b/docs/_media/main_window_with_spectra.png new file mode 100644 index 0000000000000000000000000000000000000000..c034e2f51b858e4cbed7139334311f6bb461e215 GIT binary patch literal 25773 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 literal 0 HcmV?d00001 diff --git a/docs/_media/select_report_directory_dialog.png b/docs/_media/select_report_directory_dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbb53842d622bc2234846e5a50075058ea4e26b GIT binary patch literal 11322 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 Date: Tue, 30 Jun 2026 07:41:37 -0700 Subject: [PATCH 2/8] Expand gitignore for more LabVIEW file excludes --- .gitignore | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a7d72e6..cb58937 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,14 @@ *.so.* *.dylib -# Executables +# Build *.exe +builds/ + +# Metadata +*.aliases +*.lvlps +.cache/ # Computer-specific settings *.lvlps From a9427d1a763a674e3749ec101967c13e4a684e4e Mon Sep 17 00:00:00 2001 From: Zachery Crandall <15938371+zachcran@users.noreply.github.com> Date: Tue, 30 Jun 2026 09:25:27 -0600 Subject: [PATCH 3/8] Point explicitly to latest release Co-authored-by: John Brittain --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7fa5eac..7bcb8e3 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ This plugin parses report files output from a [Mettler Toledo ReactIR](https://w ### As a VIPM Package (Recommended) -1. Navigate to the [latest release](https://github.com/RxnRover/plugin_reactir_report_parser/releases/) +1. Navigate to the [latest release](https://github.com/RxnRover/plugin_reactir_report_parser/releases/latest) 2. Download the latest `*.vip` file 3. Double click to install it via VIPM From f6980b999aa491d90facc4ee4988516adcd34f3e Mon Sep 17 00:00:00 2001 From: zachcran <15938371+zachcran@users.noreply.github.com> Date: Tue, 30 Jun 2026 08:34:36 -0700 Subject: [PATCH 4/8] Update with example file names in README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7fa5eac..bd9660b 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,9 @@ This plugin parses report files output from a [Mettler Toledo ReactIR](https://w ### ReactIR Setup -Before running this plugin, in the ReactIR software, set a folder where spectra will be output (``) and ensure that they are output in CSV format. The files must be named to match the following pattern, `SPC_*.CSV`, where `*` should be a monotonically ascending report number (leading zeroes are allowed). +Before running this plugin, in the ReactIR software, set a folder where spectra will be output (``) and ensure that they are output in CSV format. The files must be named to match the following pattern, `SPC_*.CSV`, where `*` **MUST** be a monotonically ascending report number (leading zeroes are allowed). + +For example, `SPC_00003.CSV` is valid and `SPC_004.CSV` or `SPC_00204.CSV` would be parsed if they appeared afterward, but `SPC_00001.CSV` will not be read if it appears in the `` at a later time in the same session. For now, *file names are case sensitive*, so `SPC_001.CSV` will work, but `spc_001.csv` will not. **NOTE:** See `examples/` in the [plugin repository](https://github.com/RxnRover/plugin_reactir_report_parser) for examples of valid spectra and report directories for testing. From 6811ad3377b7e5e892ce0febdce73a6738913051 Mon Sep 17 00:00:00 2001 From: zachcran <15938371+zachcran@users.noreply.github.com> Date: Tue, 30 Jun 2026 08:36:05 -0700 Subject: [PATCH 5/8] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 528cfe0..54b5757 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ For example, `SPC_00003.CSV` is valid and `SPC_004.CSV` or `SPC_00204.CSV` would ### Choosing a Report Directory -Once the plugin is started, use the first "Select Report Directory" to select this ``. You can manually paste the report directory path into the path input filed or use the "Browse for folder" button with a folder icon. Then, press "Confirm" to use the chosen folder or "Cancel" to quit the plugin. +Once the plugin is started, use the first "Select Report Directory" to select this ``. You can manually paste the report directory path into the path input field or use the "Browse for folder" button with a folder icon. Then, press "Confirm" to use the chosen folder or "Cancel" to quit the plugin. ![Dialog window to select the report directory. There is a LabVIEW path input field on the left side with a "Browse for folder" button to its right. On the right side of the window is a "Confirm" button above a "Cancel" button.](docs/_media/select_report_directory_dialog.png) From 2d5fd16c2e2145743353e305b2552898380f08bd Mon Sep 17 00:00:00 2001 From: zachcran <15938371+zachcran@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:29:42 -0700 Subject: [PATCH 6/8] Remove *.aliases file that is system-specific and should not be committed --- ReactIR Report Parser.aliases | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 ReactIR Report Parser.aliases diff --git a/ReactIR Report Parser.aliases b/ReactIR Report Parser.aliases deleted file mode 100644 index fbe82ff..0000000 --- a/ReactIR Report Parser.aliases +++ /dev/null @@ -1,2 +0,0 @@ -[My Computer] -My Computer = "172.26.240.1" From 77d5e6afe379e1d84dc8d57643a8c1a75d5cefd5 Mon Sep 17 00:00:00 2001 From: zachcran <15938371+zachcran@users.noreply.github.com> Date: Tue, 30 Jun 2026 15:12:02 -0700 Subject: [PATCH 7/8] Remove unicode copyright symbol --- LICENSE.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index 8ccf21e..820cd37 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright © 2023, Iowa State University +Copyright (C) 2023, Iowa State University All rights reserved. Copyright 2023. Iowa State University. This software was produced under U.S. Government contract --- for The Ames Laboratory, which is operated by Iowa State University for the U.S. Department of Energy. The U.S. Government has rights to use, reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR IOWA STATE UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified to produce derivative works, such modified software should be clearly marked, so as not to confuse it with the version available from The Ames Laboratory. Additionally, redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -10,4 +10,4 @@ THIS SOFTWARE IS PROVIDED BY IOWA STATE UNIVERSITY AND CONTRIBUTORS "AS IS" AND =============================================================================== -ReactIR trademark is owned by Metter Toledo and its affiliated entities. \ No newline at end of file +ReactIR trademark is owned by Metter Toledo and its affiliated entities. From f560731f1f28de86912cb32e6a11fcfdddef5fec Mon Sep 17 00:00:00 2001 From: zachcran <15938371+zachcran@users.noreply.github.com> Date: Tue, 30 Jun 2026 15:15:20 -0700 Subject: [PATCH 8/8] Update copyright year --- LICENSE.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index 820cd37..e8ee7bb 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ -Copyright (C) 2023, Iowa State University +Copyright (C) 2023, 2026, Iowa State University -All rights reserved. Copyright 2023. Iowa State University. This software was produced under U.S. Government contract --- for The Ames Laboratory, which is operated by Iowa State University for the U.S. Department of Energy. The U.S. Government has rights to use, reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR IOWA STATE UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified to produce derivative works, such modified software should be clearly marked, so as not to confuse it with the version available from The Ames Laboratory. Additionally, redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +All rights reserved. Copyright 2023, 2026. Iowa State University. This software was produced under U.S. Government contract --- for The Ames Laboratory, which is operated by Iowa State University for the U.S. Department of Energy. The U.S. Government has rights to use, reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR IOWA STATE UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified to produce derivative works, such modified software should be clearly marked, so as not to confuse it with the version available from The Ames Laboratory. Additionally, redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with distribution.