diff --git a/othersoft/calibration_console/CMakeLists.txt b/othersoft/calibration_console/CMakeLists.txt index 51f1981..7f426f7 100644 --- a/othersoft/calibration_console/CMakeLists.txt +++ b/othersoft/calibration_console/CMakeLists.txt @@ -1,6 +1,19 @@ cmake_minimum_required(VERSION 3.5) project(ocean_optics_calibration_console)#ocean_optics_calibration_console +#编译32位的程序 +#option(USE_32BITS "Compile for 32bits processors(linux only)" OFF) +# +# +#if(USE_32BITS) +# message(STATUS "using 32bits") +# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") +# +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") +#else() +#endif(USE_32BITS) + + set(CMAKE_CXX_STANDARD 14) SET(CMAKE_INSTALL_PREFIX < /home/pi/bin >) @@ -9,17 +22,17 @@ set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) -#set(CMAKE_PREFIX_PATH "/home/iris-xport/Qt5.9.0/5.9/gcc_64/")#tc_add: https://blog.csdn.net/aiyun5666/article/details/101915628 +set(CMAKE_PREFIX_PATH "/home/iris-xport/Qt5.9.0/5.9/gcc_64/")#tc_add: https://blog.csdn.net/aiyun5666/article/details/101915628 set(QT Core Network SerialPort) set(TEMPLATE app) set(TARGET ximeaImageRecorder) set(CMAKE_INCLUDE_CURRENT_DIR ON) find_package(Qt5 REQUIRED ${QT}) -#include_directories(/home/iris-xport/projects/ocean/seabreeze-3.0.11/SeaBreeze/include/) -#LINK_DIRECTORIES(/home/iris-xport/projects/ocean/seabreeze-3.0.11/SeaBreeze/lib/) -include_directories(/home/pi/SeaBrease/include/) -LINK_DIRECTORIES(/home/pi/SeaBrease/lib/) +include_directories(/home/iris-xport/projects/ocean/seabreeze-3.0.11/SeaBreeze/include/) +LINK_DIRECTORIES(/home/iris-xport/projects/ocean/seabreeze-3.0.11/SeaBreeze/lib/) +#include_directories(/home/pi/SeaBrease/include/) +#LINK_DIRECTORIES(/home/pi/SeaBrease/lib/) include_directories(.)#包含头文件 include_directories(/usr/include/eigen3)#包含头文件,安装eigen:sudo apt-get install libeigen3-dev diff --git a/othersoft/calibration_console/Header_Files/ZZ_Types.h b/othersoft/calibration_console/Header_Files/ZZ_Types.h index 779280d..c5e2210 100644 --- a/othersoft/calibration_console/Header_Files/ZZ_Types.h +++ b/othersoft/calibration_console/Header_Files/ZZ_Types.h @@ -13,8 +13,8 @@ namespace ZZ_MISCDEF { typedef unsigned char ZZ_U8; typedef unsigned short int ZZ_U16; - typedef unsigned long int ZZ_U32; - typedef long int ZZ_S32; + typedef unsigned int ZZ_U32; + typedef int ZZ_S32; namespace IRIS @@ -30,8 +30,6 @@ namespace ZZ_MISCDEF double dTimes = 0; }DataFrame; - - typedef struct tagDeviceInfo { std::string strPN; diff --git a/othersoft/calibration_console/Header_Files/calibration.h b/othersoft/calibration_console/Header_Files/calibration.h index 15967d4..f667515 100644 --- a/othersoft/calibration_console/Header_Files/calibration.h +++ b/othersoft/calibration_console/Header_Files/calibration.h @@ -1,7 +1,8 @@ #pragma once #include //#include -#include +#include +#include #include #include @@ -24,7 +25,7 @@ public: CalibrationAlgorithm(); ~CalibrationAlgorithm(); - void readFile(QString filePath, DeviceAttribute deviceAttribute, DeviceInfo deviceInfo); + void readAndResample_StandardLightFile(QString filePath, int integratingSphereDetectorValue, DeviceAttribute deviceAttribute, DeviceInfo deviceInfo);// void produceCalfile(QString calFilePath, DeviceAttribute deviceAttribute, DataFrame integratingSphereData, DataFrame darkData); diff --git a/othersoft/calibration_console/Source_Files/ATPControl_Serial_QT.cpp b/othersoft/calibration_console/Source_Files/ATPControl_Serial_QT.cpp index 4274bc9..1fd9803 100644 --- a/othersoft/calibration_console/Source_Files/ATPControl_Serial_QT.cpp +++ b/othersoft/calibration_console/Source_Files/ATPControl_Serial_QT.cpp @@ -73,17 +73,17 @@ int ZZ_ATPControl_Serial_Qt::Initialize(bool bIsUSBMode, std::string ucPortNumbe GetDeviceInfo(m_diDeviceInfo); GetExposureTime_Init(); - - std::string::size_type szPostion = m_diDeviceInfo.strSN.find(strDeviceName); - if (szPostion == std::string::npos) - { - qDebug() << "Err:FS serial number not match.Exit Code:3"; - return 3; - } - else - { - return 0; - } +// +// std::string::size_type szPostion = m_diDeviceInfo.strSN.find(strDeviceName); +// if (szPostion == std::string::npos) +// { +// qDebug() << "Err:FS serial number not match.Exit Code:3"; +// return 3; +// } +// else +// { +// return 0; +// } return 0; } diff --git a/othersoft/calibration_console/Source_Files/atpFiberImager.cpp b/othersoft/calibration_console/Source_Files/atpFiberImager.cpp index 876ebdf..dbcdb09 100644 --- a/othersoft/calibration_console/Source_Files/atpFiberImager.cpp +++ b/othersoft/calibration_console/Source_Files/atpFiberImager.cpp @@ -97,21 +97,22 @@ void ATPFiberImager::recordDark(QString path) //ɼ֡ singleShot(m_DarkData); - QDateTime curDateTime = QDateTime::currentDateTime(); - QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); - QString fileName = path + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_darkSpectral.csv"; - std::ofstream outfile(fileName.toStdString().c_str()); - - for (int i = 0; i < attribute.iPixels; i++) - { - if (i==0) - { - outfile << m_DarkData.usExposureTimeInMS << std::endl; - } - outfile << attribute.fWaveLengthInNM[i] << "," << m_DarkData.lData[i] << std::endl; - } - - outfile.close(); +// //csv +// QDateTime curDateTime = QDateTime::currentDateTime(); +// QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); +// QString fileName = path + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_darkSpectral.csv"; +// std::ofstream outfile(fileName.toStdString().c_str()); +// +// for (int i = 0; i < attribute.iPixels; i++) +// { +// if (i==0) +// { +// outfile << m_DarkData.usExposureTimeInMS << std::endl; +// } +// outfile << attribute.fWaveLengthInNM[i] << "," << m_DarkData.lData[i] << std::endl; +// } +// +// outfile.close(); } void ATPFiberImager::recordTarget(int recordTimes, QString path) @@ -148,21 +149,23 @@ void ATPFiberImager::recordTarget(int recordTimes, QString path) m_IntegratingSphereData.lData[i] = m_IntegratingSphereData.lData[i] / recordTimes; } - QDateTime curDateTime = QDateTime::currentDateTime(); - QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); - QString fileName = path + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_integratingSphereSpectral.csv"; - std::ofstream outfile(fileName.toStdString().c_str()); - for (int i = 0; i < attribute.iPixels; i++) - { - if (i==0) - { - outfile << m_IntegratingSphereData.usExposureTimeInMS << std::endl; - } - outfile << attribute.fWaveLengthInNM[i] << "," << m_IntegratingSphereData.lData[i] << std::endl; - } - - outfile.close(); +// //csv +// QDateTime curDateTime = QDateTime::currentDateTime(); +// QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); +// QString fileName = path + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_integratingSphereSpectral.csv"; +// std::ofstream outfile(fileName.toStdString().c_str()); +// +// for (int i = 0; i < attribute.iPixels; i++) +// { +// if (i==0) +// { +// outfile << m_IntegratingSphereData.usExposureTimeInMS << std::endl; +// } +// outfile << attribute.fWaveLengthInNM[i] << "," << m_IntegratingSphereData.lData[i] << std::endl; +// } +// +// outfile.close(); } void ATPFiberImager::autoExpose() diff --git a/othersoft/calibration_console/Source_Files/calibration.cpp b/othersoft/calibration_console/Source_Files/calibration.cpp index 8ebeff7..3832faa 100644 --- a/othersoft/calibration_console/Source_Files/calibration.cpp +++ b/othersoft/calibration_console/Source_Files/calibration.cpp @@ -10,7 +10,7 @@ CalibrationAlgorithm::~CalibrationAlgorithm() } -void CalibrationAlgorithm::readFile(QString filePath, DeviceAttribute deviceAttribute, DeviceInfo deviceInfo) +void CalibrationAlgorithm::readAndResample_StandardLightFile(QString filePath, int integratingSphereDetectorValue, DeviceAttribute deviceAttribute, DeviceInfo deviceInfo) { QFile file(filePath); @@ -113,28 +113,28 @@ void CalibrationAlgorithm::readFile(QString filePath, DeviceAttribute deviceAttr - //ضϱ׼ - QFileInfo fileInfo(filePath); - QString standardLightFileFolder = fileInfo.path(); - QString standardLightFileName = fileInfo.fileName(); - - QDateTime curDateTime = QDateTime::currentDateTime(); - QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); - - QString tmp = standardLightFileFolder + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) +"_"+ standardLightFileName + "_truncation.csv"; - - std::ofstream outfile1(tmp.toStdString().c_str()); - - for (size_t i = 0; i < endPos - startPos; i++) - { - if (i == 0) - { - outfile1 << m_dStandardLightDataBase << std::endl; - } - - outfile1 << m_dStandardLightWavelength[i] << "," << m_dStandardLightData[i] << std::endl; - } - outfile1.close(); +// //ضϱ׼csv +// QFileInfo fileInfo(filePath); +// QString standardLightFileFolder = fileInfo.path(); +// QString standardLightFileName = fileInfo.fileName(); +// +// QDateTime curDateTime = QDateTime::currentDateTime(); +// QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); +// +// QString tmp = standardLightFileFolder + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) +"_"+ standardLightFileName + "_truncation.csv"; +// +// std::ofstream outfile1(tmp.toStdString().c_str()); +// +// for (size_t i = 0; i < endPos - startPos; i++) +// { +// if (i == 0) +// { +// outfile1 << m_dStandardLightDataBase << std::endl; +// } +// +// outfile1 << m_dStandardLightWavelength[i] << "," << m_dStandardLightData[i] << std::endl; +// } +// outfile1.close(); @@ -148,18 +148,19 @@ void CalibrationAlgorithm::readFile(QString filePath, DeviceAttribute deviceAttr m_dStandardLightWavelengthResampled = new double[deviceAttribute.iPixels]; m_dStandardLightDataResampled = new double[deviceAttribute.iPixels]; + double dTemp,scaleFactor; + if(integratingSphereDetectorValue <= 0) + scaleFactor=1; + else + scaleFactor=integratingSphereDetectorValue/m_dStandardLightDataBase; - QString outputName = standardLightFileFolder + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_" + standardLightFileName + "_resample.csv"; - std::ofstream outfile2(outputName.toStdString().c_str()); - - double dTemp; for (size_t i = 0; i < deviceAttribute.iPixels; i++) { if (deviceAttribute.fWaveLengthInNM[i] < StandardLightWavelength_tmp[0])//˲ < ׼ļС { dTemp = m_sfLine(StandardLightWavelength_tmp[0]);//??????????????? } - else if (deviceAttribute.fWaveLengthInNM[i] > StandardLightWavelength_tmp[lineCount - 2])//˲ > ׼ļ󲨳 + else if (StandardLightWavelength_tmp[lineCount - 2] < deviceAttribute.fWaveLengthInNM[i])//׼ļ󲨳 < ˲ { dTemp = m_sfLine(StandardLightWavelength_tmp[lineCount - 2]);//??????????????? } @@ -171,16 +172,23 @@ void CalibrationAlgorithm::readFile(QString filePath, DeviceAttribute deviceAttr //double dTemp2 = m_sfLine(deviceAttribute.fWaveLengthInNM[i]);//ûʹ m_dStandardLightWavelengthResampled[i] = deviceAttribute.fWaveLengthInNM[i]; - m_dStandardLightDataResampled[i] = dTemp; + m_dStandardLightDataResampled[i] = dTemp * scaleFactor; + } - if (i == 0) - { - outfile2 << m_dStandardLightDataBase << std::endl; - } - outfile2 << deviceAttribute.fWaveLengthInNM[i] << "," << dTemp << std::endl; - } - outfile2.close(); +// //زı׼csv +// QString outputName = standardLightFileFolder + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_" + standardLightFileName + "_resample.csv"; +// std::ofstream outfile2(outputName.toStdString().c_str()); +// for (size_t i = 0; i < deviceAttribute.iPixels; i++) +// { +// if (i == 0) +// { +// outfile2 << m_dStandardLightDataBase << std::endl; +// } +// +// outfile2 << deviceAttribute.fWaveLengthInNM[i] << "," << dTemp << std::endl; +// } +// outfile2.close(); } void CalibrationAlgorithm::produceCalfile(QString calFilePath, DeviceAttribute deviceAttribute, DataFrame integratingSphereData, DataFrame darkData) @@ -208,9 +216,9 @@ void CalibrationAlgorithm::produceCalfile(QString calFilePath, DeviceAttribute d } //д뵽ļ - FILE *calFileHandle = fopen(calFilePath.toStdString().c_str(), "w+b"); + FILE * calFileHandle = fopen(calFilePath.toStdString().c_str(), "wb"); - writeCounter = fwrite(&integratingSphereData.usExposureTimeInMS, sizeof(ZZ_U32), 1, calFileHandle);//عʱ + writeCounter = fwrite(&integratingSphereData.usExposureTimeInMS,sizeof(ZZ_U32), 1, calFileHandle);//عʱ writeCounter = fwrite(&integratingSphereData.fTemperature, sizeof(float), 1, calFileHandle);//¶ writeCounter = fwrite(&deviceAttribute.iPixels, sizeof(int), 1, calFileHandle);// writeCounter = fwrite(&deviceAttribute.fWaveLengthInNM, sizeof(float), deviceAttribute.iPixels, calFileHandle);// @@ -219,14 +227,15 @@ void CalibrationAlgorithm::produceCalfile(QString calFilePath, DeviceAttribute d fclose(calFileHandle); - //д뵽CSVļ - QString calFile_csv = calFilePath.split(".")[0] + ".csv"; - std::ofstream outfile(calFile_csv.toStdString().c_str()); - for (int i = 0; i < deviceAttribute.iPixels; i++) - { - outfile << deviceAttribute.fWaveLengthInNM[i] << "," << m_gain[i] << std::endl; - } - outfile.close(); + +// //д뵽CSVļ +// QString calFile_csv = calFilePath.split(".")[0] + ".csv"; +// std::ofstream outfile(calFile_csv.toStdString().c_str()); +// for (int i = 0; i < deviceAttribute.iPixels; i++) +// { +// outfile << deviceAttribute.fWaveLengthInNM[i] << "," << m_gain[i] << std::endl; +// } +// outfile.close(); delete[] m_gain; } diff --git a/othersoft/calibration_console/Source_Files/main.cpp b/othersoft/calibration_console/Source_Files/main.cpp index a62316c..986a295 100644 --- a/othersoft/calibration_console/Source_Files/main.cpp +++ b/othersoft/calibration_console/Source_Files/main.cpp @@ -32,6 +32,7 @@ struct TcQuery int sleepTimeinSecond;//Ĭֵ int averageTimes; int position; + int integratingSphereDetectorValue; QString calFileOutputDirectory;//Ĭֵ QString calFileOutputName; @@ -93,6 +94,7 @@ int main(int argc, char *argv[]) } //ӹ + QString message; QString SN; QString pixelCount; QString wavelengthInfo; @@ -101,11 +103,12 @@ int main(int argc, char *argv[]) //Զع logout("
AutoExpose!"); - m_FiberSpectrometer->autoExpose(); +// m_FiberSpectrometer->autoExpose(); //sleepȴرտ - logout("
Wait for close the lamp!"); + message="
Please close the lamp in " + QString::number(query.sleepTimeinSecond) + "s!"; + logout(message); QThread::sleep(query.sleepTimeinSecond); //ɼ֡ @@ -114,7 +117,8 @@ int main(int argc, char *argv[]) //sleepȴ򿪿 - logout("
Wait for open the lamp!"); + message="
Please open the lamp in " + QString::number(query.sleepTimeinSecond) + "s!"; + logout(message); QThread::sleep(query.sleepTimeinSecond); //ɼ @@ -128,7 +132,7 @@ int main(int argc, char *argv[]) m_FiberSpectrometer->getDeviceInfo(deviceInfo); CalibrationAlgorithm * m_CalibrationAlgorithm = new CalibrationAlgorithm(); - m_CalibrationAlgorithm->readFile(query.standardLightFilePath, deviceAttribute, deviceInfo);// + m_CalibrationAlgorithm->readAndResample_StandardLightFile(query.standardLightFilePath,query.integratingSphereDetectorValue, deviceAttribute, deviceInfo); //ɷ䶨ļ if (query.calFileOutputName.isEmpty())//query->calFileOutputName=="" @@ -174,6 +178,9 @@ CommandLineParseResult parseCommandLine2(QCommandLineParser &parser, TcQuery *qu QCommandLineOption position("position", "Position.", "position"); parser.addOption(position); + QCommandLineOption integratingSphereDetectorValue("integratingSphereDetectorValue", "integratingSphereDetectorValue.", "integratingSphereDetectorValue"); + parser.addOption(integratingSphereDetectorValue); + // parser.addPositionalArgument("name", "The name to look up.");//???????????????????????????????????????????????????????????????????????????? QCommandLineOption helpOption = parser.addHelpOption();//Adds the help option (-h, --help and -? on Windows) This option is handled automatically by QCommandLineParser. QCommandLineOption versionOption = parser.addVersionOption();//This option is handled automatically by QCommandLineParser. @@ -226,6 +233,11 @@ CommandLineParseResult parseCommandLine2(QCommandLineParser &parser, TcQuery *qu + + + + + if (!parser.parse(QCoreApplication::arguments()))//Process the actual command line arguments given by the user { *errorMessage = parser.errorText(); @@ -348,6 +360,24 @@ CommandLineParseResult parseCommandLine2(QCommandLineParser &parser, TcQuery *qu query->standardLightFilePath = parser.value(standardLightFilePath); } + if (parser.isSet(integratingSphereDetectorValue)) + { + if(query->standardLightFilePath.contains("ocean_optics.lmp",Qt::CaseSensitive)) + { + query->integratingSphereDetectorValue = -1; + } + else + { + const QString integratingSphereDetectorValueTmp = parser.value(integratingSphereDetectorValue); + query->integratingSphereDetectorValue = integratingSphereDetectorValueTmp.toInt(); + } + } + else + { + *errorMessage = "No integratingSphereDetectorValue set."; + return CommandLineError; + } + if (parser.isSet(calFileOutputDirectory))//걣ļ· { diff --git a/othersoft/calibration_console/Source_Files/oceanOpticsFiberImager.cpp b/othersoft/calibration_console/Source_Files/oceanOpticsFiberImager.cpp index a473476..673feb3 100644 --- a/othersoft/calibration_console/Source_Files/oceanOpticsFiberImager.cpp +++ b/othersoft/calibration_console/Source_Files/oceanOpticsFiberImager.cpp @@ -94,22 +94,23 @@ void OceanOpticsFiberImager::recordDark(QString path) //ɼ֡ singleShot(m_DarkData); - QDateTime curDateTime = QDateTime::currentDateTime(); - QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); - - QString fileName = path + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_darkSpectral.csv"; - std::ofstream outfile(fileName.toStdString().c_str()); - - for (int i = 0; i < attribute.iPixels; i++) - { - if (i==0) - { - outfile << m_DarkData.usExposureTimeInMS << std::endl; - } - outfile << attribute.fWaveLengthInNM[i] << "," << m_DarkData.lData[i] << std::endl; - } - - outfile.close(); +// //csv +// QDateTime curDateTime = QDateTime::currentDateTime(); +// QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); +// +// QString fileName = path + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_darkSpectral.csv"; +// std::ofstream outfile(fileName.toStdString().c_str()); +// +// for (int i = 0; i < attribute.iPixels; i++) +// { +// if (i==0) +// { +// outfile << m_DarkData.usExposureTimeInMS << std::endl;// +// } +// outfile << attribute.fWaveLengthInNM[i] << "," << m_DarkData.lData[i] << std::endl; +// } +// +// outfile.close(); } void OceanOpticsFiberImager::recordTarget(int recordTimes, QString path) @@ -146,22 +147,24 @@ void OceanOpticsFiberImager::recordTarget(int recordTimes, QString path) m_IntegratingSphereData.lData[i] = m_IntegratingSphereData.lData[i] / recordTimes; } - QDateTime curDateTime = QDateTime::currentDateTime(); - QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); - QString fileName = path + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_integratingSphereSpectral.csv"; - std::ofstream outfile(fileName.toStdString().c_str()); - - for (int i = 0; i < attribute.iPixels; i++) - { - if (i==0) - { - outfile << m_IntegratingSphereData.usExposureTimeInMS << std::endl; - } - outfile << attribute.fWaveLengthInNM[i] << "," << m_IntegratingSphereData.lData[i] << std::endl; - } - - outfile.close(); +// //csv +// QDateTime curDateTime = QDateTime::currentDateTime(); +// QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss"); +// +// QString fileName = path + "/" + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_integratingSphereSpectral.csv"; +// std::ofstream outfile(fileName.toStdString().c_str()); +// +// for (int i = 0; i < attribute.iPixels; i++) +// { +// if (i==0) +// { +// outfile << m_IntegratingSphereData.usExposureTimeInMS << std::endl; +// } +// outfile << attribute.fWaveLengthInNM[i] << "," << m_IntegratingSphereData.lData[i] << std::endl; +// } +// +// outfile.close(); } void OceanOpticsFiberImager::autoExpose()