Пример #1
0
//////////////////////////// 
//  GET    MAX    BIN      COLS
uint16_t CcdAcqParams::GetMaxBinCols()
{
    //max number of binning columns is the number
    //of roi binning patterns, this number may differ
    //based on adc speed and ccd readout;
    if( CcdAcqParams::QUAD_READOUT == GetReadoutType() )
    {
        return 1;
    }

    uint16_t  max = 1;
    switch( m_speed )
    {
        case Apg::AdcSpeed_Fast:
            max = GetMaxFastBinCols();
        break;

        case Apg::AdcSpeed_Normal: 
            max = GetMaxNormalBinCols();
        break;

        default:
            max = 1;
        break;
    }

    return max;
}
Пример #2
0
//////////////////////////// 
//  SET   ADC      SPEED
void AltaCcdAcqParams::SetSpeed( const Apg::AdcSpeed speed )
{
    // Reset the camera
    m_CamIo->Reset( false );

    switch( speed )
    {
        case Apg::AdcSpeed_Fast:
            //checking pre-conditions
            if( CamCfg::ApnAdType_Alta_Twelve != m_CamData->m_MetaData.AlternativeADType)
            {
                std::stringstream msg;
                msg << "Invalid adc type " << m_CamData->m_MetaData.AlternativeADType;
                msg << " for 12bit conversion.";
                apgHelper::throwRuntimeException(m_fileName, msg.str(), 
                    __LINE__, Apg::ErrorType_InvalidOperation );
            }

            if( CamModel::ETHERNET == m_CamIo->GetInterfaceType() )
            {
                 std::string vinfo = apgHelper::mkMsg( m_fileName, 
                    "Apg::Resolution_TwelveBit not supported on alta ethernet interface.", 
                    __LINE__);
                ApgLogger::Instance().Write(ApgLogger::LEVEL_RELEASE,"warn",vinfo);

                //exit here...
                return;
            }

            //ensure the number of cols to bin are ok
            if( GetNumCols2Bin() > GetMaxFastBinCols() )
            {
                std::stringstream msg;
                msg << "Reseting imaging columns to " << GetMaxFastBinCols();
                msg << " because current bin value of " << GetNumCols2Bin();
                msg << " is not supported in fast mode.";
                std::string vinfo = apgHelper::mkMsg( m_fileName, msg.str(), __LINE__);
                ApgLogger::Instance().Write(ApgLogger::LEVEL_RELEASE,"warn",vinfo);

                SetNumCols2Bin( GetMaxFastBinCols() );
            }

            m_CamIo->ReadOrWriteReg(CameraRegs::OP_A, 
                CameraRegs::OP_A_DIGITIZATION_RES_BIT);
        break;

        case Apg::AdcSpeed_Normal:
            //checking pre-conditions
            if( CamCfg::ApnAdType_Alta_Sixteen != m_CamData->m_MetaData.PrimaryADType )
            {
                std::stringstream msg;
                msg << "Invalid adc type " << m_CamData->m_MetaData.PrimaryADType;
                msg << " for 16bit conversion.";
                apgHelper::throwRuntimeException(m_fileName, msg.str(), 
                    __LINE__, Apg::ErrorType_InvalidOperation );
            }

             //ensure the number of cols to bin are ok
            if( GetNumCols2Bin() > GetMaxNormalBinCols() )
            {
                std::stringstream msg;
                msg << "Reseting imaging columns to " << GetMaxNormalBinCols();
                msg << " because current bin value of " << GetNumCols2Bin();
                msg << " is not supported in nomral mode.";
                std::string vinfo = apgHelper::mkMsg( m_fileName, msg.str(), __LINE__);
                ApgLogger::Instance().Write(ApgLogger::LEVEL_RELEASE,"warn",vinfo);

                SetNumCols2Bin( GetMaxNormalBinCols() );
            }

            m_CamIo->ReadAndWriteReg( CameraRegs::OP_A, 
                    static_cast<uint16_t>(~CameraRegs::OP_A_DIGITIZATION_RES_BIT) );
        break;

        default:
        {
            std::stringstream msg;
            msg << "Invalid adc speed " << speed;
            apgHelper::throwRuntimeException( m_fileName, msg.str(), 
                __LINE__, Apg::ErrorType_InvalidUsage );
        }
        break;
    }

    // reload all of the pattern files for given speed and binning
    // not 100% sure if we still need to this, because we are only
    // loading the roi for the given speed in gen2 cameras (Ascent, AltaF, AltaG)
    // but this was what was done before so not going to change it now
    CcdAcqParams::LoadAllPatternFiles( speed, GetNumCols2Bin() );

     // Reset the camera and start flushing
    m_CamIo->Reset( true );

    //store the speed value
    m_speed = speed;

    //resoultion and speed are tied together
    m_AdcRes = ( Apg::AdcSpeed_Fast == speed ?  
        Apg::Resolution_TwelveBit : Apg::Resolution_SixteenBit);
}