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.