diff --git a/CEP/DP3/DPPP_DDECal/include/DPPP_DDECal/multidirsolver.h b/CEP/DP3/DPPP_DDECal/include/DPPP_DDECal/multidirsolver.h index c5b054cecee9c5eb653b98ed50b4d5485303f1e5..11423cf04c3304c9033a3dd0e43295bcf7dfb66d 100644 --- a/CEP/DP3/DPPP_DDECal/include/DPPP_DDECal/multidirsolver.h +++ b/CEP/DP3/DPPP_DDECal/include/DPPP_DDECal/multidirsolver.h @@ -28,12 +28,7 @@ public: std::vector<std::vector<Constraint::Result> > _results; }; - enum CalibrationMode { CalibrateComplexGain, - CalibrateTEC1, - CalibrateTEC2, - CalibratePhase }; - - MultiDirSolver(size_t maxIterations, double accuracy, double stepSize, bool phaseOnly = true); + MultiDirSolver(size_t maxIterations, double accuracy, double stepSize); void init(size_t nAntennas, size_t nDirections, size_t nChannels, const std::vector<int>& ant1, const std::vector<int>& ant2); @@ -44,7 +39,7 @@ public: SolveResult process(std::vector<Complex*>& data, std::vector<std::vector<Complex* > >& modelData, std::vector<std::vector<DComplex> >& solutions, double time) const; - void set_mode(CalibrationMode mode) { _mode = mode; } + void set_phase_only(bool phaseOnly) { _phaseOnly = phaseOnly; } void set_channel_blocks(size_t nChannelBlocks) { _nChannelBlocks = nChannelBlocks; } @@ -69,7 +64,6 @@ private: std::vector<int> _ant1, _ant2; // Calibration setup - enum CalibrationMode _mode; size_t _maxIterations; double _accuracy; double _stepSize; diff --git a/CEP/DP3/DPPP_DDECal/src/DDECal.cc b/CEP/DP3/DPPP_DDECal/src/DDECal.cc index 2cea2a8c14668f93c69b7359fe6fc2fcdd6bac27..335a6c2dd240740a4d2af6e991730469e616cf28 100644 --- a/CEP/DP3/DPPP_DDECal/src/DDECal.cc +++ b/CEP/DP3/DPPP_DDECal/src/DDECal.cc @@ -116,21 +116,32 @@ namespace LOFAR { itsConstraints.push_back(casacore::CountedPtr<Constraint>( new CoreConstraint())); } - if (itsMode == GainCal::PHASEONLY) { + switch(itsMode) { + case GainCal::PHASEONLY: itsConstraints.push_back(casacore::CountedPtr<Constraint>( new PhaseConstraint())); - } else if (itsMode == GainCal::TEC) { + itsMultiDirSolver.set_phase_only(true); + break; + case GainCal::TEC: itsConstraints.push_back(casacore::CountedPtr<Constraint>( new TECConstraint(TECConstraint::TECOnlyMode))); - } else if (itsMode == GainCal::TECANDPHASE){ + itsMultiDirSolver.set_phase_only(true); + break; + case GainCal::TECANDPHASE: itsConstraints.push_back(casacore::CountedPtr<Constraint>( new TECConstraint(TECConstraint::TECAndCommonScalarMode))); - } else if (itsMode == GainCal::COMPLEXGAIN) { + itsMultiDirSolver.set_phase_only(true); + break; + case GainCal::COMPLEXGAIN: // no constraints - } else if (itsMode == GainCal::TECSCREEN) { + itsMultiDirSolver.set_phase_only(false); + break; + case GainCal::TECSCREEN: itsConstraints.push_back(casacore::CountedPtr<Constraint>( - new ScreenConstraint(parset, prefix+"tecscreen."))); - } else { + new ScreenConstraint(parset, prefix+"tecscreen."))); + itsMultiDirSolver.set_phase_only(true); + break; + default: THROW (Exception, "Unexpected mode: " << GainCal::calTypeToString(itsMode)); } diff --git a/CEP/DP3/DPPP_DDECal/src/multidirsolver.cc b/CEP/DP3/DPPP_DDECal/src/multidirsolver.cc index 8a092677b64577a162c581eaba4f7cead1047b5b..96bfd7983bb343af940fa21d1dff2508db3cd9cb 100644 --- a/CEP/DP3/DPPP_DDECal/src/multidirsolver.cc +++ b/CEP/DP3/DPPP_DDECal/src/multidirsolver.cc @@ -7,16 +7,15 @@ using namespace arma; -MultiDirSolver::MultiDirSolver(size_t maxIterations, double accuracy, double stepSize, bool phaseOnly) : +MultiDirSolver::MultiDirSolver(size_t maxIterations, double accuracy, double stepSize) : _nAntennas(0), _nDirections(0), _nChannels(0), _nChannelBlocks(0), - _mode(CalibrateComplexGain), _maxIterations(maxIterations), _accuracy(accuracy), _stepSize(stepSize), - _phaseOnly(phaseOnly) + _phaseOnly(false) { }