pychemstation 0.6.6__tar.gz → 0.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pychemstation-0.8.0/.coverage +0 -0
- pychemstation-0.8.0/.gitignore +7 -0
- pychemstation-0.8.0/.gitlab-ci.yml +18 -0
- pychemstation-0.8.0/CHANGELOG.md +5 -0
- pychemstation-0.8.0/CONTRIBUTING.md +98 -0
- {pychemstation-0.6.6/pychemstation.egg-info → pychemstation-0.8.0}/PKG-INFO +25 -20
- {pychemstation-0.6.6 → pychemstation-0.8.0}/README.md +5 -4
- pychemstation-0.8.0/build/lib/pychemstation/control/comm.py +206 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/devices/injector.py +2 -2
- pychemstation-0.8.0/build/lib/pychemstation/control/controllers/method.py +338 -0
- {pychemstation-0.6.6/pychemstation/control/controllers/tables → pychemstation-0.8.0/build/lib/pychemstation/control/controllers}/sequence.py +17 -28
- pychemstation-0.8.0/build/lib/pychemstation/control/controllers/table_controller.py +266 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/tables/method.py +14 -13
- pychemstation-0.8.0/build/lib/pychemstation/control/controllers/tables/sequence.py +211 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/tables/table.py +24 -31
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/hplc.py +7 -8
- pychemstation-0.8.0/build/lib/pychemstation/control/table/__init__.py +3 -0
- pychemstation-0.8.0/build/lib/pychemstation/control/table/method.py +274 -0
- pychemstation-0.8.0/build/lib/pychemstation/control/table/sequence.py +210 -0
- pychemstation-0.8.0/build/lib/pychemstation/control/table/table_controller.py +201 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/tests/constants.py +9 -5
- pychemstation-0.8.0/build/lib/tests/test_comb.py +136 -0
- pychemstation-0.8.0/build/lib/tests/test_comm.py +65 -0
- pychemstation-0.8.0/build/lib/tests/test_inj.py +39 -0
- pychemstation-0.8.0/build/lib/tests/test_method.py +99 -0
- pychemstation-0.8.0/build/lib/tests/test_proc_rep.py +52 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/tests/test_runs_stable.py +42 -5
- pychemstation-0.8.0/build/lib/tests/test_sequence.py +125 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/tests/test_stable.py +17 -9
- pychemstation-0.8.0/doc/index.html +7 -0
- pychemstation-0.8.0/doc/pychemstation/analysis/base_spectrum.html +2216 -0
- pychemstation-0.8.0/doc/pychemstation/analysis/spec_utils.html +1073 -0
- pychemstation-0.8.0/doc/pychemstation/analysis/utils.html +443 -0
- pychemstation-0.8.0/doc/pychemstation/analysis.html +244 -0
- pychemstation-0.8.0/doc/pychemstation/control/chromatogram.html +863 -0
- pychemstation-0.8.0/doc/pychemstation/control/hplc.html +2987 -0
- pychemstation-0.8.0/doc/pychemstation/control.html +334 -0
- pychemstation-0.8.0/doc/pychemstation/generated.html +3358 -0
- pychemstation-0.8.0/doc/pychemstation/utils/chemstation.html +1165 -0
- pychemstation-0.8.0/doc/pychemstation/utils/constants.html +301 -0
- pychemstation-0.8.0/doc/pychemstation/utils/hplc_param_types.html +2741 -0
- pychemstation-0.8.0/doc/pychemstation/utils.html +245 -0
- pychemstation-0.8.0/doc/pychemstation.html +356 -0
- pychemstation-0.8.0/doc/search.js +46 -0
- pychemstation-0.8.0/pychemstation/__init__.py +3 -0
- pychemstation-0.8.0/pychemstation/analysis/__init__.py +1 -0
- pychemstation-0.8.0/pychemstation/analysis/base_spectrum.py +506 -0
- pychemstation-0.8.0/pychemstation/analysis/process_report.py +277 -0
- pychemstation-0.8.0/pychemstation/analysis/spec_utils.py +304 -0
- pychemstation-0.8.0/pychemstation/analysis/utils.py +65 -0
- pychemstation-0.8.0/pychemstation/control/README.md +124 -0
- pychemstation-0.8.0/pychemstation/control/__init__.py +4 -0
- pychemstation-0.8.0/pychemstation/control/controllers/README.md +1 -0
- pychemstation-0.8.0/pychemstation/control/controllers/__init__.py +7 -0
- pychemstation-0.8.0/pychemstation/control/controllers/comm.py +215 -0
- pychemstation-0.8.0/pychemstation/control/controllers/devices/__init__.py +0 -0
- pychemstation-0.8.0/pychemstation/control/controllers/devices/device.py +36 -0
- pychemstation-0.8.0/pychemstation/control/controllers/devices/injector.py +117 -0
- pychemstation-0.8.0/pychemstation/control/controllers/tables/__init__.py +0 -0
- pychemstation-0.8.0/pychemstation/control/controllers/tables/method.py +379 -0
- pychemstation-0.8.0/pychemstation/control/controllers/tables/ms.py +21 -0
- pychemstation-0.8.0/pychemstation/control/controllers/tables/sequence.py +281 -0
- pychemstation-0.8.0/pychemstation/control/controllers/tables/table.py +297 -0
- pychemstation-0.8.0/pychemstation/control/hplc.py +283 -0
- pychemstation-0.8.0/pychemstation/generated/__init__.py +56 -0
- pychemstation-0.8.0/pychemstation/generated/dad_method.py +367 -0
- pychemstation-0.8.0/pychemstation/generated/pump_method.py +519 -0
- pychemstation-0.8.0/pychemstation/out.txt +145 -0
- pychemstation-0.8.0/pychemstation/tests.ipynb +310 -0
- pychemstation-0.8.0/pychemstation/utils/__init__.py +0 -0
- pychemstation-0.8.0/pychemstation/utils/chromatogram.py +119 -0
- pychemstation-0.8.0/pychemstation/utils/injector_types.py +52 -0
- pychemstation-0.8.0/pychemstation/utils/macro.py +100 -0
- pychemstation-0.8.0/pychemstation/utils/method_types.py +56 -0
- pychemstation-0.8.0/pychemstation/utils/parsing.py +290 -0
- pychemstation-0.8.0/pychemstation/utils/pump_types.py +7 -0
- pychemstation-0.8.0/pychemstation/utils/sequence_types.py +54 -0
- pychemstation-0.8.0/pychemstation/utils/table_types.py +95 -0
- pychemstation-0.8.0/pychemstation/utils/tray_types.py +183 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/pychemstation.egg-info}/PKG-INFO +2 -1
- {pychemstation-0.6.6 → pychemstation-0.8.0}/pychemstation.egg-info/SOURCES.txt +0 -1
- {pychemstation-0.6.6 → pychemstation-0.8.0}/pychemstation.egg-info/requires.txt +1 -0
- pychemstation-0.8.0/pyproject.toml +30 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0}/setup.py +8 -3
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/0_2025-03-15 19-14-35.PDF +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/ACQRES.REG +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/CSlbk.ini +5 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DA.M/DAMETHOD.REG +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DA.M/INFO.MTH +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DA.M/RECALIB.MTH +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DA.M/rpthead.txt +63 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1.UV +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1A.ch +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1A.npz +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1B.ch +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1B.npz +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1C.ch +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1C.npz +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1D.ch +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1D.npz +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1E.ch +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DAD1E.npz +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/DiagResults.REG +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/PMP1.AnalyticalResults.drvml +15 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/REPORT01.CSV +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/REPORT02.CSV +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/REPORT03.CSV +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/REPORT04.CSV +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/REPORT05.CSV +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/RUN.LOG +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/Report.TXT +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/Report00.CSV +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/Report01.xls +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/SAMPLE.XML +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/SAMPLE.XML.bak +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/WLS1.Sampler.scml +22 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/acq.macaml +957 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/acq.txt +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/acq_MethHist.txt +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/acq_damethod.reg +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/da.macaml +1113 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/lcdiag.reg +0 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/sample.acaml +5324 -0
- pychemstation-0.8.0/tests/0_2025-03-15 19-14-35.D/single.B +0 -0
- pychemstation-0.8.0/tests/__init__.py +0 -0
- pychemstation-0.8.0/tests/constants.py +112 -0
- pychemstation-0.8.0/tests/hplc_talk.mac +81 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/CSlbk.ini +5 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/ACQ.MS +311 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.ConfigXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.MethodMetaData.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.MethodXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.ConfigXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.MethodMetaData.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.MethodXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.ConfigXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.MethodMetaData.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.MethodXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.ConfigXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.MethodMetaData.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.MethodXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.PretreatXML.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/DAMETHOD.REG +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/FIA.REG +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/INFO.MTH +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/INJECTOR.MTH +3 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/MassHunterIntegration.ini +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/RECALIB.MTH +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/RapidControl.InstrumentConfig.xml +65 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/rpthead.txt +63 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/smpl_pur.mth +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/Methods.Reg +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/hplc_testing.B +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/hplc_testing.LOG +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/hplc_testing.S +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/hplc_testing.Start +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/ACQRES.REG +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/CSlbk.ini +5 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/DAMETHOD.REG +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/INFO.MTH +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/RECALIB.MTH +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/rpthead.txt +63 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1.UV +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1A.ch +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1A.npz +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1B.ch +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1B.npz +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1C.ch +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1C.npz +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1D.ch +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1D.npz +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1E.ch +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1E.npz +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DiagResults.REG +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Limsinf.xml +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/PMP1.AnalyticalResults.drvml +15 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT01.CSV +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT02.CSV +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT03.CSV +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT04.CSV +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT05.CSV +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/RUN.LOG +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report.TXT +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report00.CSV +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report01.xls +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/SAMPLE.XML +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/SAMPLE.XML.bak +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/WLS1.Sampler.scml +22 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq.macaml +921 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq.txt +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq_MethHist.txt +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq_damethod.reg +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/da.macaml +1113 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/hplc_testing 2025-03-27 17-13-47_run seq with new method.PDF +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/lcdiag.reg +0 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/sequence.acam_ +4404 -0
- pychemstation-0.8.0/tests/hplc_testing 2025-03-27 17-13-47/sequence.acaml +4422 -0
- pychemstation-0.8.0/tests/out.txt +14074 -0
- pychemstation-0.8.0/tests/test_nightly.py +24 -0
- pychemstation-0.8.0/tests/test_offline_stable.py +51 -0
- pychemstation-0.8.0/tests/test_online_stable.py +241 -0
- pychemstation-0.8.0/tests/test_runs_stable.py +112 -0
- pychemstation-0.8.0/update-lib.sh +6 -0
- pychemstation-0.8.0/uv.lock +4113 -0
- pychemstation-0.6.6/pyproject.toml +0 -31
- pychemstation-0.6.6/setup.cfg +0 -4
- {pychemstation-0.6.6 → pychemstation-0.8.0}/LICENSE +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/analysis/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/analysis/base_spectrum.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/analysis/process_report.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/analysis/spec_utils.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/analysis/utils.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/comm.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/devices/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/devices/column.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/devices/dad.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/devices/device.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/devices/pump.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/tables/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/control/controllers/tables/ms.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/generated/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/generated/dad_method.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/generated/pump_method.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/chromatogram.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/injector_types.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/macro.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/method_types.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/parsing.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/pump_types.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/sequence_types.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/table_types.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/pychemstation/utils/tray_types.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/tests/__init__.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0/build/lib}/tests/test_nightly.py +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0}/pychemstation.egg-info/dependency_links.txt +0 -0
- {pychemstation-0.6.6 → pychemstation-0.8.0}/pychemstation.egg-info/top_level.txt +0 -0
Binary file
|
@@ -0,0 +1,18 @@
|
|
1
|
+
stages:
|
2
|
+
- deploy
|
3
|
+
|
4
|
+
pages:
|
5
|
+
stage: deploy
|
6
|
+
image: python:3.12-slim
|
7
|
+
before_script:
|
8
|
+
- apt-get update && apt-get install make --no-install-recommends -y
|
9
|
+
- python -m pip install -e .
|
10
|
+
script:
|
11
|
+
- pdoc -o doc pychemstation
|
12
|
+
after_script:
|
13
|
+
- mv doc/ ./public/
|
14
|
+
artifacts:
|
15
|
+
paths:
|
16
|
+
- public
|
17
|
+
rules:
|
18
|
+
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# Contributing Guide
|
2
|
+
|
3
|
+
Modified from [here](https://github.com/cncf/project-template/blob/main/CONTRIBUTING.md#contributing-guide).
|
4
|
+
|
5
|
+
* [Ways to Contribute](#ways-to-contribute)
|
6
|
+
* [Find an Issue](#find-an-issue)
|
7
|
+
* [Ask for Help](#ask-for-help)
|
8
|
+
* [Pull Request Lifecycle](#pull-request-lifecycle)
|
9
|
+
* [Development Environment Setup](#development-environment-setup)
|
10
|
+
* [Sign Your Commits](#sign-your-commits)
|
11
|
+
* [Pull Request Checklist](#pull-request-checklist)
|
12
|
+
|
13
|
+
Welcome! We are glad that you want to contribute to Hein Analytical Control! 💖
|
14
|
+
|
15
|
+
As you get started, you are in the best position to give us feedback on areas of
|
16
|
+
our project that we need help with including:
|
17
|
+
|
18
|
+
* Problems found during setting up a new developer environment
|
19
|
+
* Gaps in our Quickstart Guide or documentation
|
20
|
+
* Bugs in our Python scripts
|
21
|
+
|
22
|
+
If anything doesn't make sense, or doesn't work when you run it, please open a
|
23
|
+
bug report and let us know!
|
24
|
+
|
25
|
+
## Ways to Contribute
|
26
|
+
|
27
|
+
We welcome many different types of contributions including:
|
28
|
+
|
29
|
+
* New features
|
30
|
+
* Bug fixes
|
31
|
+
* Documentation
|
32
|
+
|
33
|
+
## Find an Issue
|
34
|
+
|
35
|
+
If there are currently issues present, please feel free to take one!
|
36
|
+
Comment with something like "I would like to take this issue",
|
37
|
+
and our team will communicate further with you in that issue.
|
38
|
+
|
39
|
+
## Ask for Help
|
40
|
+
|
41
|
+
The best way to reach us with a question when contributing is to ask on:
|
42
|
+
|
43
|
+
* The original GitLab issue
|
44
|
+
* Via email at: hao.lucyy@gmail.com (only inquiries sent to this email regarding this library will be answered)
|
45
|
+
|
46
|
+
## Pull Request Lifecycle
|
47
|
+
|
48
|
+
⚠️ **Explain your pull request process**
|
49
|
+
|
50
|
+
## Development Environment Setup
|
51
|
+
|
52
|
+
First, clone this repo. All required packages are specified in `pyproject.toml`.
|
53
|
+
We use [poetry](https://python-poetry.org/), but you can adjust the `pyproject.toml` to
|
54
|
+
work with your Python package manager. Activate your environment via your package manager's instructions
|
55
|
+
and this should be all you need to start development.
|
56
|
+
|
57
|
+
To update documentation, we use [Sphinx](https://www.sphinx-doc.org/en/master/). Install via instructions on
|
58
|
+
Sphinx's website. If you want a local version of the documentation website, then `cd docs`, `make clean`, `make html`.
|
59
|
+
Then within `docs/build`, open `index.html` in your browser.
|
60
|
+
|
61
|
+
## Sign Your Commits
|
62
|
+
|
63
|
+
### DCO
|
64
|
+
Licensing is important to open source projects. It provides some assurances that
|
65
|
+
the software will continue to be available based under the terms that the
|
66
|
+
author(s) desired. We require that contributors sign off on commits submitted to
|
67
|
+
our project's repositories. The [Developer Certificate of Origin
|
68
|
+
(DCO)](https://probot.github.io/apps/dco/) is a way to certify that you wrote and
|
69
|
+
have the right to contribute the code you are submitting to the project.
|
70
|
+
|
71
|
+
You sign-off by adding the following to your commit messages. Your sign-off must
|
72
|
+
match the git user and email associated with the commit.
|
73
|
+
|
74
|
+
This is my commit message
|
75
|
+
|
76
|
+
Signed-off-by: Your Name <your.name@example.com>
|
77
|
+
|
78
|
+
Git has a `-s` command line option to do this automatically:
|
79
|
+
|
80
|
+
git commit -s -m 'This is my commit message'
|
81
|
+
|
82
|
+
If you forgot to do this and have not yet pushed your changes to the remote
|
83
|
+
repository, you can amend your commit with the sign-off by running
|
84
|
+
|
85
|
+
git commit --amend -s
|
86
|
+
|
87
|
+
## Pull Request Checklist
|
88
|
+
|
89
|
+
When you submit your pull request, or you push new commits to it, our automated
|
90
|
+
systems will run some checks on your new code. We require that your pull request
|
91
|
+
passes these checks, but we also have more criteria than just that before we can
|
92
|
+
accept and merge it. We recommend that you check the following things locally
|
93
|
+
before you submit your code:
|
94
|
+
|
95
|
+
- have you provided a doc string for new functionality OR if you have extended an existing function,
|
96
|
+
ensure the doc string is still valid
|
97
|
+
- are you using type annotations?
|
98
|
+
- are your commit messages following the mentioned conventions?
|
@@ -1,20 +1,24 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: pychemstation
|
3
|
-
Version: 0.
|
4
|
-
|
5
|
-
Home-page: https://gitlab.com/heingroup/device-api/pychemstation
|
6
|
-
Author: Lucy Hao
|
7
|
-
Author-email: lhao03@student.ubc.ca
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
9
|
-
Classifier: License :: OSI Approved :: MIT License
|
10
|
-
Classifier: Operating System :: OS Independent
|
11
|
-
Description-Content-Type: text/markdown
|
3
|
+
Version: 0.8.0
|
4
|
+
Author-email: lucyhao <hao.lucyy@gmail.com>
|
12
5
|
License-File: LICENSE
|
13
|
-
Requires-
|
14
|
-
Requires-Dist:
|
15
|
-
Requires-Dist:
|
16
|
-
Requires-Dist:
|
17
|
-
Requires-Dist:
|
6
|
+
Requires-Python: >=3.8
|
7
|
+
Requires-Dist: aghplctools>=4.8.8
|
8
|
+
Requires-Dist: coverage>=7.6.1
|
9
|
+
Requires-Dist: matplotlib>=3.7.5
|
10
|
+
Requires-Dist: pandas>=2.0.3
|
11
|
+
Requires-Dist: pdoc>=14.7.0
|
12
|
+
Requires-Dist: polling>=0.3.2
|
13
|
+
Requires-Dist: pytest>=7.3.5
|
14
|
+
Requires-Dist: rainbow-api>=1.0.10
|
15
|
+
Requires-Dist: result>=0.17.0
|
16
|
+
Requires-Dist: scipy>=1.10.1
|
17
|
+
Requires-Dist: seabreeze>=2.9.2
|
18
|
+
Requires-Dist: setuptools>=75.3.2
|
19
|
+
Requires-Dist: twine>=6.1.0
|
20
|
+
Requires-Dist: xsdata>=24.9
|
21
|
+
Description-Content-Type: text/markdown
|
18
22
|
|
19
23
|
# Agilent HPLC Macro Control
|
20
24
|
|
@@ -66,13 +70,14 @@ from pychemstation.control import HPLCController
|
|
66
70
|
import pandas as pd
|
67
71
|
|
68
72
|
# these paths will be unique to your Chemstation setup
|
69
|
-
DEFAULT_COMMAND_PATH = "C:\\Users\\User\\Desktop\\Lucy\\"
|
70
73
|
DEFAULT_METHOD = "GENERAL-POROSHELL"
|
74
|
+
DEFAULT_COMMAND_PATH = "C:\\Users\\User\\Desktop\\Lucy\\"
|
71
75
|
DEFAULT_METHOD_DIR = "C:\\ChemStation\\1\\Methods\\"
|
72
|
-
|
73
|
-
|
76
|
+
DATA_DIR_2 = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data\\"
|
77
|
+
DATA_DIR_3 = "C:\\Users\\Public\\Documents\\ChemStation\\3\\Data\\"
|
78
|
+
SEQUENCE_DIR = "C:\\USERS\\PUBLIC\\DOCUMENTS\\CHEMSTATION\\2\\Sequence\\"
|
74
79
|
|
75
|
-
hplc_controller = HPLCController(
|
80
|
+
hplc_controller = HPLCController(data_dirs=[DATA_DIR_2, DATA_DIR_3],
|
76
81
|
comm_dir=DEFAULT_COMMAND_PATH,
|
77
82
|
sequence_dir=SEQUENCE_DIR,
|
78
83
|
method_dir=DEFAULT_METHOD_DIR)
|
@@ -106,4 +111,4 @@ Lucy Hao, Maria Politi
|
|
106
111
|
Group. Copyright © Cronin Group, used under the [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/) license.
|
107
112
|
- Adapted from the [MACROS](https://github.com/Bourne-Group/HPLCMethodOptimisationGUI)
|
108
113
|
used in [**Operator-free HPLC automated method development guided by Bayesian optimization**](https://pubs.rsc.org/en/content/articlelanding/2024/dd/d4dd00062e),
|
109
|
-
created by members in the Bourne Group. Copyright © Bourne Group, used under the [MIT](https://opensource.org/license/mit) license.
|
114
|
+
created by members in the Bourne Group. Copyright © Bourne Group, used under the [MIT](https://opensource.org/license/mit) license.
|
@@ -48,13 +48,14 @@ from pychemstation.control import HPLCController
|
|
48
48
|
import pandas as pd
|
49
49
|
|
50
50
|
# these paths will be unique to your Chemstation setup
|
51
|
-
DEFAULT_COMMAND_PATH = "C:\\Users\\User\\Desktop\\Lucy\\"
|
52
51
|
DEFAULT_METHOD = "GENERAL-POROSHELL"
|
52
|
+
DEFAULT_COMMAND_PATH = "C:\\Users\\User\\Desktop\\Lucy\\"
|
53
53
|
DEFAULT_METHOD_DIR = "C:\\ChemStation\\1\\Methods\\"
|
54
|
-
|
55
|
-
|
54
|
+
DATA_DIR_2 = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data\\"
|
55
|
+
DATA_DIR_3 = "C:\\Users\\Public\\Documents\\ChemStation\\3\\Data\\"
|
56
|
+
SEQUENCE_DIR = "C:\\USERS\\PUBLIC\\DOCUMENTS\\CHEMSTATION\\2\\Sequence\\"
|
56
57
|
|
57
|
-
hplc_controller = HPLCController(
|
58
|
+
hplc_controller = HPLCController(data_dirs=[DATA_DIR_2, DATA_DIR_3],
|
58
59
|
comm_dir=DEFAULT_COMMAND_PATH,
|
59
60
|
sequence_dir=SEQUENCE_DIR,
|
60
61
|
method_dir=DEFAULT_METHOD_DIR)
|
@@ -0,0 +1,206 @@
|
|
1
|
+
"""
|
2
|
+
Module to provide API for the communication with Agilent HPLC systems.
|
3
|
+
|
4
|
+
HPLCController sends commands to Chemstation software via a command file.
|
5
|
+
Answers are received via reply file. On the Chemstation side, a custom
|
6
|
+
Macro monitors the command file, executes commands and writes to the reply file.
|
7
|
+
Each command is given a number (cmd_no) to keep track of which commands have
|
8
|
+
been processed.
|
9
|
+
|
10
|
+
Authors: Alexander Hammer, Hessam Mehr, Lucy Hao
|
11
|
+
"""
|
12
|
+
|
13
|
+
import os
|
14
|
+
import time
|
15
|
+
|
16
|
+
from result import Result, Ok, Err
|
17
|
+
from ..utils.macro import *
|
18
|
+
from ..utils.method_types import *
|
19
|
+
|
20
|
+
|
21
|
+
class CommunicationController:
|
22
|
+
"""
|
23
|
+
Class that communicates with Agilent using Macros
|
24
|
+
"""
|
25
|
+
|
26
|
+
# maximum command number
|
27
|
+
MAX_CMD_NO = 255
|
28
|
+
|
29
|
+
def __init__(
|
30
|
+
self,
|
31
|
+
comm_dir: str,
|
32
|
+
cmd_file: str = "cmd",
|
33
|
+
reply_file: str = "reply",
|
34
|
+
):
|
35
|
+
"""
|
36
|
+
:param comm_dir:
|
37
|
+
:param cmd_file: Name of command file
|
38
|
+
:param reply_file: Name of reply file
|
39
|
+
"""
|
40
|
+
if os.path.isdir(comm_dir):
|
41
|
+
self.cmd_file = os.path.join(comm_dir, cmd_file)
|
42
|
+
self.reply_file = os.path.join(comm_dir, reply_file)
|
43
|
+
self.cmd_no = 0
|
44
|
+
else:
|
45
|
+
raise FileNotFoundError(f"comm_dir: {comm_dir} not found.")
|
46
|
+
self._most_recent_hplc_status = None
|
47
|
+
|
48
|
+
# Create files for Chemstation to communicate with Python
|
49
|
+
open(self.cmd_file, "a").close()
|
50
|
+
open(self.reply_file, "a").close()
|
51
|
+
|
52
|
+
self.reset_cmd_counter()
|
53
|
+
|
54
|
+
def get_num_val(self, cmd: str) -> Union[int, float, Err]:
|
55
|
+
self.send(Command.GET_NUM_VAL_CMD.value.format(cmd=cmd))
|
56
|
+
res = self.receive()
|
57
|
+
if res.is_ok():
|
58
|
+
return res.ok_value.num_response
|
59
|
+
else:
|
60
|
+
raise RuntimeError("Failed to get number.")
|
61
|
+
|
62
|
+
def get_text_val(self, cmd: str) -> str:
|
63
|
+
self.send(Command.GET_TEXT_VAL_CMD.value.format(cmd=cmd))
|
64
|
+
res = self.receive()
|
65
|
+
if res.is_ok():
|
66
|
+
return res.ok_value.string_response
|
67
|
+
else:
|
68
|
+
raise RuntimeError("Failed to get string")
|
69
|
+
|
70
|
+
def get_status(self) -> Union[HPLCRunningStatus, HPLCAvailStatus, HPLCErrorStatus]:
|
71
|
+
"""Get device status(es).
|
72
|
+
|
73
|
+
:return: list of ChemStation's current status
|
74
|
+
"""
|
75
|
+
self.send(Command.GET_STATUS_CMD)
|
76
|
+
time.sleep(1)
|
77
|
+
|
78
|
+
try:
|
79
|
+
parsed_response = self.receive().value.string_response
|
80
|
+
self._most_recent_hplc_status = str_to_status(parsed_response)
|
81
|
+
return self._most_recent_hplc_status
|
82
|
+
except IOError:
|
83
|
+
return HPLCErrorStatus.NORESPONSE
|
84
|
+
except IndexError:
|
85
|
+
return HPLCErrorStatus.MALFORMED
|
86
|
+
|
87
|
+
def set_status(self):
|
88
|
+
"""Updates current status of HPLC machine"""
|
89
|
+
self._most_recent_hplc_status = self.get_status()
|
90
|
+
|
91
|
+
def check_if_running(self) -> bool:
|
92
|
+
"""Checks if HPLC machine is in an available state, meaning a state that data is not being written.
|
93
|
+
|
94
|
+
:return: whether the HPLC machine is in a safe state to retrieve data back."""
|
95
|
+
self.set_status()
|
96
|
+
hplc_avail = isinstance(self._most_recent_hplc_status, HPLCAvailStatus)
|
97
|
+
time.sleep(30)
|
98
|
+
self.set_status()
|
99
|
+
hplc_actually_avail = isinstance(self._most_recent_hplc_status, HPLCAvailStatus)
|
100
|
+
return hplc_avail and hplc_actually_avail
|
101
|
+
|
102
|
+
def _send(self, cmd: str, cmd_no: int, num_attempts=5) -> None:
|
103
|
+
"""Low-level execution primitive. Sends a command string to HPLC.
|
104
|
+
|
105
|
+
:param cmd: string to be sent to HPLC
|
106
|
+
:param cmd_no: Command number
|
107
|
+
:param num_attempts: Number of attempts to send the command before raising exception.
|
108
|
+
:raises IOError: Could not write to command file.
|
109
|
+
"""
|
110
|
+
err = None
|
111
|
+
for _ in range(num_attempts):
|
112
|
+
time.sleep(1)
|
113
|
+
try:
|
114
|
+
with open(self.cmd_file, "w", encoding="utf8") as cmd_file:
|
115
|
+
cmd_file.write(f"{cmd_no} {cmd}")
|
116
|
+
except IOError as e:
|
117
|
+
err = e
|
118
|
+
continue
|
119
|
+
else:
|
120
|
+
return
|
121
|
+
else:
|
122
|
+
raise IOError(f"Failed to send command #{cmd_no}: {cmd}.") from err
|
123
|
+
|
124
|
+
def _receive(self, cmd_no: int, num_attempts=100) -> Result[str, str]:
|
125
|
+
"""Low-level execution primitive. Recives a response from HPLC.
|
126
|
+
|
127
|
+
:param cmd_no: Command number
|
128
|
+
:param num_attempts: Number of retries to open reply file
|
129
|
+
:raises IOError: Could not read reply file.
|
130
|
+
:return: Potential ChemStation response
|
131
|
+
"""
|
132
|
+
err = None
|
133
|
+
for _ in range(num_attempts):
|
134
|
+
time.sleep(1)
|
135
|
+
|
136
|
+
try:
|
137
|
+
with open(self.reply_file, "r", encoding="utf_16") as reply_file:
|
138
|
+
response = reply_file.read()
|
139
|
+
except OSError as e:
|
140
|
+
err = e
|
141
|
+
continue
|
142
|
+
|
143
|
+
try:
|
144
|
+
first_line = response.splitlines()[0]
|
145
|
+
response_no = int(first_line.split()[0])
|
146
|
+
except IndexError as e:
|
147
|
+
err = e
|
148
|
+
continue
|
149
|
+
|
150
|
+
# check that response corresponds to sent command
|
151
|
+
if response_no == cmd_no:
|
152
|
+
return Ok(response)
|
153
|
+
else:
|
154
|
+
continue
|
155
|
+
else:
|
156
|
+
return Err(f"Failed to receive reply to command #{cmd_no} due to {err}.")
|
157
|
+
|
158
|
+
def sleepy_send(self, cmd: Union[Command, str]):
|
159
|
+
self.send("Sleep 0.1")
|
160
|
+
self.send(cmd)
|
161
|
+
self.send("Sleep 0.1")
|
162
|
+
|
163
|
+
def send(self, cmd: Union[Command, str]):
|
164
|
+
"""Sends a command to Chemstation.
|
165
|
+
|
166
|
+
:param cmd: Command to be sent to HPLC
|
167
|
+
"""
|
168
|
+
if self.cmd_no == self.MAX_CMD_NO:
|
169
|
+
self.reset_cmd_counter()
|
170
|
+
|
171
|
+
cmd_to_send: str = cmd.value if isinstance(cmd, Command) else cmd
|
172
|
+
self.cmd_no += 1
|
173
|
+
self._send(cmd_to_send, self.cmd_no)
|
174
|
+
f = open("out.txt", "a")
|
175
|
+
f.write(cmd_to_send + "\n")
|
176
|
+
f.close()
|
177
|
+
|
178
|
+
def receive(self) -> Result[Response, str]:
|
179
|
+
"""Returns messages received in reply file.
|
180
|
+
|
181
|
+
:return: ChemStation response
|
182
|
+
"""
|
183
|
+
num_response_prefix = "Numerical Responses:"
|
184
|
+
str_response_prefix = "String Responses:"
|
185
|
+
possible_response = self._receive(self.cmd_no)
|
186
|
+
if Ok(possible_response):
|
187
|
+
lines = possible_response.value.splitlines()
|
188
|
+
for line in lines:
|
189
|
+
if str_response_prefix in line and num_response_prefix in line:
|
190
|
+
string_responses_dirty, _, numerical_responses = line.partition(num_response_prefix)
|
191
|
+
_, _, string_responses = string_responses_dirty.partition(str_response_prefix)
|
192
|
+
return Ok(Response(string_response=string_responses.strip(),
|
193
|
+
num_response=float(numerical_responses.strip())))
|
194
|
+
return Err(f"Could not retrieve HPLC response")
|
195
|
+
else:
|
196
|
+
return Err(f"Could not establish response to HPLC: {possible_response}")
|
197
|
+
|
198
|
+
def reset_cmd_counter(self):
|
199
|
+
"""Resets the command counter."""
|
200
|
+
self._send(Command.RESET_COUNTER_CMD.value, cmd_no=self.MAX_CMD_NO + 1)
|
201
|
+
self._receive(cmd_no=self.MAX_CMD_NO + 1)
|
202
|
+
self.cmd_no = 0
|
203
|
+
|
204
|
+
def stop_macro(self):
|
205
|
+
"""Stops Macro execution. Connection will be lost."""
|
206
|
+
self.send(Command.STOP_MACRO_CMD)
|
@@ -44,9 +44,9 @@ class InjectorController(DeviceController):
|
|
44
44
|
nonlocal columns_added
|
45
45
|
if True:
|
46
46
|
if isinstance(val, str):
|
47
|
-
self.
|
47
|
+
self._edit_row_text(col_name=col_name, val=val)
|
48
48
|
else:
|
49
|
-
self.
|
49
|
+
self._edit_row_num(col_name=col_name, val=val)
|
50
50
|
else:
|
51
51
|
if isinstance(val, str):
|
52
52
|
self.add_new_col_text(col_name=col_name, val=val)
|