mirror of
http://172.16.0.230/r/SIF/TowerOptoSifAndSpectral.git
synced 2025-10-19 19:49:42 +08:00
更新:
(1)基于非线性校正的数据 生成 定标文件; (2)将非线性定标参数写到文件中,给卓哥用;
This commit is contained in:
@ -47,8 +47,8 @@ void logout(QString str);
|
||||
void createDirectory(QString fullPath);
|
||||
bool isFileExist(QString fullFileName);
|
||||
|
||||
int getNonlinearityCoeffs2(long deviceID, double * coeffs);
|
||||
int getNonlinearityCoeffs1(double * coeffs);
|
||||
int getNonlinearityCoeffs2(long deviceID, double * nonlinearityCoeffs);
|
||||
int getNonlinearityCoeffs1(double * nonlinearityCoeffs);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
@ -88,14 +88,24 @@ int main(int argc, char *argv[])
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD>
|
||||
FiberSpectrometerOperationBase * m_FiberSpectrometer;
|
||||
bool isOcean = false;
|
||||
double * nonlinearityCoeffs;
|
||||
int numberOfNonlinearityCoeffs;
|
||||
switch (query.deviceType)
|
||||
{
|
||||
case OPTOSKY:
|
||||
m_FiberSpectrometer = new ATPFiberImager(false,query.serialPort.toStdString(),"OPTOSKY");
|
||||
break;
|
||||
case OceanOptics:
|
||||
m_FiberSpectrometer = new OceanOpticsFiberImager();//
|
||||
{
|
||||
//ʹ<><CAB9>sbapi<70><69>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
nonlinearityCoeffs = new double[100];
|
||||
numberOfNonlinearityCoeffs = getNonlinearityCoeffs1(nonlinearityCoeffs);
|
||||
|
||||
m_FiberSpectrometer = new OceanOpticsFiberImager(nonlinearityCoeffs, numberOfNonlinearityCoeffs);
|
||||
isOcean = true;
|
||||
break;
|
||||
}
|
||||
case UnknownDevice:
|
||||
parser.showHelp();
|
||||
Q_UNREACHABLE();
|
||||
@ -114,7 +124,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
//<2F>Զ<EFBFBD><D4B6>ع<EFBFBD>
|
||||
logout("<br><b style=\"color:red\">AutoExpose!</b>");
|
||||
m_FiberSpectrometer->autoExpose();
|
||||
// m_FiberSpectrometer->autoExpose();
|
||||
|
||||
int iExposureTime;
|
||||
m_FiberSpectrometer->getExposureTime(iExposureTime);
|
||||
@ -169,56 +179,37 @@ int main(int argc, char *argv[])
|
||||
QString destName = QDir::cleanPath(query.calFileOutputDirectory + QDir::separator() + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + "_" +QString::number(query.position) + ".cal");
|
||||
copyFileToPath(query.calFileOutputName,destName,true);
|
||||
|
||||
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>isOcean<61><6E>
|
||||
auto * p_C = dynamic_cast<OceanOpticsFiberImager *>(m_FiberSpectrometer);
|
||||
bool isOcean = false;//
|
||||
if (p_C != nullptr)
|
||||
{
|
||||
// cout << "Match!!" << endl;
|
||||
isOcean=true;
|
||||
|
||||
// coeffsFrame tmp;
|
||||
// m_FiberSpectrometer->getNonlinearityCoeffs(tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "not OceanOpticsFiberImager!!" << endl;
|
||||
}
|
||||
|
||||
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_FiberSpectrometer->disconnectFiberSpectrometer();
|
||||
//return a.exec();
|
||||
|
||||
//ʹ<><CAB9>sbapi<70><69>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
if (isOcean)
|
||||
{
|
||||
double * coeffs = new double[100];
|
||||
int numberOfCoeffs = getNonlinearityCoeffs1(coeffs);
|
||||
|
||||
QDateTime curDateTime = QDateTime::currentDateTime();
|
||||
QString currentTime = curDateTime.toString("yyyy_MM_dd_hh_mm_ss");
|
||||
QString nonlinearityCoeffsName = QDir::cleanPath(query.calFileOutputDirectory + QDir::separator() + currentTime + "_" + QString::fromStdString(deviceInfo.strSN) + ".nonLinear");
|
||||
|
||||
// for (int i = 0; i < numberOfCoeffs; ++i)
|
||||
// for (int i = 0; i < numberOfNonlinearityCoeffs; ++i)
|
||||
// {
|
||||
// printf("\n");
|
||||
//
|
||||
// printf("nonlinearityCoeffs(<28><>%d<><64>): %1.2e\n",i , coeffs[i]);
|
||||
// printf("nonlinearityCoeffs(<28><>%d<><64>): %1.2e\n",i , nonlinearityCoeffs[i]);
|
||||
//
|
||||
// printf("\n");
|
||||
// }
|
||||
|
||||
std::ofstream outfile(nonlinearityCoeffsName.toStdString().c_str());
|
||||
|
||||
for (int i = 0; i < numberOfCoeffs; i++)
|
||||
for (int i = 0; i < numberOfNonlinearityCoeffs; i++)
|
||||
{
|
||||
outfile << coeffs[i] << std::endl;
|
||||
outfile << nonlinearityCoeffs[i] << std::endl;
|
||||
}
|
||||
outfile.close();
|
||||
|
||||
free(coeffs);
|
||||
free(nonlinearityCoeffs);
|
||||
}
|
||||
|
||||
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_FiberSpectrometer->disconnectFiberSpectrometer();//Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>free(nonlinearityCoeffs);
|
||||
//return a.exec();
|
||||
}
|
||||
|
||||
CommandLineParseResult parseCommandLine2(QCommandLineParser &parser, TcQuery *query, QString *errorMessage)
|
||||
@ -539,7 +530,7 @@ bool isFileExist(QString fullFileName)
|
||||
return false;
|
||||
}
|
||||
|
||||
int getNonlinearityCoeffs1(double * coeffs)
|
||||
int getNonlinearityCoeffs1(double * nonlinearityCoeffs)
|
||||
{
|
||||
int number_of_devices;
|
||||
long *device_ids;
|
||||
@ -608,7 +599,7 @@ int getNonlinearityCoeffs1(double * coeffs)
|
||||
continue;
|
||||
}
|
||||
|
||||
number = getNonlinearityCoeffs2(device_ids[i],coeffs);
|
||||
number = getNonlinearityCoeffs2(device_ids[i],nonlinearityCoeffs);
|
||||
|
||||
/* Close the device */
|
||||
// printf("\tAttempting to close:\n");
|
||||
@ -626,7 +617,7 @@ int getNonlinearityCoeffs1(double * coeffs)
|
||||
}//
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ϵ<EFBFBD><CFB5><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
int getNonlinearityCoeffs2(long deviceID, double * coeffs)
|
||||
int getNonlinearityCoeffs2(long deviceID, double * nonlinearityCoeffs)
|
||||
{
|
||||
int error = 0;
|
||||
int number_of_nonlinearity_coeff_features;
|
||||
@ -664,13 +655,19 @@ int getNonlinearityCoeffs2(long deviceID, double * coeffs)
|
||||
// i, deviceID, nonlinearity_coeff_feature_ids[i]);
|
||||
|
||||
// printf("\t\t\tAttempting to get nonlinearity coefficients...\n");
|
||||
memset(coeffs, (int)0, 20);//----------------------------------------------------------------------------
|
||||
memset(nonlinearityCoeffs, (int)0, 20);//----------------------------------------------------------------------------
|
||||
length = sbapi_nonlinearity_coeffs_get(deviceID,
|
||||
nonlinearity_coeff_feature_ids[i], &error, coeffs, 20);
|
||||
nonlinearity_coeff_feature_ids[i], &error, nonlinearityCoeffs, 20);
|
||||
// printf("\t\t\t\tResult is %d [%s]\n", length, sbapi_get_error_string(error));
|
||||
|
||||
if(0 == error && length > 0) {
|
||||
// printf("\t\t\t\tFirst calibration term: %1.2e\n", coeffs[0]);
|
||||
// printf("\t\t\t\tFirst calibration term: %1.2e\n", nonlinearityCoeffs[0]);
|
||||
// printf("\t\t\t\tFirst calibration term: %1.2e\n", nonlinearityCoeffs[1]);
|
||||
// printf("\t\t\t\tFirst calibration term: %1.2e\n", nonlinearityCoeffs[2]);
|
||||
// printf("\t\t\t\tFirst calibration term: %1.2e\n", nonlinearityCoeffs[3]);
|
||||
// printf("\t\t\t\tFirst calibration term: %1.2e\n", nonlinearityCoeffs[4]);
|
||||
// printf("\t\t\t\tFirst calibration term: %1.2e\n", nonlinearityCoeffs[5]);
|
||||
// printf("\t\t\t\tFirst calibration term: %1.2e\n", nonlinearityCoeffs[6]);
|
||||
}
|
||||
|
||||
// printf("\t\t%d: Finished testing device 0x%02lX, nonlinearity coeffs 0x%02lX\n",
|
||||
|
Reference in New Issue
Block a user