Index: /branches/BNC_2.12/src/PPP_SSR_I/pppFilter.cpp
===================================================================
--- /branches/BNC_2.12/src/PPP_SSR_I/pppFilter.cpp	(revision 9473)
+++ /branches/BNC_2.12/src/PPP_SSR_I/pppFilter.cpp	(revision 9474)
@@ -376,13 +376,89 @@
 
   if (_antex) {
+
+    // Satellite correction
+    // ---------------------
+    double elTx,azTx;
+
+    // LOS unit vector satellite --> receiver
+    ColumnVector rho = xRec - satData->xx;
+    rho /= rho.norm_Frobenius();
+
+    // Sun unit vector
+    ColumnVector xSun = t_astro::Sun(satData->tt.mjd());
+    xSun /= xSun.norm_Frobenius();
+
+    // Satellite unit vectors sz, sy, sx
+    ColumnVector sz = -satData->xx / satData->xx.norm_Frobenius();
+    ColumnVector sy = crossproduct(sz, xSun);
+    ColumnVector sx = crossproduct(sy, sz);
+
+    sx /= sx.norm_Frobenius();
+    sy /= sy.norm_Frobenius();
+
+    // LOS vector in satellite frame
+    ColumnVector u(3);
+    u(1) = dotproduct(sx, rho);
+    u(2) = dotproduct(sy, rho);
+    u(3) = dotproduct(sz, rho);
+
+    // Azimuth and elevation in satellite antenna frame
+    elTx = atan2(u(3),sqrt(pow(u(2),2)+pow(u(1),2)));
+    azTx = atan2(u(2),u(1));
+
     bool found;
-    phaseCenter = satData->lkA * _antex->rcvCorr(OPT->_antNameRover, frqA,
-                                                 satData->eleSat, satData->azSat,
-                                                 found)
-                + satData->lkB * _antex->rcvCorr(OPT->_antNameRover, frqB,
-                                                 satData->eleSat, satData->azSat,
-                                                 found);
+    if (OPT->_isAPC) {
+      phaseCenter += satData->lkB * _antex->satCorr(satData->prn, frqA, elTx, azTx, found);
+    }
+    else {
+      phaseCenter += satData->lkA * _antex->satCorr(satData->prn, frqA, elTx, azTx, found);
+    }
     if (!found) {
-      LOG << "ANTEX: antenna >" << OPT->_antNameRover << "< not found\n";
+      LOG << "ANTEX: antenna >" << satData->prn.mid(0,3).toStdString() << " " << frqA << "< not found\n";
+    }
+
+    phaseCenter += satData->lkB * _antex->satCorr(satData->prn, frqB, elTx, azTx, found);
+    if (!found) {
+      LOG << "ANTEX: antenna >" << satData->prn.mid(0,3).toStdString() << " " << frqB << "< not found\n";
+    }
+
+		/*
+    LOG << "ANTEX: " << satData->prn.mid(0,3).toStdString() << " "
+        << fixed
+        << setprecision(3)
+        << " xyz "
+        << setw(7) << u(1)
+        << setw(7) << u(2)
+        << setw(7) << u(3)
+        << setprecision(1)
+        << " elTx " << setw(5) << elTx * 180.0/M_PI
+        << " azTx " << setw(7) << azTx * 180.0/M_PI
+        << " elRx " << setw(5) << satData->eleSat * 180.0/M_PI
+        << setprecision(3)
+        << " pcc " << setw(6) << phaseCenter
+        << endl;
+		*/
+
+    // Receiver correction
+    // -------------------
+
+    phaseCenter += satData->lkA * _antex->rcvCorr(OPT->_antNameRover, frqA,
+                                                  satData->eleSat, satData->azSat, found);
+    if (!found) {
+      phaseCenter += satData->lkA * _antex->rcvCorr(OPT->_antNameRover, t_frequency::G1,
+                                                    satData->eleSat, satData->azSat, found);
+    }
+    if (!found) {
+      LOG << "ANTEX: antenna >" << OPT->_antNameRover << " " << frqA << "< not found\n";
+    }
+
+    phaseCenter += satData->lkB * _antex->rcvCorr(OPT->_antNameRover, frqB,
+                                                  satData->eleSat, satData->azSat, found);
+    if (!found) {
+      phaseCenter += satData->lkB * _antex->rcvCorr(OPT->_antNameRover, t_frequency::G2,
+                                                    satData->eleSat, satData->azSat, found);
+    }
+    if (!found) {
+      LOG << "ANTEX: antenna >" << OPT->_antNameRover << " " << frqB << "< not found\n";
     }
   }
@@ -1022,5 +1098,12 @@
           << " RES " << satData->prn.mid(0,3).toAscii().data()
           << (iPhase ? "   L3 " : "   P3 ")
-          << setw(9) << setprecision(4) << vv(satData->obsIndex) << endl;
+          << setw(9) << setprecision(4) << vv(satData->obsIndex) << " "
+          /*
+          << setprecision(3)
+          << setw(7) << (iPhase? satData->L3sig : satData->P3sig) << " "
+          << setprecision(1)
+          << setw(5) <<satData->eleSat * 180 / M_PI
+          */
+          << endl;
     }
   }
Index: /branches/BNC_2.12/src/bncantex.cpp
===================================================================
--- /branches/BNC_2.12/src/bncantex.cpp	(revision 9473)
+++ /branches/BNC_2.12/src/bncantex.cpp	(revision 9474)
@@ -196,5 +196,5 @@
       }
 
-     // End of Frequency
+      // End of Frequency
       // ----------------
       else if (line.indexOf("END OF FREQUENCY") == 60) {
@@ -351,4 +351,45 @@
 
   return failure;
+}
+
+//
+////////////////////////////////////////////////////////////////////////////
+double bncAntex::satCorr(const QString& prn, t_frequency::type frqType,
+                         double elTx, double azTx, bool& found) const {
+
+  if (_maps.find(prn.mid(0,3)) == _maps.end()) {
+    found = false;
+    return 0.0;
+  };
+
+  t_antMap* map = _maps[prn.mid(0,3)];
+
+  if (map->frqMap.find(frqType) == map->frqMap.end()) {
+    found = false;
+    return 0.0;
+  };
+
+  t_frqMap* frqMap = map->frqMap[frqType];
+
+  double var = 0.0;
+  if (frqMap->pattern.ncols() > 0) {
+    double zenDiff = 999.999;
+    double zenTx  = 90.0 - elTx * 180.0 / M_PI;
+    unsigned iZen = 0;
+    for (double zen = map->zen1; zen <= map->zen2; zen += map->dZen) {
+      iZen += 1;
+      double newZenDiff = fabs(zen - zenTx);
+      if (newZenDiff < zenDiff) {
+        zenDiff = newZenDiff;
+        var = frqMap->pattern(iZen);
+      }
+    }
+  }
+
+  found = true;
+  return var - frqMap->neu[0] * cos(azTx)*cos(elTx)
+             - frqMap->neu[1] * sin(azTx)*cos(elTx)
+             - frqMap->neu[2] * sin(elTx);
+
 }
 
Index: /branches/BNC_2.12/src/bncantex.h
===================================================================
--- /branches/BNC_2.12/src/bncantex.h	(revision 9473)
+++ /branches/BNC_2.12/src/bncantex.h	(revision 9474)
@@ -40,4 +40,6 @@
   void    print() const;
   QString pcoSinexString(const std::string& antName, t_frequency::type frqType);
+  double  satCorr(const QString& prn, t_frequency::type frqType,
+                  double eleSat, double azSat, bool& found) const;
   double  rcvCorr(const std::string& antName, t_frequency::type frqType,
                   double eleSat, double azSat, bool& found) const;
Index: /branches/BNC_2.12/src/pppMain.cpp
===================================================================
--- /branches/BNC_2.12/src/pppMain.cpp	(revision 9473)
+++ /branches/BNC_2.12/src/pppMain.cpp	(revision 9474)
@@ -163,4 +163,5 @@
     if (_realTime) {
       opt->_corrMount.assign(settings.value("PPP/corrMount").toString().toStdString());
+      opt->_isAPC = (opt->_corrMount.substr(0,4)=="SSRA");
     }
     else {
@@ -168,4 +169,6 @@
       opt->_rinexNav.assign(settings.value("PPP/rinexNav").toString().toStdString());
       opt->_corrFile.assign(settings.value("PPP/corrFile").toString().toStdString());
+      QFileInfo tmp = QFileInfo(QString::fromStdString(opt->_corrFile));
+      opt->_isAPC = (tmp.baseName().mid(0,4)=="SSRA");      
     }
 
Index: /branches/BNC_2.12/src/pppOptions.h
===================================================================
--- /branches/BNC_2.12/src/pppOptions.h	(revision 9473)
+++ /branches/BNC_2.12/src/pppOptions.h	(revision 9474)
@@ -28,4 +28,5 @@
   std::string             _crdFile;
   std::string             _corrMount;
+  bool                    _isAPC;
   std::string             _rinexObs;
   std::string             _rinexNav;
