Changeset 3788 in Sophya for trunk/Cosmo/RadioBeam/lobe.cc
- Timestamp:
- Jun 25, 2010, 7:35:17 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/RadioBeam/lobe.cc
r3787 r3788 17 17 } 18 18 19 /* --Methode-- */20 void BeamEffect::ApplyLobeK2D(TArray< complex<TF> >& fourAmp, double dkx, double dky, double lambda)21 // dx, dy en radians, lambda en metres22 {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 }34 19 35 20 … … 52 37 ffts.FFTForward(slice, fourAmp); 53 38 conv.setFrequency(f0+kz*df); 54 ApplyLobeK2D(fourAmp, dkx, dky, conv.getLambda()); 39 fresp_.setLambda(conv.getLambda()); 40 ApplyLobeK2D(fresp_, fourAmp, dkx, dky); 55 41 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-- */ 48 void 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-- */ 75 void 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 } 57 85 } 58 86 return;
Note:
See TracChangeset
for help on using the changeset viewer.