RObufr

 view release on metacpan or  search on metacpan

RObufr.pp  view on Meta::CPAN

  my $file = shift;

  my $bufrlib = $self->{BUFRLIB};
  my $seqfile = (-s "./gpsseq2.dat") ? "./gpsseq2.dat" : "$bufrlib/gpsseq2.dat";
  die "Cannot find sequence file gpsseq2.dat (looked in . and $bufrlib)" unless (-s $seqfile);

  # Read in code tables
  my $tabled = read_table_d("$bufrlib/TABLED");
  my $tableb = read_table_b("$bufrlib/TABLEB");

  $self->{BUFRTEXT} = do { local( @ARGV, $/ ) = $file; <> } ; # slurp!

  #
  ## Pull out the separate BUFR sections and lengths
  #
  my $ptr = CORE::index($self->{BUFRTEXT}, 'BUFR'); # Find start of BUFR file
  die "Cannot find BUFR section 0" if ($ptr < 0);
  
  $self->{SECTION0} = substr($self->{BUFRTEXT}, $ptr, 8);
  $ptr += 8;
  $self->{BUFR_LEN} = unpack ("N", "\x0" . substr($self->{SECTION0}, 4, 3));

RObufr.pp  view on Meta::CPAN

# @           $file -- The full path of gpsseq2.dat
# @return     $desc -- An integer PDL of descriptors
# @exception  Can be raised
# ----------------------------------------------------------------------*/
sub readDesc {

  my $name = shift;
  my $file = shift;

  # magical slurp of data from $file
  my $text = do { local( @ARGV, $/ ) = $file ; <> } ;

  my ($desc) = ($text =~ m|\[$name\]\s*\d+ ([\d{6}\s*]+)|s);
  my @desc = split " ", $desc;

  # descriptors are 6 digits of the form FXXYYY.
  # Encode as desc[i] = (F * 64 + XX) * 256 + YYY
  #$desc = ( floor($desc/100000) * 64 + (floor($desc/1000) % 100) ) * 256 + ($desc % 1000);

  return \@desc;

t/02run.t  view on Meta::CPAN

my $b = RObufr->new(EDITION   => $edition,
                     TIME      => $startTime,
                     LAT       => $lat,
                     LON       => $lon,
                     NAME      => 'GPSRO2',  # radio occultation BUFR sequence (310026)
                     BUFRLIB   => './bufr',
                     MSGPREFIX => $msgprefix,
                     GTSHDR    => $gtshdr);
my $bufr = $b->encode($values)->getbufr;
my $rofile = 't/bfrPrf_MTPA.2012.001.00.03.G27_2011.2980_bufr.good';
my $good_bufr = do { local( @ARGV, $/ ) = $rofile; <> } ; # slurp!
ok (length($bufr) == 11423, 'RO BUFR string length OK');
ok ($bufr eq $good_bufr,    'RO BUFR string identical to reference');
undef $b;
$b = RObufr->new(EDITION   => $edition,
                  TIME      => $startTime,
                  LAT       => $lat,
                  LON       => $lon,
                  NAME      => 'GPSRO2',  # radio occultation BUFR sequence (310026)
                  BUFRLIB   => './bufr', 
                  MSGPREFIX => $msgprefix,

t/02run.t  view on Meta::CPAN

ok ( ( scalar(@$comparison_values) == scalar(@$values) ), 'Number of values generated equals starting number');

my $output = $b->print;
my $go_file = 't/bfrPrf_MTPA.2012.001.00.03.G27_2011.2980_bufr.print';

# Uncomment to create new 'good output' file
#open  OUT, ">$go_file";
#print OUT $output;
#close OUT;

my $good_output = do { local( @ARGV, $/ ) = $go_file; <> } ; # slurp!
ok ( $output eq $good_output, 'Space-based printout matches expected' );

# open OUT, ">t/bfrPrf_MTPA.2012.001.00.03.G27_2011.2980_bufr"; print OUT $bufr; close OUT; # debug

# Code used to generate bufr.dat once a good run is verified.  Put in makeBfrPrf2.pl:
#  use Data::Dumper;
#  open my $ofh, '>', '../t/bufr.dat';
#  print {$ofh} Dumper([[@values],$edition,$startTime,$lat,$lon,$msgprefix,$gtshdr]);
#  close $ofh;

t/02run.t  view on Meta::CPAN

$b1->read($bufr_file);

$output = $b1->print;
$go_file = 't/ucarPw_2012.249.04.15.0030.01_bufr.print';

# Uncomment to create new 'good output' file
#open  OUT, ">$go_file";
#print OUT $output;
#close OUT;

$good_output = do { local( @ARGV, $/ ) = $go_file; <> } ; # slurp!
ok ( $output eq $good_output, 'Ground-based printout matches expected' );

my $b2 = RObufr->new(EDITION   => 4,
                      TIME      => $startTime,
                      NAME      => 'GBGPS',
                      BUFRLIB   => './bufr',
                      MSGPREFIX => 0,
                      GTSHDR    => 0);
$bufr = $b2->encode($b1->getvalues)->getbufr;

$good_bufr = do { local( @ARGV, $/ ) = $bufr_file; <> } ; # slurp!

ok ($b1->{SECTION0} eq $b2->{SECTION0}, 'Ground-based read-in SECTION0 equals encoded SECTION0');

# Remove this test for the RObufr version.  The pre-generated BUFR file contains a UTC time
# which has to be converted from GPS time with the aid of a leap-second file.  Since the
# RObufr (stand-alone) version has no leap-second file, this test fails because the time
# is off by a few seconds.  This should not matter.  D. Hunt 5/29/2013
#ok ($b1->{SECTION1} eq $b2->{SECTION1}, 'Ground-based read-in read SECTION1 equals encoded SECTION1');

ok ($b1->{SECTION3} eq $b2->{SECTION3}, 'Ground-based read-in read SECTION3 equals encoded SECTION3');



( run in 0.484 second using v1.01-cache-2.11-cpan-49f99fa48dc )