source: ntrip/trunk/BNC/scripts/pppPlot.pl@ 10879

Last change on this file since 10879 was 10879, checked in by stuerze, 4 weeks ago

minor changes

  • Property svn:executable set to *
  • Property svn:keywords set to Header
File size: 28.1 KB
Line 
1#!/usr/bin/env perl
2
3# ========================================================================
4# pppPlot.pl - plot BNC's PPP results using gnuplot
5# ========================================================================
6#
7# Plot metrics:
8# - NEU displacements w.r.t. coordinates in Crd file
9# - A-priori + correction values of tropospheric zenith delay in [m],
10# - Receiver clock error and offsets in [m],
11# - Elevations, given per satellite
12# - Ambiguities, given per satellite
13# - Ionosphere Delay [m],
14# - Receiver Bias [m]
15# - Code and phase residuals in [m],
16#
17# Author : Andrea Stuerze
18# Revision: $Header: trunk/BNC/scripts/pppPlot.pl 10879 2026-04-14 08:41:02Z stuerze $
19# Changes :
20# ========================================================================
21
22# Uses
23use strict;
24use warnings;
25
26BEGIN {
27 use FindBin qw($Bin);
28 use lib "$Bin";
29}
30
31use diagnostics;
32use PDL;
33use FindBin qw($Bin);
34use Getopt::Long;
35use Chart::Gnuplot;
36use Data::Dumper qw(Dumper);
37use File::Basename;
38use Date::Manip;
39use Log::Log4perl qw(:easy);
40use PDF::API2;
41
42use Bnc;
43use Common;
44
45use constant {
46 mm => 25.4 / 72,
47 inch => 1 / 72,
48 pt => 1,
49}; # There are 72 postscript points in an inch and there are 25.4 millimeters in an inch.
50
51# Logging
52Log::Log4perl->easy_init(
53 {
54
55 #file => "plotPPP.log",
56 layout => '%d [%c l%L] %p: %m%n',
57 level => $TRACE
58 }
59);
60
61# Options
62my ($prog) = fileparse($0);
63my $help = 0;
64my @plotTypes = ();
65my @logFiles = ();
66my $sampling = 1;
67
68GetOptions(
69 'help' => \$help,
70 'plotTypes=s' => \@plotTypes,
71 'logFiles=s' => \@logFiles,
72 'sampling=s' => \$sampling,
73);
74
75HELP_MESSAGE() if $help;
76@plotTypes = qw(NEU) unless (@plotTypes);
77@plotTypes = map { uc } split( /[, ]/, join( ',', @plotTypes ) );
78@logFiles = split( /[, ]/, join( ',', @logFiles ) );
79unless (@logFiles) { ERROR "logfiles missing"; HELP_MESSAGE() }
80DEBUG(
81"\n plotTpes: @plotTypes\n logfiles: @logFiles\n sampling: $sampling"
82);
83
84# -----------------------------------------------------------------------------
85# Generate data sets for gnuplot
86# -----------------------------------------------------------------------------
87# for pdf gerneration
88my ( $png, $page, $headline, $headline_text );
89my $y0 = 180 / mm;
90my ( $x, $y, $width, $height ) = ( 40 / mm, $y0, 130 / mm, 80 / mm );
91my $dy = $height + 10 / mm;
92
93# Loop over logfiles
94foreach my $file (@logFiles) {
95 DEBUG "Parse logfile $file";
96
97 # -----------------------------------------------------------------------------
98 # Create pdf for plot results
99 # -----------------------------------------------------------------------------
100 my ( $inputFilename, $inputDir, $inputSuffix ) = fileparse( $file, '\..*' );
101 my $pdf_name = sprintf( "%s.pdf", $inputFilename );
102 my $pdf = PDF::API2->new( -file => "$inputDir$pdf_name" );
103 my $font1 = $pdf->corefont('Helvetica-Bold');
104
105 # -----------------------------------------------------------------------------
106 # Read logfile
107 # -----------------------------------------------------------------------------
108 my ( $dateStr, $station, $ssrData, $file ) = Bnc::parsePPPLogfile( $file, $sampling );
109 # PPP #
110 my $EPOCH_PPP = $file->{'EPOCH_PPP'};
111 my $N = $file->{'N'};
112 my $E = $file->{'E'};
113 my $U = $file->{'U'};
114 my $ISFIX = $file->{'ISFIX'};
115 my $NUMFIX = $file->{'NUMFIX'};
116 my %RECCLK = %{ $file->{'RECCLK'} };
117 my %AMB = %{ $file->{'AMB'} };
118 my %RES = %{ $file->{'RES'} };
119 my %ELE = %{ $file->{'ELE'} };
120 my %ION = %{ $file->{'ION'} };
121 my %BIA = %{ $file->{'BIA'} };
122
123 # SSR #
124 my $EPOCH_SSR = $file->{'EPOCH_SSR'};
125 my %CLKCORR = %{ $file->{'CLKCORR'} };
126 my %YAW_SSR = %{ $file->{'YAW_SSR'} };
127 my %YAW_DEF = %{ $file->{'YAW_DEF'} };
128 my %CODEBIAS = %{ $file->{'CODEBIAS'} };
129 my %PHASEBIAS = %{ $file->{'PHASEBIAS'} };
130 my %JUMPCOUNT = %{ $file->{'JUMPCOUNT'}};
131
132 # -----------------------------------------------------------------------------
133 # RMS computation
134 # -----------------------------------------------------------------------------
135 my (
136 $mean, $prms, $median, $min, $max,
137 $adev, $rms_n, $rms_e, $rms_u, $rms_trp
138 );
139 my ( $n, $e, $u, $trp, $str_rms_n, $str_rms_e, $str_rms_u, $str_rms_trp );
140 $n = pdl( $file->{'N'} );
141 ( $mean, $prms, $median, $min, $max, $adev, $rms_n ) = stats($n);
142 $e = pdl( $file->{'E'} );
143 ( $mean, $prms, $median, $min, $max, $adev, $rms_e ) = stats($e);
144 $u = pdl( $file->{'U'} );
145 ( $mean, $prms, $median, $min, $max, $adev, $rms_u ) = stats($u);
146 $trp = pdl( $file->{'TRP'} );
147 ( $mean, $prms, $median, $min, $max, $adev, $rms_trp ) = stats($trp);
148 $str_rms_n = sprintf( " %.2f ", $rms_n );
149 $str_rms_e = sprintf( " %.2f ", $rms_e );
150 $str_rms_u = sprintf( " %.2f ", $rms_u );
151 $str_rms_trp = sprintf( " %.2f ", $rms_trp );
152 DEBUG(
153"RMS: North: $str_rms_n, East: $str_rms_e, Up: $str_rms_u, TRP: $str_rms_trp"
154 );
155
156 # -----------------------------------------------------------------------------
157 # Plot several data sets
158 # -----------------------------------------------------------------------------
159 my $dataset;
160 ######### NEU #####################
161 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
162 $page = $pdf->page();
163 $page->mediabox('A4');
164 $headline = sprintf( "PPP results for station %s", $station );
165 $headline_text = $page->text;
166 $headline_text->font( $font1, 11 / pt );
167 $headline_text->translate( 15 / mm, 280 / mm );
168 $headline_text->text($headline);
169 $y = $y0;
170 DEBUG "Plot NEU ";
171 my $pngNameNEU = sprintf( "%s_NEU.png", $station );
172 my $chartNEU = newChart("$station ($dateStr)");
173 $chartNEU->set(
174 output => $pngNameNEU,
175 ylabel => "Displacements [m]",
176 yrange => [ " -0.5 ", " 0.5 " ],
177 );
178 my $dataN = Chart::Gnuplot::DataSet->new(
179 xdata => $EPOCH_PPP,
180 ydata => $N,
181 title => "Displacements N, RMS + -$str_rms_n m",
182 timefmt => '%s',
183 style => "lines",
184 );
185 my $dataE = Chart::Gnuplot::DataSet->new(
186 xdata => $EPOCH_PPP,
187 ydata => $E,
188 title => "Displacements E, RMS + -$str_rms_e m",
189 timefmt => '%s',
190 style => "lines",
191 );
192 my $dataU = Chart::Gnuplot::DataSet->new(
193 xdata => $EPOCH_PPP,
194 ydata => $U,
195 title => "Displacements U, RMS + -$str_rms_u m",
196 timefmt => '%s',
197 style => "dots",
198 );
199 my @datasets = ( $dataN, $dataE, $dataU );
200 $chartNEU->plot2d(@datasets);
201 $png = $page->gfx();
202 LOGDIE("could not find image file: $!\n") unless -e $pngNameNEU;
203 $png->image( $pdf->image_png($pngNameNEU), $x, $y, $width, $height );
204 }
205 ######### FIX #####################
206 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
207 DEBUG "Plot FIX";
208 my $pngNameFIX = sprintf( "%s_FIX.png", $station );
209 my $chartFIX = newChart("$station ($dateStr)");
210 $chartFIX->set(
211 output => $pngNameFIX,
212 ylabel => "Fixed [%]",
213 yrange => [ "0", "100" ],
214 ytics => 20,
215 );
216 my $dataNUMFIX = Chart::Gnuplot::DataSet->new(
217 xdata => $EPOCH_PPP,
218 ydata => $NUMFIX,
219 timefmt => '%s',
220 style => "impulse",
221 color => "green",
222 );
223 $chartFIX->plot2d($dataNUMFIX);
224 $y = $y - $dy;
225 if ( $y < 30 / mm ) {
226 $page = $pdf->page();
227 $page->mediabox('A4');
228 $y = $y0;
229 }
230 $png = $page->gfx();
231 LOGDIE("could not find image file: $!\n") unless -e $pngNameFIX;
232 $png->image( $pdf->image_png($pngNameFIX), $x, $y, $width, $height );
233 }
234 ######### TRP #####################
235 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
236 DEBUG "Plot TRP";
237 my $pngNameTRP = sprintf( "%s_TRP.png", $station );
238 my $chartTRP = newChart("$station ($dateStr)");
239 $chartTRP->set( output => $pngNameTRP );
240 $chartTRP->set(
241 ylabel => "Tropospheric Delay [m]",
242 yrange => [ " 1.0 ", " 3.0 " ],
243 );
244 my $dataTRP = Chart::Gnuplot::DataSet->new(
245 xdata => $EPOCH_PPP,
246 ydata => $file->{'TRP'},
247 title => "Tropospheric Delay, RMS + -$str_rms_trp m",
248 timefmt => '%s',
249 style => "dots",
250 );
251 $chartTRP->plot2d($dataTRP);
252 $y = $y - $dy;
253
254 if ( $y < 30 / mm ) {
255 $page = $pdf->page();
256 $page->mediabox('A4');
257 $y = $y0;
258 }
259 $png = $page->gfx();
260 LOGDIE("could not find image file: $!\n") unless -e $pngNameTRP;
261 $png->image( $pdf->image_png($pngNameTRP), $x, $y, $width, $height );
262 }
263 ######### RECCLK #####################
264 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
265 DEBUG "Plot Receiver Clocks";
266 $page = $pdf->page();
267 $page->mediabox('A4');
268 $y = $y0 + $dy;
269 $headline = sprintf( "Receiver Clocks for station %s", $station );
270 $headline_text = $page->text;
271 $headline_text->font( $font1, 11 / pt );
272 $headline_text->translate( 15 / mm, 280 / mm );
273 $headline_text->text($headline);
274 my $chartRECCLK = newChart("$station ($dateStr)");
275 $chartRECCLK->set(
276 legend => { position => "outside right" } ,
277 );
278 my @datasets = (); # init datasets
279 my $pngNameRECCLK = sprintf( "%s_RECCLK.png", $station );
280 $chartRECCLK->set( output => $pngNameRECCLK );
281 $chartRECCLK->set( ylabel => "Receiver Clocks [m]" );
282 # SYSTEM
283 foreach my $key_sys ( sort keys %RECCLK ) {
284 $dataset = Chart::Gnuplot::DataSet->new(
285 xdata => \@{ $RECCLK{$key_sys}{EPOCH_PPP} }, # array of epochs
286 ydata => \@{ $RECCLK{$key_sys}{DATA} }
287 , # array of elevations of one satellite
288 title => "$key_sys",
289 timefmt => '%s',
290 style => "dots",
291 );
292 push( @datasets, $dataset );
293 }
294 $chartRECCLK->plot2d(@datasets);
295 $y = $y - $dy;
296 if ( $y < 30 / mm ) {
297 $page = $pdf->page();
298 $page->mediabox('A4');
299 $y = $y0;
300 }
301 $png = $page->gfx();
302 die("could not find image file: $!") unless -e $pngNameRECCLK;
303 $png->image( $pdf->image_png($pngNameRECCLK), $x, $y, $width, $height );
304 }
305 ######### ELE #####################
306 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
307 DEBUG "Plot Elevations";
308 $page = $pdf->page();
309 $page->mediabox('A4');
310 $y = $y0 + $dy;
311 $headline = sprintf( "Satellite Elevations for station %s", $station );
312 $headline_text = $page->text;
313 $headline_text->font( $font1, 11 / pt );
314 $headline_text->translate( 15 / mm, 280 / mm );
315 $headline_text->text($headline);
316 my $chartELE = newChart("$station ($dateStr)");
317 $chartELE->set(
318 legend => { position => "outside right" },
319 );
320 # SYSTEM #print Dumper \%ELE;
321 foreach my $key_sys ( sort keys %ELE ) {
322 # print "$key_sys \n";# print Dumper $ELE{$key_sys};
323 my @datasets = (); # init datasets
324 my $pngNameELE = sprintf( "%s_ELE_%s.png", $station, $key_sys );
325 $chartELE->set( output => $pngNameELE );
326 $chartELE->set(
327 ylabel => "Elevation [°]",
328 yrange => [ " 0.0 ", " 90.0 " ]
329 );
330 # SATELLITE
331 foreach my $key_sat ( sort keys %{ $ELE{$key_sys} } ) { # print "$key_sat = $ELE{$key_sys}{$key_sat} \n";
332 $dataset = Chart::Gnuplot::DataSet->new(
333 xdata => \@{ $ELE{$key_sys}{$key_sat}{EPOCH_PPP} }
334 , # array of epochs
335 ydata => \@{ $ELE{$key_sys}{$key_sat}{DATA} }
336 , # array of elevations of one satellite
337 title => "$key_sat",
338 timefmt => '%s',
339 style => "dots",
340 );
341 push( @datasets, $dataset );
342 }
343 $chartELE->plot2d(@datasets);
344 $y = $y - $dy;
345 if ( $y < 30 / mm ) {
346 $page = $pdf->page();
347 $page->mediabox('A4');
348 $y = $y0;
349 }
350 $png = $page->gfx();
351 die("could not find image file: $!") unless -e $pngNameELE;
352 $png->image( $pdf->image_png($pngNameELE), $x, $y, $width,
353 $height );
354 }
355 }
356 ######### AMB #####################
357 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
358 DEBUG "Plot Ambiguities";
359 $page = $pdf->page();
360 $page->mediabox('A4');
361 $y = $y0 + $dy;
362 $headline = sprintf( "Ambiguities for station %s", $station );
363 $headline_text = $page->text;
364 $headline_text->font( $font1, 11 / pt );
365 $headline_text->translate( 15 / mm, 280 / mm );
366 $headline_text->text($headline);
367 # AMBIGUITY_TYPE #print Dumper \%AMB;
368 foreach my $key_ambType (%AMB) {
369 foreach my $key_sys ( sort keys %{ $AMB{$key_ambType} } ) {
370 my ( @datasets_amb, @datasets_epo ); # init datasets
371 my $pngNameAMB = sprintf( "%s_AMB_%s_%s.png", $station, $key_ambType, $key_sys );
372 my $pngNameEPO = sprintf( "%s_EPO_%s_%s.png", $station, $key_ambType, $key_sys );
373 my $chartAMB = Chart::Gnuplot->new(
374 output => $pngNameAMB,
375 terminal => 'png',
376 title => "$station ($dateStr)",
377 ylabel => "Ambiguities $key_ambType [m]",
378 timeaxis => 'x',
379 xtics => { labelfmt => '%H:%M', rotate => '-270', },
380 legend => { position => "outside right", },
381 grid => 'on',
382 );
383 my $chartEPO = Chart::Gnuplot->new(
384 output => $pngNameEPO,
385 terminal => 'png',
386 title => "$station ($dateStr)",
387 ylabel => "Number of Epochs $key_ambType [-]",
388 timeaxis => 'x',
389 xtics => { labelfmt => '%H:%M', rotate => '-270', },
390 legend => { position => "outside right", },
391 grid => 'on',
392 );
393 # SATELLITE
394 foreach my $key_sat ( sort keys %{ $AMB{$key_ambType}{$key_sys} } ){
395 # ambiguities
396 my $dataset_amb = Chart::Gnuplot::DataSet->new(
397 xdata => $AMB{$key_ambType}{$key_sys}{$key_sat}{EPOCH_PPP} , # array of epochs
398 ydata => $AMB{$key_ambType}{$key_sys}{$key_sat}{DATA} , # array of ambiguities of one satellite
399 title => "$key_sat",
400 timefmt => '%s',
401 style => "dots",
402 );
403 push( @datasets_amb, $dataset_amb );
404 # number of epochs used for ambiguity
405 my $dataset_epo = Chart::Gnuplot::DataSet->new(
406 xdata => $AMB{$key_ambType}{$key_sys}{$key_sat}{EPOCH_PPP} , # array of epochs
407 ydata => $AMB{$key_ambType}{$key_sys}{$key_sat}{NUMEPO} , # array of ambiguities of one satellite
408 title => "$key_sat",
409 timefmt => '%s',
410 style => "dots",
411 );
412 push( @datasets_epo, $dataset_epo );
413 }
414 # ambiguities
415 $chartAMB->plot2d(@datasets_amb);
416 $y = $y - $dy;
417 if ( $y < 30 / mm ) {
418 $page = $pdf->page();
419 $page->mediabox('A4');
420 $y = $y0;
421 }
422 $png = $page->gfx();
423 LOGDIE("could not find image file: $!\n")
424 unless -e $pngNameAMB;
425 $png->image( $pdf->image_png($pngNameAMB), $x, $y, $width, $height );
426 # number of epochs used for ambiguity
427 $chartEPO->plot2d(@datasets_epo);
428 $y = $y - $dy;
429 if ( $y < 30 / mm ) {
430 $page = $pdf->page();
431 $page->mediabox('A4');
432 $y = $y0;
433 }
434 $png = $page->gfx();
435 LOGDIE("could not find image file $pngNameEPO: $!\n")
436 unless -e $pngNameEPO;
437 $png->image( $pdf->image_png($pngNameEPO),
438 $x, $y, $width, $height );
439 }
440 }
441 }
442 ######### ION #####################
443 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
444 DEBUG "Plot ION";
445 $page = $pdf->page();
446 $page->mediabox('A4');
447 $y = $y0 + $dy;
448 $headline = sprintf( "Ionosphere Delay for station %s", $station );
449 $headline_text = $page->text;
450 $headline_text->font( $font1, 11 / pt );
451 $headline_text->translate( 15 / mm, 280 / mm );
452 $headline_text->text($headline);
453 my $chartION = newChart("$station ($dateStr)");
454 $chartION->set( ylabel => "Ionophere Delay [m]" );
455 $chartION->set( legend => { position => "outside right" } );
456 # SYSTEM
457 foreach my $ksys ( sort keys %ION ) {
458 my @datasets; # init datasets
459 my $pngNameION = sprintf( "%s_ION_%s.png", $station, $ksys );
460 $chartION->set( output => $pngNameION );
461 # SATELLITE
462 foreach my $sat ( sort keys %{ $ION{$ksys} } ) {
463 my $dataset = Chart::Gnuplot::DataSet->new(
464 xdata => $ION{$ksys}{$sat}{EPOCH_PPP}, # array of epochs
465 ydata => $ION{$ksys}{$sat}{DATA}
466 , # array of ionvations of one satellite
467 title => "$sat",
468 timefmt => '%s',
469 style => "dots",
470 );
471 push( @datasets, $dataset );
472 }
473 $chartION->plot2d(@datasets); #system ("display $pngName&");
474 $y = $y - $dy;
475 if ( $y < 30 / mm ) {
476 $page = $pdf->page();
477 $page->mediabox('A4');
478 $y = $y0;
479 }
480 $png = $page->gfx();
481 die("could not find image file: $!") unless -e $pngNameION;
482 $png->image( $pdf->image_png($pngNameION), $x, $y, $width,
483 $height );
484 }
485 }
486 ######### BIAS #####################
487 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
488 DEBUG "Plot BIAS";
489 $page = $pdf->page();
490 $page->mediabox('A4');
491 $y = $y0 + $dy;
492 $headline = sprintf( "Receiver Biases for station %s", $station );
493 $headline_text = $page->text;
494 $headline_text->font( $font1, 11 / pt );
495 $headline_text->translate( 15 / mm, 280 / mm );
496 $headline_text->text($headline);
497 my $chartBIAS = newChart("$station ($dateStr)");
498 $chartBIAS->set( legend => { position => "outside right" } );
499
500 # BIAS_TYPE #print Dumper \%BIA;
501 foreach my $key_biasType ( sort keys %BIA ) { #print "key_biasType: $key_biasType \n";
502 foreach my $key_sys ( sort keys %{ $BIA{$key_biasType} } ) { #print "key_sys: $key_sys \n"; #print Dumper $BIA{$key_biasType};
503 my @datasets; # init datasets
504 my $pngNameBIA = sprintf( "%s_BIAS_%s_%s.png",
505 $station, $key_biasType, $key_sys );
506 $chartBIAS->set( output => $pngNameBIA );
507 $chartBIAS->set( ylabel => "Receiver Bias $key_biasType [m]" );
508
509 my $dataset = Chart::Gnuplot::DataSet->new(
510 xdata => $BIA{$key_biasType}{$key_sys}{EPOCH_PPP},
511 ydata => $BIA{$key_biasType}{$key_sys}{DATA},
512 title => "$key_sys",
513 timefmt => '%s',
514 style => "dots",
515 );
516 push( @datasets, $dataset );
517
518 $chartBIAS->plot2d(@datasets);
519 $y = $y - $dy;
520 if ( $y < 30 / mm ) {
521 $page = $pdf->page();
522 $page->mediabox('A4');
523 $y = $y0;
524 }
525 $png = $page->gfx();
526 die("could not find image file: $!") unless -e $pngNameBIA;
527 $png->image( $pdf->image_png($pngNameBIA), $x, $y, $width, $height );
528 }
529 }
530 }
531 ######### RES #####################
532 if ( grep ( $_ eq "PPP", @plotTypes ) ) {
533 DEBUG "Plot Residuals";
534 $page = $pdf->page();
535 $page->mediabox('A4');
536 $y = $y0 + $dy;
537 $headline = sprintf( "Residuals for station %s", $station );
538 $headline_text = $page->text;
539 $headline_text->font( $font1, 11 / pt );
540 $headline_text->translate( 15 / mm, 280 / mm );
541 $headline_text->text($headline);
542 my $chartRES = newChart("$station ($dateStr)");
543 $chartRES->set( legend => { position => "outside right" } );
544 # RESIDUAL_TYPE #print Dumper \%RES;
545 foreach my $key_resType ( sort keys %RES ){ #print "key_resType: $key_resType \n";
546 #SYSTEM
547 foreach my $key_sys ( sort keys %{ $RES{$key_resType} } ) { #print "key_sys: $key_sys \n"; #print Dumper $RES{$key_resType};
548 my @datasets;
549 my $pngNameRES = sprintf( "%s_RES_%s_%s.png", $station, $key_resType, $key_sys );
550 $chartRES->set( output => $pngNameRES );
551 $chartRES->set(ylabel => "Residuals $key_resType [m]" );
552 if ( $key_resType =~ /^c/ ) {
553 $chartRES->set( yrange => [ " -6.0 ", " 6.0 " ] );
554 }
555 elsif ( $key_resType =~ /^l/ ) {
556 $chartRES->set( yrange => [ " -0.06 ", " 0.06 " ] );
557 }
558 elsif ( $key_resType =~ /^GIM/ ) {
559 $chartRES->set( yrange => [ " -6.0 ", " 6.0 " ] );
560 }
561 # SATELLITE
562 foreach my $key_sat ( sort keys %{ $RES{$key_resType}{$key_sys} } ) { #print "$key_sat = $RES{$key_resType}{$key_sys}{$key_sat} \n";
563 $dataset = Chart::Gnuplot::DataSet->new(
564 xdata => $RES{$key_resType}{$key_sys}{$key_sat}{EPOCH_PPP}, # array of epochs
565 ydata => $RES{$key_resType}{$key_sys}{$key_sat}{DATA}
566 , # array of residuals of one satellite
567 title => "$key_sat",
568 timefmt => '%s',
569 style => "dots",
570 );
571 push( @datasets, $dataset );
572 }
573 $chartRES->plot2d(@datasets);
574 $y = $y - $dy;
575 if ( $y < 30 / mm ) {
576 $page = $pdf->page();
577 $page->mediabox('A4');
578 $y = $y0;
579 }
580 $png = $page->gfx();
581 LOGDIE("could not find image file: $!\n")
582 unless -e $pngNameRES;
583 $png->image( $pdf->image_png($pngNameRES), $x, $y, $width, $height );
584 }
585 }
586 }
587 ######### CLKCORR #####################
588 if ( grep ( $_ eq "SSR", @plotTypes ) ) {
589 DEBUG "Plot CLKCORR";
590 $page = $pdf->page();
591 $page->mediabox('A4');
592 $y = $y0 + $dy;
593 $headline = sprintf( "Clock Corrections from %s", $ssrData );
594 $headline_text = $page->text;
595 $headline_text->font( $font1, 11 / pt );
596 $headline_text->translate( 15 / mm, 280 / mm );
597 $headline_text->text($headline);
598 my $chartCLKCORR = newChart("$ssrData ($dateStr)");
599 $chartCLKCORR->set( ylabel => "Clock Corrections [m]" );
600 $chartCLKCORR->set( legend => { position => "outside right" } );
601 # SYSTEM
602 foreach my $ksys ( sort keys %CLKCORR ) { #print "$key_sys \n"; #print Dumper $CLKCORR{$key_sys};
603 my @datasets;
604 my $pngNameCLKCORR = sprintf( "%s_CLKCORR_%s.png", $station, $ksys );
605 $chartCLKCORR->set( output => $pngNameCLKCORR );
606 # SATELLITE
607 foreach my $sat ( sort keys %{ $CLKCORR{$ksys} } ) { #print "$key_sat = $CLKCORR{$key_sys}{$key_sat} \n";
608 my $dataset = Chart::Gnuplot::DataSet->new(
609 xdata => $CLKCORR{$ksys}{$sat}{EPOCH_SSR}, # array of epochs
610 ydata => $CLKCORR{$ksys}{$sat}{DATA}, # array of ionvations of one satellite
611 title => "$sat",
612 timefmt => '%s',
613 style => "dots",
614 );
615 push( @datasets, $dataset );
616 }
617 $chartCLKCORR->plot2d(@datasets); #system ("display $pngName&");
618 $y = $y - $dy;
619 if ( $y < 30 / mm ) {
620 $page = $pdf->page();
621 $page->mediabox('A4');
622 $y = $y0;
623 }
624 $png = $page->gfx();
625 die("could not find image file: $!") unless -e $pngNameCLKCORR;
626 $png->image( $pdf->image_png($pngNameCLKCORR),
627 $x, $y, $width, $height );
628 }
629 }
630 ######### YAW ANGLE #####################
631 if ( grep ( $_ eq "SSR", @plotTypes ) ) {
632 DEBUG "Plot YAW";
633 $page = $pdf->page();
634 $page->mediabox('A4');
635 $y = $y0 + $dy;
636 $headline =
637 sprintf( "Yaw angle from %s versus Standard Model", $ssrData );
638 $headline_text = $page->text;
639 $headline_text->font( $font1, 11 / pt );
640 $headline_text->translate( 15 / mm, 280 / mm );
641 $headline_text->text($headline);
642 # SATELLITE
643 foreach my $sat ( sort keys %YAW_SSR ) {
644 my @datasets;
645 my $chartYAW = newChart("Yaw Angle Satellite $sat ($dateStr)");
646 $chartYAW->set( ylabel => "Yaw Angle [°]" );
647 $chartYAW->set( legend => { position => "outside right" } );
648 my $pngNameYAW = sprintf( "%s_YAW_%s.png", $station, $sat );
649 $chartYAW->set( output => $pngNameYAW );
650 # YAW from SSR data
651 my $datasetYAW_SSR = Chart::Gnuplot::DataSet->new(
652 xdata => $YAW_SSR{$sat}{EPOCH_SSR}, # array of epochs
653 ydata => $YAW_SSR{$sat}{DATA} , # array of ionvations of one satellite
654 title => $ssrData,
655 timefmt => '%s',
656 style => "line",
657 );
658 push( @datasets, $datasetYAW_SSR );
659 # YAW from standard model
660 my $datasetYAW_DEF = Chart::Gnuplot::DataSet->new(
661 xdata => $YAW_DEF{$sat}{EPOCH_SSR}, # array of epochs
662 ydata => $YAW_DEF{$sat}{DATA} , # array of ionvations of one satellite
663 title => "Standard Model",
664 timefmt => '%s',
665 style => "line",
666 );
667 push( @datasets, $datasetYAW_DEF );
668 $chartYAW->plot2d(@datasets);
669 $y = $y - $dy;
670 if ( $y < 30 / mm ) {
671 $page = $pdf->page();
672 $page->mediabox('A4');
673 $y = $y0;
674 }
675 $png = $page->gfx();
676 die("could not find image file: $!") unless -e $pngNameYAW;
677 $png->image( $pdf->image_png($pngNameYAW), $x, $y, $width, $height );
678 }
679 }
680 ######### CODE BIASES #####################
681 if ( grep ( $_ eq "SSR", @plotTypes ) ) {
682 DEBUG "Plot Code Biases";
683 $page = $pdf->page();
684 $page->mediabox('A4');
685 $y = $y0 + $dy;
686 $headline = sprintf( "Code Biases from %s ", $ssrData );
687 $headline_text = $page->text;
688 $headline_text->font( $font1, 11 / pt );
689 $headline_text->translate( 15 / mm, 280 / mm );
690 $headline_text->text($headline);
691 my $chartCB = newChart("$ssrData ($dateStr)");
692 $chartCB->set( legend => { position => "outside right" } );
693 foreach my $key_type ( sort keys %CODEBIAS ) {
694 #SYSTEM
695 foreach my $key_sys ( sort keys %{ $CODEBIAS{$key_type} } ) {
696 my @datasets;
697 my $pngNameCB = sprintf( "%s_CB_%s_%s.png", $station, $key_type, $key_sys );
698 $chartCB->set( output => $pngNameCB );
699 $chartCB->set( ylabel => "Code Biases $key_type [m]" );
700 # SATELLITE
701 foreach my $key_sat ( sort keys %{ $CODEBIAS{$key_type}{$key_sys} } ) {
702 $dataset = Chart::Gnuplot::DataSet->new(
703 xdata => $CODEBIAS{$key_type}{$key_sys}{$key_sat}{EPOCH_SSR}, # array of epochs
704 ydata => $CODEBIAS{$key_type}{$key_sys}{$key_sat}{DATA} , # array of residuals of one satellite
705 title => "$key_sat",
706 timefmt => '%s',
707 style => "dots",
708 );
709 push( @datasets, $dataset );
710 }
711 $chartCB->plot2d(@datasets);
712 $y = $y - $dy;
713 if ( $y < 30 / mm ) {
714 $page = $pdf->page();
715 $page->mediabox('A4');
716 $y = $y0;
717 }
718 $png = $page->gfx();
719 LOGDIE("could not find image file: $!\n")
720 unless -e $pngNameCB;
721 $png->image( $pdf->image_png($pngNameCB),$x, $y, $width, $height );
722 }
723 }
724 }
725 ######### PHASE BIASES #####################
726 if ( grep ( $_ eq "SSR", @plotTypes ) ) {
727 DEBUG "Plot Phase Biases";
728 $page = $pdf->page();
729 $page->mediabox('A4');
730 $y = $y0 + $dy;
731 $headline = sprintf( "Phase Biases from %s ", $ssrData );
732 $headline_text = $page->text;
733 $headline_text->font( $font1, 11 / pt );
734 $headline_text->translate( 15 / mm, 280 / mm );
735 $headline_text->text($headline);
736 foreach my $key_type ( sort keys %PHASEBIAS ) {
737 #SYSTEM
738 foreach my $key_sys ( sort keys %{ $PHASEBIAS{$key_type} } ) {
739 my (@datasetsPB, $datasetPB);
740 my (@datasetsJC, $datasetJC);
741 my $pngNamePB = sprintf( "%s_PB_%s_%s.png", $station, $key_type, $key_sys );
742 my $pngNameJC = sprintf( "%s_JC_%s_%s.png", $station, $key_type, $key_sys );
743 my $chartPB = newChart("$ssrData ($dateStr)");
744 $chartPB->set( legend => { position => "outside right" } );
745 $chartPB->set( output => $pngNamePB );
746 $chartPB->set( ylabel => "Phase Biases $key_type [m]" );
747 my $chartJC = newChart("$ssrData ($dateStr)");
748 $chartJC->set( legend => { position => "outside right" } );
749 $chartJC->set( output => $pngNameJC );
750 $chartJC->set( ylabel => "Counter Value $key_type " );
751 # SATELLITE
752 foreach my $key_sat ( sort keys %{ $PHASEBIAS{$key_type}{$key_sys} } ) {
753 $datasetPB = Chart::Gnuplot::DataSet->new(
754 xdata => $PHASEBIAS{$key_type}{$key_sys}{$key_sat}{EPOCH_SSR}, # array of epochs
755 ydata => $PHASEBIAS{$key_type}{$key_sys}{$key_sat}{DATA}, # array of residuals of one satellite
756 title => "$key_sat",
757 timefmt => '%s',
758 style => "linespoints",
759 );
760 push( @datasetsPB, $datasetPB );
761 $datasetJC = Chart::Gnuplot::DataSet->new(
762 xdata => $JUMPCOUNT{$key_type}{$key_sys}{$key_sat}{EPOCH_SSR}, # array of epochs
763 ydata => $JUMPCOUNT{$key_type}{$key_sys}{$key_sat}{DATA}, # array of residuals of one satellite
764 title => "$key_sat",
765 timefmt => '%s',
766 style => "linespoints",
767 );
768 push( @datasetsJC, $datasetJC );
769 }
770 #phase biases
771 $chartPB->plot2d(@datasetsPB);
772 $y = $y - $dy;
773 if ( $y < 30 / mm ) {
774 $page = $pdf->page();
775 $page->mediabox('A4');
776 $y = $y0;
777 }
778 $png = $page->gfx();
779 LOGDIE("could not find image file: $!\n")
780 unless -e $pngNamePB;
781 $png->image( $pdf->image_png($pngNamePB),$x, $y, $width, $height );
782 #jump counter
783 $chartJC->plot2d(@datasetsJC);
784 $y = $y - $dy;
785 if ( $y < 30 / mm ) {
786 $page = $pdf->page();
787 $page->mediabox('A4');
788 $y = $y0;
789 }
790 $png = $page->gfx();
791 LOGDIE("could not find image file: $!\n")
792 unless -e $pngNameJC;
793 $png->image( $pdf->image_png($pngNameJC),$x, $y, $width, $height );
794 }
795 }
796 }
797
798$pdf->save();
799$pdf->end();
800
801system("rm *.png");
802if (Common::amInteractiv) {
803 system("evince $inputDir/$pdf_name");
804}
805
806} # ----- next logfile -----
807
808# newChart returns a default chart.
809sub newChart {
810 my $title = shift;
811 return Chart::Gnuplot->new(
812 terminal => 'png',
813 title => $title,
814 timeaxis => 'x',
815 xlabel => "Time [h]",
816 xtics => { labelfmt => '%H:%M', rotate => '-270' },
817 #xtics => { labelfmt => '%H:%M\n%m-%d', rotate => '-270'},
818 grid => 'on',
819 );
820}
821
822sub HELP_MESSAGE {
823 print <<EOI_HILFE;
824$prog - plot BNC's PPP results using gnuplot
825
826USAGE:
827 $prog [OPTIONS]
828
829OPTIONS:
830 -p, --plotTypes PPP or SSR (requires PPP files in debug mode)
831 -l, --logFiles comma separated list of BNC's PPP logfiles
832 -s, --sampling sampling interval in seconds for the logfile data (default: 1); for a daily logfile <30> seconds should be usefull
833 -h, --help show help contents
834
835EXAMPLES:
836 $prog --plotTypes PPP -s 30 -l /path/to/FFMJ186730.ppp
837
8382021 andrea.stuerze\@bkg.bund.de
839EOI_HILFE
840 exit;
841}
Note: See TracBrowser for help on using the repository browser.