Loading...
Searching...
No Matches
MSConcat.h
Go to the documentation of this file.
//# MSConcat.h: A class for concatenating MeasurementSets.
//# Copyright (C) 2000,2002,2003
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//# Internet email: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef MS_MSCONCAT_H
#define MS_MSCONCAT_H
#include <casacore/casa/aips.h>
#include <casacore/ms/MeasurementSets/MSColumns.h>
#include <casacore/ms/MeasurementSets/MeasurementSet.h>
#include <casacore/casa/Arrays/IPosition.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
class TableDesc;
class MSMainColumns;
class MSDataDescColumns;
class MSSpWindowColumns;
class MSPolarizationColumns;
class MSAntenna;
class MSDataDescription;
class MSFeed;
class MSField;
class MSPolarization;
class MSSpectralWindow;
template <class T> class Block;
// <summary>A class with functions for concatenating MeasurementSets</summary>
// <use visibility=export>
// <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
// </reviewed>
// <prerequisite>
// </prerequisite>
//
// <etymology>
// </etymology>
//
// <synopsis>
// </synopsis>
//
// <example>
// </example>
//
// <motivation>
// </motivation>
//
// <todo asof="yyyy/mm/dd">
// </todo>
class MSConcat: public MSColumns
{
public:
MSConcat(MeasurementSet& ms);
void virtualconcat(MeasurementSet& otherMS,
const Bool checkShapeAndCateg=True,
const String& obsidAndProcAndScanTableName="");
void concatenate(const MeasurementSet& otherMS,
const uInt handling=0, //# 0 (default): complete concat of all tables
//# 1 : don't concatenate the MAIN table
//# 2 : don't concatenate the POINTING table
//# 3 : neither concat MAIN nor POINTING table
const String& destMSName=""); //# support for virtual concat
void setTolerance(Quantum<Double>& freqTol, Quantum<Double>& dirTol);
void setWeightScale(const Float weightScale);
void setRespectForFieldName(const Bool respectFieldName); //# If True, fields of same direction are not merged
//# if their name is different
private:
MSConcat();
static IPosition isFixedShape(const TableDesc& td);
static IPosition getShape(const MSDataDescColumns& ddCols,
const MSSpWindowColumns& spwCols,
const MSPolarizationColumns& polCols,
uInt whichShape);
void checkShape(const IPosition& otherShape) const;
void checkCategories(const MSMainColumns& otherCols) const;
Bool checkEphIdInField(const MSFieldColumns& otherFldCol) const;
Bool copyPointing(const MSPointing& otherPoint, const Block<uInt>& newAntIndices);
Bool copyPointingB(MSPointing& otherPoint, const Block<uInt>& newAntIndices);
Bool copySysCal(const MSSysCal& otherSysCal, const Block<uInt>& newAndIndices);
Bool copyWeather(const MSWeather& otherWeather, const Block<uInt>& newAndIndices);
Bool copyGainCurve(const MeasurementSet& otherMS, const Block<uInt>& newAndIndices);
Bool copyPhaseCal(const MeasurementSet& otherMS, const Block<uInt>& newAndIndices);
Bool copyEOP(const MeasurementSet& otherMS);
Int copyObservation(const MSObservation& otherObs, const Bool remRedunObsId=True);
//# by default remove redundant observation table rows
Int copyProcessor(const MSProcessor& otherObs, const Bool remRedunProcId=True);
//# by default remove redundant processor table rows
Block<uInt> copyAntennaAndFeed(const MSAntenna& otherAnt,
const MSFeed& otherFeed);
Block<uInt> copyState(const MSState& otherState);
Block<uInt> copyField(const MeasurementSet& otherms);
Block<uInt> copySpwAndPol(const MSSpectralWindow& otherSpw,
const MSPolarization& otherPol,
const MSDataDescription& otherDD);
Bool copySource(const MeasurementSet& otherms);
Bool updateSource();
Bool updateSource2();
Bool sourceRowsEquivalent(const MSSourceColumns& sourceCol,
const rownr_t& rowi, const rownr_t& rowj,
const Bool dontTestDirection=False,
const Bool dontTestTransAndRest=False);
Bool obsRowsEquivalent(const MSObservationColumns& obsCol,
const rownr_t& rowi, const rownr_t& rowj);
Bool procRowsEquivalent(const MSProcessorColumns& procCol,
const uInt& rowi, const uInt& rowj);
void updateModelDataKeywords(MeasurementSet& ms);
MeasurementSet itsMS;
IPosition itsFixedShape;
Quantum<Double> itsFreqTol;
Quantum<Double> itsDirTol;
Float itsWeightScale;
Bool itsRespectForFieldName;
Vector<Bool> itsChanReversed;
std::map <Int, Int> newSourceIndex_p;
std::map <Int, Int> newSourceIndex2_p;
std::map <Int, Int> newSPWIndex_p;
std::map <Int, Int> newObsIndexA_p;
std::map <Int, Int> newObsIndexB_p;
std::map <Int, Int> otherObsIdsWithCounterpart_p;
std::map <Int, Int> newProcIndexA_p;
std::map <Int, Int> newProcIndexB_p;
std::map <Int, Int> solSystObjects_p;
Bool doSource_p;
Bool doSource2_p;
Bool doSPW_p;
Bool doObsA_p;
Bool doObsB_p;
Bool doProcA_p;
Bool doProcB_p;
};
template<class T>
Bool areEQ(const ScalarColumn<T>& col, rownr_t row_i, rownr_t row_j)
{
T value_i, value_j;
col.get(row_i, value_i);
col.get(row_j, value_j);
return (value_i == value_j);
}
template<class T>
Bool areEQ(const ArrayColumn<T>& col, rownr_t row_i, rownr_t row_j)
{
Bool rval(False);
Array<T> arr_i;
Array<T> arr_j;
col.get(row_i, arr_i, True);
col.get(row_j, arr_j, True);
size_t ni = arr_i.nelements();
size_t nj = arr_j.nelements();
if( (ni==0 && nj==0) || // no data is regarded as equal
allEQ(arr_i, arr_j)){
rval = True;
}
return rval;
}
inline Int getMapValue (const std::map<Int,Int>& m, Int k)
{
auto iter = m.find(k);
return (iter == m.end() ? -1 : iter->second);
}
} //# NAMESPACE CASACORE - END
#endif
casacore::ArrayBase::nelements
size_t nelements() const
How many elements does this array have?
Definition ArrayBase.h:101
casacore::ArrayColumn
Definition ArrayColumn.h:98
casacore::ArrayColumn::get
void get(rownr_t rownr, Array< T > &array, Bool resize=False) const
Get the array value in a particular cell (i.e.
casacore::Array
Definition Array.h:155
casacore::Block
Definition Block.h:140
casacore::IPosition
Definition IPosition.h:117
casacore::MSAntenna
Definition MSAntenna.h:78
casacore::MSColumns::MSColumns
MSColumns(const MeasurementSet &ms)
Create a columns object that accesses the data in the specified MS.
casacore::MSConcat::newProcIndexB_p
std::map< Int, Int > newProcIndexB_p
Definition MSConcat.h:154
casacore::MSConcat::copyPointing
Bool copyPointing(const MSPointing &otherPoint, const Block< uInt > &newAntIndices)
casacore::MSConcat::sourceRowsEquivalent
Bool sourceRowsEquivalent(const MSSourceColumns &sourceCol, const rownr_t &rowi, const rownr_t &rowj, const Bool dontTestDirection=False, const Bool dontTestTransAndRest=False)
casacore::MSConcat::updateModelDataKeywords
void updateModelDataKeywords(MeasurementSet &ms)
casacore::MSConcat::newObsIndexA_p
std::map< Int, Int > newObsIndexA_p
Definition MSConcat.h:150
casacore::MSConcat::checkCategories
void checkCategories(const MSMainColumns &otherCols) const
casacore::MSConcat::copyField
Block< uInt > copyField(const MeasurementSet &otherms)
casacore::MSConcat::setWeightScale
void setWeightScale(const Float weightScale)
casacore::MSConcat::updateSource
Bool updateSource()
casacore::MSConcat::MSConcat
MSConcat()
casacore::MSConcat::doProcB_p
Bool doProcB_p
Definition MSConcat.h:163
casacore::MSConcat::checkShape
void checkShape(const IPosition &otherShape) const
casacore::MSConcat::doSource_p
Bool doSource_p
Definition MSConcat.h:157
casacore::MSConcat::copySpwAndPol
Block< uInt > copySpwAndPol(const MSSpectralWindow &otherSpw, const MSPolarization &otherPol, const MSDataDescription &otherDD)
casacore::MSConcat::newSourceIndex_p
std::map< Int, Int > newSourceIndex_p
Definition MSConcat.h:147
casacore::MSConcat::itsFreqTol
Quantum< Double > itsFreqTol
Definition MSConcat.h:142
casacore::MSConcat::newSPWIndex_p
std::map< Int, Int > newSPWIndex_p
Definition MSConcat.h:149
casacore::MSConcat::otherObsIdsWithCounterpart_p
std::map< Int, Int > otherObsIdsWithCounterpart_p
Definition MSConcat.h:152
casacore::MSConcat::solSystObjects_p
std::map< Int, Int > solSystObjects_p
Definition MSConcat.h:155
casacore::MSConcat::doObsA_p
Bool doObsA_p
Definition MSConcat.h:160
casacore::MSConcat::newSourceIndex2_p
std::map< Int, Int > newSourceIndex2_p
Definition MSConcat.h:148
casacore::MSConcat::doProcA_p
Bool doProcA_p
Definition MSConcat.h:162
casacore::MSConcat::copyObservation
Int copyObservation(const MSObservation &otherObs, const Bool remRedunObsId=True)
casacore::MSConcat::itsRespectForFieldName
Bool itsRespectForFieldName
Definition MSConcat.h:145
casacore::MSConcat::checkEphIdInField
Bool checkEphIdInField(const MSFieldColumns &otherFldCol) const
casacore::MSConcat::copyState
Block< uInt > copyState(const MSState &otherState)
casacore::MSConcat::itsDirTol
Quantum< Double > itsDirTol
Definition MSConcat.h:143
casacore::MSConcat::doSource2_p
Bool doSource2_p
Definition MSConcat.h:158
casacore::MSConcat::itsMS
MeasurementSet itsMS
Definition MSConcat.h:140
casacore::MSConcat::copyWeather
Bool copyWeather(const MSWeather &otherWeather, const Block< uInt > &newAndIndices)
casacore::MSConcat::itsChanReversed
Vector< Bool > itsChanReversed
Definition MSConcat.h:146
casacore::MSConcat::doObsB_p
Bool doObsB_p
Definition MSConcat.h:161
casacore::MSConcat::getShape
static IPosition getShape(const MSDataDescColumns &ddCols, const MSSpWindowColumns &spwCols, const MSPolarizationColumns &polCols, uInt whichShape)
casacore::MSConcat::virtualconcat
void virtualconcat(MeasurementSet &otherMS, const Bool checkShapeAndCateg=True, const String &obsidAndProcAndScanTableName="")
casacore::MSConcat::concatenate
void concatenate(const MeasurementSet &otherMS, const uInt handling=0, const String &destMSName="")
casacore::MSConcat::copyPhaseCal
Bool copyPhaseCal(const MeasurementSet &otherMS, const Block< uInt > &newAndIndices)
casacore::MSConcat::doSPW_p
Bool doSPW_p
Definition MSConcat.h:159
casacore::MSConcat::copyProcessor
Int copyProcessor(const MSProcessor &otherObs, const Bool remRedunProcId=True)
casacore::MSConcat::copyAntennaAndFeed
Block< uInt > copyAntennaAndFeed(const MSAntenna &otherAnt, const MSFeed &otherFeed)
casacore::MSConcat::copySysCal
Bool copySysCal(const MSSysCal &otherSysCal, const Block< uInt > &newAndIndices)
casacore::MSConcat::setRespectForFieldName
void setRespectForFieldName(const Bool respectFieldName)
casacore::MSConcat::setTolerance
void setTolerance(Quantum< Double > &freqTol, Quantum< Double > &dirTol)
casacore::MSConcat::itsFixedShape
IPosition itsFixedShape
Definition MSConcat.h:141
casacore::MSConcat::updateSource2
Bool updateSource2()
casacore::MSConcat::procRowsEquivalent
Bool procRowsEquivalent(const MSProcessorColumns &procCol, const uInt &rowi, const uInt &rowj)
casacore::MSConcat::obsRowsEquivalent
Bool obsRowsEquivalent(const MSObservationColumns &obsCol, const rownr_t &rowi, const rownr_t &rowj)
casacore::MSConcat::copySource
Bool copySource(const MeasurementSet &otherms)
casacore::MSConcat::copyPointingB
Bool copyPointingB(MSPointing &otherPoint, const Block< uInt > &newAntIndices)
casacore::MSConcat::isFixedShape
static IPosition isFixedShape(const TableDesc &td)
casacore::MSConcat::MSConcat
MSConcat(MeasurementSet &ms)
casacore::MSConcat::newObsIndexB_p
std::map< Int, Int > newObsIndexB_p
Definition MSConcat.h:151
casacore::MSConcat::copyEOP
Bool copyEOP(const MeasurementSet &otherMS)
casacore::MSConcat::itsWeightScale
Float itsWeightScale
Definition MSConcat.h:144
casacore::MSConcat::copyGainCurve
Bool copyGainCurve(const MeasurementSet &otherMS, const Block< uInt > &newAndIndices)
casacore::MSConcat::newProcIndexA_p
std::map< Int, Int > newProcIndexA_p
Definition MSConcat.h:153
casacore::MSDataDescColumns
Definition MSDataDescColumns.h:73
casacore::MSDataDescription
Definition MSDataDescription.h:78
casacore::MSFeed
Definition MSFeed.h:77
casacore::MSFieldColumns
Definition MSFieldColumns.h:86
casacore::MSField
Definition MSField.h:77
casacore::MSMainColumns
Definition MSMainColumns.h:104
casacore::MSObservationColumns
Definition MSObsColumns.h:79
casacore::MSObservation
Definition MSObservation.h:77
casacore::MSPointing
Definition MSPointing.h:77
casacore::MSPolarizationColumns
Definition MSPolColumns.h:73
casacore::MSPolarization
Definition MSPolarization.h:77
casacore::MSProcessorColumns
Definition MSProcessorColumns.h:70
casacore::MSProcessor
Definition MSProcessor.h:76
casacore::MSSourceColumns
Definition MSSourceColumns.h:87
casacore::MSSpWindowColumns
Definition MSSpWindowColumns.h:81
casacore::MSSpectralWindow
Definition MSSpectralWindow.h:77
casacore::MSState
Definition MSState.h:78
casacore::MSSysCal
Definition MSSysCal.h:77
casacore::MSWeather
Definition MSWeather.h:77
casacore::MeasurementSet
Definition MeasurementSet.h:278
casacore::Quantum
Definition Quantum.h:269
casacore::ScalarColumn
Definition ScalarColumn.h:83
casacore::ScalarColumn::get
void get(rownr_t rownr, T &value) const
Get the data from a particular cell (i.e.
Definition ScalarColumn.h:135
casacore::String
String: the storage and methods of handling collections of characters.
Definition String.h:223
casacore::TableDesc
Definition TableDesc.h:189
casacore::Vector
Definition Vector.h:82
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::False
const Bool False
Definition aipstype.h:42
casacore::uInt
unsigned int uInt
Definition aipstype.h:49
casacore::Float
float Float
Definition aipstype.h:52
casacore::getMapValue
Int getMapValue(const std::map< Int, Int > &m, Int k)
Definition MSConcat.h:194
casacore::Int
int Int
Definition aipstype.h:48
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
casacore::True
const Bool True
Definition aipstype.h:41
casacore::areEQ
Bool areEQ(const ScalarColumn< T > &col, rownr_t row_i, rownr_t row_j)
Definition MSConcat.h:168
casacore::rownr_t
uInt64 rownr_t
Define the type of a row number in a table.
Definition aipsxtype.h:44