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);
		}
	}
}
Example #3
0
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;
    }
}
Example #4
0
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;
}