Index: /trunk/BNC/src/combination/bnccomb.cpp
===================================================================
--- /trunk/BNC/src/combination/bnccomb.cpp	(revision 10819)
+++ /trunk/BNC/src/combination/bnccomb.cpp	(revision 10820)
@@ -1058,5 +1058,5 @@
     DiagonalMatrix PP;
 
-    if (createAmat(sys, AA, ll, PP, x0) != success) {
+    if (createAmat(sys, AA, ll, PP, x0, masterCorr) != success) {
       return failure;
     }
@@ -1276,5 +1276,5 @@
 // Create First Design Matrix and Vector of Measurements
 ////////////////////////////////////////////////////////////////////////////
-t_irc bncComb::createAmat(char sys, Matrix& AA, ColumnVector& ll, DiagonalMatrix& PP, const ColumnVector& x0) {
+t_irc bncComb::createAmat(char sys, Matrix& AA, ColumnVector& ll, DiagonalMatrix& PP, const ColumnVector& x0, const QMap<QString, cmbCorr*>& masterCorr) {
 
   unsigned nPar = _params[sys].size();
@@ -1307,6 +1307,8 @@
     // Consistency corrections to keep the combined clock consistent to masterOrbit
     // ----------------------------------------------------------------------------
-    double dC_orb = dotproduct(corr->_diffRao, corr->_orbCorr._xr) / corr->_radiusMaster;
-    double dC_att = corr->_diffYaw / (2 * M_PI); dC_att *= corr->_lambdaIF;
+    double dC_orb = DotProduct((corr->_satPos - masterCorr[prn]->_satPos), corr->_satPos);
+    dC_orb /= masterCorr[prn]->_satPos.NormFrobenius();
+    double dC_att = (corr->_satYawAngle - masterCorr[prn]->_satYawAngle) / (2 * M_PI);
+    dC_att *= corr->_lambdaIF;
     double dC_apriori_corr = dC_orb;// + dC_att;
 
@@ -1431,5 +1433,5 @@
     ColumnVector   ll;
     DiagonalMatrix PP;
-    if (createAmat(sys, AA, ll, PP, x0) != success) {
+    if (createAmat(sys, AA, ll, PP, x0, masterCorr) != success) {
       return failure;
     }
@@ -1511,4 +1513,14 @@
            corr->_eph == ephPrev ) {
         switchToLastEph(ephLast, corr);
+
+        ColumnVector xc(6);
+        ColumnVector vv(3);
+        if (corr->_eph->getCrd(corr->_time, xc, vv, false) != success) {
+          delete corr;
+          im.remove();
+        }
+        else {
+          corr->_satPos = xc.Rows(1,3);
+        }
       }
       else {
@@ -1530,4 +1542,5 @@
       cmbCorr* corr = it.next();
       QString  prn  = corr->_prn;
+
       if (meanRao.find(prn) == meanRao.end()) {
         meanRao[prn].ReSize(4);
@@ -1558,5 +1571,5 @@
         meanRao[prn](4) = 0;
       }
-      corr->_diffRao = corr->_orbCorr._xr - meanRao[prn].Rows(1,3);
+      corr->_diffRao2Mean = corr->_orbCorr._xr - meanRao[prn].Rows(1,3);
 
       if (maxDiff.find(prn) == maxDiff.end()) {
@@ -1564,6 +1577,6 @@
       }
       else {
-        double normMax = maxDiff[prn]->_diffRao.NormFrobenius();
-        double norm    = corr->_diffRao.NormFrobenius();
+        double normMax = maxDiff[prn]->_diffRao2Mean.NormFrobenius();
+        double norm    = corr->_diffRao2Mean.NormFrobenius();
         if (norm > normMax) {
           maxDiff[prn] = corr;
@@ -1577,9 +1590,6 @@
         cmbCorr* corr = it.next();
         QString  prn  = corr->_prn;
-        if (corr->_acName == _masterOrbitAC[sys] &&
-            masterCorr.find(prn) == masterCorr.end()) {
+        if (corr->_acName == _masterOrbitAC[sys] && masterCorr.find(prn) == masterCorr.end()) {
           masterCorr[prn] = new cmbCorr(*corr);
-          masterCorr[prn]->_diffRao = 0.0;
-          masterCorr[prn]->_diffYaw = 0.0;
         }
       }
@@ -1599,5 +1609,5 @@
       }
       else if (corr == maxDiff[prn]) {
-        double norm = corr->_diffRao.NormFrobenius();
+        double norm = corr->_diffRao2Mean.NormFrobenius();
         if (norm > _MAX_DISPLACEMENT) {
           out << epoTime.datestr().c_str()    << " "
@@ -1621,6 +1631,5 @@
         cmbCorr* corr = it.next();
         QString  prn  = corr->_prn;
-        if (corr->_acName == _masterOrbitAC[sys] &&
-            masterCorr.find(prn) == masterCorr.end()) {
+        if (corr->_acName == _masterOrbitAC[sys] && masterCorr.find(prn) == masterCorr.end()) {
           masterCorr[prn] = new cmbCorr(*corr);
         }
@@ -1636,9 +1645,4 @@
           delete corr;
           im.remove();
-        }
-        else {
-          corr->_diffRao = corr->_orbCorr._xr - masterCorr[prn]->_orbCorr._xr;
-          corr->_diffYaw = corr->_satYawAngle - masterCorr[prn]->_satYawAngle;
-          corr->_radiusMaster = masterCorr[prn]->_orbCorr._xr.NormFrobenius();
         }
       }
Index: /trunk/BNC/src/combination/bnccomb.h
===================================================================
--- /trunk/BNC/src/combination/bnccomb.h	(revision 10819)
+++ /trunk/BNC/src/combination/bnccomb.h	(revision 10820)
@@ -118,7 +118,6 @@
       _satYawAngle                 = 0.0;
       _weightFactor                = 1.0;
-      _diffRao.ReSize(3); _diffRao = 0.0;
-      _diffYaw                     = 0.0;
-      _radiusMaster                = 0.0;
+      _satPos.ReSize(3); _satPos   = 0.0;
+      _diffRao2Mean                = 0.0;
     }
     ~cmbCorr() {
@@ -137,7 +136,6 @@
     double         _satYawAngle;
     double         _dClkResult;
-    ColumnVector   _diffRao;
-    double         _diffYaw;
-    double         _radiusMaster;
+    ColumnVector   _satPos;
+    ColumnVector   _diffRao2Mean;
     double         _weightFactor;
     QString ID() {return _acName + "_" + _prn;}
@@ -253,5 +251,5 @@
   t_irc processEpoch_filter(bncTime epoTime, char sys, QTextStream& out, QMap<QString, cmbCorr*>& masterCorr, ColumnVector& dx);
   t_irc processEpoch_singleEpoch(bncTime epoTime, char sys, QTextStream& out, QMap<QString, cmbCorr*>& masterCorr, ColumnVector& dx);
-  t_irc createAmat(char sys, Matrix& AA, ColumnVector& ll, DiagonalMatrix& PP, const ColumnVector& x0);
+  t_irc createAmat(char sys, Matrix& AA, ColumnVector& ll, DiagonalMatrix& PP, const ColumnVector& x0, const QMap<QString, cmbCorr*>& masterCorr);
   void  dumpResults(bncTime epoTime, QMap<QString, cmbCorr*>& masterCorr);
   void  printResults(bncTime epoTime, QTextStream& out, const QMap<QString, cmbCorr*>& masterCorr);
