From 6171ec2ec7fbd3d37e7830be59a8f4debf85256f Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <dijkema@astron.nl>
Date: Fri, 13 May 2016 13:46:00 +0000
Subject: [PATCH] Task #9178: fix bug for second polarization in stefcal

---
 CEP/DP3/DPPP/include/DPPP/StefCal.h | 3 ++-
 CEP/DP3/DPPP/src/GainCal.cc         | 4 ++--
 CEP/DP3/DPPP/src/StefCal.cc         | 9 ++++-----
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/CEP/DP3/DPPP/include/DPPP/StefCal.h b/CEP/DP3/DPPP/include/DPPP/StefCal.h
index 234b0524d6f..b8a7fa440e3 100644
--- a/CEP/DP3/DPPP/include/DPPP/StefCal.h
+++ b/CEP/DP3/DPPP/include/DPPP/StefCal.h
@@ -52,6 +52,7 @@ namespace LOFAR {
       casa::Matrix<casa::DComplex> g; // Station, correlation
       casa::Array<casa::DComplex> vis;
       casa::Array<casa::DComplex> mvis;
+      uint savedNCr; // number of correlations stored (1,2 or 4)
 
     private:
       casa::Matrix<casa::DComplex> gx;
@@ -61,7 +62,7 @@ namespace LOFAR {
       casa::Matrix<casa::DComplex> z;
 
       uint nSt; // number of stations
-      uint nCr; // number of correlations
+      uint nCr; // number of correlations (1 or 4)
       uint nUn; // number of unknowns
       uint nSp; // number that is two for scalarphase, one else
       uint _solInt;
diff --git a/CEP/DP3/DPPP/src/GainCal.cc b/CEP/DP3/DPPP/src/GainCal.cc
index 42f3734ac25..c1f8925d662 100644
--- a/CEP/DP3/DPPP/src/GainCal.cc
+++ b/CEP/DP3/DPPP/src/GainCal.cc
@@ -411,12 +411,12 @@ namespace LOFAR {
 
       // Stefcal terminated (either by maxiter or by converging)
       // Let's save G...
-      Cube<DComplex> allg(info().antennaNames().size(), nCr, itsNFreqCells);
+      Cube<DComplex> allg(info().antennaNames().size(), iS[0].savedNCr, itsNFreqCells);
       for (uint freqCell=0; freqCell<itsNFreqCells; ++freqCell) {
         //cout<<endl<<"freqCell="<<freqCell<<", timeCell="<<itsTStep/itsSolInt<<", tstep="<<itsTStep<<endl;
         casa::Matrix<casa::DComplex> sol = iS[freqCell].getSolution();
         for (uint st=0; st<info().antennaNames().size(); st++) {
-          for (uint cr=0; cr<nCr; ++cr) {
+          for (uint cr=0; cr<iS[0].savedNCr; ++cr) {
             allg(st,cr,freqCell)=sol(st,cr);
           }
         }
diff --git a/CEP/DP3/DPPP/src/StefCal.cc b/CEP/DP3/DPPP/src/StefCal.cc
index cd12aa8471a..c7175bb3cf8 100644
--- a/CEP/DP3/DPPP/src/StefCal.cc
+++ b/CEP/DP3/DPPP/src/StefCal.cc
@@ -65,14 +65,17 @@ namespace LOFAR {
         nUn=nSt;
         nCr=4;
         nSp=1;
+        savedNCr=4;
       } else if (_mode=="scalarphase") {
         nUn=nSt;
         nCr=1;
         nSp=2;
+        savedNCr=1;
       } else { // mode=="phaseonly", mode=="diagonal"
         nUn=nSt*2;
         nCr=1;
         nSp=1;
+        savedNCr=2;
       }
 
       g.resize(nUn,nCr);
@@ -226,11 +229,7 @@ namespace LOFAR {
 
     casa::Matrix<casa::DComplex> StefCal::getSolution() {
       casa::Matrix<casa::DComplex> sol;
-      if (_mode=="diagonal" || _mode=="phaseonly") {
-        sol.resize(_antMap.size(), 2);
-      } else {
-        sol.resize(_antMap.size(), nCr);
-      }
+      sol.resize(_antMap.size(), savedNCr);
 
       uint sSt=0; // Index in stefcal numbering
       for (uint st=0; st<_antMap.size(); ++st) {
-- 
GitLab