MSTileLayout.h

Classes

MSTileLayout -- An helper class for deciding on tile shapes in MeasurementSets (full description)

class MSTileLayout

Types

enum ObsType

Standard = 0
Standard, optimizes i/o by using large tiles (128 kB)
FastMosaic = 1
Fast Mosaic, specify this if you have many (>30) fields and you spend only a few integrations per pointing before moving on. Avoids useless i/o caching by using small tiles

Interface

Public Members
static IPosition tileShape(const IPosition& dataShape, Int observationType = Standard, Int nIfr = 0, Int nInt = 1)
static IPosition tileShape(const IPosition& dataShape, Int observationType, const String& array)

Description

Prerequisite

Etymology

MSTileLayout stands for the MeasurementSet tile layout chooser

Synopsis

MSTileLayout is a class to determine an appropriate tile shape choice for the MeasurementSet DATA columns, based on the shape of the DATA, the observing mode and the number of interferometers

Example

    // The following code returns the tile shape given the DATA shape,
    // the observing type and the array name.
    IPosition dataShape(2,4,1024); // 4 polarizations, 1024 channels
    IPosition tileShape = MSTileLayout::tileShape(dataShape,
                                                  MSTileLayout::FastMosaic,
                                                  "ATCA");
    cout << "tileShape = "<< tileShape << endl;
    // Output is: 
    tileShape = (4,11,15)
    

Motivation

This class is intended to replace bits of code scattered throughout various fillers and collect all tiling decisions in one place.

To Do

Member Description

enum ObsType

static IPosition tileShape(const IPosition& dataShape, Int observationType = Standard, Int nIfr = 0, Int nInt = 1)

Suggest tile shape based on the data shape, the observing mode, the number of interferometers and the number of integrations per pointing.

First argument should be a 2-dimensional IPosition with the data matrix shape. The second argument is one of the enums above specifying the type of observation. The third argument is an estimate of the number of interferometers present throughout most of the data. The last argument is an estimate of the number of integrations per pointing.

The last three arguments only need to be specified if the observing mode is non Standard. Basically the choice is between large tiles for efficient I/O and small tiles when a common access pattern (field_id order) would result in very inefficient caching. The latter occurs for large tiles if the field_id changes rapidly AND there are many fields AND the data matrix is small (e.g., continuum mosaic of a large area with only one or two integrations per pointing). Note that accessing fast mosaic data with large tiles in field_id order can be 10-100 times slower than sequential access.

static IPosition tileShape(const IPosition& dataShape, Int observationType, const String& array)

same as above, but pick standard nIfr (number of interferometers) for named array and default nInt.