/* ------------------------ Projet BAORadio -------------------- Classe ForegroundCleaner R. Ansari , C. Magneville - Juin 2010 --------------------------------------------------------------- */ #include "fgndsub.h" #include "lobe.h" #include "cubedef.h" #include "matharr.h" #include "poly.h" #include "ctimer.h" /* --Methode-- */ ForegroundCleaner::ForegroundCleaner(Four2DResponse& arrep, Four2DResponse& tbeam, TArray< TF >& skycube) : arrep_(arrep) , tbeam_(tbeam), skycube_(skycube) { double dxdeg = ThetaSizeDegre/(double)NTheta; double dydeg = PhiSizeDegre/(double)NPhi; dx_ = DegreeToRadian(dxdeg); dy_ = DegreeToRadian(dydeg); freq0_ = Freq0MHz; dfreq_ = FreqSizeMHz/(double)NFreq; cout << " ForegroundCleaner: " << " dx=" << dxdeg << " dy=" << dydeg << " degres ( dx_rad=" << dx_ << " dy_rad=" << dy_ << ")" << " Freq0=" << freq0_ << " deltaFreq=" << dfreq_ << " MHz" << endl; skycube.Show(); } /* --Methode-- */ void ForegroundCleaner::BeamCorrections() { BeamEffect beam(arrep_); beam.Correct2RefLobe(tbeam_, skycube_, dx_, dy_, freq0_, dfreq_); cout << " ForegroundCleaner::BeamCorrections() done " << endl; } /* --Methode-- */ int ForegroundCleaner::CleanNegatives(TF seuil) { sa_size_t nneg = 0.; for(sa_size_t kz=0; kz sky2d(skycube_.SizeX(), skycube_.SizeY()); for(sa_size_t ky=0; ky amz(1,1,skycube_.SizeZ()), asz(1,1,skycube_.SizeZ()); for(sa_size_t kz=0; kz slice = skycube_(Range::all() , Range::all(), Range(kz)); MeanSigma(slice, mean, sigma); amz(0,0,kz)=mean; asz(0,0,kz)=sigma; } MeanSigma(sky2d, mean, sigma); cout << " ForegroundCleaner::CleanPointSources 2D Sky projection, mean=" << mean << " sigma=" << sigma << endl; TF seuil = (TF)(mean+nsigmas*sigma); sa_size_t srccnt=0; for(sa_size_t ky=0; kyseuil) { srccnt++; skycube_(Range(kx), Range(ky), Range::all()) = amz; } } cout << " Cleaned NSrc= " << srccnt << " 2D source/pixels (TotNPix=" << sky2d.Size() << ")-> " << 100.*srccnt/sky2d.Size() << "% with S>" << seuil << " NSigmas=" << nsigmas << endl; return (int)srccnt; } /* --Methode-- */ TArray< TF > ForegroundCleaner::extractLSSCubeP1(TArray< TF >& synctemp, TArray< TF >& specidx) { Timer tm("ForegroundCleaner::extractLSSCubeP1"); // Inputs : maplss, mapsyc, freq0, dfreq // Outputs : synctemp, specidx (reconstructed foreground temperature and spectral index // Return_Array : foreground subtracted LSS signal sa_size_t sz[5]; sz[0]=skycube_.SizeX(); sz[1]=skycube_.SizeY(); synctemp.SetSize(2, sz); specidx.SetSize(2, sz); TArray omap; omap.SetSize(skycube_, true); Vector vlnf(skycube_.SizeZ()); int nprt = 0; // double freq0 : Frequence premier index en k (MHz) // double dfreq : // largeur en frequence de chaque plan (Mhz) for(sa_size_t k=0; k70.)||(axp2<-70.)||(axp2>70.)) { cout << "extractLSSCubeP1[" << i << "," << j << "] BAD alpha=" << alpha << " beta=" << beta << " T0=" << T0 << " - (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; fgnan = true; nbbad++; } } if ((i%imodprt==0)&&(j%jmodprt==0)) cout << "extractLSSCubeP1[" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha << " (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; synctemp(i,j) = T0; specidx(i,j) = alpha; if (fgnan) { for(sa_size_t k=0; k omap; omap.SetSize(skycube_, true); Vector vlnf(skycube_.SizeZ()); Vector vlnT(skycube_.SizeZ()); int nprt = 0; // double freq0 : Frequence premier index en k (MHz) // double dfreq : // largeur en frequence de chaque plan (Mhz) for(sa_size_t k=0; k70.)||(axp2<-70.)||(axp2>70.)) { cout << "extractLSSCubeP2[" << i << "," << j << "] BAD alpha=" << alpha // << " beta=" << beta << " gamma=" << gamma << " T0=" << T0 << " axp1=" << axp1 << " axp2=" << axp2 << " beta=" << beta << " gamma=" << gamma << " T0=" << T0 << " - (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; fgnan = true; nbbad++; } } if ((i%imodprt==0)&&(j%jmodprt==0)) cout << "extractLSSCubeP2[" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha << " gamma=" << gamma << " (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; synctemp(i,j) = T0; specidx(i,j) = alpha; if (fgnan) { for(sa_size_t k=0; k