At the multicast udp stream
Each physical tile is assigned a ‘Tile id’. The tile id is a number from 0 to 32767 inclusive. The tile id is linked to an X,Y,Z field location in the M&C database. Should a physical tile have its digitizer chain moved to a different set of electronics, the tile id always remains with the physical tile.
Tile Ids are not assigned consecutively. Gaps are left in the numbers and number ranges are assigned for Hex tiles, Long Baseline tiles etc.
Digitizer chains that broadcast compatible multicast udp packets, whether they be RRI receivers with media converters, SNAP boards, National Instruments units or anything else, must be able to be configured to send such a tile id and update it as field wiring and layout changes dictate.
When digitiser and coarse PFB hardware transmits multicast UDP packets for a tile, each packet contains the tile id and the polarisation in the header to identify the source tile and polarisation the data was collected from.
Each coarse channel is broadcast to a different broadcast address.
At the correlator front end
Correlator front end servers join the multicast group for the coarse channels they are responsible for correlating.
As multicast udp packets are received, they are placed in a packed “voltage buffer” in preparation for passing to the fine channelizer and X-Stage. The mapping of ‘tile id’ to the packing order for the voltage buffer determines the output visibility ordering out of the correlator for that observation.
Every observation is associated with a metafits file. Within the metafits, there is a binary table extension (a ‘BINTABLE’) called ‘TILEDATA’ which contains information on all tiles that are to be included in the observation.
There is a row (AXIS2) for each signal chain. I.e. a separate row for each of X and Y polarisation.
That row contains three table fields relevant to ordering:
“Tile” contains the tile id number from 0 to 32767 inclusive described above.
“Pol” contains the polarisation “X” or “Y”.
“Antenna” contains the voltage buffer order that will lead to the visibility output order.
For the new correlator, the order in which tiles/rows appear in the metafits table is not considered or used. Only the values of those three fields.
The voltage buffer ordering will be:
Antenna 0 polarisation X
Antenna 0 polarisation Y
Antenna 1 polarisation X
Antenna 1 polarisation Y
Antenna 2 polarisation X
Antenna 2 polarisation Y
… through to the final antenna in this observation. Assuming n tiles, that would be:
Antenna (n-1) polarisation X
Antenna (n-1) polarisation Y
At the visibility output
Each visibility contains the correlation products between two tiles. A single visibility consists of four complex single precision floats. A total of 32 Bytes. Ordering within the visibility is XX, XY, YX, YY.
For n Tiles, there will be n(n+1)/2 baselines.
Ordering is as follows:
Antenna 0 * Antenna 0
Antenna 0 * Antenna 1
Antenna 0 * Antenna 2
…
Antenna 0 * Antenna (n-1)
Antenna 1 * Antenna 1
Antenna 1 * Antenna 2
…
Antenna 1 * Antenna (n-1)
Antenna 2 * Antenna 2
Antenna 2 * Antenna 3
…
Antenna 3 * Antenna (n-1)
…
…
Antenna (n-1) * Antenna (n-1)
where it is the second antenna in each pairing that is conjugated when computing the visibility.
For n tiles, and antenna numbers beginning with zero, the zero based offset of the visibility for Antenna A * Antenna B will be at : n * A - (A*A+A)/2 + B
It is important to remember that “Antenna 0” is whichever Tile_id in the metafits file has the “Antenna” field set equal to 0 for this observation. This is *not* the zeroth row of the metafits tile table. This is *not* the tile with Tile id=0.
To efficiently map from antenna order back to the tile id, it is necessary to generate a backward lookup table for that observation’s tile list. When generating the lookup table it is important to remember that each tile will have two entries, one each for each polarization.
The number of tiles, and the order of antennas can change on any observation boundary. It will not change during an observation.
A less computational efficient method of calculating the Antenna A and Antenna B numbers from the offset of the visibility in the table "offset" , and knowing the number of tiles "n" in the observation that does not require table pre-computation is as follows:
Antenna_A = int( ( -0.5 * sqrt( 4*n*n + 4*n - 8*offset + 1 ) + n + 1/2 ) )
Antenna_B = Offset - ( Antenna_A * n - (Antenna_A * Antenna_A + Antenna_A) /2 )