#include <synthesis/Utilities/PointingDirectionProjector.h>
#include <casacore/casa/BasicSL/Constants.h>
#include <casacore/casa/Arrays/Matrix.h>
#include <casacore/casa/Arrays/Vector.h>
#include <casacore/casa/Arrays/ArrayMath.h>
#include <casacore/coordinates/Coordinates/DirectionCoordinate.h>
using namespace casacore;
using namespace casacore;
using namespace casacore;
user_defined_center_(false), user_defined_pcenter_(false) {
void Projector::setDirection(const Matrix<Double> &dir) {
dir_.reference(dir.copy());
Vector<Double> ra(dir_.row(0));
void Projector::setReferenceCoordinate(Double const lat, Double const lon) {
user_defined_center_ = true;
void Projector::setReferencePixel(Double const refx, Double const refy) {
user_defined_pcenter_ = true;
void Projector::unsetReferenceCoordinate() {
user_defined_center_ = false;
void Projector::unsetReferencePixel() {
user_defined_pcenter_ = false;
void Projector::rotateRA(Vector<Double> &v) {
uInt len = v.nelements();
Vector<Double> work(len);
for (uInt i = 0; i < len; i++) {
work[i] = fmod(v[i], C::_2pi);
Vector<uInt> nquad(4, 0);
for (uInt i = 0; i < len; i++) {
uInt q = uInt(work[i] / C::pi_2);
Vector<Bool> rot(4, false);
if (nquad[0] > 0 && nquad[3] > 0 && (nquad[1] == 0 || nquad[2] == 0)) {