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.
+
+
+
+**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.
+
+
+
+
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
zcmaKSbyU<**DfG}bO{KOl2Qst*GP9r$ACx-FmyKz5-Q!@(j7yGASsutZHv9FsIcD)W2cb1*e?a>pHz~(Bql8UTx<_b
zmg+3LRn1wq&1YdymD^8RH^wj4U{0fSrKX2TY6LJ_(_d+oqV#I)$3}Z_b8&aIbS0q<
za`#aiFI}ch_}E_VA9&q9Y_~1?w1YP4atdQDtfLQOTd<
z5z-(N_K_g(=+$k+=F%b);s-Qor8fJw#voxx%J?^tQ0jX!A`=$k02($8HQIzUu&o!W
zh#V7zk$$>g-*&!&2*9_ScHwVRMBS^;okt#v@C+yzFrq-1FJ6wp-_!9w?mqfiZSpDa
z8<6xQ@zR4(=<#`AEL$nK$Ic_mPE+}6M~W!)D~$M;np4g=u*ZSNd)#3~K&_u?RQ2c^
zw=e4W#KhV@K~UjILde^<9}y4xeoNPzCCiUBk5~IWD&glYKCAyQRIZm?1I-IAS~G6A
zuvWB$Bzi8EMzcaGIIs|c*d+-r7w)IA&oobW9Rec)?&dY0sVpsI+3XQUl4|azaEn)V{GmjIX>gnt083T6#DW
zB@hqZQ+7QZb6h)4YrkE%O?=u>uEtM>+)({|f82KVs`$yDDq`KfGf3Sm{yFgG_^g7I
zHBqw2TI#Ef@78%Vg4&A1N_&)Mlis4`U_-#mO`t-S#vi1hFz~wKQLOM)tzs(8SA~~3
z@`-Vt93K&B-eVGoNA}%91qZ3!qq?&~Qs)B};)ggaQ5$hLTAxTg
zSH;wHoIpyV9}PNr0cy|sGRnnFPRP|DX*?U9Py}rfD_wb5Jn_+K-X3_f**apE;c%Jm
zc}?TS>iIZRewnX>y#?(xAGZv=5#kM%U}d`9<1O<|e<*v?n_4ryt&{TWdPwD_@q_PC(A7Z
z+NO%z#b?giIdJ^qExFx(*w9B}+?74b3cJI~+EkVT;b_n+6je?OvX?j*WCp>O#HQ-e
z<(37BFK44zI6Hf9t}Eu6b6WRf-4<+Yl)K%gm>dom;o6iP=9;7{+$LetyhBp=3IjoN
z8n!7Vx9}0eN7r!g%juglj;y3*VtoQ}+shX<@rc&IoapF>bGv0@(UOp*3>F+2{9-@h
zYV8)ZjJxtN2gwSGNMsDn`C=8p_$Ve&5fz_QO|
zJ4uAfhut7X-e!*Uq%dtc;2qRI^u~`XnYZ){pIsWghU7RC$le^!VmkH
z=LbdS`;?e)&9?z}g~i`~&Yo0QVekZv=juBB!D>g)HWpf2Bw;slsnnlHGo{Y@GODCk
z2^6G=UqC&Ou!%8CZA?s02`>;NGp!@-tq*FH_8H+VX;q?j{;DiQ86QR~$P%y`a85^&
z%(Fd7Kgv)h3{-@#Xj7t$N$}3AuuWH*{?6lgcWBU7o-Xu&*S;*gIXP@bs*Fo|*nFK`
zw!1vd%4ybOP!ag=?hA21_bjD&Jm^uwr>MaD@!;Ybey{|t`=o8~oWY2h0gjeWPD+*T
zJt|tQ$p$N)7y5&;`ZlC|VnK#jhYfGJ&h5JV<}UOP`qr6_)!}g6V649s5(^sp*Bs;9
z?}6AHY8IM_4_XoBV15sj9~aF-H6v7h?B0<&X9fj+G}aFTyItlXJs4xlUKTx*{YMOm
zmhQjNc88lG4K^AMF!kZ~Ottdq`R3aC%%cIMNiL;iT_ItM9&=4*b_G8VnayKlhp#yU
zMw%M!9Q+(6YL2t2gcn5ruyzS*fZGyTw%ajv`9x1#T;X9
zw+y?g%R+*ndZJ(M^;|lWf^?uGSLRYRNSU208ee!<|RhgwFeTk6vSTT1IMr
z{n*w$e>^Lz_7#j0Xw-~-SM=)Qd^eT1)i&cMtE{wFA?1ZJcmT_EJ(Y#~!u?0aCA$9m
z(-OGXSIB)SRZG6;O;Za6=X3GK3A3K>1GF5ba9mUlQ}JZZ1jLTnW#a4f-`Kj_&)>~Q
z+eEw}#$gLniRB|Z%OamCqf`tFAM`JEwm@SZn52{H*W?=}z7~jf9sgSEqK9@K@hd4t
z0i
zOOck)ZI-i4N6eA|9_l6Pk1f5I;Bh7lKuuB}@O5tu1(|@_$UtqJET#s9U}+Rx8W4D(
zlg$wua7oH2lRQi~8*=`r)gb?-gdp92uf~=AkF^t#T*{h+x5H6ovo25zq43OS(tw*&
z1*3#hp8#lRU^*{q>+5^RM?#Dd&?!xIPr4`Jf4NbhVK^-aT!Q0vArCl5N*E1zzTMIK
zAnEkX!QpOOz+}A{zi>QRJ|`eH?J@rL)F4~SC3^S62+d^Pem8Fqk7w~Z2Jjo)^;DX2WtD
z_iKv}mpED&@_(af_At^V(|~^;=?N_h=0*Bks=OpRTy~Rh%gvF0yXkkohm_c;JdhkS
z>sCj3;Du;dYAFm^5oL6>y;k%l#y;QSYEG9b2ihJm}-q6;ixf>@}wIJ3c
zkukue3PSvGONmQ}&9B|C{iHDcH_YbmePrFbD5=B6-aO*C0O4A{|AB?`_yHm))f;@@
zR_CJs%`4vx#5#Md?W(lD_i|dBuDmN?o^hHzi3N8-FGS`dSoQbr+(Z1d=*zM_dc;3L
zLAKHT&gx|wJEsiZN7<%>mzz?Hf9-q2O?ne1N4n-oUKtPclef$cU^dI_lM>f?nNsq)
zTF%lVvsB&cXWpV0g{Fg2fIHbs@jcTt3-Xr
zxn8$XG_AeX>=RPJtDyT^mWMXpW6tw)Zs_PB$Z4TRG&`q?@>R7fRMI9EV7jluLs7
z2XS6ekS+k8ab_h?l^X+0Uu%B)JR-Gr>SpC&+tn}MID`s(ym>)$dwEtTcz7UJ$wAlu
z{8PzwgxG@6da`=Kd!#dH_}Qd>dTZ#O*W3;gyu5G{(&;aKTW$G*_EJrY?;>@!i26W>
z6`xwXnr~!DcC;@{oCa4wzreN5#pJ|cJ&kU;&ce_zfbSjWviSVt1CHx6{2DBYRu$`v
z;^dZjCIqD6?IdN~t)a80z`~eYL11OgzI}+{^+t~4LQkXk$`m(ld%|Ze&zj_s=$q1r
z?)uOO{Pc}Q*(QU`)`_wKZbyzR==21R;%m`R(cj&tXsy90BT|buhDV%OY+MiVUhdF+
zZ&eYC*!lWjT6vnFnK)6oLwDZ4R$UC#r8g
z&tx4Gdp}3c8nVO41TEWWkTRp3#tE6H>ZTk1drwjmb#P)GHVJnX&AoX~>p>T-w68`J
zY3HLTk|Qbl?z(=68`I})tH-x%67s~PKL>Yq*y_6cCU0>A70X5#m7@7jJh^{T4DIWa
z*aXIiS#CClt1$~7(}_>z{7oJ5jyRH&>Z}jNRCV2Hi`J;}IZ>djoB7sU$s+ISl*S=JA=*&t_>Qs7zXxWC%aQjY=8OczX3#z%hCm3oyv
z8xKW)l@6~TN8GT9;R`ZJ+SAXhu@PEbEbmwo`^wnsi|w)`_AeVNi_jf>J=)m^VLZhD
z-J{-``h;qoa~OYe@KrorzWqum=OncZ#AKZROJMQ2LAQoxnJvpG58F)80!)MHrF%`{
ziQ}ynWx>%KyUYkFO3_e`vn1;F4@)k~bB2v>l5K7yXmC5
zjn(eD%NuKviq;k%3}Fn7n(=y_tE!W#EbOBX6(NXT
zlyt8tQU>$Iuo{jyH(NnH#zvPS4$fyy&lrXUvs>(oL5L%NsR!EM;aBo;{oaO{Zb>C@
z(teZkLxLK_+Q*?c+uNd5S?rK}C!HdzPcbIC3ltxH7hEeKqF@^9XD^)dVd
zZF+Xq%Z5DTRVR(QODW3JnAb$#C9|n){;oAT6@zn-;uK6SZq$W>4m|c|q;zc8UHfxf
ztd@PM6&gLJfwe@?Xmas2UGUHCO}^eP4@Ben{63*3v7!B&*V~CxvEaJHhg*ccA8W`PH#5uD
zLRlKD1U?rG0p7%F`H;_txn|#|Od9=);zD&V3x*HGXG0GV2MXjxy#jszto92{2j`YN
zF>&2any|^W6f&pPscIRyH+jSeKky>YyWCD!EJKKM1UC`oBk`Xt80h(H7XC;J*aczj
zYq=*H?i-f@+7>|TPGD8B`g3{o)+X^5B>08TmYCgh{OhnB*vd2iD2C?
zVL%v=hi~DXf&LVYToDyIS|VFoS=b@^XZYW_P(i?<*fGPm8LtzM{u5DLSw+3=ihL&9
z77*l^w9U;WMf50A?Ec_GaUqUEe`KsC!iA>FSNMvMD_<3&8sJE8>iqq3a1(0C$Oa_&
zg(Ap(Br$dr%rYls<3W}P9udq8089?U(efV=G_=7-#yZ)+C>DCQu3AbiS;0&h44?g3;l0jE6}zr&=wX&6BlFx@o(UZ6eHB*coKXZ-
zCTIBPcRgSfaV``b5+WllEpIQWPAJO+>*(mne7v*MDkEg16mZxIXV7f
zNU(0d-?vK-;^{9?L8K)`P>cCqF1kH#$%r|UNT-Jser(CI2$}YIJReFm^0J;9(Jm9c
znkn{k_ng@EyL6+Yqf?#F&d%-}M*~myOP0KI;AI$$0)4^Qici5kEG{XR6m&n@Y@ndH
zGhOWrQWg0(py1w>A8Q*S%*DSO=$#a23!b36o33voo-f|NY=3Mefq#wkJ6vvY`}<>c
zHJ>w4sloazkTVf{z4X1R{bmaGI98Om{}oSkbd^}t3$ecx(@CYHfWkwMB&A=5%S_pM
z)k)g5DSFx1)+YLIK-s+^7?sw^6NCXw!o;s+mCW*VK^M$tqY%?5pDX4^NyXDPGfjP7v
zC-5gpvmoxFTp!1xXl#rHRXra
z5{)$0K+-Yf(OZT1giCRhGeyg|g=0aC7`3&vpYt|e^3(*Bn6}`*qc7B%RsK{2omo!~
zjFy<=E%F;h_9&gRj}S~3aoU)y@I4QCcvyZ|6MNVwtM_&K_hPs&7j?ZbToCDo2^NTd
zM9i}Vo?ZPo>^x2tB_o}gPWBJ$r`4_=th`uzYK4CVUQi%2KvtJ0Ee~}cg$B?5{_Aw7wpN7L7Yh=^4
zmJ_N0C%x2u-ot4EeKP4BA0hYEKE9S#pmv$Gh*@X&oDP2Teu
z6tOyy`A|CyFlEV%m3rT%R6qO-#O9`K+6W9X5_c#X>7y~u3*Ltav%+C8Wb1&(fjRi*
zqvy>vfx|;5(@DtJ(@lG6Dh7!D<9+MybjQYMwuJjp$k7+My+Bke36Pl4@5t=ajUlYZ
zg2XF-$+!^Psty5JRKGjfv$qQNPu4
zV=y_<$oINXE%$S5peorj3`r%VabDxjz<=M!dlbOWP#J;j?G0+eyTr$kK2`;>A6Mb|
zDNQ6e+MWzBYXS>f+Xux)nRB_9r?OyH>2K%2!EQ-6s&mlZ^UD<|)2osr_nBDY{DIrv
z@%|V4dLVI3O!zTJ0cd!RAgg>TLc|LoUB3k*xv-O$p8;v1su19D=BgkgQ%s;pdKwH>
z1pV_ifW)nq1l&j7>^~i#Opm;i^79uda6B`h#!M$PCDf7`3j-G83A4&I<)ik213pF?
zQ2#&TLQ-%^9MOC%62{LEz>=LMlVk<3oZ)Ac=RwNHU%fS9gy{i4rUC?S
z=>cFdfVzCsnGygD>&X?WLNe*`*sAPbtra(OQUFCU74-uFNXy>0Q
zqYJ8MoEb`%h(xhuX`(#m5|%Y+2Sw;YlxvxLKH{@zwmo`JZ|0gv`1Z~aoHCem30mhZH2n;
zRHd6|0l0_=JsBB^ii3kj$S@lans`{N+S-rxu?;y>K??K@IJN}+ZF0|SQj5iBDMWz?
z0Kyt~%P?C(VmSkaa7~O={hCWESufp_!;`zQC+V13R45<+;6H@2Zr>5`JYTg;$0cN(
z$%sBm7v=335Bj5Sx|N;hmtB#0UT2(Dt6dTC{S(1Fi&Z_%T|F6YQ+-C2U$gO^H|Su*
z#q))R1x(pZv}2zJU!0N_J2c^g)4J+=V!uNHUa|wu;AfQedl?0MEBeo+nNghwUZ!uQ
z#Urrxw2f+rqtp41=XOjK!fY)=nq5WQBT3W(?LRNqc~P-J*Ft*~>7%Gn-j4I=CsdL|
zhmw`*-n}O+JSX6sFUVwa(;e73WR_J6gRl+5Q{k>W(6O)-M}jtOPIm-mlc@DLq!^v;=m
zS1lnDc0A2uQB9q{pDhbhX{K3dei>t*fUMPh+bV;j%HC1wk7ZBP~bUr7Xgw8W4v&a@N><_hu|ek<0AVYg0^G
zcta{(O`*?oz2S4d=c_5A5PQFKu9l=_C|11;tt+l_XH^^juu4wLH`Avl_m(TLziH4*
z{bE{$C92#;kT;Ql;@e^>?>{LM{Fv`~D#H
z9#LCJ2n$cB4m7=z@@}Fsx`Qz14P5UA@Qw+olA?JS?x8ahojc21V^ay-p<~FS-gJ!c(O{_
zx=Ool{`l7qh#>ydli^|ITf0A{T=TY$w;Z#3fn}AedL8mF24byjyR8#<6<%$HvDBf{
z?w2hY(^MRdKc9xT_07I!D&+H6SAUTil&1NckFbv%M!usrt;*;oJd=4s`t_eO9$kqj
zK+l~gGxpQ@%8~Km-m2f5*v7muVFRc$;Ez{zqVrAfhs0+jZE`LPuf4_#z4H7B3)z9c
zY_4nEfJ1GE2sjQi--?)j{Y5}UK=kcEG`n1?Hz6ZdfyUHy!d+6D=HJUWh%}fr^0j_6
z5(YiM?y)yI{q6%!*gtfj{}RV3)0C4;!W(33sDU;cfGe@TZ-#sUoxg8D;Ly+yw?LHr
zEfmRRNGU}dIPA8WKwyPO3P)6+Y>QI0Ge`Y+)r;q08tUJc4#cXW22*Q7%hwSXgWMQ#
zA8E9}65dQ6rr&-|X&Z$LNRg9~k#UspRb#*&MlaN8SIE%?bH61wkFTX7uPlJ|+m-nv$O~)w^;b3#w7m6U3Jqn?#?z=j#
zj_?FY{2j9->ZByL(d?cp)))|%lnZ?1MWf(bu>Wm9)zA3eqz8LbV@Ejd1x6DZY+^e>
z-?wb|5y;SjQ0SUYs(f#<`_w1IhCqbkuhQL*pzkz_QS`Cc5y5Dy
zsh{mreYWauu$9=b98ALd%{}a<2<2A1LFM??AZ;Cu{QkBG~o}7i!EWkU2}78oa73
zbX`W9ANRIX@471C_E82Qo9SdeW#F5Bk@RlUr67fZ|D~9ep(x!>x_2DDeH=C`U0akaEfGDa62m7VgQTk
z{d^51(l#fZCKCJ4F30&9o@cM{hZ&|l7lVm$;?Qulfnry9Qz{RnYU?${N!d$#?Y#*UDUR9tN02`>qm_0*1H$X2vmr*
zWyUCL$ET||h|xzV4aN){k{E>SyHp+ZwVyE)oV`$BPjhk9ByAbJxWN{CZd0Q_>%0qQ
zpTCU1kof3osli)KzMHc29Sz&~^IB`9!R_D10^9oCRPECD9<;W8?u%pmLF`Khdz=Mp
zt=ZYgF!7`lXPj=Gl57@co28a(AOr-lrmp}go-we_`O$g$Z5s{3jP1Vl8cx3oX=>M0wRLu{`zloOW!9#KGiQ@LjItzLq
z2aL|11YCTTtr_$94-`dBBA^~$i5n6iV|s!??n|Y*ZR}98U@^S&A&A@06Vb77n3w$8
zZwgIA0n94;ZQID2!*sGGXKjx9&_&qkl*jiPqj5+5wJ!Y3>l#)h_MlhMciRTzy0CblVgut_2N*ccO3IMLNKeOh%uraBLl|#3JH1^HkrttvfRNxDJ+>(
z&o!#mKfl`aM0}Sy(ENeN?RD0=8!^o1Sa44xE`xoYRm$7J2b3z##i=0IKKdD%R>G;?=sYEF8gO
zErkpuOQr_f;cniNSOK3iBo{^78!CDH9BvX8(Dks-sJl1)SQ1!rWk#02T)w}DI$_Bd
z;RVf(!nq4vAUim*da*S*Md7`?y)RWb)UJ66ys+78kp?+ncTYZbe*~{
zv$3yD#oWw4D3qWr8&yyP88NJlqz>k{*5AD!S9sUDS3QsgJtE0Bnv3#(2b2)g><)BX(KZK>EhykUO#Un@f=LHIyL)
zJ+ri?xy7npg>85PYf9m;Y1<=Vs>%6s>x2dUkmZHb>N6I_nzW(o)6J?+UstC96x<+jlqyqvM+@@-Afv8!CJqh#=8}9UKl!S2&=)b(!dXv<3Hn(dnGdHevNA0
z&6q^SkBTVC{Zh)(06Wzy_f74qBu83P5Ohzbw|ajHEgL6IaESU$O&+
zjYO7-<3!;Zg-=gwZ7y?iW=f-6y$UOQM#e}eOAc#r*}vJXXpfUg!ANQ^P?{^FkP@~#
z`4$Fxd1~g}Qw-HM@;PS`{-nGT;PaVcgZGc=Mt-Vo)AtHy3`w{7u3{+laUVYNedKd#
zH|RJJ#3%tl46BelFOV(Lz>a`h(N*2C7~stj6-xYtIFNSIJf)rV;XrI<$=&G=#7!&=
zz#Zs+i_2QbjGt1_e?aoe;AZ>k>B80nXlC8P8eU-;h$B?tye}q1)33625ysZ
z$Nnlx;Px71H8=P`{CoO1(ES|r^WN-_fD60&M1O~A5K!|sG~XG|ZMYhJvevn%f8NX+
z4+v7R-oy?&N~hzXNK`!3LXIiKXn!A!%_X~ToxjE;admOo67TK#RDS84ZMOBc4~=D6
zO%>r?RT+h9rIclMg4&L6?y?hZdHHw$^}dX)2=r#NZ~UNJ1j_ps{xx{$ZX1klwpwX;
zM!EI=`C@17*)A=X*(988@J(;jM--9!uWh-VH;Np;=jt}C^tIq6d5fh2p;F5!mQMY
zi>qisXqKPg*Ok+gYD&Xt>d+Y_wVaD=Ws_PZGfYf?Ig$)s2UdsW)56*vEfd&8z8ia-o+x|SZNQ@1
z@p=&OB{FTzBL2v;V6*Ji^oc-hqEB6SS`x4#?BfD(BtQ~P6v&Z#i12_P!fCTu04Q(3&T*Bw
z%F|c^Y*zR0-TqCg)2oiY2or-zRJFBO;PnI{71oCEu{xHl#P
zIJROw0sz81KEDLooC4Cr5-J5xd1_?oG$jC~^)Rc96v{b(QEQ}Tq$(D~3t+4ksGuOm
zpic%(R;eL!7!@C%hUjT#mD2731d>X?%<>rDJk4w>kUwVfD?D8j0rQ=()M)Y#P<{Xq
zJ{af#tYDNOVB~BVOhUH_(E8+nd@4)!X~^Y({jD%={hkEqg%!|K&985KqCia;rtF?T
zI&B`e24tsM<;PUOT~Z%8Fh2hg$%d9Y9hXb(c0)Z*R
zQYaSP=eHu1r32*TkZ?}m9DfOzW0eeX0W4cS9er!1oExP?D_1N}0}@89|8&$x0u$)r
z)cNh{sQ;g0P-9a!Go1LYJX7bPdzf#fFyF9Bc2
zI{b|U5N|*A5#i0L2lVkTP_dhAEC4_b28!D$@1&nrN*eGmho4RlnB$*7D$Wi*?Y5B1
z%6Jhcq_v~h_-`fxP%i@1<
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.

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.