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


Ignore:
Timestamp:
Sep 28, 2011, 5:13:51 PM (14 years ago)
Author:
ansari
Message:

modifs pour pouvoir imposer la moyenne en temp des plans X,Y des cubes lors de l'extraction du signal HI, Reza 28/9/2011

File:
1 edited

Legend:

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

    r3989 r4022  
    1212
    1313#include "ctimer.h"
     14
     15/* --Methode-- */
     16PowerLawChecker::PowerLawChecker(TArray< TF >& skycube)
     17  : skycube_(skycube)
     18{
     19}
     20/* --Methode-- */
     21void PowerLawChecker::CheckXYMean()
     22{
     23  // double freq0 : Frequence premier index en k (MHz)
     24  // double dfreq :   // largeur en frequence de chaque plan (Mhz) 
     25  double freq0_ = Freq0MHz;
     26  double dfreq_ = FreqSizeMHz/(double)NFreq;
     27
     28  double tempfirst,templast;
     29  r_8 s1, sx, sx2, sy, sxy;
     30  s1=sx=sx2=sy=sxy=0.;
     31  double lnf0=0.;
     32  for(sa_size_t k=0; k<skycube_.SizeZ(); k++)  {
     33    double lnf=log((double)k*dfreq_+freq0_);
     34    double ttot = Mean(skycube_(Range::all(), Range::all(), Range(k)));
     35    if (k==0) { tempfirst=ttot;  lnf0=lnf; }
     36    if (k==skycube_.SizeZ()-1) templast=ttot;
     37    if (ttot < 1.e-5) continue;
     38    double lntt=log(ttot);
     39    s1+=1.;  sx+=lnf;  sx2+=(lnf*lnf);
     40    sy+=lntt;    sxy+=(lnf*lntt);
     41  }
     42  double beta = (sx*sxy-sx2*sy)/(sx*sx-s1*sx2);
     43  double alpha = (s1*sxy-sx*sy)/(s1*sx2-sx*sx);
     44  double T0 = exp(beta+alpha*lnf0);
     45 
     46  cout << " PowerLawChecker::CheckMean() meanTemp(0 ...last) " << tempfirst << " ... "
     47       << templast << endl;
     48  bool fgnan = false;
     49  if (!isfinite(alpha)||(!isfinite(beta))) {
     50    cout << "ePowerLawChecker::CheckMean()  Not finite alpha, beta " << endl;
     51    fgnan = true;
     52  }
     53  cout << "PowerLawChecker::CheckMean() - T0=" << T0 << " alpha=" << alpha << "(beta=" << beta << ")" << endl;
     54  return;
     55}
    1456
    1557/* --Methode-- */
     
    3476  beam.Correct2RefLobe(tbeam_, skycube_, dx_, dy_, freq0_, dfreq_, maxratio_);
    3577  cout << " ForegroundCleaner::BeamCorrections() done " << endl;
     78}
     79
     80/* --Methode-- */
     81int ForegroundCleaner::FixMeanXYTemp(double T0, double alpha)
     82{
     83  cout << "ForegroundCleaner::FixMeanXYTemp(T0=" << T0 << ",alpha=" << alpha << ")" << endl;
     84  double lnf0=log(freq0_);
     85  sa_size_t modprt=skycube_.SizeZ()/12;
     86  for(sa_size_t k=0; k<skycube_.SizeZ(); k++)  {
     87    double lnf=log((double)k*dfreq_+freq0_);
     88    double fittedtemp = T0*exp(alpha*(lnf-lnf0));
     89    TArray<TF> slice = skycube_(Range::all(), Range::all(), Range(k));
     90    TF deltatemp = (TF)(fittedtemp-(double)Mean(slice));
     91    slice += deltatemp;
     92    if (k%modprt == 0)
     93      cout << "FixMeanXYTemp[k=" << k << " MeanXYTemp=" << fittedtemp-deltatemp << " -> " << fittedtemp
     94           << " (DeltaTemp=" << deltatemp << ")" << endl;
     95  }
     96  cout << "ForegroundCleaner::FixMeanXYTemp done" << endl;
     97  return 0;
    3698}
    3799
Note: See TracChangeset for help on using the changeset viewer.