bskinn / pent

pent Extracts Numerical Text -- Mini-language driven parser for structured numerical data in text
MIT License
20 stars 3 forks source link

Live test data from potentiostat for pulling single values from dense text block #75

Open bskinn opened 5 years ago

bskinn commented 5 years ago

Data:

EXPLAIN
TAG REPEATING_CHRONOA
TITLE   LABEL   Chronoamperometry Scan  Test Identifier
DATE    LABEL   5/15/2019   Date
TIME    LABEL   18:12:32    Time
NOTES   NOTES   1   Notes...

PSTAT   PSTAT   REF600-07058    Potentiostat
VSTEP1  POTEN   1.30000E+000    F   Step 1 Voltage (V)
TSTEP1  QUANT   2.50000E-001    Step 1 Time (s)
VSTEP2  POTEN   0.00000E+000    F   Step 2 Voltage (V)
TSTEP2  QUANT   2.50000E-001    Step 2 Time (s)
SAMPLETIME  QUANT   1.00000E-002    Sample Period (s)
DECIMATE    TOGGLE  F   Decimate
ILIMIT  QUANT   5.00000E+002    Limit I (mA/cm^2)
AREA    QUANT   1.00000E+000    Sample Area (cm^2)
IMODE   SELECTOR    1   I/E Range Mode
IRANGE  QUANT   5.00000E+002    Max Current (mA)
EQDELAY QUANT   0.00000E+000    Equil. Time (s)
IRCOMP  SELECTOR    0   IRComp
PFCOR   QUANT   5.00000E+001    PF Corr. (ohm)
CYCLES  IQUANT  150 Cycles (#)
SAMPLINGMODE    SELECTOR    1   Sampling Mode
ELECTRODETYPE   SELECTOR    0   Electrode Type
STRIPPING   TOGGLE  F   Used for Stripping
POLARITY    TOGGLE  F   Signal Polarity
LINEFREQ    IQUANT  60  Line Frequency (Hz)
INTPERIOD   QUANT   NIL Integration Period (s)
SEQUENCER   TOGGLE  TRUE    Run as Sequence
PSTATMODEL  IQUANT  4   Pstat Model
PSTATSECTION    LABEL   REF600-07058    Pstat Section
PSTATSERIALNO   LABEL   07058   Pstat Serial Number
CTRLMODE    IQUANT  1   Control Mode
ELECTROMETER    IQUANT  0   RE=0 or CS=1
IESTAB  IQUANT  0   I/E Stability
CASPEED IQUANT  4   Control Amp Speed
CONVENTION  IQUANT  1   Current Convention
ICHRANGE    IQUANT  2   Ich Range
ICHRANGEMODE    TOGGLE  T   Ich Auto Range
ICHOFFSETENABLE TOGGLE  F   Ich Offset Enable
ICHOFFSET   QUANT   0   Ich Offset (V)
ICHFILTER   IQUANT  2   Ich Filter
VCHRANGE    IQUANT  3   Vch Range
VCHRANGEMODE    TOGGLE  T   Vch Auto Range
VCHOFFSETENABLE TOGGLE  F   Vch Offset Enable
VCHOFFSET   QUANT   0   Vch Offset (V)
VCHFILTER   IQUANT  2   Vch Filter
ACHRANGE    IQUANT  2   Ach Range
ACHOFFSETENABLE TOGGLE  F   Ach Offset Enable
ACHOFFSET   QUANT   0   Ach Offset (V)
ACHFILTER   IQUANT  1   Ach Filter
IERANGELOWERLIMIT   IQUANT  1   I/E Range Lower Limit
IERANGEMODE TOGGLE  F   I/E AutoRange
IERANGE IQUANT  11  I/E Range
POSFEEDENABLE   TOGGLE  F   Positive Feedback IR Comp
POSFEEDRESISTANCE   QUANT   0   Positive Feedback Resistance (ohm)
ACHSELECT   IQUANT  0   Ach Select
SENSECABLEID    IQUANT  14  Sense Cable ID
PWRCABLEID  IQUANT  14  Power Cable ID
DCCALDATE   LABEL   1/8/2019    DC Calibration Date
ACCALDATE   LABEL   1/8/2019    AC Calibration Date
THERMOSELECT    IQUANT  1   Thermo Select
FRAMEWORKVERSION    QUANT   7.07    Framework Version
INSTRUMENTVERSION   LABEL   4.35    Instrument Version
CURVE   TABLE   7500
    Pt  T   Vf  Im  Vu  Sig Ach IERange Over    Temp
    #   s   V vs. Ref.  A   V   V   V   #   bits    deg C
    0   0.01    1.29956E+000    1.87964E-001    0.00000E+000    1.30000E+000    1.81190E-003    11  ..........a -327.66
    1   0.02    1.29891E+000    1.87945E-001    0.00000E+000    1.30000E+000    1.84023E-003    11  ..........a -327.66
    2   0.03    1.29892E+000    1.87937E-001    0.00000E+000    1.30000E+000    1.86857E-003    11  ..........a -327.66

Representative set of Parsers (probably overkill with all the heads and tails):

# Date and time stamps
prs_date = pent.Parser(head="@.TITLE ~", body="@.DATE &. #x!..i @x./ #x!..i @x./ #x!..i ~")
prs_time = pent.Parser(head="@.DATE ~", body="@.TIME &. #x!..i @x.: #x!..i @x.: #x!..i ~")

# Setpoint voltages
prs_V1 = pent.Parser(head="@.PSTAT ~", body="@.VSTEP1 &. #!..g ~", tail="@.TSTEP1 ~")
prs_V2 = pent.Parser(head="@.TSTEP1 ~", body="@.VSTEP2 &. #!..g ~", tail="@.TSTEP2 ~")

# wf segment times
prs_t1 = pent.Parser(head="@.VSTEP1 ~", body="@.TSTEP1 &. #!..g ~", tail="@.VSTEP2 ~")
prs_t2 = pent.Parser(head="@.VSTEP2 ~", body="@.TSTEP2 &. #!..g ~", tail="@.SAMPLETIME ~")

# Expected number of samples
prs_numsamp = pent.Parser(head="@.INSTRUMENTVERSION ~", body="@.CURVE @.TABLE #!.+i", tail="@.Pt ~")