# Database for ND PluginProcess
# Mark Rivers
# March 14, 2010

###################################################################
#  These records control the data type of the array data          # 
#  The last entry is "Automatic" meaning preserve the data type   #
#  of the input array.                                            # 
###################################################################

record(mbbo, "$(P)$(R)DataTypeOut")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))PROCESS_DATA_TYPE")
    field(ZRST, "Int8")
    field(ZRVL, "0")
    field(ONST, "UInt8")
    field(ONVL, "1")
    field(TWST, "Int16")
    field(TWVL, "2")
    field(THST, "UInt16")
    field(THVL, "3")
    field(FRST, "Int32")
    field(FRVL, "4")
    field(FVST, "UInt32")
    field(FVVL, "5")
    field(SXST, "Float32")
    field(SXVL, "6")
    field(SVST, "Float64")
    field(SVVL, "7")
    field(EIST, "Automatic")
    field(EIVL, "-1")
    field(VAL,  "8")
}

record(mbbi, "$(P)$(R)DataTypeOut_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))PROCESS_DATA_TYPE")
    field(ZRST, "Int8")
    field(ZRVL, "0")
    field(ONST, "UInt8")
    field(ONVL, "1")
    field(TWST, "Int16")
    field(TWVL, "2")
    field(THST, "UInt16")
    field(THVL, "3")
    field(FRST, "Int32")
    field(FRVL, "4")
    field(FVST, "UInt32")
    field(FVVL, "5")
    field(SXST, "Float32")
    field(SXVL, "6")
    field(SVST, "Float64")
    field(SVVL, "7")
    field(EIST, "Automatic")
    field(EIVL, "-1")
    field(SCAN, "I/O Intr")
}

###################################################################
# These records control the background array processing           #
###################################################################
record(bo, "$(P)$(R)SaveBackground")
{
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))SAVE_BACKGROUND")
    field(VAL,  "1")
    field(ZNAM, "No")
    field(ONAM, "Yes")
}

record(bi, "$(P)$(R)SaveBackground_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))SAVE_BACKGROUND")
    field(ZNAM, "No")
    field(ONAM, "Yes")
    field(SCAN, "I/O Intr")
}

record(bo, "$(P)$(R)EnableBackground")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_BACKGROUND")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
}

record(bi, "$(P)$(R)EnableBackground_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_BACKGROUND")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
    field(ZSV,  "NO_ALARM")
    field(OSV,  "MINOR")
    field(SCAN, "I/O Intr")
}

record(bi, "$(P)$(R)ValidBackground_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))VALID_BACKGROUND")
    field(ZNAM, "Invalid")
    field(ONAM, "Valid")
    field(SCAN, "I/O Intr")
}

###################################################################
# These records control the flat field array processing           #
###################################################################
record(bo, "$(P)$(R)SaveFlatField")
{
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))SAVE_FLAT_FIELD")
    field(VAL,  "1")
    field(ZNAM, "No")
    field(ONAM, "Yes")
}

record(bi, "$(P)$(R)SaveFlatField_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))SAVE_FLAT_FIELD")
    field(ZNAM, "No")
    field(ONAM, "Yes")
    field(SCAN, "I/O Intr")
}

record(bo, "$(P)$(R)EnableFlatField")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_FLAT_FIELD")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
}

record(bi, "$(P)$(R)EnableFlatField_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_FLAT_FIELD")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
    field(ZSV,  "NO_ALARM")
    field(OSV,  "MINOR")
    field(SCAN, "I/O Intr")
}

record(bi, "$(P)$(R)ValidFlatField_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))VALID_FLAT_FIELD")
    field(ZNAM, "Invalid")
    field(ONAM, "Valid")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)ScaleFlatField")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))SCALE_FLAT_FIELD")
    field(VAL,  "255.")
}

record(ai, "$(P)$(R)ScaleFlatField_RBV")
{
    field(DTYP, "asynFloat64")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))SCALE_FLAT_FIELD")
    field(SCAN, "I/O Intr")
}

###################################################################
# These records control the offset and scale                      #
###################################################################
record(bo, "$(P)$(R)EnableOffsetScale")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_OFFSET_SCALE")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
}

record(bi, "$(P)$(R)EnableOffsetScale_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_OFFSET_SCALE")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
    field(ZSV,  "NO_ALARM")
    field(OSV,  "MINOR")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)Offset")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))OFFSET")
    field(PREC, "2")
    field(VAL,  "0.0")
}

record(ai, "$(P)$(R)Offset_RBV")
{
    field(DTYP, "asynFloat64")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))OFFSET")
    field(PREC, "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)Scale")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))SCALE")
    field(PREC, "2")
    field(VAL,  "1.0")
}

record(ai, "$(P)$(R)Scale_RBV")
{
    field(DTYP, "asynFloat64")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))SCALE")
    field(PREC, "2")
    field(SCAN, "I/O Intr")
}

###################################################################
# These records control the high and low clipping                 #
###################################################################
record(bo, "$(P)$(R)EnableLowClip")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_LOW_CLIP")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
}

record(bi, "$(P)$(R)EnableLowClip_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_LOW_CLIP")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
    field(ZSV,  "NO_ALARM")
    field(OSV,  "MINOR")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)LowClip")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))LOW_CLIP")
    field(VAL,  "0.0")
}

record(ai, "$(P)$(R)LowClip_RBV")
{
    field(DTYP, "asynFloat64")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))LOW_CLIP")
    field(SCAN, "I/O Intr")
}

record(bo, "$(P)$(R)EnableHighClip")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_HIGH_CLIP")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
}

record(bi, "$(P)$(R)EnableHighClip_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_HIGH_CLIP")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
    field(ZSV,  "NO_ALARM")
    field(OSV,  "MINOR")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)HighClip")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HIGH_CLIP")
    field(VAL,  "100.0")
}

record(ai, "$(P)$(R)HighClip_RBV")
{
    field(DTYP, "asynFloat64")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HIGH_CLIP")
    field(SCAN, "I/O Intr")
}

###################################################################
# These records control frame filtering                           #
###################################################################
record(bo, "$(P)$(R)EnableFilter")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_FILTER")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
}

record(bi, "$(P)$(R)EnableFilter_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ENABLE_FILTER")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
    field(ZSV,  "NO_ALARM")
    field(OSV,  "MINOR")
    field(SCAN, "I/O Intr")
}

record(bo, "$(P)$(R)ResetFilter")
{
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))RESET_FILTER")
    field(VAL,  "1")
    field(ZNAM, "No")
    field(ONAM, "Yes")
}

record(bi, "$(P)$(R)ResetFilter_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))RESET_FILTER")
    field(ZNAM, "No")
    field(ONAM, "Yes")
    field(SCAN, "I/O Intr")
}

record(longout, "$(P)$(R)NumFilter")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))NUM_FILTER")
    field(VAL,  "1")
    field(FLNK, "$(P)$(R)NumFilterRecip.PROC PP")
}

record(longin, "$(P)$(R)NumFilter_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))NUM_FILTER")
    field(VAL,  "1")
    field(SCAN, "I/O Intr")
}

# This is 1/NumFilter, used in RecursiveSum filter
record(calc, "$(P)$(R)NumFilterRecip")
{
    field(INPA, "$(P)$(R)NumFilter.VAL NPP")
    field(CALC, "1./A")
}

record(longin, "$(P)$(R)NumFiltered_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))NUM_FILTERED")
    field(VAL,  "1")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)OOffset")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OOFFSET")
    field(PREC, "2")
}
record(ai, "$(P)$(R)OOffset_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OOFFSET")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)OScale")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OSCALE")
    field(PREC, "2")
}
record(ai, "$(P)$(R)OScale_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OSCALE")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)OC1")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OC1")
    field(PREC, "2")
}
record(ai, "$(P)$(R)OC1_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OC1")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)OC2")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OC2")
    field(PREC, "2")
}
record(ai, "$(P)$(R)OC2_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OC2")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)OC3")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OC3")
    field(PREC, "2")
}
record(ai, "$(P)$(R)OC3_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OC3")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)OC4")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OC4")
    field(PREC, "2")
}
record(ai, "$(P)$(R)OC4_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_OC4")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)FOffset")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FOFFSET")
    field(PREC, "2")
}
record(ai, "$(P)$(R)FOffset_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FOFFSET")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)FScale")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FSCALE")
    field(PREC, "2")
}
record(ai, "$(P)$(R)FScale_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FSCALE")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)FC1")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FC1")
    field(PREC, "2")
}
record(ai, "$(P)$(R)FC1_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FC1")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)FC2")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FC2")
    field(PREC, "2")
}
record(ai, "$(P)$(R)FC2_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FC2")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}
record(ao, "$(P)$(R)FC3")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FC3")
    field(PREC, "2")
}
record(ai, "$(P)$(R)FC3_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FC3")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)FC4")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FC4")
    field(PREC, "2")
}
record(ai, "$(P)$(R)FC4_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_FC4")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}
record(ao, "$(P)$(R)ROffset")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_ROFFSET")
    field(PREC, "2")
}
record(ai, "$(P)$(R)ROffset_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_ROFFSET")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)RC1")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_RC1")
    field(PREC, "2")
}
record(ai, "$(P)$(R)RC1_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_RC1")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

record(ao, "$(P)$(R)RC2")
{
    field(PINI, "YES")
    field(DTYP, "asynFloat64")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_RC2")
    field(PREC, "2")
}
record(ai, "$(P)$(R)RC2_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))FILTER_RC2")
    field(PREC,  "2")
    field(SCAN, "I/O Intr")
}

# We don't see PINI=YES for FilterType because we want to restore the actual coefficients
# We do restore this record, but we don't process it
record(mbbo, "$(P)$(R)FilterType")
{
    field(ZRST, "RecursiveAve")
    field(ZRVL, "1")
    field(ONST, "RecursiveSum")
    field(ONVL, "2")
    field(TWST, "Difference")
    field(TWVL, "3")
    field(THST, "RecursiveAveDiff")
    field(THVL, "4")
    field(FRST, "CopyToFilter")
    field(FRVL, "5")
    field(FLNK, "$(P)$(R)FilterTypeSeq PP MS")
}

record(seq, "$(P)$(R)FilterTypeSeq")
{
    field(SELL, "$(P)$(R)FilterType.RVAL NPP")
    field(SELM, "Specified")
    field(DOL1, "1")
    field(LNK1, "$(P)$(R)RecursiveAveSeq.PROC PP MS")
    field(DOL2, "1")
    field(LNK2, "$(P)$(R)RecursiveSumSeq.PROC PP MS")
    field(DOL3, "1")
    field(LNK3, "$(P)$(R)DifferenceSeq.PROC PP MS")
    field(DOL4, "1")
    field(LNK4, "$(P)$(R)RecursiveAveDiffSeq.PROC PP MS")
    field(DOL5, "1")
    field(LNK5, "$(P)$(R)CopyToFilterSeq.PROC PP MS")
}

record(seq, "$(P)$(R)RecursiveAveSeq")
{
    field(DOL1, "1")
    field(LNK1, "$(P)$(R)OC1 PP MS")
    field(DOL2, "-1")
    field(LNK2, "$(P)$(R)OC2 PP MS")
    field(DOL3, "0")
    field(LNK3, "$(P)$(R)OC3 PP MS")
    field(DOL4, "1")
    field(LNK4, "$(P)$(R)OC4 PP MS")
    field(DOL5, "1")
    field(LNK5, "$(P)$(R)FC1 PP MS")
    field(DOL6, "-1")
    field(LNK6, "$(P)$(R)FC2 PP MS")
    field(DOL7, "0")
    field(LNK7, "$(P)$(R)FC3 PP MS")
    field(DOL8, "1")
    field(LNK8, "$(P)$(R)FC4 PP MS")
    field(DOL9, "0")
    field(LNK9, "$(P)$(R)RC1 PP MS")
    field(DOLA, "1")
    field(LNKA, "$(P)$(R)RC2 PP MS")
}

record(seq, "$(P)$(R)RecursiveSumSeq")
{
    field(DOL1, "1")
    field(LNK1, "$(P)$(R)OC1 PP MS")
    field(DOL2, "0")
    field(LNK2, "$(P)$(R)OC2 PP MS")
    field(DOL3, "$(P)$(R)NumFilterRecip NPP")
    field(LNK3, "$(P)$(R)OC3 PP MS")
    field(DOL4, "0")
    field(LNK4, "$(P)$(R)OC4 PP MS")
    field(DOL5, "1")
    field(LNK5, "$(P)$(R)FC1 PP MS")
    field(DOL6, "0")
    field(LNK6, "$(P)$(R)FC2 PP MS")
    field(DOL7, "$(P)$(R)NumFilterRecip NPP")
    field(LNK7, "$(P)$(R)FC3 PP MS")
    field(DOL8, "0")
    field(LNK8, "$(P)$(R)FC4 PP MS")
    field(DOL9, "0")
    field(LNK9, "$(P)$(R)RC1 PP MS")
    field(DOLA, "0")
    field(LNKA, "$(P)$(R)RC2 PP MS")
}

record(seq, "$(P)$(R)DifferenceSeq")
{
    field(DOL1, "-1")
    field(LNK1, "$(P)$(R)OC1 PP MS")
    field(DOL2, "0")
    field(LNK2, "$(P)$(R)OC2 PP MS")
    field(DOL3, "1")
    field(LNK3, "$(P)$(R)OC3 PP MS")
    field(DOL4, "0")
    field(LNK4, "$(P)$(R)OC4 PP MS")
    field(DOL5, "0")
    field(LNK5, "$(P)$(R)FC1 PP MS")
    field(DOL6, "0")
    field(LNK6, "$(P)$(R)FC2 PP MS")
    field(DOL7, "1")
    field(LNK7, "$(P)$(R)FC3 PP MS")
    field(DOL8, "0")
    field(LNK8, "$(P)$(R)FC4 PP MS")
    field(DOL9, "0")
    field(LNK9, "$(P)$(R)RC1 PP MS")
    field(DOLA, "1")
    field(LNKA, "$(P)$(R)RC2 PP MS")
}

record(seq, "$(P)$(R)RecursiveAveDiffSeq")
{
    field(DOL1, "-1")
    field(LNK1, "$(P)$(R)OC1 PP MS")
    field(DOL2, "0")
    field(LNK2, "$(P)$(R)OC2 PP MS")
    field(DOL3, "1")
    field(LNK3, "$(P)$(R)OC3 PP MS")
    field(DOL4, "0")
    field(LNK4, "$(P)$(R)OC4 PP MS")
    field(DOL5, "1")
    field(LNK5, "$(P)$(R)FC1 PP MS")
    field(DOL6, "-1")
    field(LNK6, "$(P)$(R)FC2 PP MS")
    field(DOL7, "0")
    field(LNK7, "$(P)$(R)FC3 PP MS")
    field(DOL8, "1")
    field(LNK8, "$(P)$(R)FC4 PP MS")
    field(DOL9, "0")
    field(LNK9, "$(P)$(R)RC1 PP MS")
    field(DOLA, "1")
    field(LNKA, "$(P)$(R)RC2 PP MS")
}

record(seq, "$(P)$(R)CopyToFilterSeq")
{
    field(DOL1, "0")
    field(LNK1, "$(P)$(R)OC1 PP MS")
    field(DOL2, "0")
    field(LNK2, "$(P)$(R)OC2 PP MS")
    field(DOL3, "1")
    field(LNK3, "$(P)$(R)OC3 PP MS")
    field(DOL4, "0")
    field(LNK4, "$(P)$(R)OC4 PP MS")
    field(DOL5, "0")
    field(LNK5, "$(P)$(R)FC1 PP MS")
    field(DOL6, "0")
    field(LNK6, "$(P)$(R)FC2 PP MS")
    field(DOL7, "1")
    field(LNK7, "$(P)$(R)FC3 PP MS")
    field(DOL8, "0")
    field(LNK8, "$(P)$(R)FC4 PP MS")
    field(DOL9, "0")
    field(LNK9, "$(P)$(R)RC1 PP MS")
    field(DOLA, "1")
    field(LNKA, "$(P)$(R)RC2 PP MS")
}
