NRAO Home  >  Green Bank  |  Wiki Topic:    GB > Software > PlanOfRecordC52007 > ModificationRequest5C507
   Changes | Index | Contents | Search | Statistics | Go

Implement GBTIDL Reduction Procedure for Ka-band Subreflector Nodding

Modification Request #5 (C5 2007)



1. Introduction

For wide bandwidth (> 200 MHz), we need to implement an alternative data calibration algorithm that produces better baselines than that produced by the standard algorithms. We also need a routine that will understand and calibrate observations taken with the subreflector nodding observing method. The following MR presents a stop-gap solution for Ka-band, subreflector-nodding calibration. Subreflector nodding with other receivers is out of scope of this MR.

Note that MR 4C507 (Indicate Subreflector Position in Data ) is a prerequisite.

2. Background

Some definitions:

The algorithm presented here is adapted from that used successfully in Spring 2007. The algorithm assumes Tsys and Tcal are frequency dependent, a reality for wide bandwidth observations. In contrast, the 'traditional' calibration algorithms assume Tcal and Tsys are constant across a bandpass. The traditional algorithms mostly look like:

Ta = TsysSkyPos*(SrcPos-SkyPos)/SkyPos where TsysSkyPos = << Tcal*SkyPos/(SkyPosOn - SkyPosOff) >> where << >> indicates an average over all or most of the spectrum's bandwidth. Tsys and Tcal are scalars.

For wide bandwidths, the algorithm to use is instead:

Ta = (SrcPos-SkyPos) * < Tcal / (On - Off) >. Here, < > indicates an optional Savitzky-Golay filter (available in IDL using SAVGOL combined with CONVOL, hereafter this is simply refered to as SavGol? filtering) of user-specified width and scale. Tcal is no longer a scalar but a vector with comparable resolution to that of SrcPos and SkyPos.

In subreflector nodding, there are two determinations of Ta, one for each of the two beams. In Ka-band subreflector nodding, there are an additional two determinations of Ta from the two states (Sig and Ref) of the hybrids. These four determinations of Ta need to be averaged together.

Additionaly, Ka-band has two hardware configurations -- dual and single channel. To keep the most flexibility, and to have the Ka-band calibration algorithms use a similar model to other calibration algorithms within GBTIDL, thereby reducing user confusion, the calibration algorithm should process each channel with separate calls to the calibration algorithm.

Assumptions: The observing starts always in the Sig state of the hybrid. The source is in Beam 0 (the first beam) at the start of the nod sequence.

3. Requirements & Design for Tcal determination

Requirements

The calibration algorithm needs a vector Tcal, something our current infrastructure doesn't provide. As a stop-gap measure, we need to provide an algorithm (tentatively named getScalKaNod) for determining and storing a Tcal vector. The observation that will provide such a measure should be a subreflector nod observation of a standard calibrator. That observation would then be used with an inverted version of the above equation to solve for Tcal:

Tcal = Ta * << (On - Off) / (SrcPos-SkyPos)>> where the results are smoothed to a user-defined resolution. To derive Ta from the calibrator's flux, use: Ta = (Area/2k) * Efficiency * Flux * Exp(-Tau*AirMass) as illustrated in getScal.pro.

The software needs to store as a global vector N Tcal vectors. N = #channel * #spectralWindows * #beams * #hybridStates. #beams = 2, #hybridStates = 2, #channel = either 1 or 2, depending upon the hardware configuration.

Design

The parameters given to getScalKaNod should be modeled after the getScal routine in ~rmaddale/mypros.

If the sampler is not given, from ifnum, plnum, and fdnum one can derive the sampler names for the two beams. Once the sampler is determined, retrieve the data vectors for the various states (once one sampler is determined, the other sample should be implied and need not be separately given).

    SigOnPos0 = getchunk(count=count,pos="0",scan=scan,sig="T",sampler=sampler,cal='T',int=...)
    SigOffPos0 = getchunk(count=count,pos="0",scan=scan,sig="T",sampler=sampler,cal='F',int=...)
    SigOnPos1 = getchunk(count=count,pos="1",scan=scan,sig="T",sampler=sampler,cal='T',int=...)
    SigOffPos1 = getchunk(count=count,pos="1",scan=scan,sig="T",sampler=sampler,cal='F',int=...)
    RefOnPos0 = getchunk(count=count,pos="0",scan=scan,sig="F",sampler=sampler,cal='T',int=...)
    RefOffPos0 = getchunk(count=count,pos="0",scan=scan,sig="F",sampler=sampler,cal='F',int=...)
    RefOnPos1 = getchunk(count=count,pos="1",scan=scan,sig="F",sampler=sampler,cal='T',int=...)
    RefOffPos1 = getchunk(count=count,pos="1",scan=scan,sig="F",sampler=sampler,cal='F',int=...)

Each of these is an array of data vectors. Note that, with the above assumptions, the source is in SigOnPos0, SigOffPos0, RefOnPos1, RefOffPos1. I'm guessing at the name 'pos' for how the SDFITS files wil label the data in the two subreflector positions.

Average each of these arrays to produce eight vectors SigOnPos0Avrg, SigOffPos0Avrg, etc.

         SrcPosSig = (SigOnPos0Avrg + SigOffPos0Avrg)/2
         SkyPosSig = (SigOnPos1Avrg + SigOffPos1Avrg)/2
         OnSig = (SigOnPos0Avrg + SigOnPos1Avrg)/2
         OffSig = (SigOffPos0Avrg + SigOffPos1Avrg)/2

         SrcPosRef = (RefOnPos1Avrg + RefOffPos1Avrg)/2
         SkyPosRef = (RefOnPos0Avrg + RefOffPos0Avrg)/2
         OnRef = (RefOnPos0Avrg + RefOnPos1Avrg)/2
         OffRef = (RefOffPos0Avrg + RefOffPos1Avrg)/2

         Tcal("Sig", "sampler") = Ta * Boxcarsmoothed[(OnSig - OffSig) / (SrcPosSig-SkyPosSig)] 
         Tcal("Ref", "sampler") = Ta * Boxcarsmoothed[(OnRef - OffRef) / (SrcPosRef-SkyPosRef)]

Here Ta is a vector and should be constructed as in getScal.

The user would then rerun getScalKaNod for every combination of ifnum and plnum or for one sampler in every set of sampler pairs. In this way, #channel * #spectralWindows * #beams * #hybridStates tcal vectors will be created.

4. Requirements & Design for Ta determination

Requirements

The observer must be able to derive Ta, using the previously-derived vector Tcal. The GBTIDL algorithm is tentatively named getKaNod and will use the Ta equation from the background section of this MR.

Ta = (SrcPos-SkyPos) * < Tcal / (On - Off) >.

Design

The parameters given to getKaNod should be modeled after the standard get routines.

Plus the standard arguments for the get commands: tau, ap_eff, smthoff, units, tcal, .... That is, all but fdnum and tsys.

If the list of samplers is not given, then from ifnum and plnum one can derive the two samplers name for the two beam. Once the sampler is determined, retrive the data vectors for the various states.

For the sampler for the 1st beam

  1. Create the eight array of vectors (SigOnPos0, SigOffPos0), ... using the same data retrival as in the Tcal section above. Note that the source is in SigOnPos0, SigOffPos0, RefOnPos1, RefOffPos1 for the first beam's sampler and is in SigOnPos1?, SigOffPos1?, RefOnPos0?, RefOffPos0? for the 2nd beam's sampler.
  2. Average each of these arrays to produce eight vectors SigOnPos0Avrg, SigOffPos0Avrg, etc.
  3. Create:

         SrcPosSig = (SigOnPos0Avrg + SigOffPos0Avrg)/2
         SkyPosSig = (SigOnPos1Avrg + SigOffPos1Avrg)/2
         OnSig = (SigOnPos0Avrg + SigOnPos1Avrg)/2
         OffSig = (SigOffPos0Avrg + SigOffPos1Avrg)/2

         SrcPosRef = (RefOnPos1Avrg + RefOffPos1Avrg)/2
         SkyPosRef = (RefOnPos0Avrg + RefOffPos0Avrg)/2
         OnRef = (RefOnPos0Avrg + RefOnPos1Avrg)/2
         OffRef = (RefOffPos0Avrg + RefOffPos1Avrg)/2

         TaSigB0 = (SrcPosSig - Smoothed(SkyPosSig) * SAVGOL[Tcal("Sig", sampler1) / (OnSig - OffSig) ]  
         TaRefB0 = (SrcPosRef - Smoothed(SkyPosRef) * SAVGOL[Tcal("Ref", sampler1) / (OnRef - OffRef) ]  

For the second beam's sampler:

  1. Same as above
  2. Same as above
  3. Create

         SrcPosSig = (SigOnPos1Avrg + SigOffPos1Avrg)/2
         SkyPosSig = (SigOnPos0Avrg + SigOffPos0Avrg)/2
         OnSig = (SigOnPos0Avrg + SigOnPos1Avrg)/2
         OffSig = (SigOffPos0Avrg + SigOffPos1Avrg)/2

         SrcPosRef = (RefOnPos0Avrg + RefOffPos0Avrg)/2
         SkyPosRef = (RefOnPos1Avrg + RefOffPos1Avrg)/2
         OnRef = (RefOnPos0Avrg + RefOnPos1Avrg)/2
         OffRef = (RefOffPos0Avrg + RefOffPos1Avrg)/2

         TaSigB1 = (SrcPosSig - Smoothed(SkyPosSig) * SAVGOL[Tcal("Sig", sampler2) / (OnSig - OffSig) ]  
         TaRefB1 = (SrcPosRef - Smoothed(SkyPosRef) * SAVGOL[Tcal("Ref", sampler2) / (OnRef - OffRef) ]  

Then, use the user-specified or default methods to average TaSigB0?, TaSigB1?, TaRefB0?, TaRefB1?. Then, calibrate the average to different units, if requested and per the usual methods of the Get routines.

The user would then repeat the call to getKaNod for each channel and spectral window.

6. Deployment Checklist

This is an add-on algorithm that does not touch any of the GBTIDL infrastructure. Thus, no interactions with the rest of the system are expected.

7. Test Plan

Critical!! ChangeControlCommittee will be reviewing these. Please send a link to this MR to RonMaddalena along with a suggestion for two reviewers when it is ready for CCC review.

Don't forget to include/acquire any additional GBT test time needed outside integration/regression testing! Get your requests in early!

Important! If possible, you should conduct as many of your tests as possible in offline modes and/or with a simulator. We should constantly endeavor to minimize our use of telescope time for testing!

7.1 Internal Testing

This section covers things like unit testing, simulator testing, and any other tests required to make sure this MR is ready for sponsor/integration/regression testing.

7.2 Sponsor Testing

This section is for the sponsor. What do you need to do in order to ensure that the MR is complete and correct? These tests are the prerequisite for sign off for the "accepted/delivered by sponsor" item in the "signatures" section.

7.3 Integration/Regression Tests

What do the integration/regression testers need to do in order to test this MR.


Signatures

APPROVED: I acknowledge that my request is fully contained in this MR, and if the SDD delivers exactly what I specified, I will be happy.

ACCEPTED: I acknowledge that I have validated the completed code according to the acceptance tests, and I am happy with the results.

Written ALERT! - RonMaddalena - 16 Aug 2007
Checked symbol - name - date
Approved by Sponsor symbol - name - date
Approved by CCC symbol - name - date
Accepted/Delivered by Sponsor symbol - name - date

Symbols:


CCC Discussion Area

-- RonMaddalena - 16 Aug 2007

Topic ModificationRequest5C507 . { Edit | Attach | Ref-By | Printable | Diffs | r1.3 | > | r1.2 | > | r1.1 | More }
Revision r1.3 - 28 Aug 2007 - 19:11 GMT - BobGarwood
Parents: PlanOfRecordC52007
Content copyright © 1999-2007 by the contributing authors.
All material on this collaboration platform is the property of the contributing authors.