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; } }
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); } } }