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); } } }
void Box::AllocateChildren() const { ChildrenCont::const_iterator iter( m_children.begin() ); ChildrenCont::const_iterator iterend( m_children.end() ); unsigned int num_expand( 0 ); unsigned int num_visible( 0 ); // Count number of visible and expanded children. for( ; iter != iterend; ++iter ) { if( !IsChildInteresting( iter->widget ) ) { continue; } ++num_visible; if( iter->expand ) { ++num_expand; } } // Calculate extra width pre expanded widget. float extra( 0.f ); if( num_expand > 0 ) { if( m_orientation == HORIZONTAL ) { extra = std::max( 0.f, GetAllocation().width - GetRequisition().x ) / static_cast<float>( num_expand ); } else { extra = std::max( 0.f, GetAllocation().height - GetRequisition().y ) / static_cast<float>( num_expand ); } } // Allocate children. float gap( Context::Get().GetEngine().GetProperty<float>( "Gap", shared_from_this() ) ); sf::Vector2f allocation( 0.f, 0.f ); sf::Vector2f position( gap, gap ); for( iter = m_children.begin(); iter != iterend; ++iter ) { if( !IsChildInteresting( iter->widget ) ) { continue; } if( m_orientation == HORIZONTAL ) { allocation.x = iter->widget->GetRequisition().x + (iter->expand ? extra : 0.f); allocation.y = GetAllocation().height - 2 * gap; iter->widget->SetAllocation( sf::FloatRect( position.x, position.y, allocation.x - (iter->expand && !iter->fill ? extra : 0.f), allocation.y ) ); position.x += allocation.x + GetSpacing(); } else { allocation.x = GetAllocation().width - 2 * gap; allocation.y = iter->widget->GetRequisition().y + (iter->expand ? extra : 0.f); iter->widget->SetAllocation( sf::FloatRect( position.x, position.y, allocation.x, allocation.y - (iter->expand && !iter->fill ? extra : 0.f) ) ); position.y += allocation.y + GetSpacing(); } --num_visible; } }
sf::Vector2f Box::CalculateRequisition() { sf::Vector2f requisition( 0.f, 0.f ); unsigned int num_visible( 0 ); ChildrenCont::const_iterator iter( m_children.begin() ); ChildrenCont::const_iterator iterend( m_children.end() ); for( ; iter != iterend; ++iter ) { if( !IsChildInteresting( iter->widget ) ) { continue; } ++num_visible; sf::Vector2f child_requisition( iter->widget->GetRequisition() ); if( m_orientation == HORIZONTAL ) { requisition.x += child_requisition.x; requisition.y = std::max( requisition.y, child_requisition.y ); } else { requisition.x = std::max( requisition.x, child_requisition.x ); requisition.y += child_requisition.y; } } if( num_visible > 1 ) { if( m_orientation == HORIZONTAL ) { requisition.x += static_cast<float>( num_visible - 1 ) * GetSpacing(); } else { requisition.y += static_cast<float>( num_visible - 1 ) * GetSpacing(); } } float gap( Context::Get().GetEngine().GetProperty<float>( "Gap", shared_from_this() ) ); requisition.x += 2 * gap; requisition.y += 2 * gap; return requisition; }