Index: trunk/BNC/src/PPP/pppFilter.cpp
===================================================================
--- trunk/BNC/src/PPP/pppFilter.cpp	(revision 9555)
+++ trunk/BNC/src/PPP/pppFilter.cpp	(revision 9556)
@@ -260,4 +260,19 @@
         }
       }
+    }
+
+    // Check number of observations
+    // ----------------------------
+    if (iObs == -1) {LOG << "iObs == -1\n";
+      return failure;
+    }
+    if (OPT->_obsModelType == OPT->DCMcodeBias  ||
+        OPT->_obsModelType == OPT->DCMphaseBias ||
+        OPT->_pseudoObsIono) {
+        double numSat = floor(iObs/2.0);
+        if (numSat < 2.0) {
+          LOG << sys <<  ": numsat " << numSat << " but at least 2 satellites would be required" << endl;
+          return failure;
+        }
     }
 
@@ -294,9 +309,6 @@
     }
 
-    // Check number of observations, truncate matrices
-    // -----------------------------------------------
-    if (iObs == -1) {LOG << "iObs == -1\n";
-      return failure;
-    }
+    // Truncate matrices
+    // -----------------
     AA = AA.Rows(1, iObs+1);
     ll = ll.Rows(1, iObs+1);
@@ -330,8 +342,4 @@
       t_pppSatObs* obs = usedObs[maxOutlierIndex];
       t_pppParam* par = 0;
-      LOG << epoTimeStr << " Outlier ("
-          << ((preProcessing) ? "pre-processing) " : "fin-processing) ") << t_lc::toString(maxOutlierLC) << ' '
-          << obs->prn().toString()                        << ' '
-          << setw(8) << setprecision(4) << maxOutlier << endl;
       for (unsigned iPar = 0; iPar < nPar; iPar++) {
         t_pppParam* hlp = params[iPar];
@@ -348,4 +356,7 @@
               t_lc::toString(maxOutlierLC) == "l2") ) {
            _obsPool->setRefSatChangeRequired(sys, true);
+           LOG << epoTimeStr << " Outlier ("
+               << ((preProcessing) ? "pre-processing) " : "fin-processing) ") << t_lc::toString(maxOutlierLC) << ' '
+               << obs->prn().toString()  << ' ' << setw(8) << setprecision(4) << maxOutlier << endl;
            break;
          }
@@ -353,12 +364,10 @@
           if (par) {
             par->setAmbResetCandidate();
-            obs->setOutlier();
-          }
-          else {
-            obs->setOutlier();
           }
         }
       }
       else {// fin-processing
+        LOG << epoTimeStr << " Outlier " << t_lc::toString(maxOutlierLC) << ' '
+            << obs->prn().toString()  << ' ' << setw(8) << setprecision(4) << maxOutlier << endl;
         if (par) {
           if (par->ambResetCandidate()) {
Index: trunk/BNC/src/PPP/pppSatObs.cpp
===================================================================
--- trunk/BNC/src/PPP/pppSatObs.cpp	(revision 9555)
+++ trunk/BNC/src/PPP/pppSatObs.cpp	(revision 9556)
@@ -348,5 +348,15 @@
   retVal = sqrt(retVal);
 
-  return retVal;
+  // Elevation-Dependent Weighting
+  // -----------------------------
+  double cEle = 1.0;
+  if ( (OPT->_eleWgtCode  && t_lc::includesCode(tLC)) ||
+       (OPT->_eleWgtPhase && t_lc::includesPhase(tLC)) ) {
+    double eleD = eleSat()*180.0/M_PI;
+    double hlp  = fabs(90.0 - eleD);
+    cEle = (1.0 + hlp*hlp*hlp*0.000004);
+  }
+
+  return cEle * retVal;
 }
 
Index: trunk/BNC/src/pppMain.cpp
===================================================================
--- trunk/BNC/src/pppMain.cpp	(revision 9555)
+++ trunk/BNC/src/pppMain.cpp	(revision 9556)
@@ -143,5 +143,5 @@
     QStringList hlp = iSta.next().split(",");
 
-    if (hlp.size() < 10) {
+    if (hlp.size() < 11) {
       throw t_except("pppMain: wrong option staTable");
     }
@@ -181,5 +181,5 @@
     opt->_sigmaC1      = settings.value("PPP/sigmaC1").toDouble(); if (opt->_sigmaC1 <= 0.0)  opt->_sigmaC1  = 1.00;
     opt->_sigmaL1      = settings.value("PPP/sigmaL1").toDouble(); if (opt->_sigmaL1 <= 0.0)  opt->_sigmaL1  = 0.01;
-    opt->_sigmaGIM     = settings.value("PPP/sigmaGIM").toDouble();if (opt->_sigmaGIM <= 0.0) opt->_sigmaGIM = 4.00;
+    opt->_sigmaGIM     = settings.value("PPP/sigmaGIM").toDouble();if (opt->_sigmaGIM <= 0.0) opt->_sigmaGIM = 5.00;
     opt->_corrWaitTime = settings.value("PPP/corrWaitTime").toDouble();
     if (!_realTime || opt->_corrMount.empty()) {
@@ -215,10 +215,10 @@
       opt->_obsModelType = t_pppOptions::DCMcodeBias;
       opt->_refSatRequired = true;
-      opt->_noiseCodeBias  = 1e4;
+      opt->_noiseCodeBias  = 1000.0;
     }
     else if (settings.value("PPP/modelObs").toString() == "DCM with Phase Biases") {
       opt->_obsModelType = t_pppOptions::DCMphaseBias;
       opt->_refSatRequired = true;
-      opt->_noisePhaseBias = 1e4;
+      opt->_noisePhaseBias = 1000.0;
     }
 #endif
@@ -416,12 +416,12 @@
     // Some default values
     // -------------------
-    opt->_aprSigAmb       = 1e4;
-    opt->_aprSigIon       = 1e4;
-    opt->_aprSigClk       = 3e5;
-    opt->_aprSigOGR       = 1e4;
-    opt->_aprSigOGE       = 1e4;
-    opt->_aprSigOGC       = 1e4;
-    opt->_aprSigCodeBias  = 1e4;
-    opt->_aprSigPhaseBias = 1e4;
+    opt->_aprSigAmb       = 1000.0;
+    opt->_aprSigIon       = 1000.0;
+    opt->_aprSigClk       = 1000.0;
+    opt->_aprSigOGR       = 1000.0;
+    opt->_aprSigOGE       = 1000.0;
+    opt->_aprSigOGC       = 1000.0;
+    opt->_aprSigCodeBias  = 1000.0;
+    opt->_aprSigPhaseBias = 1000.0;
 
     _options << opt;
Index: trunk/BNC/src/pppWidgets.cpp
===================================================================
--- trunk/BNC/src/pppWidgets.cpp	(revision 9555)
+++ trunk/BNC/src/pppWidgets.cpp	(revision 9556)
@@ -206,5 +206,5 @@
   // WhatsThis, PPP (2)
   // ------------------
-  _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Stations North, East and Height coordinate components in meters. Specify also a Sigma in meters for a priori model based Tropospheric delays and a Sigma in meters per second for the delay's Noise.</p><p>Specifying one record per Station is mandatory. BNC will only process data for stations which are listed here. To define a station, specify the 'Mountpoint' when in 'Real-Time Streams' mode or the 4-character station ID when in 'RINEX Files' mode.</p><p>'Sigma' is meant to describe the uncertainty of a single coordinate or tropospheric delay estimated for one epoch. 'Noise' is meant to describe the variation of estimates from epoch to epoch.</p><p><ul><li>A Sigma of 100.0 meters may be an appropriate choice e.g. for the initial N/E/H coordinates. However, this value may be significantly smaller (i.e. 0.01) for stations with well-known a priori coordinates.</li><li>A Noise of 100.0 meters for the estimated N/E/H coordinates may also be appropriate considering the potential movement of a rover position.</li><li>A value of 0.1 meters may be an appropriate Sigma for the a priori model based Tropospheric delay estimation.</li><li>Specify a Noise to describe the expected variation of the tropospheric effect over time. Supposing 1Hz observation data, specifying a value of 3e-6 would mean that the tropospheric effect may vary 3600 * 3e-6 = 0.01 meters per hour.</li><li>Specify a Noise to describe the expected variation of the ionospheric effect over time. Supposing 1Hz observation data, specifying a value of 6e-4 would mean that the ionospheric effect may vary 1800 * 5.5e-4 = 1.0 meters per half an hour.</li></ul></p><p>You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. <i>[key: PPP/staTable]</i></p>"));
+  _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Stations North, East and Height coordinate components in meters. Specify also a Sigma in meters for a priori model based Tropospheric delays and a Sigma in meters per second for the delay's Noise.</p><p>Specifying one record per Station is mandatory. BNC will only process data for stations which are listed here. To define a station, specify the 'Mountpoint' when in 'Real-Time Streams' mode or the 4-character station ID when in 'RINEX Files' mode.</p><p>'Sigma' is meant to describe the uncertainty of a single coordinate or tropospheric delay estimated for one epoch. 'Noise' is meant to describe the variation of estimates from epoch to epoch.</p><p><ul><li>A Sigma of 100.0 meters may be an appropriate choice e.g. for the initial N/E/H coordinates. However, this value may be significantly smaller (i.e. 0.01) for stations with well-known a priori coordinates.</li><li>A Noise of 100.0 meters for the estimated N/E/H coordinates may also be appropriate considering the potential movement of a rover position.</li><li>A value of 0.1 meters may be an appropriate Sigma for the a priori model based Tropospheric delay estimation.</li><li>Specify a Noise to describe the expected variation of the tropospheric effect over time. Supposing 1Hz observation data, specifying a value of 3e-6 would mean that the tropospheric effect may vary 3600 * 3e-6 = 0.01 meters per hour.</li><li>Specify a Noise to describe the expected variation of the ionospheric effect over time. Supposing 1Hz observation data, specifying a value of 0.1 would ba an apropriate choice.</li></ul></p><p>You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. <i>[key: PPP/staTable]</i></p>"));
 
   // WhatsThis, PPP (3)
@@ -580,7 +580,7 @@
      if (iCol == 5) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
      if (iCol == 6) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
-     if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1"));
-     if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("3e-6"));
-     if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("6e-4"));
+     if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.05"));
+     if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("5e-5"));
+     if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1"));
      if (iCol == 10) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0"));
   }
