void SBTopHat::SBTopHatImpl::fillKImage(ImageView<std::complex<double> > im, double kx0, double dkx, double dkxy, double ky0, double dky, double dkyx) const { dbg<<"SBTopHat fillKImage\n"; dbg<<"kx = "<<kx0<<" + i * "<<dkx<<" + j * "<<dkxy<<std::endl; dbg<<"ky = "<<ky0<<" + i * "<<dkyx<<" + j * "<<dky<<std::endl; const int m = im.getNCol(); const int n = im.getNRow(); std::complex<double>* ptr = im.getData(); int skip = im.getNSkip(); assert(im.getStep() == 1); kx0 *= _r0; dkx *= _r0; dkxy *= _r0; ky0 *= _r0; dky *= _r0; dkyx *= _r0; for (int j=0; j<n; ++j,kx0+=dkxy,ky0+=dky) { double kx = kx0; double ky = ky0; for (int i=0; i<m; ++i,kx+=dkx,ky+=dkyx) *ptr++ = kValue2(kx*kx + ky*ky); } }
void SBTopHat::SBTopHatImpl::fillKImage(ImageView<std::complex<double> > im, double kx0, double dkx, int izero, double ky0, double dky, int jzero) const { dbg<<"SBTopHat fillKImage\n"; dbg<<"kx = "<<kx0<<" + i * "<<dkx<<", izero = "<<izero<<std::endl; dbg<<"ky = "<<ky0<<" + j * "<<dky<<", jzero = "<<jzero<<std::endl; if (izero != 0 || jzero != 0) { xdbg<<"Use Quadrant\n"; fillKImageQuadrant(im,kx0,dkx,izero,ky0,dky,jzero); } else { xdbg<<"Non-Quadrant\n"; const int m = im.getNCol(); const int n = im.getNRow(); std::complex<double>* ptr = im.getData(); int skip = im.getNSkip(); assert(im.getStep() == 1); kx0 *= _r0; dkx *= _r0; ky0 *= _r0; dky *= _r0; for (int j=0; j<n; ++j,ky0+=dky,ptr+=skip) { double kx = kx0; double kysq = ky0*ky0; for (int i=0; i<m; ++i,kx+=dkx) *ptr++ = kValue2(kx*kx + kysq); } } }
void SBTopHat::SBTopHatImpl::fillKValue(tmv::MatrixView<std::complex<double> > val, double kx0, double dkx, double dkxy, double ky0, double dky, double dkyx) const { dbg<<"SBTopHat fillKValue\n"; dbg<<"kx = "<<kx0<<" + i * "<<dkx<<" + j * "<<dkxy<<std::endl; dbg<<"ky = "<<ky0<<" + i * "<<dkyx<<" + j * "<<dky<<std::endl; assert(val.stepi() == 1); assert(val.canLinearize()); const int m = val.colsize(); const int n = val.rowsize(); typedef tmv::VIt<std::complex<double>,1,tmv::NonConj> It; kx0 *= _r0; dkx *= _r0; dkxy *= _r0; ky0 *= _r0; dky *= _r0; dkyx *= _r0; It valit = val.linearView().begin(); for (int j=0;j<n;++j,kx0+=dkxy,ky0+=dky) { double kx = kx0; double ky = ky0; for (int i=0;i<m;++i,kx+=dkx,ky+=dkyx) { double ksq = kx*kx + ky*ky; *valit++ = kValue2(ksq); } } }
void SBTopHat::SBTopHatImpl::fillKValue(tmv::MatrixView<std::complex<double> > val, double kx0, double dkx, int izero, double ky0, double dky, int jzero) const { dbg<<"SBTopHat fillKValue\n"; dbg<<"kx = "<<kx0<<" + i * "<<dkx<<", izero = "<<izero<<std::endl; dbg<<"ky = "<<ky0<<" + j * "<<dky<<", jzero = "<<jzero<<std::endl; if (izero != 0 || jzero != 0) { xdbg<<"Use Quadrant\n"; fillKValueQuadrant(val,kx0,dkx,izero,ky0,dky,jzero); } else { xdbg<<"Non-Quadrant\n"; assert(val.stepi() == 1); const int m = val.colsize(); const int n = val.rowsize(); typedef tmv::VIt<std::complex<double>,1,tmv::NonConj> It; kx0 *= _r0; dkx *= _r0; ky0 *= _r0; dky *= _r0; for (int j=0;j<n;++j,ky0+=dky) { double kx = kx0; double kysq = ky0*ky0; It valit = val.col(j).begin(); for (int i=0;i<m;++i,kx+=dkx) { double ksq = kx*kx + kysq; *valit++ = kValue2(ksq); } } } }
std::complex<double> SBTopHat::SBTopHatImpl::kValue(const Position<double>& k) const { double kr0sq = (k.x*k.x + k.y*k.y) * _r0sq; return kValue2(kr0sq); }