Last modified 18 months ago
Last modified on 03/25/12 14:02:09
Design Requirements for the Station Trigger Filter
1. The purpose of the trigger filter is to reduce the number of "duplicate"
triggers from a given "station". For the trigger filter, all channels
which have matching station code and network code are considered to be
the from the same "station". The rules for what are considered "duplicate"
triggers are given below.
2. For each "station", the trigger filter will maintain a history list of
triggers that have been allowed through the filter. The size of these
lists will be limited to a configurable number (count) of triggers.
LDD: The "TriggerHistory" command specifies the number (count)
of triggers that will be maintained in the list for each "station".
Only triggers which pass the filter rules are added to the list. Once
the list is full, old triggers are removed in a simple first-in, first
overwritten manner.
3. The trigger filter can optionally be configured to pass triggers from
only certain component codes.
LDD: Set with "AllowComponent" command. If no "AllowComponent" command
is used, ALL components will be allowed to pass. If one or more
"AllowComponent" commands are used, the trigger filter will only pass
triggers from the listed components.
4. Each individual station trigger from carlstatrig produces a "trigger-on"
message and a "trigger-off" message. The following rules may be used to
determine if a "trigger-on" is allowed through the filter.
A new trigger-on is considered to "match" a trigger in the history
list if the two trigger-on times are within "time tolerance" of each
other. That is, a new trigger-on within "time tolerance" before or
after a listed trigger is considered a duplicate of the listed trigger
and is rejected.
LDD: Set with "TimeTolerance" command.
a. The first trigger message (either "trigger-on" or "trigger-off")
seen for a given station is always passed by the filter.
b. A trigger-on that is more than "time tolerance" newer than the
most recent listed trigger is always passed by the filter.
c. "Allow older": A trigger-on that is not a duplicate of any listed
trigger and is more than "time tolerance" older than the youngest
listed trigger is optionally passed by the filter.
LDD: Two commands to control this feature.
"OlderTrigAllowed" has 3 possible values:
0=pass no non-duplicate triggers older than the youngest passed
trigger for this station.
1=pass older triggers, but set a limit on how old they can be.
2=pass all non-duplicate triggers older than the youngest trigger
for this station.
"OlderTrigLimit" is used only if OlderTrigAllowed=1. If a
non-duplicate trigger is older than they youngest-passed trigger by
more than OlderTrigLimit seconds, the trigger will be rejected.
This feature is a carry-over from the original pkfilter code.
It was included in pkfilter because I noticed that for CI data,
some channels at a station can arrive many minutes later than
another channel at the same station. I assume that this is due to
recovery on a bad telemetry link.
If we want to keep the trigger history relatively short and still
let older triggers thru, we need to set a time limit on the oldest
triggers we'll accept. Otherwise we could still end up with lots of
duplicates in the system.
This feature not be very useful because carlsubtrig, as currently
written (2005/11/22), needs to operate "in the present." It compares
the timestamp in the trigger message to the system clock and
effectively ignore any triggers that are "too old." If carlsubtrig
were re-written to be able to handle old data, then the "OldTrigAllowed"
feature may become useful.
5. "Trigger-off" messages are filtered by the trigger filter in this manner:
a. If a "trigger-off" message is the first message seen from a station,
it will be passed thru with no other checks.
b. If a "trigger-off" message is from a station which is already in
the trigger filter's list, it will only be passed if it is the
first "trigger-off" message which exactly matches a "trigger-on"
message which has already passed thru the filter.
