Changeset 4022 in Sophya for trunk/Cosmo/RadioBeam/fgndsub.cc
- Timestamp:
- Sep 28, 2011, 5:13:51 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/RadioBeam/fgndsub.cc
r3989 r4022 12 12 13 13 #include "ctimer.h" 14 15 /* --Methode-- */ 16 PowerLawChecker::PowerLawChecker(TArray< TF >& skycube) 17 : skycube_(skycube) 18 { 19 } 20 /* --Methode-- */ 21 void 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 } 14 56 15 57 /* --Methode-- */ … … 34 76 beam.Correct2RefLobe(tbeam_, skycube_, dx_, dy_, freq0_, dfreq_, maxratio_); 35 77 cout << " ForegroundCleaner::BeamCorrections() done " << endl; 78 } 79 80 /* --Methode-- */ 81 int 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; 36 98 } 37 99
Note:
See TracChangeset
for help on using the changeset viewer.