Changeset 3788 in Sophya for trunk/Cosmo/RadioBeam/lobe.cc


Ignore:
Timestamp:
Jun 25, 2010, 7:35:17 PM (15 years ago)
Author:
ansari
Message:

Ajout classe de soustraction d'avant plans, Reza 25/06/2010

File:
1 edited

Legend:

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

    r3787 r3788  
    1717}
    1818
    19 /* --Methode-- */
    20 void BeamEffect::ApplyLobeK2D(TArray< complex<TF> >& fourAmp, double dkx, double dky, double lambda)
    21 //  dx, dy en radians, lambda en metres
    22 {
    23   fresp_.setLambda(lambda);
    24   double kxx, kyy;
    25   for(sa_size_t ky=0; ky<fourAmp.SizeY(); ky++) {
    26     kyy =  (ky>fourAmp.SizeY()/2) ? -(double)(fourAmp.SizeY()-ky)*dky : (double)ky*dky;
    27     for(sa_size_t kx=0; kx<fourAmp.SizeX(); kx++) {
    28       kxx=(double)kx*dkx;
    29       fourAmp(kx, ky) *= complex<TF>(fresp_(kxx, kyy), 0.);     
    30     }
    31   }
    32   return;
    33 }
    3419
    3520
     
    5237    ffts.FFTForward(slice, fourAmp);
    5338    conv.setFrequency(f0+kz*df);
    54     ApplyLobeK2D(fourAmp, dkx, dky, conv.getLambda());
     39    fresp_.setLambda(conv.getLambda());
     40    ApplyLobeK2D(fresp_, fourAmp, dkx, dky);
    5541    ffts.FFTBackward(fourAmp, slice, true);
    56     if (kz%10==0)  cout << "BeamEffect::ApplyLobe3D() done kz=" << kz << " / a.SizeZ()=" << a.SizeZ() << endl;
     42    if (kz%20==0)  cout << "BeamEffect::ApplyLobe3D() done kz=" << kz << " / a.SizeZ()=" << a.SizeZ() << endl;
     43  }
     44  return;
     45}
     46
     47/* --Methode-- */
     48void BeamEffect::Correct2RefLobe(Four2DResponse& rep, TArray< TF >& a, double dx, double dy, double f0, double df)
     49// dx, dy en radioans, f0, df en MHz
     50{
     51  Timer tm("BeamEffect::Correct2RefLobe");
     52  FFTWServer ffts(true);                     
     53  ffts.setNormalize(true);
     54 
     55  H21Conversions conv;
     56 
     57  TArray< complex<TF> > fourAmp;
     58  double dkx = DeuxPI/(double)a.SizeX()/dx;
     59  double dky = DeuxPI/(double)a.SizeY()/dy;
     60 
     61  for(sa_size_t kz=0; kz<a.SizeZ(); kz++) {
     62    TArray< TF > slice( a(Range::all(), Range::all(), kz) );
     63    ffts.FFTForward(slice, fourAmp);
     64    conv.setFrequency(f0+kz*df);
     65    fresp_.setLambda(conv.getLambda());
     66    Four2DRespRatio rratio(fresp_, rep);
     67    ApplyLobeK2D(rratio, fourAmp, dkx, dky);
     68    ffts.FFTBackward(fourAmp, slice, true);
     69    if (kz%20==0)  cout << "BeamEffect::Correct2RefLobe() done kz=" << kz << " / a.SizeZ()=" << a.SizeZ() << endl;
     70  }
     71  return;
     72}
     73
     74/* --Methode-- */
     75void BeamEffect::ApplyLobeK2D(Four2DResponse& rep, TArray< complex<TF> >& fourAmp, double dkx, double dky)
     76//  dx, dy en radians, lambda en metres
     77{
     78  double kxx, kyy;
     79  for(sa_size_t ky=0; ky<fourAmp.SizeY(); ky++) {
     80    kyy =  (ky>fourAmp.SizeY()/2) ? -(double)(fourAmp.SizeY()-ky)*dky : (double)ky*dky;
     81    for(sa_size_t kx=0; kx<fourAmp.SizeX(); kx++) {
     82      kxx=(double)kx*dkx;
     83      fourAmp(kx, ky) *= complex<TF>(rep(kxx, kyy), 0.);       
     84    }
    5785  }
    5886  return;
Note: See TracChangeset for help on using the changeset viewer.