Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Devlop test for 3C286 data #63

Open
tjgalvin opened this issue Feb 12, 2024 · 2 comments
Open

Devlop test for 3C286 data #63

tjgalvin opened this issue Feb 12, 2024 · 2 comments

Comments

@tjgalvin
Copy link
Owner

Late last year data were taken on a number of known polarised sources as a way of verifying we understood how to correct measurement sets for tools outside of yandasoft and the larger askap pipeline. These data have been useful in verifying the fixms tool and the general continuum calibration and imaging workflow.

In terms of full polarisation, arrakis is starting to show some interesting and difficult to understand results. Using these 3C286 data and components of arrakis it has been highlighted that something is going wrong in the derivation (or application) of the smoothed bandpass.

A proper test should be incorporated into the general pytest suite to verify that the 3C286 data produces a correct stokes I/Q/U spectrum.

The bandpass SBID: 51998
The SBIDs of the science fields: 51997 and 52087

Since 3C286 is bright a minute or two should be sufficent. Bandpass calibration might require some thinking about since the MS are larger.

We would need to store in an accessible way:

  • the raw MS of beam 0 (the beam centered on 3C286)
  • the calibrate and applysolutions singularity container
@AlecThomson
Copy link
Collaborator

For later use, here are the Perley+Bulter reference values:

In Stokes I they have 4-paramter model, fit to log(freq/GHz). The model values can be obtained by doing something like

PB_scales = {
    0: 1.2481,
    1: -0.4507,
    2: -0.1798,
    3:  0.0357,
}
nu_g_log = np.log10(nu_g) # nu_g are frequencies in GHz
pb_model_log = PB_scales[0] + \
            PB_scales[1] * nu_g_log + \
            PB_scales[2] * nu_g_log**2 + \
            PB_scales[3] * nu_g_log**3
pb_model_i = 10**(pb_model_log) # These are the model Stokes I fluxes in Jy

For polarisation, we have reference values at a few frequencies in terms of polarisation fraction and angle. These values are:

pb_pol = {
    "freq": np.array([1.050, 1.450, 1.640]), # reference frequency
    "p": np.array([0.086, 0.096, 0.099]), # fractional polarisation
    "a": np.array([33, 33, 33]), # polarisation angle in deg
}

The angles are conveniently all 33deg.

We can assume 3C286 has a RM of 0, so we can do a 'self-calibration' of the ionosphere by assuming any apparent RM is due to the ionosphere. We can obtain the RM using RM-Tools:

mDict_45, aDict_45 = run_rmsynth(
    [
        freqs, # frequencies in Hz
        stokes_i, # Stokes I flux
        stokes_q, # Stokes Q flux
        stokes_u, # Stokes U flux
        np.ones_like(stokes_i) * 1e-3, # dummy noise
        np.ones_like(stokes_q) * 1e-3, # dummy noise
        np.ones_like(stokes_u) * 1e-3, # dummy noise
    ],
    showPlots=False,
    phiMax_radm2=100 # Ionospheric RM is usually between 1-10rad/m/m
)
measured_intrinsic_angle = mDict_45["polAngle0Fit_deg"]

We should aim to be within a few degrees of 33deg, I think.

@tjgalvin
Copy link
Owner Author

Once we have done that correction then I am guessing we can also include some checks to make sure the Q and U is also correct against a known set of spectra, even if it is our own.

Once this basic test has been set up then we can expend upon this,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants