Index: trunk/BNC/src/combination/bnccomb.cpp
===================================================================
--- trunk/BNC/src/combination/bnccomb.cpp	(revision 10449)
+++ trunk/BNC/src/combination/bnccomb.cpp	(revision 10451)
@@ -176,5 +176,6 @@
       newAC->name         = hlp[1];
       newAC->weightFactor = hlp[2].toDouble();
-      newAC->isAPC = bool(newAC->mountPoint.mid(0,4) == "SSRA");
+      newAC->excludeSats  = hlp[3].split(QRegExp("[ ,]"), QString::SkipEmptyParts);
+      newAC->isAPC        = bool(newAC->mountPoint.mid(0,4) == "SSRA");
       QMapIterator<char, unsigned> itSys(_cmbSysPrn);
       // init
@@ -182,5 +183,6 @@
         itSys.next();
         char sys = itSys.key();
-        if (!_masterOrbitAC.contains(sys)) {
+        if (!_masterOrbitAC.contains(sys) &&
+            !newAC->excludeSats.contains(QString(sys), Qt::CaseSensitive)) {
           _masterOrbitAC[sys] = newAC->name;
           _masterIsAPC[sys]   = newAC->isAPC;
@@ -299,8 +301,16 @@
   // Maximal Residuum
   // ----------------
-  _MAXRES = settings.value("cmbMaxres").toDouble();
-  if (_MAXRES <= 0.0) {
-    _MAXRES = 999.0;
-  }
+  _MAX_RES = settings.value("cmbMaxres").toDouble();
+  if (_MAX_RES <= 0.0) {
+    _MAX_RES = 999.0;
+  }
+
+  // Maximal Displacement
+  // --------------------
+  _MAX_DISPLACEMENT = settings.value("cmbMaxdisplacement").toDouble();
+  if (_MAX_DISPLACEMENT <= 0.0) {
+    _MAX_DISPLACEMENT = 2.0;
+  }
+
   _newCorr = 0;
 }
@@ -395,4 +405,5 @@
     // ----------------------
     QString acName;
+    QStringList excludeSats;
     QListIterator<cmbAC*> icAC(_ACs);
     while (icAC.hasNext()) {
@@ -400,8 +411,9 @@
       if (AC->mountPoint == staID) {
         acName = AC->name;
+        excludeSats = AC->excludeSats;
         break;
       }
     }
-    if (acName.isEmpty()) {
+    if (acName.isEmpty() || excludeSat(orbCorr._prn, excludeSats)) {
       continue;
     }
@@ -431,4 +443,5 @@
     // ----------------------
     QString acName;
+    QStringList excludeSats;
     QListIterator<cmbAC*> icAC(_ACs);
     while (icAC.hasNext()) {
@@ -436,8 +449,9 @@
       if (AC->mountPoint == staID) {
         acName = AC->name;
+        excludeSats = AC->excludeSats;
         break;
       }
     }
-    if (acName.isEmpty()) {
+    if (acName.isEmpty() || excludeSat(satCodeBias._prn, excludeSats)) {
       continue;
     }
@@ -480,4 +494,5 @@
     // ----------------------
     QString acName;
+    QStringList excludeSats;
     bool isAPC;
     QString staID(newClk._staID.c_str());
@@ -487,9 +502,12 @@
       if (AC->mountPoint == staID) {
         acName = AC->name;
+        QStringList excludeSats;
         isAPC  = AC->isAPC;
         break;
       }
     }
-    if (acName.isEmpty() || isAPC != _masterIsAPC[sys]) {
+    if (acName.isEmpty() ||
+        isAPC != _masterIsAPC[sys] ||
+        excludeSat(newClk._prn, excludeSats)) {
       continue;
     }
@@ -962,5 +980,5 @@
         << " Maximum Residuum " << maxRes << ' '
         << corrs(sys)[maxResIndex-1]->_acName << ' ' << corrs(sys)[maxResIndex-1]->_prn.mid(0,3);
-    if (maxRes > _MAXRES) {
+    if (maxRes > _MAX_RES) {
       for (int iPar = 1; iPar <= _params[sys].size(); iPar++) {
         cmbParam* pp = _params[sys][iPar-1];
@@ -1368,5 +1386,5 @@
         << corrs(sys)[maxResIndex-1]->_acName << ' ' << corrs(sys)[maxResIndex-1]->_prn.mid(0,3);
 
-    if (maxRes > _MAXRES) {
+    if (maxRes > _MAX_RES) {
       out << "  Outlier" << "\n";
       delete corrs(sys)[maxResIndex-1];
@@ -1398,6 +1416,4 @@
 t_irc bncComb::checkOrbits(bncTime epoTime, char sys, QTextStream& out) {
 
-  const double MAX_DISPLACEMENT = 2.0;
-
   // Switch to last ephemeris (if possible)
   // --------------------------------------
@@ -1500,5 +1516,5 @@
       else if (corr == maxDiff[prn]) {
         double norm = corr->_diffRao.NormFrobenius();
-        if (norm > MAX_DISPLACEMENT) {
+        if (norm > _MAX_DISPLACEMENT) {
           out << epoTime.datestr().c_str()    << " "
               << epoTime.timestr().c_str()    << " "
@@ -1577,2 +1593,15 @@
   }
 }
+
+//
+////////////////////////////////////////////////////////////////////////////
+bool bncComb::excludeSat(const t_prn& prn, const QStringList excludeSats) const {
+  QStringListIterator it(excludeSats);
+  while (it.hasNext()) {
+    string prnStr = it.next().toLatin1().data();
+    if (prnStr == prn.toString() || prnStr == prn.toString().substr(0,1)) {
+      return true;
+    }
+  }
+  return false;
+}
Index: trunk/BNC/src/combination/bnccomb.h
===================================================================
--- trunk/BNC/src/combination/bnccomb.h	(revision 10449)
+++ trunk/BNC/src/combination/bnccomb.h	(revision 10451)
@@ -98,4 +98,5 @@
     QString              name;
     double               weightFactor;
+    QStringList          excludeSats;
     bool                 isAPC;
     QMap<char, unsigned> numObs;
@@ -153,6 +154,4 @@
     std::vector<t_clkCorr>  _clkCorr;
   };
-
-
 
   class cmbRefSig {
@@ -245,4 +244,5 @@
   void  switchToLastEph(t_eph* lastEph, cmbCorr* corr);
   t_irc checkOrbits(bncTime epoTime, char sys, QTextStream& out);
+  bool excludeSat(const t_prn& prn, const QStringList excludeSats) const;
   QVector<cmbCorr*>& corrs(char sys) {return _buffer[sys].corrs;}
 
@@ -257,5 +257,6 @@
   bncAntex*                                  _antex;
   bncBiasSnx*                                _bsx;
-  double                                     _MAXRES;
+  double                                     _MAX_RES;
+  double                                     _MAX_DISPLACEMENT;
   e_method                                   _method;
   int                                        _cmbSampl;
