Index: trunk/BNC/scripts/Bnc.pm
===================================================================
--- trunk/BNC/scripts/Bnc.pm	(revision 10798)
+++ trunk/BNC/scripts/Bnc.pm	(revision 10806)
@@ -395,6 +395,5 @@
 			if (   $hlp[14] eq '-nan'
 				|| $hlp[15] eq '-nan'
-				|| $hlp[16] eq '-nan' )
-			{
+				|| $hlp[16] eq '-nan' )	{
 				WARN("$hlp[2] $hlp[3]: NEU displacements are NAN");
 				next;
@@ -503,5 +502,5 @@
 #          $logMode    [optional] Flag. If set, remember the position of the file-read
 #                      for the next read. Default: off
-# Return : $station, \%data
+# Return : $dateStr, $station, $ssrData \%data
 # =============================================================================
 sub parsePPPLogfile {
@@ -517,12 +516,25 @@
 		$startSec = time() - $goBackSecs;
 	}
-	my $epo;
+	my $epo_ppp;
 	my $old_epochSec = 0;
 	my $epochSec     = 0;
 	my $epochDiff    = 0;
+
+    my ( @EPOCH_PPP);
 	my ( @hlp, @N, @E, @U, @ISFIX, @NUMFIX, @TRP );
-	my ( @EPOCH, );
 	my ( %SATNUM, %RECCLK, %AMB, %RES, %ELE, %ION, %BIA );
-	my ( $station, $lki, $sys, $sat, $amb );
+	my ( $date, $station, $lki, $sys, $sat, $amb );
+
+	my ( @EPOCH_SSR);
+	my ( %CLKCORR);
+	my ( %YAW_SSR);
+	my ( %YAW_DEF);
+	my ( %CODEBIAS);
+	my ( %PHASEBIAS);
+	my ( %JUMPCOUNT);
+	my $epochSsrSec = 0;
+	my $ssrData;
+	my $dateStr;
+
 	open( my $fh, "<", $file ) || LOGDIE "Could not open file $file: $!\n";
 
@@ -536,16 +548,18 @@
 	while (<$fh>) {
 		chomp( $ln = $_ );
-
 		if ( $ln =~ /\bof Epoch\b/ ) {
-
 			# PPP of Epoch 2015-08-27_14:00:15.000
-			if ( $ln =~
-				/PPP of Epoch (\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2})\.\d+/ )
-			{
-				$epo = $1;    #print "$epo\n";
-			}
-			else { ERROR "strange line: \"$ln\""; next }
-
-			my $tp = Time::Piece->strptime( $epo, '%Y-%m-%d_%H:%M:%S' );
+			if ( $ln =~ /PPP of Epoch (\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2})\.\d+/ ) {
+				$epo_ppp = $1;    #print "$epo_ppp\n";
+				@hlp = split( /\s+/, $ln );
+                $ssrData = $hlp[5]; #print "$ssrData\n";
+                $dateStr = substr( $hlp[3], 0, 9 );
+
+			}
+			else {
+				ERROR "strange ppp line: \"$ln\""; next
+			}
+
+			my $tp = Time::Piece->strptime( $epo_ppp, '%Y-%m-%d_%H:%M:%S' );
 			$epochSec  = $tp->epoch();
 			$epochDiff = $epochSec - $old_epochSec;
@@ -553,26 +567,24 @@
 		}
 
-		next if ( !$epo );
+		next if ( !$epo_ppp );
 		next if ( defined $startSec && $epochSec < $startSec );
 		next if ( $epochDiff && $epochDiff < $sampling );
 
 		@hlp = split( /\s+/, $ln );
-		my $numFix = 0;
-		my $isFix;
-		my $strFix = "fix";
+
 		if ( $ln =~ /\bdN\b/ ) {
-			push( @EPOCH, $epochSec );    # besser $epo ?
+			#2025-11-29_16:55:09.000 WTZR00DEU0 X = 4075580.2482 +- 0.0500 Y = 931854.1736 +- 0.0314 Z = 4801568.3044 +- 0.0591 dN = 0.0074 +- 0.0407 dE = 0.0895 +- 0.0284 dU = -0.0072 +- 0.0672 fix 96 %
+			push( @EPOCH_PPP, $epochSec );
 			$old_epochSec = $epochSec;
-
-#2025-11-29_16:55:09.000 WTZR00DEU0 X = 4075580.2482 +- 0.0500 Y = 931854.1736 +- 0.0314 Z = 4801568.3044 +- 0.0591 dN = 0.0074 +- 0.0407 dE = 0.0895 +- 0.0284 dU = -0.0072 +- 0.0672 fix 96 %
+			$date = substr( $hlp[0], 0, 9 );
 			$station = $hlp[1];
-
+		    my $numFix = 0;
+		    my $isFix;
+		    my $strFix = "fix";
 			if (   $hlp[19] eq '-nan'
 				|| $hlp[24] eq '-nan'
-				|| $hlp[29] eq '-nan' )
-			{
+				|| $hlp[29] eq '-nan' )	{
 				WARN("$hlp[0] $station: NEU displacements are NAN");
 			}
-
 			push @N, $hlp[19];
 			push @E, $hlp[24];
@@ -590,20 +602,16 @@
 			push @NUMFIX, $numFix;
 		}
-		elsif ( ( $ln =~ /\bAMB\b/ ) && ( $ln !~ /RESET/ ) ) {
-
-		 # 2015-08... AMB lIF G04 253.0000 -8.9924 +- 1.7825 el = 22.03 epo = 86
+		elsif ( ( $ln =~ /\bAMB\b/ ) && ( $ln !~ /RESET/ ) ) {		 # 2015-08... AMB lIF G04 253.0000 -8.9924 +- 1.7825 el = 22.03 epo = 86
 			$lki = $hlp[2];
 			$sat = $hlp[3];
 			$sys = substr( $sat, 0, 1 );
 			$amb = $hlp[4] + $hlp[5];
-			push @{ $AMB{$lki}{$sys}{$sat}{EPOCH} },  $epochSec;
+			push @{ $AMB{$lki}{$sys}{$sat}{EPOCH_PPP} },  $epochSec;
 			push @{ $AMB{$lki}{$sys}{$sat}{DATA} },   $amb;
 			push @{ $AMB{$lki}{$sys}{$sat}{NUMEPO} }, $hlp[13];
-			push @{ $ELE{$sys}{$sat}{EPOCH} }, $epochSec;
+			push @{ $ELE{$sys}{$sat}{EPOCH_PPP} }, $epochSec;
 			push @{ $ELE{$sys}{$sat}{DATA} },  $hlp[10];
 		}
-		elsif ( $ln =~ /\bRES\b/ && $ln !~ /Neglected/ ) {
-
-			# 2015-08... RES lIF G30  -0.0076
+		elsif ( $ln =~ /\bRES\b/ && $ln !~ /Neglected/ ) {			# 2015-08... RES lIF G30  -0.0076
 			$sat = $hlp[3];
 			$lki = $hlp[2];
@@ -611,21 +619,17 @@
 
 			#print "$epo $lki $sys $sat $res\n";
-			push @{ $RES{$lki}{$sys}{$sat}{EPOCH} }, $epochSec;
+			push @{ $RES{$lki}{$sys}{$sat}{EPOCH_PPP} }, $epochSec;
 			push @{ $RES{$lki}{$sys}{$sat}{DATA} },  $hlp[4];
 		}
-		elsif ( ( $ln =~ /\bION\b/ ) && ( $ln !~ /RESET/ ) ) {
-
-		# 2018-12-01_20:37:58.000 ION      G02     0.0000    -0.3277 +-   2.4663
+		elsif ( ( $ln =~ /\bION\b/ ) && ( $ln !~ /RESET/ ) ) {		# 2018-12-01_20:37:58.000 ION      G02     0.0000    -0.3277 +-   2.4663
 			$sat = $hlp[2];
 			$sys = substr( $sat, 0, 1 );
-			push @{ $ION{$sys}{$sat}{EPOCH} }, $epochSec;
+			push @{ $ION{$sys}{$sat}{EPOCH_PPP} }, $epochSec;
 			push @{ $ION{$sys}{$sat}{DATA} },  $hlp[4];
 		}
-		elsif ( ( $ln =~ /\bBIA\b/ ) && ( $ln !~ /RESET/ ) ) {
-
-		# 2020-12-09_00:55:19.000 BIA  c1  G       0.0000    +2.5149 +-   9.6543
+		elsif ( ( $ln =~ /\bBIA\b/ ) && ( $ln !~ /RESET/ ) ) {		# 2020-12-09_00:55:19.000 BIA  c1  G       0.0000    +2.5149 +-   9.6543
 			$lki = $hlp[2];
 			$sys = $hlp[3];
-			push @{ $BIA{$lki}{$sys}{EPOCH} }, $epochSec;
+			push @{ $BIA{$lki}{$sys}{EPOCH_PPP} }, $epochSec;
 			push @{ $BIA{$lki}{$sys}{DATA} },  $hlp[4] + $hlp[5];
 		}
@@ -636,10 +640,90 @@
 			push( @TRP, $hlp[2] + $hlp[3] );
 		}
-		elsif ( $ln =~ /\bREC_CLK\b/ ) {
-
-		 # 2024-10-20_03:57:30.000 RECCLK  G       0.0000    -1.7861 +-   0.5268
+		elsif ( $ln =~ /\bREC_CLK\b/ ) {		 # 2024-10-20_03:57:30.000 RECCLK  G       0.0000    -1.7861 +-   0.5268
 			$sys = $hlp[2];
-			push @{ $RECCLK{$sys}{EPOCH} }, $epochSec;
+			push @{ $RECCLK{$sys}{EPOCH_PPP} }, $epochSec;
 			push @{ $RECCLK{$sys}{DATA} },  $hlp[3] + $hlp[4];
+		}
+		##################
+		# SSR parameters #
+		##################
+	    elsif ( $ln =~ /\bclkCorr\b/ && @hlp > 3) {
+	    	# clkCorr 2025-11-17_13:50:45.000 C45 -18.576
+	    	if ( $ln =~ /clkCorr (\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2})\.\d+/ ) {
+				$epochSsrSec = $1;    #print "$epochSsrSec\n";
+			}
+			else {
+				ERROR "strange ssr line: \"$ln\""; next
+			}
+			my $tp = Time::Piece->strptime( $epo_ppp, '%Y-%m-%d_%H:%M:%S' );
+			$epochSsrSec  = $tp->epoch();
+			$date = substr( $hlp[0], 0, 9 );
+			$sat = $hlp[2];
+			$sys = substr( $sat, 0, 1 );
+			push @{ $CLKCORR{$sys}{$sat}{EPOCH_SSR} }, $epochSsrSec;
+			push @{ $CLKCORR{$sys}{$sat}{DATA} },  $hlp[3];
+		}
+	    elsif ( $ln =~ /\byawAngle\b/&& @hlp > 3 ) {
+	    	# yawAngle 2025-11-17_13:50:40.000 G06 218.672 136.115
+	    	if ( $ln =~ /yawAngle (\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2})\.\d+/ ) {
+				$epochSsrSec = $1;    #print "$epochSsrSec\n";
+			}
+			else {
+				ERROR "strange ssr line: \"$ln\""; next
+			}
+			my $tp = Time::Piece->strptime( $epo_ppp, '%Y-%m-%d_%H:%M:%S' );
+			$epochSsrSec  = $tp->epoch();
+			$sat = $hlp[2];
+			$sys = substr( $sat, 0, 1 );
+			push @{ $YAW_SSR{$sat}{EPOCH_SSR} }, $epochSsrSec;
+			push @{ $YAW_SSR{$sat}{DATA} },  $hlp[3];
+			push @{ $YAW_DEF{$sat}{EPOCH_SSR} }, $epochSsrSec;
+			push @{ $YAW_DEF{$sat}{DATA} },  $hlp[4];
+		}
+	    elsif ( $ln =~ /\bcodeBias\b/ && @hlp > 3) {
+	    	#codeBias 2025-11-17_13:50:35.000 C45  1P  12.140  2I  13.330  5P  21.740  6I  20.190
+	    	if ( $ln =~ /codeBias (\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2})\.\d+/ ) {
+				$epochSsrSec = $1;    #print "$epochSsrSec\n";
+			}
+			else {
+				ERROR "strange ssr line: \"$ln\""; next
+			}
+			my $tp = Time::Piece->strptime( $epo_ppp, '%Y-%m-%d_%H:%M:%S' );
+			my ($num_bias, $bias_type, $bias_value);
+			$epochSsrSec  = $tp->epoch();
+			$sat = $hlp[2];
+			$sys = substr( $sat, 0, 1 );
+			my $hlpSize = @hlp;
+			for (my $i=3; $i < $hlpSize; $i++) {
+              $bias_type  = $hlp[$i++];
+              $bias_value = $hlp[$i];
+              push @{ $CODEBIAS{$bias_type}{$sys}{$sat}{EPOCH_SSR} }, $epochSsrSec;
+			  push @{ $CODEBIAS{$bias_type}{$sys}{$sat}{DATA} },  $bias_value;
+            }
+		}
+	    elsif ( $ln =~ /\bphaseBias\b/ && @hlp > 3) {
+	    	#phaseBias 2025-11-17_13:50:55.000 G02  315.00   0.000  1C  1 x  0.291  2W  1 x  0.408
+	    	if ( $ln =~ /phaseBias (\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2})\.\d+/ ) {
+				$epochSsrSec = $1;    #print "$epochSsrSec\n";
+			}
+			else {
+				ERROR "strange ssr line: \"$ln\""; next
+			}
+			my $tp = Time::Piece->strptime( $epo_ppp, '%Y-%m-%d_%H:%M:%S' );
+			my ($num_bias, $bias_type, $bias_value, $jump_count, $int_flag);
+			$epochSsrSec  = $tp->epoch();
+			$sat = $hlp[2];
+			$sys = substr( $sat, 0, 1 );
+			my $hlpSize = @hlp;
+			for (my $i=5; $i < $hlpSize; $i++) {
+              $bias_type  = $hlp[$i++]; #print "$sat type: $bias_type";
+              $jump_count = $hlp[$i++]; #print " count: $jump_count";
+              $int_flag   = $hlp[$i++]; #print " flag: $int_flag";
+              $bias_value = $hlp[$i];	#print " bias: $bias_value \n";
+              push @{ $PHASEBIAS{$bias_type}{$sys}{$sat}{EPOCH_SSR} }, $epochSsrSec;
+              push @{ $JUMPCOUNT{$bias_type}{$sys}{$sat}{EPOCH_SSR} }, $epochSsrSec;
+			  push @{ $PHASEBIAS{$bias_type}{$sys}{$sat}{DATA} },  $bias_value;
+			  push @{ $JUMPCOUNT{$bias_type}{$sys}{$sat}{DATA} },  $jump_count;
+            }
 		}
 	}    # -----  next line  -----
@@ -648,5 +732,5 @@
 	close $fh;
 
-	my $nof_epochs = scalar @EPOCH;
+	my $nof_epochs = scalar @EPOCH_PPP;
 	DEBUG(  "$station: epochs:$nof_epochs, North displac.: "
 		  . scalar @N
@@ -671,21 +755,28 @@
 
 	my %data = (
-		EPOCH  => \@EPOCH,
-		N      => \@N,
-		E      => \@E,
-		U      => \@U,
-		ISFIX  => \@ISFIX,
-		NUMFIX => \@NUMFIX,
-		TRP    => \@TRP,
-		SATNUM => \%SATNUM,
-		RECCLK => \%RECCLK,
-		RES    => \%RES,
-		AMB    => \%AMB,
-		ELE    => \%ELE,
-		ION    => \%ION,
-		BIA    => \%BIA,
+		EPOCH_PPP  => \@EPOCH_PPP,
+		N          => \@N,
+		E          => \@E,
+		U          => \@U,
+		ISFIX      => \@ISFIX,
+		NUMFIX     => \@NUMFIX,
+		TRP        => \@TRP,
+		SATNUM     => \%SATNUM,
+		RECCLK     => \%RECCLK,
+		RES        => \%RES,
+		AMB        => \%AMB,
+		ELE        => \%ELE,
+		ION        => \%ION,
+		BIA        => \%BIA,
+		EPOCH_SSR  => \@EPOCH_SSR,
+		CLKCORR    => \%CLKCORR,
+		YAW_SSR    => \%YAW_SSR,
+		YAW_DEF    => \%YAW_DEF,
+		CODEBIAS   => \%CODEBIAS,
+		PHASEBIAS  => \%PHASEBIAS,
+		JUMPCOUNT  => \%JUMPCOUNT,
 	);
 
-	return ( $station, \%data, 0 );
+	return ($dateStr, $station, $ssrData, \%data, 0 );
 }
 
