diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/gui/mswindow.h b/CEP/DP3/AOFlagger/include/AOFlagger/gui/mswindow.h index dbeb29918cd83669f40447eeffac1816ebdae474..e5877e1fdf647b14108d4e0a47dc89557b873960 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/gui/mswindow.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/gui/mswindow.h @@ -167,6 +167,9 @@ class MSWindow : public Gtk::Window { void onRayleighTestSets() { _gaussianTestSets = false; } void onAddStaticFringe(); void onAdd1SigmaFringe(); + void onSetToOne(); + void onSetToI(); + void onSetToOnePlusI(); void onShowStats(); void onPlotDistPressed(); void onPlotComplexPlanePressed(); @@ -200,7 +203,7 @@ class MSWindow : public Gtk::Window { void onSimulateSourceSetA() { loadDefaultModel(DefaultModels::ConstantDistortion, true); } void onSimulateSourceSetB() { loadDefaultModel(DefaultModels::VariableDistortion, true); } void onSimulateSourceSetC() { loadDefaultModel(DefaultModels::FaintDistortion, true); } - void onSimulateSourceSetD() { loadDefaultModel(DefaultModels::MisslocatedDistortion, true); } + void onSimulateSourceSetD() { loadDefaultModel(DefaultModels::MislocatedDistortion, true); } void onSimulateOffAxisSource() { loadDefaultModel(DefaultModels::ConstantDistortion, false, true); } void onShowAntennaMapWindow(); diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/imaging/defaultmodels.h b/CEP/DP3/AOFlagger/include/AOFlagger/imaging/defaultmodels.h index a6d1267d9961fbc3d1aa52ad020c75a8ace8e15c..dce474851de3d226364ccc6f43f2ebfa3367fcff 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/imaging/defaultmodels.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/imaging/defaultmodels.h @@ -29,7 +29,7 @@ class DefaultModels { public: enum SetLocation { EmptySet, NCPSet, B1834Set }; - enum Distortion { NoDistortion, ConstantDistortion, VariableDistortion, FaintDistortion, MisslocatedDistortion }; + enum Distortion { NoDistortion, ConstantDistortion, VariableDistortion, FaintDistortion, MislocatedDistortion }; static double DistortionRA() { @@ -62,7 +62,7 @@ class DefaultModels { case FaintDistortion: model.loadUrsaMajorDistortingVariableSource(ra, dec, factor, true, false); break; - case MisslocatedDistortion: + case MislocatedDistortion: model.loadUrsaMajorDistortingVariableSource(ra, dec, factor, false, true); break; } diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/msio/image2d.h b/CEP/DP3/AOFlagger/include/AOFlagger/msio/image2d.h index cfbd3abc95e880bb8bad1ea81948fb0db113da4f..f07f2c6045b287f980739bb8d3f8058a2730c9c0 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/msio/image2d.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/msio/image2d.h @@ -200,7 +200,14 @@ class Image2D { SetValues(*source); } - void SetZero(); + void SetAll(num_t value) + { + for(long unsigned y=0;y<_height;y++) { + for(long unsigned x=0;x<_width;x++) { + _data[y*_width+x] = value; + } + } + } inline void AddValue(long x, long y, num_t addValue) { diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/msio/timefrequencydata.h b/CEP/DP3/AOFlagger/include/AOFlagger/msio/timefrequencydata.h index 1821ebca3f0fb67a8ab3e0480482af017f76b776..ece3861e1b00c14aa6b965461b4f5a5b68726492 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/msio/timefrequencydata.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/msio/timefrequencydata.h @@ -250,6 +250,7 @@ class TimeFrequencyData case DipolePolarisation: case AutoDipolePolarisation: case CrossDipolePolarisation: + default: throw BadUsageException("Not implemented"); //return CreateSingleComplexImageFromDipole(); } diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/foreachbaselineaction.h b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/foreachbaselineaction.h index c7bb669f59f6c1f20b5f23cf7c20f388087e8e59..d15bdf59ca69e54155c894743c2edd180aed6687 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/foreachbaselineaction.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/foreachbaselineaction.h @@ -65,6 +65,9 @@ namespace rfiStrategy { std::set<size_t> &AntennaeToSkip() { return _antennaeToSkip; } const std::set<size_t> &AntennaeToSkip() const { return _antennaeToSkip; } + + std::set<size_t> &AntennaeToInclude() { return _antennaeToInclude; } + const std::set<size_t> &AntennaToInclude() const { return _antennaeToInclude; } private: bool IsBaselineSelected(ImageSetIndex &index); class ImageSetIndex *GetNextIndex(); @@ -174,6 +177,7 @@ namespace rfiStrategy { AntennaInfo _initAntenna1, _initAntenna2; bool _hasInitAntennae; size_t _initPartIndex; + std::set<size_t> _antennaeToInclude; std::set<size_t> _antennaeToSkip; }; } diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/timeconvolutionaction.h b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/timeconvolutionaction.h index 17e7c5b86036a64d7304a44c9c482af524594569..e911da3fceaaf58473901584ae3e0f538ca64548 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/timeconvolutionaction.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/timeconvolutionaction.h @@ -617,9 +617,9 @@ private: const numl_t cosValL = cosnl(fourierFactor * posU), - sinValL = -sinnl(fourierFactor * posU); + sinValL = sinnl(fourierFactor * posU); - numl_t realVal = (fReal * cosValL - fImag * sinValL) * 0.75 / weightSum; + numl_t realVal = (fReal * cosValL + fImag * sinValL) * 0.75 / weightSum; numl_t imagVal = (fReal * sinValL + fImag * cosValL) * 0.75 / weightSum; if(applyOnImages) diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/test/results/filterresultstest.h b/CEP/DP3/AOFlagger/include/AOFlagger/test/results/filterresultstest.h index 08babd3af78186c62d737bcaced047b00c6162d7..fd3e6862228fc7a5452107b39416b63b475e2f94 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/test/results/filterresultstest.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/test/results/filterresultstest.h @@ -64,7 +64,7 @@ class FilterResultsTest : public UnitTest { void operator()(); }; - static rfiStrategy::Strategy *createStrategy(bool withFringeFilter, bool withTimeConv, bool withFrequencyConv) + static rfiStrategy::Strategy *createStrategy(bool withFringeFilter, bool withTimeConv, bool withFrequencyConv, bool withTimeClean) { rfiStrategy::Strategy *strategy = new rfiStrategy::Strategy(); @@ -110,6 +110,23 @@ class FilterResultsTest : public UnitTest { } } + if(withTimeClean) + { + rfiStrategy::TimeConvolutionAction *tcAction = new rfiStrategy::TimeConvolutionAction(); + tcAction->SetSincScale(5.0); + tcAction->SetIsSincScaleInSamples(false); + tcAction->SetIterations(5); + tcAction->SetChannelAveragingSize(1); + tcAction->SetAutoAngle(false); + tcAction->SetDirectionRad(103.54 * (M_PI / 180.0)); + tcAction->SetOperation(rfiStrategy::TimeConvolutionAction::IterativeExtrapolatedSincOperation); + strategy->Add(tcAction); + + rfiStrategy::SetImageAction *setAction = new rfiStrategy::SetImageAction(); + setAction->SetNewImage(rfiStrategy::SetImageAction::SwapRevisedAndContaminated); + strategy->Add(setAction); + } + return strategy; } @@ -168,17 +185,21 @@ class FilterResultsTest : public UnitTest { Run(strategy, data, setPrefix + "0-" + setName + "-Original.png", "Empty.png"); delete strategy; - strategy = createStrategy(true, false, false); + strategy = createStrategy(true, false, false, false); Run(strategy, data, setPrefix + "1-" + setName + "-FringeFilter-Applied.png", setPrefix + "1-" + setName + "-FringeFilter-Difference.png"); delete strategy; - strategy = createStrategy(false, true, false); + strategy = createStrategy(false, true, false, false); Run(strategy, data, setPrefix + "2-" + setName + "-TimeFilter-Applied.png", setPrefix + "2-" + setName + "-TimeFilter-Difference.png"); delete strategy; - strategy = createStrategy(false, false, true); + strategy = createStrategy(false, false, true, false); Run(strategy, data, setPrefix + "3-" + setName + "-FreqFilter-Applied.png", setPrefix + "3-" + setName + "-FreqFilter-Difference.png"); delete strategy; + + strategy = createStrategy(false, false, false, true); + Run(strategy, data, setPrefix + "4-" + setName + "-TimeClean-Applied.png", setPrefix + "4-" + setName + "-TimeClean-Difference.png"); + delete strategy; } }; @@ -206,7 +227,7 @@ inline void FilterResultsTest::TestFaintSource::operator()() inline void FilterResultsTest::TestMissedSource::operator()() { std::pair<TimeFrequencyData, TimeFrequencyMetaDataPtr> data - = DefaultModels::LoadSet(DefaultModels::B1834Set, DefaultModels::MisslocatedDistortion, 1.0); + = DefaultModels::LoadSet(DefaultModels::B1834Set, DefaultModels::MislocatedDistortion, 1.0); RunAllMethods(data, "D", "MissedSource"); } diff --git a/CEP/DP3/AOFlagger/src/gui/mswindow.cpp b/CEP/DP3/AOFlagger/src/gui/mswindow.cpp index 2ca38be1aeffe0d6298c552d343308fb9e596ace..c556045deb64e79830f4a263102bcfa1b87947c5 100644 --- a/CEP/DP3/AOFlagger/src/gui/mswindow.cpp +++ b/CEP/DP3/AOFlagger/src/gui/mswindow.cpp @@ -536,6 +536,12 @@ void MSWindow::createToolbar() sigc::mem_fun(*this, &MSWindow::onAddStaticFringe) ); _actionGroup->add( Gtk::Action::create("Add1SigmaStaticFringe", "Static 1 sigma fringe"), sigc::mem_fun(*this, &MSWindow::onAdd1SigmaFringe) ); + _actionGroup->add( Gtk::Action::create("SetToOne", "Set to 1"), + sigc::mem_fun(*this, &MSWindow::onSetToOne) ); + _actionGroup->add( Gtk::Action::create("SetToI", "Set to i"), + sigc::mem_fun(*this, &MSWindow::onSetToI) ); + _actionGroup->add( Gtk::Action::create("SetToOnePlusI", "Set to 1+i"), + sigc::mem_fun(*this, &MSWindow::onSetToOnePlusI) ); _actionGroup->add( Gtk::Action::create("MultiplyData", "Multiply data..."), sigc::mem_fun(*this, &MSWindow::onMultiplyData) ); _actionGroup->add( Gtk::Action::create("Compress", "Compress"), @@ -729,6 +735,9 @@ void MSWindow::createToolbar() " <menu action='AddTestModification'>" " <menuitem action='AddStaticFringe'/>" " <menuitem action='Add1SigmaStaticFringe'/>" + " <menuitem action='SetToOne'/>" + " <menuitem action='SetToI'/>" + " <menuitem action='SetToOnePlusI'/>" " <menuitem action='MultiplyData'/>" " </menu>" " <menuitem action='Compress'/>" @@ -914,6 +923,63 @@ void MSWindow::onAdd1SigmaFringe() } } +void MSWindow::onSetToOne() +{ + try { + TimeFrequencyData data(GetActiveData()); + std::pair<Image2DCPtr, Image2DCPtr> images = data.GetSingleComplexImage(); + Image2DPtr + real = Image2D::CreateCopy(images.first), + imaginary = Image2D::CreateCopy(images.first); + real->SetAll(1.0); + imaginary->SetAll(0.0); + TimeFrequencyData newData(data.Polarisation(), real, imaginary); + _timeFrequencyWidget.SetNewData(newData, _timeFrequencyWidget.GetMetaData()); + _timeFrequencyWidget.Update(); + } catch(std::exception &e) + { + showError(e.what()); + } +} + +void MSWindow::onSetToI() +{ + try { + TimeFrequencyData data(GetActiveData()); + std::pair<Image2DCPtr, Image2DCPtr> images = data.GetSingleComplexImage(); + Image2DPtr + real = Image2D::CreateCopy(images.first), + imaginary = Image2D::CreateCopy(images.first); + real->SetAll(0.0); + imaginary->SetAll(1.0); + TimeFrequencyData newData(data.Polarisation(), real, imaginary); + _timeFrequencyWidget.SetNewData(newData, _timeFrequencyWidget.GetMetaData()); + _timeFrequencyWidget.Update(); + } catch(std::exception &e) + { + showError(e.what()); + } +} + +void MSWindow::onSetToOnePlusI() +{ + try { + TimeFrequencyData data(GetActiveData()); + std::pair<Image2DCPtr, Image2DCPtr> images = data.GetSingleComplexImage(); + Image2DPtr + real = Image2D::CreateCopy(images.first), + imaginary = Image2D::CreateCopy(images.first); + real->SetAll(1.0); + imaginary->SetAll(1.0); + TimeFrequencyData newData(data.Polarisation(), real, imaginary); + _timeFrequencyWidget.SetNewData(newData, _timeFrequencyWidget.GetMetaData()); + _timeFrequencyWidget.Update(); + } catch(std::exception &e) + { + showError(e.what()); + } +} + void MSWindow::onShowStats() { if(_timeFrequencyWidget.HasImage()) diff --git a/CEP/DP3/AOFlagger/src/msio/image2d.cpp b/CEP/DP3/AOFlagger/src/msio/image2d.cpp index d872d69e3ac97dd4f2c0b1a57bf50ac37375c629..e91343cd60205b88c8534bfba5295330f677fe61 100644 --- a/CEP/DP3/AOFlagger/src/msio/image2d.cpp +++ b/CEP/DP3/AOFlagger/src/msio/image2d.cpp @@ -48,26 +48,17 @@ Image2D::~Image2D() Image2D *Image2D::CreateEmptyImage(long width, long height) { Image2D *image = new Image2D(width, height); - image->SetZero(); + image->SetAll(0.0); return image; } Image2D *Image2D::CreateZeroImage(long width, long height) { Image2D *image = new Image2D(width, height); - image->SetZero(); + image->SetAll(0.0); return image; } -void Image2D::SetZero() -{ - for(long unsigned y=0;y<_height;y++) { - for(long unsigned x=0;x<_width;x++) { - _data[y*_width+x] = 0.0; - } - } -} - Image2D *Image2D::CreateFromSum(const Image2D &imageA, const Image2D &imageB) { if(imageA.Width() != imageB.Width() || imageA.Height() != imageB.Height()) diff --git a/CEP/DP3/AOFlagger/src/strategy/actions/foreachbaselineaction.cpp b/CEP/DP3/AOFlagger/src/strategy/actions/foreachbaselineaction.cpp index f59ab4baacfc6ae21723c004bfeb44ab834a6ae0..fb716f02dc202efbc8e875591ccde39e5b50e49f 100644 --- a/CEP/DP3/AOFlagger/src/strategy/actions/foreachbaselineaction.cpp +++ b/CEP/DP3/AOFlagger/src/strategy/actions/foreachbaselineaction.cpp @@ -69,6 +69,20 @@ namespace rfiStrategy { _threadCount = maxThreads; } } + if(!_antennaeToSkip.empty()) + { + AOLogger::Debug << "The following antenna's will be skipped: "; + for(std::set<size_t>::const_iterator i=_antennaeToSkip.begin();i!=_antennaeToSkip.end(); ++i) + AOLogger::Debug << (*i) << ' '; + AOLogger::Debug <<'\n'; + } + if(!_antennaeToInclude.empty()) + { + AOLogger::Debug << "Only the following antenna's will be included: "; + for(std::set<size_t>::const_iterator i=_antennaeToInclude.begin();i!=_antennaeToInclude.end(); ++i) + AOLogger::Debug << (*i) << ' '; + AOLogger::Debug <<'\n'; + } if(artifacts.MetaData() != 0) { @@ -137,6 +151,8 @@ namespace rfiStrategy { size_t a2id = static_cast<MSImageSet*>(imageSet)->GetAntenna2(index); if(_antennaeToSkip.count(a1id) != 0 || _antennaeToSkip.count(a2id) != 0) return false; + if(!_antennaeToInclude.empty() && (_antennaeToInclude.count(a1id) == 0 && _antennaeToInclude.count(a2id) == 0)) + return false; switch(_selection) { diff --git a/CEP/DP3/AOFlagger/src/strategy/algorithms/localfitmethod.cpp b/CEP/DP3/AOFlagger/src/strategy/algorithms/localfitmethod.cpp index 8e2fab8f49d15e810a88133b99fb433fc5e8a568..a6ad3f4e133910e6461f9c68057484f060e3f562 100644 --- a/CEP/DP3/AOFlagger/src/strategy/algorithms/localfitmethod.cpp +++ b/CEP/DP3/AOFlagger/src/strategy/algorithms/localfitmethod.cpp @@ -313,7 +313,7 @@ void LocalFitMethod::PerformGaussianConvolution(Image2DPtr input) } } - input->SetZero(); + input->SetAll(0.0); for(int j=-_vSquareSize;j<=(int) _vSquareSize;++j) { num_t gaus = _weights[j+_vSquareSize][_hSquareSize]; unsigned yStart = j >= 0 ? 0 : -j;