Ejemplo n.º 1
0
void TimeFrequencyImager::initializePolarizations()
{
	casa::MeasurementSet ms(_measurementSet->Location());
	casa::Table polTable = ms.polarization();
	casa::ArrayColumn<int> corTypeColumn(polTable, "CORR_TYPE"); 
	casa::Array<int> corType = corTypeColumn(0);
	casa::Array<int>::iterator iterend(corType.end());
	_xxIndex = -1, _xyIndex = -1, _yxIndex = -1, _yyIndex = -1; _stokesIIndex = -1;
	int polarizationCount = 0;
	for (casa::Array<int>::iterator iter=corType.begin(); iter!=iterend; ++iter)
	{
		switch(*iter) {
			case 1: _stokesIIndex = polarizationCount; break;
			case 5:
			case 9: _xxIndex = polarizationCount; break;
			case 6:
			case 10: _xyIndex = polarizationCount; break;
			case 7:
			case 11: _yxIndex = polarizationCount; break;
			case 8:
			case 12: _yyIndex = polarizationCount; break;
			default:
			{
				std::stringstream s;
				s << "There is a polarization in the measurement set that I can not handle (" << *iter << ", polarization index " << polarizationCount << ").";
				throw std::runtime_error(s.str());
			}
		}
		++polarizationCount;
  }
}
Ejemplo n.º 2
0
void BaselineReader::initializePolarizations()
{
	if(_polarizations.empty())
	{
		casacore::MeasurementSet ms(_measurementSet.Path());
		
		casacore::MSDataDescription ddTable = ms.dataDescription();
		if(ddTable.nrow() == 0)
			throw std::runtime_error("DataDescription table is empty");
		casacore::ROScalarColumn<int> polIdColumn(ddTable, casacore::MSDataDescription::columnName(casacore::MSDataDescription::POLARIZATION_ID));
		int polarizationId = polIdColumn(0);
		for(size_t row=0; row!=ddTable.nrow(); ++row)
		{
			if(polIdColumn(row) != polarizationId)
				throw std::runtime_error("This measurement set has different polarizations listed in the datadescription table. This is non-standard, and AOFlagger cannot handle it.");
		}
		
		casacore::Table polTable = ms.polarization();
		casacore::ROArrayColumn<int> corTypeColumn(polTable, "CORR_TYPE"); 
		casacore::Array<int> corType = corTypeColumn(polarizationId);
		casacore::Array<int>::iterator iterend(corType.end());
		for (casacore::Array<int>::iterator iter=corType.begin(); iter!=iterend; ++iter)
		{
			PolarizationEnum polarization = Polarization::AipsIndexToEnum(*iter);
			_polarizations.push_back(polarization);
		}
	}
}