void CCDParamTest() { CCDParamTestResult.Reset(); if (ParamTestList[0])//曝光测试 { ExposureTest(); } UIHide(); CCDParamTestListView.Visible = true; for (int i = 12; i > 1; i--) { if (!ParamTestList[i]) { CCDParamTestListView.Items[5 + i].SubItems[1].Text = "不进行测试"; } else { CCDParamTestListView.Items[5 + i].SubItems[1].Text = "待测"; } } if (ExType == 1) { ParamTestChart1.Visible = true; CCDParamTestListView.Items[1].SubItems[1].Text = "固定曝光时间"; } else { ParamTestChart2.Visible = true; CCDParamTestListView.Items[1].SubItems[1].Text = "固定光源照度"; } CCDParamTestListView.Items[2].SubItems[1].Text = SystemParam.miu_sat.ToString(); CCDParamTestListView.Items[3].SubItems[1].Text = SystemParam.Osat.ToString(); CCDParamTestListView.Items[4].SubItems[1].Text = SystemParam.n.ToString(); CCDParamTestListView.Items[5].SubItems[1].Text = SystemParam.L.ToString(); //转换增益,量子效率,信噪比曲线,线性误差 if (ParamTestList[1] || ParamTestList[2] || ParamTestList[4] || ParamTestList[8]) { CCDParamTest_Collect_Step(); if (ParamTestList[1])//转换增益 { CCDParamTest_Calc_K(); CCDParamTestListView.Items[5 + 1].SubItems[1].Text = CCDParamTestResult.K.ToString(); } if (ParamTestList[2])//量子效率 { CCDParamTest_Calc_eta(); CCDParamTestListView.Items[5 + 2].SubItems[1].Text = CCDParamTestResult.eta.ToString(); } if (ParamTestList[4])//信噪比 { CCDParamTest_Calc_SNR(); CCDParamTestListView.Items[5 + 4].SubItems[1].Text = CCDParamTestResult.miu_p_min.ToString(); } if (ParamTestList[8])//线性误差 { CCDParamTest_Calc_LE(); CCDParamTestListView.Items[5 + 8].SubItems[1].Text = CCDParamTestResult.LE.ToString(); } } //量子效率曲线 if (ParamTestList[3]) { CCDParamTest_Collect_etaCurve(); CCDParamTest_Calc_etaCurve(); CCDParamTestListView.Items[5 + 3].SubItems[1].Text = "测试完成";//CCDParamTestResult.etaCurve.ToString(); } //动态范围、满阱容量、FPN if (ParamTestList[5] || ParamTestList[6] || ParamTestList[11]) { CCDParamTest_Collect_MinMax(); if (ParamTestList[5])//动态范围 { CCDParamTest_Calc_DR(); CCDParamTestListView.Items[5 + 5].SubItems[1].Text = CCDParamTestResult.DR.ToString(); } if (ParamTestList[6] || ParamTestList[11])//满阱容量或FPN { CCDParamTest_Calc_FWC(); CCDParamTestListView.Items[5 + 6].SubItems[1].Text = CCDParamTestResult.FWC.ToString(); } } //暗电流 if (ParamTestList[7]) { CCDParamTest_Collect_DarkI(); CCDParamTest_Calc_DarkI(); CCDParamTestListView.Items[5 + 7].SubItems[1].Text = CCDParamTestResult.miu_I_miu.ToString() + "; " + CCDParamTestResult.miu_I_delta.ToString(); } //DSNU,PRNU,读出噪声 if (ParamTestList[9] || ParamTestList[10] || ParamTestList[11] || ParamTestList[12]) { CCDParamTest_Collect_L(false); if (ParamTestList[10]) { CCDParamTest_Collect_L(true); } CCDParamTest_Calc_L_bLight = false; ParamTestWaitingProc = new WaitingProc(); WaitingProcFunc wpf = null; ParamTestWaitingProc.MaxProgress = SystemParam.L; wpf = new WaitingProcFunc(CCDParamTest_Calc_L); if (!ParamTestWaitingProc.Execute(wpf, "处理空域测试结果", WaitingType.With_ConfirmCancel, "是否取消?")) { textBox1.AppendText("用户终止自动测试\r\n"); return; } if (ParamTestList[9])//DSNU { CCDParamTestResult.DSNU = Math.Sqrt(CCDParamTestResult.L_S_y_dark) / CCDParamTestResult.K; CCDParamTestListView.Items[5 + 9].SubItems[1].Text = CCDParamTestResult.DSNU.ToString(); } if (ParamTestList[11])//FPN { CCDParamTestResult.DSNU = Math.Sqrt(CCDParamTestResult.L_S_y_dark) / CCDParamTestResult.K; CCDParamTestResult.FPN = CCDParamTestResult.DSNU / CCDParamTestResult.FWC; CCDParamTestListView.Items[5 + 11].SubItems[1].Text = CCDParamTestResult.FPN.ToString(); } if (ParamTestList[12])//读出噪声 { CCDParamTestResult.delta_raed = Math.Sqrt(CCDParamTestResult.delta_mid) / CCDParamTestResult.K; CCDParamTestListView.Items[5 + 12].SubItems[1].Text = CCDParamTestResult.delta_raed.ToString(); } if (ParamTestList[10])//PRNU { CCDParamTest_Calc_L_bLight = true; ParamTestWaitingProc = new WaitingProc(); wpf = null; ParamTestWaitingProc.MaxProgress = SystemParam.L; wpf = new WaitingProcFunc(CCDParamTest_Calc_L); if (!ParamTestWaitingProc.Execute(wpf, "处理空域测试结果", WaitingType.With_ConfirmCancel, "是否取消?")) { textBox1.AppendText("用户终止自动测试\r\n"); return; } CCDParamTestResult.PRNU = Math.Sqrt(CCDParamTestResult.L_S_y - CCDParamTestResult.L_S_y_dark) / (CCDParamTestResult.L_miu_y - CCDParamTestResult.L_miu_y_dark); CCDParamTestListView.Items[5 + 10].SubItems[1].Text = CCDParamTestResult.PRNU.ToString(); } } if (saveFileDialog1.ShowDialog() == DialogResult.OK) { TestReport.MakeReport(saveFileDialog1.FileName); textBox1.AppendText("自动测试结束,测试报告保存位置为:\r\n"); textBox1.AppendText(saveFileDialog1.FileName); } else { textBox1.AppendText("自动测试结束,用户未保存报告\r\n"); } MessageBox.Show("参数测试完成"); }