Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Time interval extraction in bufr_filter for compressed data

Step-by-step guide

The following keys allow the user to extract a set of BUFR subsets that pertain to a time interval:

Code Block
extractDateTimeYearStart

...


extractDateTimeMonthStart

...


extractDateTimeDayStart

...


extractDateTimeHourStart

...


extractDateTimeMinuteStart

...


extractDateTimeSecondStart

...


extractDateTimeYearEnd

...


extractDateTimeMonthEnd

...


extractDateTimeDayEnd

...


extractDateTimeHourEnd

...


extractDateTimeMinuteEnd

...


extractDateTimeSecondEnd

...


doExtractDateTime

...


extractedDateTimeNumberOfSubsets


To explain the use of these keys the following example

...

using bufr_filter is provided, but please note that these same keys can be set using the Fortran and Python interfaces as well and no special functions have been implemented in the bufr_filter for this feature.

The following file "extract.filter" with bufr_filter can be used to perform the extraction of subsets from a BUFR message:

Code Block
languagebash
firstline1
titleextract.filter
linenumberstrue
transient originalNumberOfSubsets = numberOfSubsets;
set unpack=1;
transient extractDateTimeYearStart=2012;
transient extractDateTimeMonthStart=10;
transient extractDateTimeDayStart=31;
transient extractDateTimeHourStart=0;
transient extractDateTimeMinuteStart=1;
transient extractDateTimeSecondStart=31.6;

transient extractDateTimeYearEnd=2012;
transient extractDateTimeMonthEnd=10;
transient extractDateTimeDayEnd=31;
transient extractDateTimeHourEnd=0;
transient extractDateTimeMinuteEnd=1;
transient extractDateTimeSecondEnd=39.6;

set doExtractDateTime=1; # This does an implicit 'pack'
if (extractedDateTimeNumberOfSubsets != 0) {
  write;
}

print "extracted [

...

extractedDateTimeNumberOfSubsets] of [originalNumberOfSubsets] subsets";


In line 1 we record the current (original) number of subsets. In lines 3 to 8 we specify the start of the time period and in lines 10 to 15 we specify the end of the period.
Finally in lines 17 to 20 we do the actual extraction and write out the message to the output BUFR file. The output will have just those subsets whose date/time are included in the time range specification above.

The final print message informs the user how many subsets were actually extracted during this process out of the original set. No output BUFR is written (the "write" statement not executed) unless there was at least one extracted subset.

This example can be used on any multi-subset input file in compressed form as follows:

Code Block

...

% bufr_filter -o out.bufr extract.filter in.bufr



Content by Label
showLabelsfalse
max5
spaces~usa
showSpacefalse
sortmodified
reversetrue
typepage
cqllabel = in ("kb-how-to-article","eccbufr-faqs","bufr","bufr_filter","compression","time") and label in ("bufr","bufr_filter","subsets") and type = "page" and space = "~usaUDOC"
labelskb-how-to-article