LCConcatenation.h

Classes

LCConcatenation -- Combine multiple LCRegion's into a new dimension. (full description)

class LCConcatenation: public LCRegionMulti

Interface

Public Members
LCConcatenation()
LCConcatenation (Bool takeOver, const PtrBlock<const LCRegion*>& regions, Int extendAxis)
LCConcatenation (Bool takeOver, const PtrBlock<const LCRegion*>& regions, Int extendAxis, const LCBox& extendRange)
LCConcatenation (const LCConcatenation& other)
virtual ~LCConcatenation()
LCConcatenation& operator= (const LCConcatenation& other)
virtual Bool operator== (const LCRegion& other) const
virtual LCRegion* cloneRegion() const
Int extendAxis() const
const LCBox& extendBox() const
static String className()
virtual String type() const
virtual TableRecord toRecord (const String& tableName) const
static LCConcatenation* fromRecord (const TableRecord&, const String& tableName)
Protected Members
virtual LCRegion* doTranslate (const Vector<Float>& translateVector, const IPosition& newLatticeShape) const
virtual void multiGetSlice (Array<Bool>& buffer, const Slicer& section)
virtual IPosition doNiceCursorShape (uInt maxPixels) const
Private Members
void fillRegionAxes()
void fill()

Description

Prerequisite

Synopsis

The LCConcatenation class is a specialization of class LCRegion. It makes it possible to combine multiple LCRegion's and to add a dimension on them. The range (beginning and end) in that new dimension have to be specified using an LCBox object. When the LCBox is complete, it will be checked if the given number of regions matches the length of the given range (so it could only be done after the makeComplete call). Using a fractional box does not make much sense, because it results in a varying length range when used with varying shaped lattices. However, one can use it if wanted.
LCConcatenation can be seen as a mixture of the classes LCUnion and LCExtension. Like LCUnion it combines regions and like LCExtension it increases the dimensionality for the new region (be it with only 1).
E.g. One can define a different polygon in the RA-DEC plane of each channel. LCConcatenation makes it possible to combine the polygons to one 3D region in the RA-DEC-Freq cube.

Example

This example combines n (relative) circles given in the x-z plane along the y-axis. In this example the regions used are circles with the same centers, but it is also possible to combine differently shaped regions. Note that LCConcatenation takes over the pointers to the individual regions, so they do not need to be deleted (the LCConcatenation destructor does it).
    IPosition center (2,10,20);
    PtrBlock<LCRegion*> cirPtr(n);
    for (i=0; i<n; i++) {
      // Each circle has a different radius.
      cirPtr(i) = new LCEllipsoid cir1 (center, 1 + i%(n/2));
    }
    // Construct the concatenation for a range (given as a relative box).
    // Extend along the y-axis (axis numbers start counting at 0!).
    // Take over the region pointers.
    LCConcatenation region (True, cirPtr, 1, LCBox(n/2-n, n/2-1));
    

Member Description

LCConcatenation()

LCConcatenation (Bool takeOver, const PtrBlock<const LCRegion*>& regions, Int extendAxis)
LCConcatenation (Bool takeOver, const PtrBlock<const LCRegion*>& regions, Int extendAxis, const LCBox& extendRange)

Combine the given regions. When takeOver is True, the destructor will delete the given regions. Otherwise a copy of the regions is made. The extend range has to be given as a 1-dimensional box. The default range is the entire axis.

LCConcatenation (const LCConcatenation& other)

Copy constructor (copy semantics).

virtual ~LCConcatenation()

LCConcatenation& operator= (const LCConcatenation& other)

Assignment (copy semantics).

virtual Bool operator== (const LCRegion& other) const

Comparison

virtual LCRegion* cloneRegion() const

Make a copy of the derived object.

Int extendAxis() const

Get the extend axis.

const LCBox& extendBox() const

Get the extend box.

static String className()

Get the class name (to store in the record).

virtual String type() const

Get the region type. Returns the class name.

virtual TableRecord toRecord (const String& tableName) const

Convert the (derived) object to a record.

static LCConcatenation* fromRecord (const TableRecord&, const String& tableName)

Convert correct object from a record.

virtual LCRegion* doTranslate (const Vector<Float>& translateVector, const IPosition& newLatticeShape) const

Construct another LCRegion (for e.g. another lattice) by moving this one. It recalculates the bounding box and mask. A positive translation value indicates "to right".

virtual void multiGetSlice (Array<Bool>& buffer, const Slicer& section)

Do the actual getting of the mask.

virtual IPosition doNiceCursorShape (uInt maxPixels) const

This function is needed here because the niceCursorShape of the contributing region does not make any sense (other dimensionality).

void fillRegionAxes()
void fill()

Fill the object.