BeamSquint.h

Classes

BeamSquint -- encapsulates beam squint (RR and LL beams at different directions) (full description)

class BeamSquint

Types

enum SquintType

NONE
RR
LL
GOFIGURE

Interface

Public Members
BeamSquint()
BeamSquint(const MDirection& squint, const Quantity& refFreq)
BeamSquint(const BeamSquint& other)
BeamSquint& operator= (const BeamSquint& other)
~BeamSquint()
void show()
Bool isNonNull()
MDirection& scale(const Quantity& refFreq)
void getPointingDirection (const MDirection& pointDir, const Quantity parAngle, const Quantity obsFreq, const SquintType doSquint, MDirection& newPointingDir)

Description

Prerequisite

Etymology

BeamSquint = Beam Squint. Obviously so.

Synopsis

Beam squint is when the RR and LL circular polarization beams are located in different places on the sky. The effect is due to the RR and LL feeds being off-axis. The VLA has particularly bad beam squint. Some instruments like the AT or WSRT have essentially no beam squint. The nominal pointing position is taken to be right in between the RR and LL beam centers/

BeamSquint has an MDirection which represents the angular offset from the nominal pointing position at Parallactic angle = 0 (ie, observing a source south of zenith at transit) and the actual RR beam. BeamSquint also has a reference frequency, and the magnitude of the squint angular offset is inversely proportional with frequency. The squint offset is a true angular displacement.

The main thing that BeamSquint does is: given the nominal pointing position and the parallactic angle, calculate the actual squinted beam position for the RR or LL beams. If BeamSquint::NONE is requested, the nominal pointing position is returned.

Example

    MDirection oldPointing;
    MDirection newPointing;
    Quantity parallacticAngle(C::pi/2, "rad");
    Quantity observingFreq(1.4142, "GHz");
    BeamSquint oneBS( MDirection( Quantity(1.0, "'"), Quantity(1.0, "'"),
                                  MDirection::Ref(MDirection::AZEL)),
                      Quantity(1.0, "GHz") );
    oneBS.getPointingDirection(oldPointing, parallacticAngle,
                               observingFreq, BeamSquint::RR, newPointing);

Motivation

Boy, is this UGLY. We do that UGLY stuff just once, though, so you never have to look at it AGAIN (see getPointingDirection if you still don't believe me).

To Do

Member Description

enum SquintType

Allowed Squints: NONE = no squint: PB is centered on the pointing center RR = PB is shifted from pointing center by amount in PBMathInterface's squint_p LL = PB is shifted from pointing center by the NEGATIVE of the amount in PBMathInterface's squint_p GOFIGURE = do the appropriate thing based on the STOKES of the Image

BeamSquint()

Default constructor initializes to zero

BeamSquint(const MDirection& squint, const Quantity& refFreq)

Smart constructor to initialize the MDirection and reference freq

BeamSquint(const BeamSquint& other)

Copy constructor

BeamSquint& operator= (const BeamSquint& other)

Operator=

~BeamSquint()

Destructor

void show()

Show to Logger

Bool isNonNull()

Is BeamSquint nonNull?

MDirection& scale(const Quantity& refFreq)

Return the squint's MDirection scaled to a particular frequency

void getPointingDirection (const MDirection& pointDir, const Quantity parAngle, const Quantity obsFreq, const SquintType doSquint, MDirection& newPointingDir)

Return the squinted pointing position