| 284,6 → 284,450 |
| delete[] layoutdir; |
| } |
| |
| // Function for saving all current measurement settings in a file and reopening them on next program open |
| void TGAppMainFrame::SaveMeasSettings() |
| { |
| char *cTemp; |
| cTemp = new char[1024]; |
| sprintf(cTemp, "%s/settings/measurement_settings.txt", rootdir); |
| |
| std::ofstream osettings; |
| |
| osettings.open(cTemp, std::ofstream::out); |
| if(osettings.is_open()) |
| { |
| osettings << "# Settings pane" << std::endl; |
| for(int i = 0; i < 4; i++) |
| osettings << (int)scansOn->widgetChBox[i]->IsDown() << std::endl; |
| osettings << vHardlimit->widgetNE[0]->GetNumber() << std::endl; |
| osettings << NCH->widgetNE[0]->GetNumber() << std::endl; |
| osettings << posUnits->widgetCB->GetSelected() << std::endl; |
| osettings << rotUnits->widgetCB->GetSelected() << std::endl; |
| osettings << oscConnect->widgetTE->GetText() << std::endl; |
| osettings << laserInfo->widgetTE->GetText() << std::endl; |
| osettings << chtemp->widgetNE[0]->GetNumber() << std::endl; |
| osettings << (int)liveDisp->widgetChBox[0]->IsDown() << std::endl; |
| osettings << std::endl; |
| |
| osettings << "# Main measurement window" << std::endl; |
| osettings << vOutCh->widgetCB->GetSelected() << std::endl; |
| for(int i = 0; i < 2; i++) |
| osettings << (int)vOutOpt->widgetChBox[i]->IsDown() << std::endl; |
| osettings << vOutStart->widgetNE[0]->GetNumber() << std::endl; |
| osettings << vOutStop->widgetNE[0]->GetNumber() << std::endl; |
| osettings << vOutStep->widgetNE[0]->GetNumber() << std::endl; |
| |
| osettings << zPosMin->widgetNE[0]->GetNumber() << std::endl; |
| osettings << zPosMax->widgetNE[0]->GetNumber() << std::endl; |
| osettings << zPosStep->widgetNE[0]->GetNumber() << std::endl; |
| osettings << xPosMin->widgetNE[0]->GetNumber() << std::endl; |
| osettings << xPosMax->widgetNE[0]->GetNumber() << std::endl; |
| osettings << xPosStep->widgetNE[0]->GetNumber() << std::endl; |
| osettings << yPosMin->widgetNE[0]->GetNumber() << std::endl; |
| osettings << yPosMax->widgetNE[0]->GetNumber() << std::endl; |
| osettings << yPosStep->widgetNE[0]->GetNumber() << std::endl; |
| |
| osettings << rotPosMin->widgetNE[0]->GetNumber() << std::endl; |
| osettings << rotPosMax->widgetNE[0]->GetNumber() << std::endl; |
| osettings << rotPosStep->widgetNE[0]->GetNumber() << std::endl; |
| |
| osettings << evtNum->widgetNE[0]->GetNumber() << std::endl; |
| osettings << fileName->widgetTE->GetText() << std::endl; |
| |
| printf("Saving measurement settings to file.\n"); |
| } |
| else |
| printf("Error! Save file can not be opened.\n"); |
| osettings.close(); |
| } |
| |
| // Function for saving all current analysis settings in a file and reopening them on next program open |
| void TGAppMainFrame::SaveAnalSettings() |
| { |
| char *cTemp; |
| cTemp = new char[1024]; |
| sprintf(cTemp, "%s/settings/analysis_settings.txt", rootdir); |
| |
| std::ofstream osettings; |
| |
| osettings.open(cTemp, std::ofstream::out); |
| if(osettings.is_open()) |
| { |
| osettings << "# Analysis" << std::endl; |
| // Integrate spectrum |
| for(int i = 0; i < 3; i++) |
| osettings << (int)intSpect->widgetChBox[i]->IsDown() << std::endl; |
| for(int i = 0; i < 2; i++) |
| osettings << resol2d->widgetNE[i]->GetNumber() << std::endl; |
| |
| // Relative PDE |
| osettings << (int)relPde->widgetChBox[0]->IsDown() << std::endl; |
| osettings << (int)midPeak->widgetChBox[0]->IsDown() << std::endl; |
| osettings << zeroAngle->widgetNE[0]->GetNumber() << std::endl; |
| |
| // Breakdown voltage |
| osettings << minPeak->widgetNE[0]->GetNumber() << std::endl; |
| osettings << peakSepCalc->widgetNE[0]->GetNumber() << std::endl; |
| |
| // Surface scan |
| for(int i = 0; i < 2; i++) |
| osettings << (int)surfScanOpt->widgetChBox[i]->IsDown() << std::endl; |
| for(int i = 0; i < 2; i++) |
| osettings << resolSurf->widgetNE[i]->GetNumber() << std::endl; |
| |
| // Fitting |
| osettings << fitSigma->widgetNE[0]->GetNumber() << std::endl; |
| osettings << fitTresh->widgetNE[0]->GetNumber() << std::endl; |
| osettings << fitInter->widgetNE[0]->GetNumber() << std::endl; |
| osettings << adcOffset->widgetNE[0]->GetNumber() << std::endl; |
| osettings << accError->widgetNE[0]->GetNumber() << std::endl; |
| osettings << pedesLow->widgetNE[0]->GetNumber() << std::endl; |
| for(int i = 0; i < 2; i++) |
| osettings << (int)fitChecks->widgetChBox[i]->IsDown() << std::endl; |
| osettings << std::endl; |
| |
| osettings << "# Histogram controls" << std::endl; |
| for(int i = 0; i < 2; i++) |
| osettings << adcRange->widgetNE[i]->GetNumber() << std::endl; |
| for(int i = 0; i < 2; i++) |
| osettings << tdcRange->widgetNE[i]->GetNumber() << std::endl; |
| for(int i = 0; i < 2; i++) |
| osettings << yRange->widgetNE[i]->GetNumber() << std::endl; |
| osettings << selectCh->widgetNE[0]->GetNumber() << std::endl; |
| for(int i = 0 ; i < 2; i++) |
| osettings << (int)histOpt->widgetChBox[i]->IsDown() << std::endl; |
| osettings << posUnitsPlot->widgetCB->GetSelected() << std::endl; |
| |
| printf("Saving analysis settings to file.\n"); |
| } |
| else |
| printf("Error! Save file can not be opened.\n"); |
| osettings.close(); |
| } |
| |
| // Function for getting all measurement settings from a file |
| void TGAppMainFrame::GetMeasSettings() |
| { |
| char *cTemp, readTemp[1024]; |
| cTemp = new char[1024]; |
| sprintf(cTemp, "%s/settings/measurement_settings.txt", rootdir); |
| |
| int iTemp, k = 0; |
| double dTemp; |
| |
| std::ifstream isettings; |
| |
| isettings.open(cTemp, std::ifstream::in); |
| if(isettings.is_open()) |
| { |
| printf("Opening measurement settings from file.\n"); |
| |
| while(1) |
| { |
| if(isettings.peek() == '#') |
| { |
| isettings.getline(readTemp, 1024, '\n'); |
| if(DBGSIG > 1) printf("GetMeasSettings(): readTemp = %s\n", readTemp); |
| } |
| else if(isettings.peek() == '\n') |
| isettings.ignore(1, '\n'); |
| else |
| { |
| if(k == 0) |
| { |
| // Scan settings |
| for(int i = 0; i < 4; i++) |
| { |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) scansOn->widgetChBox[i]->SetState(kButtonUp); |
| else if(iTemp == 1) scansOn->widgetChBox[i]->SetState(kButtonDown); |
| } |
| // Hard voltage limit |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| vHardlimit->widgetNE[0]->SetNumber(dTemp); |
| // Number of channels |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| NCH->widgetNE[0]->SetNumber(iTemp); |
| // Position units |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| posUnits->widgetCB->Select(iTemp); |
| // Rotation units |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| rotUnits->widgetCB->Select(iTemp); |
| // Oscilloscope IP address |
| isettings.getline(readTemp, 1024, '\n'); |
| oscConnect->widgetTE->SetText(readTemp); |
| // Laser info |
| isettings.getline(readTemp, 1024, '\n'); |
| laserInfo->widgetTE->SetText(readTemp); |
| // Chamber temperature |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| chtemp->widgetNE[0]->SetNumber(dTemp); |
| // Live display |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) liveDisp->widgetChBox[0]->SetState(kButtonUp); |
| else if(iTemp == 1) liveDisp->widgetChBox[0]->SetState(kButtonDown); |
| |
| k++; |
| } |
| else if(k == 1) |
| { |
| // Voltage supply channel |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| vOutCh->widgetCB->Select(iTemp); |
| // Voltage supply options |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) vOutOpt->widgetChBox[i]->SetState(kButtonUp); |
| else if(iTemp == 1) vOutOpt->widgetChBox[i]->SetState(kButtonDown); |
| } |
| // Voltage supply min, max and step |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| vOutStart->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| vOutStop->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| vOutStep->widgetNE[0]->SetNumber(dTemp); |
| // Z axis scan min, max and step |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| zPosMin->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| zPosMax->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| zPosStep->widgetNE[0]->SetNumber(dTemp); |
| // X axis scan min, max and step |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| xPosMin->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| xPosMax->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| xPosStep->widgetNE[0]->SetNumber(dTemp); |
| // Y axis scan min, max and step |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| yPosMin->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| yPosMax->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| yPosStep->widgetNE[0]->SetNumber(dTemp); |
| // Rotation min, max and step |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| rotPosMin->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| rotPosMax->widgetNE[0]->SetNumber(dTemp); |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| rotPosStep->widgetNE[0]->SetNumber(dTemp); |
| // Number of events |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| evtNum->widgetNE[0]->SetNumber(iTemp); |
| // Save filename |
| isettings.getline(readTemp, 1024, '\n'); |
| fileName->widgetTE->SetText(readTemp); |
| |
| k++; |
| } |
| else |
| break; |
| } |
| } |
| } |
| else |
| printf("Error! Measurement settings file can not be opened. Using defaults.\n"); |
| } |
| |
| // Function for getting all analysis settings from a file |
| void TGAppMainFrame::GetAnalSettings() |
| { |
| char *cTemp, readTemp[1024]; |
| cTemp = new char[1024]; |
| sprintf(cTemp, "%s/settings/analysis_settings.txt", rootdir); |
| |
| int iTemp, k = 0; |
| double dTemp; |
| |
| std::ifstream isettings; |
| |
| isettings.open(cTemp, std::ifstream::in); |
| if(isettings.is_open()) |
| { |
| printf("Opening analysis settings from file.\n"); |
| |
| while(1) |
| { |
| if(isettings.peek() == '#') |
| { |
| isettings.getline(readTemp, 1024, '\n'); |
| if(DBGSIG > 1) printf("GetAnalSettings(): readTemp = %s\n", readTemp); |
| } |
| else if(isettings.peek() == '\n') |
| isettings.ignore(1, '\n'); |
| else |
| { |
| if(k == 0) |
| { |
| // Integrate spectrum options |
| for(int i = 0; i < 3; i++) |
| { |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) intSpect->widgetChBox[i]->SetState(kButtonUp); |
| else if(iTemp == 1) intSpect->widgetChBox[i]->SetState(kButtonDown); |
| } |
| // Integrate spectrum 2D resolution |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| resol2d->widgetNE[i]->SetNumber(iTemp); |
| } |
| // Relative PDE normalization |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) relPde->widgetChBox[0]->SetState(kButtonUp); |
| else if(iTemp == 1) relPde->widgetChBox[0]->SetState(kButtonDown); |
| // Relative PDE middle peak |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) midPeak->widgetChBox[0]->SetState(kButtonUp); |
| else if(iTemp == 1) midPeak->widgetChBox[0]->SetState(kButtonDown); |
| // Relative PDE zero angle setting |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| zeroAngle->widgetNE[0]->SetNumber(dTemp); |
| // Breakdown voltage minimum number of detected peaks |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| minPeak->widgetNE[0]->SetNumber(iTemp); |
| // Breakdown voltage separation calculation |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| peakSepCalc->widgetNE[0]->SetNumber(iTemp); |
| // Surface scan options |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) surfScanOpt->widgetChBox[i]->SetState(kButtonUp); |
| else if(iTemp == 1) surfScanOpt->widgetChBox[i]->SetState(kButtonDown); |
| } |
| // Surface scan 2D resolution |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| resolSurf->widgetNE[i]->SetNumber(iTemp); |
| } |
| // Fitting - sigma |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| fitSigma->widgetNE[0]->SetNumber(dTemp); |
| // Fitting - S/N ratio |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| fitTresh->widgetNE[0]->SetNumber(dTemp); |
| // Fitting - interpolation |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| fitInter->widgetNE[0]->SetNumber(iTemp); |
| // Fitting - ADC offset |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| adcOffset->widgetNE[0]->SetNumber(dTemp); |
| // Fitting - Acceptable error |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| accError->widgetNE[0]->SetNumber(dTemp); |
| // Fitting - Pedestal lower limit |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| pedesLow->widgetNE[0]->SetNumber(dTemp); |
| // Fitting - settings |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) fitChecks->widgetChBox[i]->SetState(kButtonUp); |
| else if(iTemp == 1) fitChecks->widgetChBox[i]->SetState(kButtonDown); |
| } |
| |
| k++; |
| } |
| else if(k == 1) |
| { |
| // ADC range |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| adcRange->widgetNE[i]->SetNumber(dTemp); |
| } |
| // TDC range |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| tdcRange->widgetNE[i]->SetNumber(dTemp); |
| } |
| // Y axis range |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> dTemp; |
| isettings.ignore(1, '\n'); |
| yRange->widgetNE[i]->SetNumber(dTemp); |
| } |
| // Displayed channel |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| selectCh->widgetNE[0]->SetNumber(iTemp); |
| // Display options |
| for(int i = 0; i < 2; i++) |
| { |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| if(iTemp == 0) histOpt->widgetChBox[i]->SetState(kButtonUp); |
| else if(iTemp == 1) histOpt->widgetChBox[i]->SetState(kButtonDown); |
| } |
| // Display position units |
| isettings >> iTemp; |
| isettings.ignore(1, '\n'); |
| posUnitsPlot->widgetCB->Select(iTemp); |
| |
| k++; |
| } |
| else |
| break; |
| } |
| } |
| } |
| else |
| printf("Error! Measurement settings file can not be opened. Using defaults.\n"); |
| } |
| |
| // Layout function for the main window (width and height) |
| void layoutMainWindow(int *w, int *h) |
| { |