casatools/src/code/synthesis/ImagerObjects/SynthesisNormalizer.cc

Modified
295 295 Vector<Float> f2part(f2out.nelements(), 0.0);
296 296 bool recalcF2 = (d2out.nelements() >0 && d2out[0] == 1.0); // need to recalculate F2 for normalized Briggs
297 297 if(recalcF2)
298 298 f2out.set(0.0);
299 299 Int nxim = itsImages->gridwt()->shape()(0);
300 300 Int nyim = itsImages->gridwt()->shape()(1);
301 301 for (uInt part = 0; part < itsPartImages.nelements(); part++) {
302 302 itsImages->addImages(itsPartImages[part], false,
303 303 /*residual*/ false, /*weight*/ false,
304 304 /*griddedwt*/ true);
305 + Record partiminfo(itsPartImages[part]->gridwt()->miscInfo());
306 + mergeWeightDensityInfo(iminfo, partiminfo);
305 307 if (recalcF2) {
306 308 Vector<Float> f2in;
307 309 (itsPartImages[part]->gridwt()->miscInfo()).get("f2", f2in);
308 310 Array<Float> arr;
309 311 if (d2out.nelements() > 1) {
310 312 IPosition blc(5, 0, 0, 0, 0, 0);
311 313 IPosition shp(5, nxim, nyim, 1, 1, 1);
312 314 for (uInt k = 0; k < d2out.nelements(); ++k) {
313 315 blc[4] = k;
314 316 itsPartImages[part]->gridwt()->getSlice(arr, blc, shp, True);
336 338 f2out[k] = f2out[k] / sumarr2;
337 339 }
338 340 }
339 341 else{
340 342 itsImages->gridwt()->get(arr, True);
341 343 Float sumarr2 = sum(arr * arr);
342 344 if (sumarr2 > 0)
343 345 f2out[0] = f2out[0] / sumarr2;
344 346 }
345 347 iminfo.define("f2", f2out);
346 - itsImages->gridwt()->setMiscInfo(iminfo);
348 +
347 349 }
348 -
350 + itsImages->gridwt()->setMiscInfo(iminfo);
351 +
349 352 } // end of image gathering.
350 353
351 354 // Normalize by the weight image.
352 355 // divideResidualByWeight();
353 356 itsImages->releaseLocks();
354 357
355 358 }//end of gatherweightdensity
356 359
357 360 //-------------------------
358 361
430 433
431 434
432 435 void SynthesisNormalizer::divideWeightBySumWt() {
433 436
434 437 LogIO os(LogOrigin("SynthesisNormalizer", "divideWeightBySumWt", WHERE));
435 438 itsImages->divideWeightBySumwt();
436 439
437 440 }
438 441
439 442
440 -
441 443
442 444 void SynthesisNormalizer::dividePSFByWeight()
443 -
444 445 {
445 446 LogIO os( LogOrigin("SynthesisNormalizer", "dividePSFByWeight",WHERE) );
446 447 {
447 448
448 449 LatticeLocker lock1 (*(itsImages->psf()), FileLocker::Write);
449 450
450 451 if( itsNFacets==1) {
451 452 itsImages->dividePSFByWeight(itsPBLimit);
452 453 }
453 454 else {
814 815 Slicer sl(blc, trc, Slicer::endIsLast);
815 816 SubImage<Float> sub(*(itsImages->psf(tix)), sl, true);
816 817 sub.copyData(onepsf);
817 818 }
818 819 }
819 820
820 821 // cout << "In setPsfFromOneFacet : sumwt : " << itsImages->sumwt()->get() << endl;
821 822
822 823 }
823 824
824 -
825 + void SynthesisNormalizer::mergeWeightDensityInfo(Record& outinfo, const Record& partinfo){
826 + uInt mapsize;
827 + outinfo.get("multimapsize", mapsize);
828 + uInt partsize;
829 + partinfo.get("multimapsize", partsize);
830 + std::vector<String> key2add;
831 + std::vector<Int> val2add;
832 + for (uInt k = 0; k < partsize; ++k){
833 + String key;
834 + partinfo.get("key" + String::toString(k), key);
835 + Bool hasKey = False;
836 + for (uInt j = 0; j < mapsize; ++j) {
837 + String imkey;
838 + outinfo.get("key" + String::toString(j), imkey);
839 + hasKey = hasKey || (imkey == key);
840 + }
841 + if (!hasKey) {
842 + key2add.push_back(key);
843 + Int val;
844 + partinfo.get("val" + String::toString(k), val);
845 + val2add.push_back(val);
846 + }
847 + }
848 + if (key2add.size() > 0) {
849 + for (uInt k = mapsize; k < (mapsize + key2add.size()); ++k) {
850 + String key = "key" + String::toString(k);
851 + outinfo.define(key, key2add[k - mapsize]);
852 + String val = "val" + String::toString(k);
853 + outinfo.define(val, val2add[k - mapsize]);
854 + }
855 + mapsize += key2add.size();
856 + outinfo.define("multimapsize", mapsize);
857 + }
858 + }
825 859
826 860 } //# NAMESPACE CASA - END
827 861

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

Add shortcut