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


Ignore:
Timestamp:
Jun 27, 2010, 4:57:36 PM (15 years ago)
Author:
ansari
Message:

Corrections diverses, Reza 27/06/2010

File:
1 edited

Legend:

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

    r3788 r3789  
    3333  beam.Correct2RefLobe(tbeam_, skycube_, dx_, dy_, freq0_, dfreq_);
    3434  cout << " ForegroundCleaner::BeamCorrections() done " << endl;
     35}
     36
     37/* --Methode-- */
     38int ForegroundCleaner::CleanNegatives(TF seuil)
     39{
     40  sa_size_t nneg = 0.;
     41  for(sa_size_t kz=0; kz<skycube_.SizeZ(); kz++)
     42    for(sa_size_t ky=0; ky<skycube_.SizeY(); ky++)
     43      for(sa_size_t kx=0; kx<skycube_.SizeX(); kx++)
     44        if (skycube_(kx, ky, kz) < seuil)  {
     45          nneg++; skycube_(kx, ky, kz)=seuil;
     46        }
     47  cout << " ForegroundCleaner::CleanNegatives " << nneg << " sky-pixels <" << seuil << " changed to" << seuil << endl;
     48  return (int)nneg;
    3549}
    3650
     
    8296// Outputs : synctemp, specidx  (reconstructed foreground temperature and spectral index
    8397// Return_Array : foreground subtracted LSS signal
    84 {
    8598  sa_size_t sz[5];   sz[0]=skycube_.SizeX();  sz[1]=skycube_.SizeY();
    8699  synctemp.SetSize(2, sz);
     
    92105  // double freq0 : Frequence premier index en k (MHz)
    93106  // double dfreq :   // largeur en frequence de chaque plan (Mhz) 
     107  for(sa_size_t k=0; k<skycube_.SizeZ(); k++) 
     108    vlnf(k)=log((double)k*dfreq_+freq0_);
     109
     110  sa_size_t nbinfini=0;
     111  sa_size_t nbbad=0;
     112  sa_size_t imodprt=skycube_.SizeX()/6;
     113  sa_size_t jmodprt=skycube_.SizeY()/6;
    94114  for(sa_size_t i=0; i<skycube_.SizeX(); i++)
    95115    for(sa_size_t j=0; j<skycube_.SizeY(); j++)  {
     
    97117      s1=sx=sx2=sy=sxy=0.;
    98118      for(sa_size_t k=0; k<skycube_.SizeZ(); k++)  {
    99         double lnf=log((double)k*dfreq_+freq0_);
    100         vlnf(k)=lnf;
     119        double lnf = vlnf(k);
    101120        double ttot=(r_8)(skycube_(i,j,k));
    102121        if (ttot < 1.e-5) continue;
     
    108127      double alpha = (s1*sxy-sx*sy)/(s1*sx2-sx*sx);
    109128      double T0 = exp(beta+alpha*vlnf(0));
    110       if ((i%16==0)&&(j%27==0))
     129
     130      bool fgnan = false;
     131      if (!isfinite(alpha)||(!isfinite(beta))) {
     132        cout << "extractLSSCube[" << i << "," << j << "]/ Not finite alpha, beta - (mapsync="
     133             << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
     134        alpha=beta=-999.;
     135        fgnan = true;  nbinfini++;
     136      }
     137      else {
     138        double axp1 = beta+alpha*vlnf(0);
     139        double axp2 = beta+alpha*vlnf(vlnf.Size()-1);
     140       
     141        if ((axp1<-70.)||(axp1>70.)||(axp2<-70.)||(axp2>70.)) {
     142        cout << "extractLSSCube[" << i << "," << j << "] BAD alpha=" << alpha
     143             << " beta=" << beta << " T0=" << T0 << " - (mapsync="
     144             << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
     145        fgnan = true;  nbbad++;
     146        }
     147      }
     148      if ((i%imodprt==0)&&(j%jmodprt==0))
    111149        cout << "extractLSSCube[" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha
    112              << " (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,125) << ")" << endl;
     150             << " (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl;
    113151      synctemp(i,j) = T0;
    114152      specidx(i,j) = alpha;
    115       for(sa_size_t k=0; k<skycube_.SizeZ(); k++) {
    116         r_4 fittedtemp = (r_4)(exp(beta+alpha*vlnf(k)));
    117         omap(i,j,k) = skycube_(i,j,k)-fittedtemp;
     153      if (fgnan) {
     154        for(sa_size_t k=0; k<skycube_.SizeZ(); k++)   omap(i,j,k) = 0.;
     155      }
     156      else {
     157        for(sa_size_t k=0; k<skycube_.SizeZ(); k++) {
     158          r_4 fittedtemp = (r_4)(exp(beta+alpha*vlnf(k)));
     159          omap(i,j,k) = skycube_(i,j,k)-fittedtemp;
     160        }
    118161      }
    119162    }
     163  cout << " ForegroundCleaner::extractLSSCube() - NbNan alpha/beta=" << nbinfini << " NbBAD =" << nbbad << endl;
    120164  return omap;
    121165}
    122166
    123 }
Note: See TracChangeset for help on using the changeset viewer.