Commits
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 | |