Index: /trunk/BNC/src/orbComp/sp3Comp.cpp
===================================================================
--- /trunk/BNC/src/orbComp/sp3Comp.cpp	(revision 10119)
+++ /trunk/BNC/src/orbComp/sp3Comp.cpp	(revision 10120)
@@ -219,5 +219,4 @@
   // Compute clock residuals
   // -----------------------
-  const string all = "ZZZ";
   for (unsigned ie = 0; ie < epochs.size(); ie++) {
     map<t_prn, double>& dc    = epochs[ie]->_dc;
@@ -226,4 +225,5 @@
     for (map<t_prn, double>::iterator it = dc.begin(); it != dc.end(); it++) {
       const t_prn& prn = it->first;
+      std::string sys; sys.assign(1, prn.system());
       if (satIndex(clkSats, prn) != -1) {
         int  index = epochs.size() + satIndex(clkSats, prn);
@@ -233,7 +233,7 @@
           dcRed[prn] = dc[prn] - dr.find(prn)->second[0]; // clock minus radial component
           stat[prn.toString()]._dcRedMean += dcRed[prn];
-          stat[all           ]._dcRedMean += dcRed[prn];
+          stat[sys           ]._dcRedMean += dcRed[prn];
           stat[prn.toString()]._nc        += 1;
-          stat[all           ]._nc        += 1;
+          stat[sys           ]._nc        += 1;
         }
       }
@@ -365,6 +365,4 @@
   // Print epoch-wise Clock Residuals
   // --------------------------------
-  const string all = "ZZZ";
-
   out.setf(ios::fixed);
   if (!_summaryOnly) {
@@ -381,4 +379,5 @@
     for (map<t_prn, ColumnVector>::const_iterator it = dr.begin(); it != dr.end(); it++) {
       const t_prn&  prn = it->first;
+      std::string sys; sys.assign(1, prn.system());
       if (!excludeSat(prn)) {
         const ColumnVector& rao = it->second;
@@ -390,7 +389,7 @@
         }
         stat[prn.toString()]._rao += SP(rao, rao); // Schur product
-        stat[all           ]._rao += SP(rao, rao);
+        stat[sys           ]._rao += SP(rao, rao);
         stat[prn.toString()]._nr  += 1;
-        stat[all           ]._nr  += 1;
+        stat[sys           ]._nr  += 1;
         if (dc.find(prn) != dc.end() && dcRed.find(prn) != dc.end()) {
           double clkRes    = dc.find(prn)->second;
@@ -401,11 +400,11 @@
           }
           stat[prn.toString()]._dcRMS     += clkRes * clkRes;
-          stat[all           ]._dcRMS     += clkRes * clkRes;
+          stat[sys           ]._dcRMS     += clkRes * clkRes;
           stat[prn.toString()]._dcRedRMS  += clkResRed * clkResRed;
-          stat[all           ]._dcRedRMS  += clkResRed * clkResRed;
+          stat[sys           ]._dcRedRMS  += clkResRed * clkResRed;
           stat[prn.toString()]._dcRedSig  += (clkResRed - stat[prn.toString()]._dcRedMean) *
                                              (clkResRed - stat[prn.toString()]._dcRedMean);
-          stat[all           ]._dcRedSig  += (clkResRed - stat[all           ]._dcRedMean) *
-                                             (clkResRed - stat[all           ]._dcRedMean);
+          stat[sys           ]._dcRedSig  += (clkResRed - stat[sys           ]._dcRedMean) *
+                                             (clkResRed - stat[sys           ]._dcRedMean);
         }
         else {
@@ -432,4 +431,5 @@
     const string& prn  = it->first;
     t_stat&       stat = it->second;
+    std::string sys; sys.assign(1, prn[0]);
     if (stat._nr > 0) {
       stat._rao[0] = sqrt(stat._rao[0] / stat._nr);
@@ -437,16 +437,16 @@
       stat._rao[2] = sqrt(stat._rao[2] / stat._nr);
       stat._rao3DRMS = stat._rao.NormFrobenius();
-      if (prn == all) {
-        (_summaryOnly) ? out << "\n   Total " : out << "!\n!   Total ";
-      }
-      else {
-        (_summaryOnly) ? out << "     " << prn << ' ' : out << "!     " << prn << ' ';
+      if (prn != sys) {
+        (_summaryOnly) ? out << "     " << prn << ' ' :
+                         out << "!     " << prn << ' ';
       }
       // orbit values in millimeters
-      out << setw(10) << setprecision(1) << stat._rao[0]   * 1e3 << ' '
-          << setw(10) << setprecision(1) << stat._rao[1]   * 1e3 << ' '
-          << setw(10) << setprecision(1) << stat._rao[2]   * 1e3 << ' '
-          << setw(10) << setprecision(1) << stat._rao3DRMS * 1e3 << ' '
-          << setw( 7) << stat._nr << " ";
+      if (prn != sys) {
+        out << setw(10) << setprecision(1) << stat._rao[0]   * 1e3 << ' '
+            << setw(10) << setprecision(1) << stat._rao[1]   * 1e3 << ' '
+            << setw(10) << setprecision(1) << stat._rao[2]   * 1e3 << ' '
+            << setw(10) << setprecision(1) << stat._rao3DRMS * 1e3 << ' '
+            << setw( 7) << stat._nr << " ";
+      }
       if (stat._nc > 0) {
         stat._dcRMS    = sqrt(stat._dcRMS    / stat._nc);
@@ -454,10 +454,10 @@
         stat._dcRedSig = sqrt(stat._dcRedSig / stat._nc);
         // clock values in nano seconds
-        out << setw(10) << setprecision(2) << stat._dcRMS    / t_CST::c * 1e9 << ' '
-            << setw(10) << setprecision(2) << stat._dcRedRMS / t_CST::c * 1e9 << ' '
-            << setw(10) << setprecision(2) << stat._dcRedSig / t_CST::c * 1e9 << ' '
-            << setw( 9) << stat._nc << " ";
-        if (prn != all) {
-          out << setw(9) << setprecision(2) << stat._offset / t_CST::c * 1e9;
+        if (prn != sys) {
+          out << setw(10) << setprecision(2) << stat._dcRMS    / t_CST::c * 1e9 << ' '
+              << setw(10) << setprecision(2) << stat._dcRedRMS / t_CST::c * 1e9 << ' '
+              << setw(10) << setprecision(2) << stat._dcRedSig / t_CST::c * 1e9 << ' '
+              << setw( 9) << stat._nc << " "
+              << setw( 9) << setprecision(2) << stat._offset / t_CST::c * 1e9;
         }
       }
@@ -465,5 +465,45 @@
         out << "  .       .    ";
       }
-      out << "\n";
+      if (prn != sys) {
+        out << "\n";
+      }
+    }
+  }
+  // Print Total
+  // ------------
+  out << "!\n! Mean";
+  out << "\n! -----------------------------------------------------------------------------------------------------------------\n";
+  out << "!\n!    GNSS   radialRMS   alongRMS    outRMS     3DRMS      nOrb    clkRMS    clkRedRMS   clkRedSig   nClk "
+          "\n!              [mm]       [mm]        [mm]      [mm]      [-]      [ns]        [ns]        [ns]      [-] "
+          "\n! -----------------------------------------------------------------------------------------------------------------";
+  for (map<string, t_stat>::iterator it = stat.begin(); it != stat.end(); it++) {
+    const string& prn  = it->first;
+    t_stat&       stat = it->second;
+    std::string sys; sys.assign(1, prn[0]);
+    if (stat._nr > 0) {
+      if (prn == sys) {
+        (_summaryOnly) ? out << "\n       "   << sys << " " :
+                         out << "\n!       "  << sys << " ";
+      }
+      // orbit values in millimeters
+      if (prn == sys) {
+        out << setw(10) << setprecision(1) << stat._rao[0]   * 1e3 << ' '
+            << setw(10) << setprecision(1) << stat._rao[1]   * 1e3 << ' '
+            << setw(10) << setprecision(1) << stat._rao[2]   * 1e3 << ' '
+            << setw(10) << setprecision(1) << stat._rao3DRMS * 1e3 << ' '
+            << setw( 7) << stat._nr << " ";
+      }
+      if (stat._nc > 0) {
+        // clock values in nano seconds
+        if (prn == sys) {
+          out << setw(10) << setprecision(2) << stat._dcRMS    / t_CST::c * 1e9 << ' '
+              << setw(10) << setprecision(2) << stat._dcRedRMS / t_CST::c * 1e9 << ' '
+              << setw(10) << setprecision(2) << stat._dcRedSig / t_CST::c * 1e9 << ' '
+              << setw( 9) << stat._nc << " ";
+        }
+      }
+      else {
+        out << "  .       .    ";
+      }
     }
   }
