Commits

Takahiro Tsutsumi authored 9ff40751f20 Merge
Merge branch 'cas10711loc' into bugfix/CAS-10711

code/synthesis/ImagerObjects/SDAlgorithmMSClean.cc

Modified
143 143 void SDAlgorithmMSClean::takeOneStep( Float loopgain, Int cycleNiter, Float cycleThreshold, Float &peakresidual, Float &modelflux, Int &iterdone)
144 144 {
145 145 LogIO os( LogOrigin("SDAlgorithmMSClean","takeOneStep",WHERE) );
146 146
147 147 Quantity thresh( cycleThreshold, "Jy" );
148 148 // Quantity ftthresh( 100.0, "Jy" ); /// Look at MFMSCleanImageSkyModel.cc for more.
149 149 itsCleaner.setcontrol(CleanEnums::MULTISCALE, cycleNiter, loopgain, thresh); //, ftthresh);
150 150
151 151 Matrix<Float> tempModel;
152 152 tempModel.reference( itsMatModel );
153 + //save the previous model
154 + Matrix<Float> prevModel;
155 + prevModel=itsMatModel;
153 156
154 157 //cout << "SDALMS, matrix shape : " << tempModel.shape() << " array shape : " << itsMatModel.shape() << endl;
155 158
156 159 // retval
157 160 // 1 = converged
158 161 // 0 = not converged but behaving normally
159 162 // -1 = not converged and stopped on cleaning consecutive smallest scale
160 163 // -2 = not converged and either large scale hit negative or diverging
161 164 // -3 = clean is diverging rather than converging
162 165 itsCleaner.startingIteration( 0 );
163 166 Int retval = itsCleaner.clean( tempModel );
164 167 iterdone = itsCleaner.numberIterations();
165 168
166 169 if( retval==-1 ) {os << LogIO::WARN << "MSClean minor cycle stopped on cleaning consecutive smallest scale" << LogIO::POST; }
167 170 if( retval==-2 ) {os << LogIO::WARN << "MSClean minor cycle stopped at large scale negative or diverging" << LogIO::POST;}
168 171 if( retval==-3 ) {os << LogIO::WARN << "MSClean minor cycle stopped because it is diverging" << LogIO::POST; }
169 172
170 173 ////This is going to be wrong if there is no 0 scale;
171 - peakresidual = max(abs(itsCleaner.residual()));
174 + ///Matrix<Float> residual(itsCleaner.residual());
175 + Matrix<Float> residual(itsCleaner.residual(tempModel-prevModel));
176 + // account for mask as well
177 + peakresidual = max(abs(residual*itsMatMask));
172 178 modelflux = sum( itsMatModel ); // Performance hog ?
173 179 }
174 180
175 181 void SDAlgorithmMSClean::finalizeDeconvolver()
176 182 {
177 183 ///MatrixCleaner does not modify the original residual image matrix
178 184 ///so the first line is a dummy.
179 185 (itsImages->residual())->put( itsMatResidual );
180 186 (itsImages->model())->put( itsMatModel );
181 187 }

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut