Changeset 3830 in Sophya for trunk/Cosmo/RadioBeam/fgndsub.cc


Ignore:
Timestamp:
Aug 4, 2010, 1:59:10 PM (15 years ago)
Author:
ansari
Message:

Amelioration soustraction des avant-plans par l'introduction d'un fit polynome deg 2 sur ln(Temp)=f(ln(freq)), Reza 04/08/2010

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cosmo/RadioBeam/fgndsub.cc

    r3789 r3830  
    99#include "cubedef.h"
    1010#include "matharr.h"
     11#include "poly.h"
    1112
    1213#include "ctimer.h"
     
    9091
    9192/* --Methode-- */
    92 TArray< TF >  ForegroundCleaner::extractLSSCube(TArray< TF >& synctemp, TArray< TF >& specidx)
    93 {
    94   Timer tm("ForegroundCleaner::extractLSSCube");
     93TArray< TF >  ForegroundCleaner::extractLSSCubeP1(TArray< TF >& synctemp, TArray< TF >& specidx)
     94{
     95  Timer tm("ForegroundCleaner::extractLSSCubeP1");
    9596// Inputs : maplss, mapsyc, freq0, dfreq
    9697// Outputs : synctemp, specidx  (reconstructed foreground temperature and spectral index
     
    130131      bool fgnan = false;
    131132      if (!isfinite(alpha)||(!isfinite(beta))) {
    132         cout << "extractLSSCube[" << i << "," << j << "]/ Not finite alpha, beta - (mapsync="
     133        cout << "extractLSSCubeP1[" << i << "," << j << "]/ Not finite alpha, beta - (mapsync="
    133134             << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
    134135        alpha=beta=-999.;
     
    140141       
    141142        if ((axp1<-70.)||(axp1>70.)||(axp2<-70.)||(axp2>70.)) {
    142         cout << "extractLSSCube[" << i << "," << j << "] BAD alpha=" << alpha
     143        cout << "extractLSSCubeP1[" << i << "," << j << "] BAD alpha=" << alpha
    143144             << " beta=" << beta << " T0=" << T0 << " - (mapsync="
    144145             << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
     
    147148      }
    148149      if ((i%imodprt==0)&&(j%jmodprt==0))
    149         cout << "extractLSSCube[" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha
     150        cout << "extractLSSCubeP1[" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha
    150151             << " (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
    151152      synctemp(i,j) = T0;
     
    161162      }
    162163    }
    163   cout << " ForegroundCleaner::extractLSSCube() - NbNan alpha/beta=" << nbinfini << " NbBAD =" << nbbad << endl;
     164  cout << " ForegroundCleaner::extractLSSCubeP1() - NbNan alpha/beta=" << nbinfini << " NbBAD =" << nbbad << endl;
    164165  return omap;
    165166}
    166167
     168/*
     169static inline val_polyn2(double alpha, double beta, double gamma, double x)
     170{
     171  return (beta+alpha*x+gamma*x*x);
     172}
     173*/
     174
     175/* --Methode-- */
     176TArray< TF >  ForegroundCleaner::extractLSSCubeP2(TArray< TF >& synctemp, TArray< TF >& specidx)
     177{
     178  Timer tm("ForegroundCleaner::extractLSSCubeP2");
     179// Inputs : maplss, mapsyc, freq0, dfreq
     180// Outputs : synctemp, specidx  (reconstructed foreground temperature and spectral index
     181// Return_Array : foreground subtracted LSS signal
     182  sa_size_t sz[5];   sz[0]=skycube_.SizeX();  sz[1]=skycube_.SizeY();
     183  synctemp.SetSize(2, sz);
     184  specidx.SetSize(2, sz);
     185  TArray<r_4> omap;
     186  omap.SetSize(skycube_, true);
     187  Vector vlnf(skycube_.SizeZ());
     188  Vector vlnT(skycube_.SizeZ());
     189  int nprt = 0;
     190  // double freq0 : Frequence premier index en k (MHz)
     191  // double dfreq :   // largeur en frequence de chaque plan (Mhz) 
     192  for(sa_size_t k=0; k<skycube_.SizeZ(); k++) 
     193    vlnf(k)=log((double)k*dfreq_+freq0_);
     194  vlnf -= vlnf(0);
     195  //  cout << " DBG*extractLSSCubeP2 vlnf(0)=" << vlnf(0) << " vlnf(1)=" << vlnf(1)
     196  //       << "vlnf(last)=" << vlnf(vlnf.Size()-1) << endl;
     197  sa_size_t nbinfini=0;
     198  sa_size_t nbbad=0;
     199  sa_size_t imodprt=skycube_.SizeX()/6;
     200  sa_size_t jmodprt=skycube_.SizeY()/6;
     201  for(sa_size_t i=0; i<skycube_.SizeX(); i++)
     202    for(sa_size_t j=0; j<skycube_.SizeY(); j++)  {
     203      vlnT = -12.;
     204      Poly polyn;
     205      for(sa_size_t k=0; k<skycube_.SizeZ(); k++)  {
     206        double lnf = vlnf(k);
     207        double ttot=(r_8)(skycube_(i,j,k));
     208        if (ttot < 1.e-5) continue;
     209        vlnT(k)=log(ttot);
     210      }
     211      polyn.Fit(vlnf,vlnT,2);
     212      double beta = polyn[0];
     213      double alpha = polyn[1];
     214      double gamma = polyn[2];
     215      double T0 = exp(polyn(vlnf(0))); // exp( val_polyn2(alpha, beta, gamma, vlnf(0)) );
     216
     217      bool fgnan = false;
     218      if (!isfinite(alpha)||(!isfinite(beta))||(!isfinite(gamma))) {
     219        cout << "extractLSSCubeP2[" << i << "," << j << "]/ Not finite alpha, beta - (mapsync="
     220             << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
     221        alpha=beta=gamma=-999.;
     222        fgnan = true;  nbinfini++;
     223      }
     224      else {
     225        double axp1 = polyn(vlnf(0));
     226        double axp2 = polyn(vlnf(vlnf.Size()-1));
     227       
     228        if ((axp1<-70.)||(axp1>70.)||(axp2<-70.)||(axp2>70.)) {
     229          cout << "extractLSSCubeP2[" << i << "," << j << "] BAD alpha=" << alpha
     230            //         << " beta=" << beta << " gamma=" << gamma << " T0=" << T0 << " axp1=" << axp1 << " axp2=" << axp2
     231               << " beta=" << beta << " gamma=" << gamma << " T0=" << T0 << " - (mapsync=" << skycube_(i,j,0)
     232               << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
     233          fgnan = true;  nbbad++;
     234        }
     235      }
     236      if ((i%imodprt==0)&&(j%jmodprt==0))
     237        cout << "extractLSSCubeP2[" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha << " gamma=" << gamma 
     238             << " (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
     239      synctemp(i,j) = T0;
     240      specidx(i,j) = alpha;
     241      if (fgnan) {
     242        for(sa_size_t k=0; k<skycube_.SizeZ(); k++)   omap(i,j,k) = 0.;
     243      }
     244      else {
     245        for(sa_size_t k=0; k<skycube_.SizeZ(); k++) {
     246          r_4 fittedtemp = (r_4)( exp(polyn(vlnf(k))) );
     247          omap(i,j,k) = skycube_(i,j,k)-fittedtemp;
     248        }
     249      }
     250    }
     251  cout << " ForegroundCleaner::extractLSSCubeP2() - NbNan alpha/beta=" << nbinfini << " NbBAD =" << nbbad << endl;
     252  return omap;
     253}
     254
Note: See TracChangeset for help on using the changeset viewer.