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