| /lab/sipmscan/trunk/src/MIKRO/Makefile |
|---|
| 2,3 → 2,5 |
| gcc mikro_ctrl.c rs232.c MIKRO.c -o mikro_ctrl -lm |
| mikro_ctrl_d: mikro_ctrl.c rs232.c rs232.h MIKRO.c |
| gcc mikro_ctrl.c rs232.c MIKRO.c -o mikro_ctrl_d -lm -DDEBUG |
| clean: |
| rm mikro_ctrl |
| /lab/sipmscan/trunk/src/analysis.cpp |
|---|
| 59,6 → 59,7 |
| else if(analTab->GetCurrent() == 1) // Relative PDE |
| { |
| relPde->widgetChBox[0]->SetState(kButtonDown); |
| relPde->widgetChBox[1]->SetState(kButtonUp); |
| midPeak->widgetChBox[0]->SetState(kButtonUp); |
| zeroAngle->widgetNE[0]->SetNumber(0.00); |
| } |
| 96,6 → 97,9 |
| else if( analtab == 3 ) |
| analtype = 4; |
| // Save analysis settings any time we run a new analysis |
| SaveAnalSettings(); |
| // Only integrate spectrum or make relative PDE |
| if(type == 0) |
| { |
| 370,7 → 374,6 |
| double range[4]; |
| TGraph2D *gScan2D; |
| gScan2D = new TGraph2D(); |
| gScan2D->SetName("edgescan"); |
| range[0] = TMath::MinElement(nrfiles, surfxy); |
| range[1] = TMath::MaxElement(nrfiles, surfxy); |
| range[2] = TMath::MinElement(nrfiles, surfz); |
| 679,6 → 682,7 |
| int adcpedestal[2]; |
| int zeromu = 0; |
| int darkhist = -1; |
| int nopeaks = -1; |
| double pointest[12]; |
| bool exclude = false; |
| 690,9 → 694,170 |
| analysisProgress->widgetPB->SetPosition(progVal); |
| gVirtualX->Update(1); |
| // Check if the checkbox for no peaks is selected - TODO: Still need the situation when we do not have a peaked ADC spectrum |
| if(relPde->widgetChBox[1]->IsDown()) |
| { |
| printf("PhotonMu(): ADC spectrum has no peak structure.\n"); |
| nopeaks = 1; |
| // Error if there is no darkhist |
| if(strcmp("", darkRun->widgetTE->GetText()) == 0) |
| { |
| printf("PhotonMu(): Error! The no peak structure option needs a dark histogram.\n"); |
| delete[] integralCount; |
| delete[] integralPedestal; |
| delete[] angle; |
| delete[] pdeval; |
| delete[] muval; |
| return; |
| } |
| } |
| // Start if we select at least one file |
| if(nrfiles > 0) |
| { |
| // Find the pedestal peak for the dark histogram, and use it for all if there are no peaks |
| if(nopeaks != -1) |
| { |
| // Replot the spectrum on analysisCanvas and do not close the input file |
| DisplayHistogram( (char*)(darkRun->widgetTE->GetText()), 0, 1); |
| analysisCanvas->GetCanvas()->Modified(); |
| analysisCanvas->GetCanvas()->Update(); |
| // Get the spectrum |
| histtemp = (TH1F*)analysisCanvas->GetCanvas()->GetPrimitive(histname); |
| npeaks = 15; |
| double par[300]; |
| spec = new TSpectrum(npeaks); |
| // Find spectrum background |
| histback = spec->Background(histtemp, (int)fitInter->widgetNE[0]->GetNumber(), "same"); |
| // Clone histogram and subtract background from it if we select that option |
| h2 = (TH1F*)histtemp->Clone("h2"); |
| if(fitChecks->widgetChBox[0]->IsDown()) |
| h2->Add(histback, -1); |
| // Search for the peaks |
| int found = spec->Search(h2, fitSigma->widgetNE[0]->GetNumber(), "goff", fitTresh->widgetNE[0]->GetNumber() ); |
| printf("PhotonMu(): Found %d candidates to fit.\n",found); |
| npeaks = found; |
| // Set initial peak parameters |
| xpeaks = spec->GetPositionX(); |
| for(j = 0; j < found; j++) |
| { |
| float xp = xpeaks[j]; |
| int bin = h2->GetXaxis()->FindBin(xp); |
| float yp = h2->GetBinContent(bin); |
| par[3*j] = yp; |
| par[3*j+1] = xp; |
| par[3*j+2] = (double)fitSigma->widgetNE[0]->GetNumber(); |
| } |
| // Fit the histogram |
| fit = new TF1("fit", FindPeaks, adcRange->widgetNE[0]->GetNumber(), adcRange->widgetNE[1]->GetNumber(), 3*npeaks); |
| TVirtualFitter::Fitter(histtemp, 3*npeaks); |
| fit->SetParameters(par); |
| fit->SetNpx(300); |
| h2->Fit("fit","Q"); |
| // Get the fitted parameters |
| fittingfunc = h2->GetFunction("fit"); |
| fparam = fittingfunc->GetParameters(); |
| fparamerr = fittingfunc->GetParErrors(); |
| // Gather the parameters (mean peak value for now) |
| int j = 1; |
| int nrfit = 0; |
| while(1) |
| { |
| if( (fparam[j] < 1.E-30) || (nrfit > 8) ) |
| break; |
| else |
| { |
| // Check if pedestal is above the lower limit and sigma is smaller than the mean |
| if( (fparam[j] > pedesLow->widgetNE[0]->GetNumber()) && ((double)fparamerr[j]/fparam[j] < accError->widgetNE[0]->GetNumber()) ) |
| { |
| // With the additional ADC offset, we can shift the mean values slightly, so they are not close to the X.5, but to the X.0 values |
| meansel[nrfit] = fparam[j]+(adcOffset->widgetNE[0]->GetNumber()); |
| sigmasel[nrfit] = fparam[j+1]; |
| nrfit++; |
| } |
| } |
| j+=3; |
| } |
| TMath::Sort(nrfit, meansel, sortindex, kFALSE); |
| meanparam = meansel[sortindex[0]]; |
| paramsigma = sigmasel[sortindex[0]]; |
| for(j = 0; j < nrfit; j++) |
| if(DBGSIG) |
| printf("PhotonMu(): %d: peak mean = %lf\n", j, meansel[sortindex[j]]); |
| j = 0; |
| adcpedestal[0] = 0; |
| adcpedestal[1] = -1; |
| while(1) |
| { |
| int bin = histtemp->GetXaxis()->FindBin((int)(j+meanparam+paramsigma)); |
| int yp = histtemp->GetBinContent(bin); |
| // Check where we get to first minimum after pedestal peak or where we get to the half maximum of the pedestal peak (in case there is only a pedestal peak) |
| if(adcpedestal[1] == -1) |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else |
| { |
| if( (npeaks > 1) && (adcpedestal[1] >= yp) ) |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else if( (npeaks == 1) && (adcpedestal[0] < meanparam+5*paramsigma) ) // TODO -> Determining the pedestal when only one peak |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else |
| break; |
| } |
| j++; |
| if(j > 50) break; |
| } |
| if(midPeak->widgetChBox[0]->IsDown()) |
| { |
| if( (meanparam - (int)meanparam >= 0.) && (meanparam - (int)meanparam < 0.5) ) |
| m = TMath::Floor(meanparam); |
| else if( (meanparam - (int)meanparam >= 0.5) && (meanparam - (int)meanparam < 1.) ) |
| m = TMath::Ceil(meanparam); |
| int bin = histtemp->GetXaxis()->FindBin(m); |
| adcpedestal[0] = m; |
| printf("midpeak x = %d, ", adcpedestal[0]); |
| adcpedestal[1] = histtemp->GetBinContent(bin); |
| } |
| // Option to show the fit |
| fittingfunc->Draw("L SAME"); |
| analysisCanvas->GetCanvas()->Modified(); |
| analysisCanvas->GetCanvas()->Update(); |
| printf("Pedestal ends = %d and nr. of counts = %d\n", adcpedestal[0], adcpedestal[1]); |
| // Delete the opened histogram and spectrum |
| delete spec; |
| delete inroot; |
| // return; |
| } |
| printf("PhotonMu(): Continuing with the rest of the spectra.\n"); |
| // Check all histograms for pedestal peak values |
| for(int i = 0; i < (int)nrfiles; i++) |
| { |
| if( (nrfiles == 1) || (!multiSelect->widgetChBox[0]->IsDown()) ) |
| 788,145 → 953,148 |
| darkhist = i; |
| } |
| // Replot the spectrum on analysisCanvas and do not close the input file |
| DisplayHistogram( (char*)(files->At(i)->GetTitle()), 0, 1); |
| analysisCanvas->GetCanvas()->Modified(); |
| analysisCanvas->GetCanvas()->Update(); |
| if(nopeaks == -1) |
| { |
| // Replot the spectrum on analysisCanvas and do not close the input file |
| DisplayHistogram( (char*)(files->At(i)->GetTitle()), 0, 1); |
| analysisCanvas->GetCanvas()->Modified(); |
| analysisCanvas->GetCanvas()->Update(); |
| // Get the spectrum |
| histtemp = (TH1F*)analysisCanvas->GetCanvas()->GetPrimitive(histname); |
| npeaks = 15; |
| double par[300]; |
| spec = new TSpectrum(npeaks); |
| // Find spectrum background |
| histback = spec->Background(histtemp, (int)fitInter->widgetNE[0]->GetNumber(), "same"); |
| // Clone histogram and subtract background from it if we select that option |
| h2 = (TH1F*)histtemp->Clone("h2"); |
| if(fitChecks->widgetChBox[0]->IsDown()) |
| h2->Add(histback, -1); |
| // Search for the peaks |
| int found = spec->Search(h2, fitSigma->widgetNE[0]->GetNumber(), "goff", fitTresh->widgetNE[0]->GetNumber() ); |
| printf("PhotonMu(): Found %d candidates to fit.\n",found); |
| npeaks = found; |
| // Get the spectrum |
| histtemp = (TH1F*)analysisCanvas->GetCanvas()->GetPrimitive(histname); |
| npeaks = 15; |
| double par[300]; |
| spec = new TSpectrum(npeaks); |
| // Find spectrum background |
| histback = spec->Background(histtemp, (int)fitInter->widgetNE[0]->GetNumber(), "same"); |
| // Clone histogram and subtract background from it if we select that option |
| h2 = (TH1F*)histtemp->Clone("h2"); |
| if(fitChecks->widgetChBox[0]->IsDown()) |
| h2->Add(histback, -1); |
| // Search for the peaks |
| int found = spec->Search(h2, fitSigma->widgetNE[0]->GetNumber(), "goff", fitTresh->widgetNE[0]->GetNumber() ); |
| printf("PhotonMu(): Found %d candidates to fit.\n",found); |
| npeaks = found; |
| // Set initial peak parameters |
| xpeaks = spec->GetPositionX(); |
| for(j = 0; j < found; j++) |
| { |
| float xp = xpeaks[j]; |
| int bin = h2->GetXaxis()->FindBin(xp); |
| float yp = h2->GetBinContent(bin); |
| par[3*j] = yp; |
| par[3*j+1] = xp; |
| par[3*j+2] = (double)fitSigma->widgetNE[0]->GetNumber(); |
| } |
| // Set initial peak parameters |
| xpeaks = spec->GetPositionX(); |
| for(j = 0; j < found; j++) |
| { |
| float xp = xpeaks[j]; |
| int bin = h2->GetXaxis()->FindBin(xp); |
| float yp = h2->GetBinContent(bin); |
| par[3*j] = yp; |
| par[3*j+1] = xp; |
| par[3*j+2] = (double)fitSigma->widgetNE[0]->GetNumber(); |
| } |
| // Fit the histogram |
| fit = new TF1("fit", FindPeaks, adcRange->widgetNE[0]->GetNumber(), adcRange->widgetNE[1]->GetNumber(), 3*npeaks); |
| TVirtualFitter::Fitter(histtemp, 3*npeaks); |
| fit->SetParameters(par); |
| fit->SetNpx(300); |
| h2->Fit("fit","Q"); |
| // Get the fitted parameters |
| fittingfunc = h2->GetFunction("fit"); |
| fparam = fittingfunc->GetParameters(); |
| fparamerr = fittingfunc->GetParErrors(); |
| // Fit the histogram |
| fit = new TF1("fit", FindPeaks, adcRange->widgetNE[0]->GetNumber(), adcRange->widgetNE[1]->GetNumber(), 3*npeaks); |
| TVirtualFitter::Fitter(histtemp, 3*npeaks); |
| fit->SetParameters(par); |
| fit->SetNpx(300); |
| h2->Fit("fit","Q"); |
| // Get the fitted parameters |
| fittingfunc = h2->GetFunction("fit"); |
| fparam = fittingfunc->GetParameters(); |
| fparamerr = fittingfunc->GetParErrors(); |
| // Gather the parameters (mean peak value for now) |
| int j = 1; |
| int nrfit = 0; |
| while(1) |
| { |
| if( (fparam[j] < 1.E-30) || (nrfit > 8) ) |
| break; |
| else |
| { |
| // Check if pedestal is above the lower limit and sigma is smaller than the mean |
| if( (fparam[j] > pedesLow->widgetNE[0]->GetNumber()) && ((double)fparamerr[j]/fparam[j] < accError->widgetNE[0]->GetNumber()) ) |
| // Gather the parameters (mean peak value for now) |
| int j = 1; |
| int nrfit = 0; |
| while(1) |
| { |
| if( (fparam[j] < 1.E-30) || (nrfit > 8) ) |
| break; |
| else |
| { |
| // With the additional ADC offset, we can shift the mean values slightly, so they are not close to the X.5, but to the X.0 values |
| meansel[nrfit] = fparam[j]+(adcOffset->widgetNE[0]->GetNumber()); |
| sigmasel[nrfit] = fparam[j+1]; |
| nrfit++; |
| // Check if pedestal is above the lower limit and sigma is smaller than the mean |
| if( (fparam[j] > pedesLow->widgetNE[0]->GetNumber()) && ((double)fparamerr[j]/fparam[j] < accError->widgetNE[0]->GetNumber()) ) |
| { |
| // With the additional ADC offset, we can shift the mean values slightly, so they are not close to the X.5, but to the X.0 values |
| meansel[nrfit] = fparam[j]+(adcOffset->widgetNE[0]->GetNumber()); |
| sigmasel[nrfit] = fparam[j+1]; |
| nrfit++; |
| } |
| } |
| } |
| j+=3; |
| } |
| TMath::Sort(nrfit, meansel, sortindex, kFALSE); |
| j+=3; |
| } |
| TMath::Sort(nrfit, meansel, sortindex, kFALSE); |
| meanparam = meansel[sortindex[0]]; |
| paramsigma = sigmasel[sortindex[0]]; |
| meanparam = meansel[sortindex[0]]; |
| paramsigma = sigmasel[sortindex[0]]; |
| for(j = 0; j < nrfit; j++) |
| if(DBGSIG) |
| printf("PhotonMu(): %d: peak mean = %lf\n", j, meansel[sortindex[j]]); |
| for(j = 0; j < nrfit; j++) |
| if(DBGSIG) |
| printf("PhotonMu(): %d: peak mean = %lf\n", j, meansel[sortindex[j]]); |
| j = 0; |
| adcpedestal[0] = 0; |
| adcpedestal[1] = -1; |
| j = 0; |
| adcpedestal[0] = 0; |
| adcpedestal[1] = -1; |
| while(1) |
| { |
| int bin = histtemp->GetXaxis()->FindBin((int)(j+meanparam+paramsigma)); |
| int yp = histtemp->GetBinContent(bin); |
| while(1) |
| { |
| int bin = histtemp->GetXaxis()->FindBin((int)(j+meanparam+paramsigma)); |
| int yp = histtemp->GetBinContent(bin); |
| // Check where we get to first minimum after pedestal peak or where we get to the half maximum of the pedestal peak (in case there is only a pedestal peak) |
| if(adcpedestal[1] == -1) |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else |
| { |
| if( (npeaks > 1) && (adcpedestal[1] >= yp) ) |
| // Check where we get to first minimum after pedestal peak or where we get to the half maximum of the pedestal peak (in case there is only a pedestal peak) |
| if(adcpedestal[1] == -1) |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else if( (npeaks == 1) && (adcpedestal[0] < meanparam+5*paramsigma) ) // TODO -> Determining the pedestal when only one peak |
| else |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| if( (npeaks > 1) && (adcpedestal[1] >= yp) ) |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else if( (npeaks == 1) && (adcpedestal[0] < meanparam+5*paramsigma) ) // TODO -> Determining the pedestal when only one peak |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else |
| break; |
| } |
| else |
| break; |
| j++; |
| if(j > 50) break; |
| } |
| j++; |
| if(j > 50) break; |
| } |
| if( (npeaks > 1) && (nrfit > 1) ) |
| { |
| int bin = histtemp->GetXaxis()->FindBin((int)(meanparam+meansel[sortindex[1]])/2); |
| adcpedestal[0] = (meanparam+meansel[sortindex[1]])/2; |
| printf("PhotonMu(): multipeak x = %d, ", adcpedestal[0]); |
| adcpedestal[1] = histtemp->GetBinContent(bin); |
| } |
| if(npeaks > 1) |
| { |
| int bin = histtemp->GetXaxis()->FindBin((int)(meanparam+meansel[sortindex[1]])/2); |
| adcpedestal[0] = (meanparam+meansel[sortindex[1]])/2; |
| printf("PhotonMu(): multipeak x = %d, ", adcpedestal[0]); |
| adcpedestal[1] = histtemp->GetBinContent(bin); |
| } |
| if(midPeak->widgetChBox[0]->IsDown()) |
| { |
| if( (meanparam - (int)meanparam >= 0.) && (meanparam - (int)meanparam < 0.5) ) |
| m = TMath::Floor(meanparam); |
| else if( (meanparam - (int)meanparam >= 0.5) && (meanparam - (int)meanparam < 1.) ) |
| m = TMath::Ceil(meanparam); |
| int bin = histtemp->GetXaxis()->FindBin(m); |
| adcpedestal[0] = m; |
| printf("midpeak x = %d, ", adcpedestal[0]); |
| adcpedestal[1] = histtemp->GetBinContent(bin); |
| } |
| if(midPeak->widgetChBox[0]->IsDown()) |
| { |
| if( (meanparam - (int)meanparam >= 0.) && (meanparam - (int)meanparam < 0.5) ) |
| m = TMath::Floor(meanparam); |
| else if( (meanparam - (int)meanparam >= 0.5) && (meanparam - (int)meanparam < 1.) ) |
| m = TMath::Ceil(meanparam); |
| int bin = histtemp->GetXaxis()->FindBin(m); |
| adcpedestal[0] = m; |
| printf("midpeak x = %d, ", adcpedestal[0]); |
| adcpedestal[1] = histtemp->GetBinContent(bin); |
| } |
| /* // Option to show the fit |
| fittingfunc->Draw("L SAME"); |
| analysisCanvas->GetCanvas()->Modified(); |
| analysisCanvas->GetCanvas()->Update();*/ |
| /* // Option to show the fit |
| fittingfunc->Draw("L SAME"); |
| analysisCanvas->GetCanvas()->Modified(); |
| analysisCanvas->GetCanvas()->Update();*/ |
| printf("Pedestal ends = %d and nr. of counts = %d\n", adcpedestal[0], adcpedestal[1]); |
| printf("Pedestal ends = %d and nr. of counts = %d\n", adcpedestal[0], adcpedestal[1]); |
| // Delete the opened histogram and spectrum |
| delete spec; |
| delete inroot; |
| // Delete the opened histogram and spectrum |
| delete spec; |
| delete inroot; |
| } |
| // Open the input file and read header, ADC and TDC values |
| sprintf(ctemp, "%s", files->At(i)->GetTitle()); |
| 994,14 → 1162,7 |
| if( (angle[i] == zeroAngle->widgetNE[0]->GetNumber()) && (darkhist != i) ) |
| zeromu = i; |
| // Checking for errors when fitting a histogram |
| if(k2 == 0) |
| { |
| printf("PhotonMu(): No pedestal entries found. Check the fitting results.\n"); |
| muval[i] = -1; |
| } |
| else |
| muval[i] = -TMath::Log((double)k2/(double)k); |
| muval[i] = -TMath::Log((double)k2/(double)k); |
| printf("PhotonMu(): %lf: muval = %lf\n", angle[i], muval[i]); |
| inroot->Close(); |
| 1018,7 → 1179,7 |
| printf("PhotonMu(): angle\tmu\trelative PDE\n"); |
| m = 0; |
| // Set the 0 degree muval, reuse meansel[1] |
| meansel[1] = muval[zeromu]; |
| printf("Zero value (id=%d, angle=%lf) = %lf\n", zeromu, angle[zeromu], meansel[1]); |
| 1048,10 → 1209,6 |
| if(i == darkhist) |
| exclude = false; |
| // Wrong fit |
| if(muval[i] == -1) |
| exclude = true; |
| // If nothing excluded, pass the points in pointest variable like in a FIFO |
| if(!exclude) |
| { |
| 1312,6 → 1469,7 |
| { |
| // With the additional ADC offset, we can shift the mean values slightly, so they are not close to the X.5, but to the X.0 values |
| meansel[nrfit] = fparam[j]+(adcOffset->widgetNE[0]->GetNumber()); |
| meanselerr[nrfit] = fparamerr[j]; |
| sigmasel[nrfit] = fparam[j+1]; |
| nrfit++; |
| } |
| 1488,6 → 1646,8 |
| exclude = false; |
| } |
| printf("BreakdownVolt(): Calculated separation between peaks %d and %d: sep = %lf, seperr = %lf\n", (int)peakSepCalc->widgetNE[0]->GetNumber()-1, (int)peakSepCalc->widgetNE[0]->GetNumber(), sep[(int)peakSepCalc->widgetNE[0]->GetNumber()-1][p], seperr[(int)peakSepCalc->widgetNE[0]->GetNumber()-1][p]); |
| // Write out parameters to a file |
| fp = fopen(paramname, "a"); |
| if(exclude) |
| 1540,7 → 1700,7 |
| bdplot = new TGraphErrors(p, volt, sep[k-1], volterr, seperr[k-1]); |
| else |
| { |
| printf("BreakdownVold(): Unsupported peak separation selected (%d).\n", k); |
| printf("BreakdownVolt(): Unsupported peak separation selected (%d).\n", k); |
| return; |
| } |
| 1577,7 → 1737,7 |
| sprintf(ctemp, "#splitline{#Delta_{p}(U) = (%.2lf #pm %.2lf)#timesU + (%.2lf #pm %.3lf)}{U_{0} = %.2lf #pm %.3lf}", meansel[0], meanselerr[0], meansel[1], meanselerr[1], meansel[2], meansel[2]*(TMath::Abs(meanselerr[0]/meansel[0]) + TMath::Abs(meanselerr[1]/meansel[1])) ); |
| latex = new TLatex(); |
| latex->SetTextSize(0.039); |
| latex->DrawLatex(volt[0], 0.97*sep[0][sortindex[p-1]], ctemp); |
| latex->DrawLatex(volt[0], 0.97*sep[0][sortindex[1]], ctemp); |
| printf("#Delta_{p}(U) = (%.6lf #pm %.8lf)#timesU + (%.6lf #pm %.8lf)}{U_{0} = %.6lf #pm %.8lf\n", meansel[0], meanselerr[0], meansel[1], meanselerr[1], meansel[2], meansel[2]*(TMath::Abs(meanselerr[0]/meansel[0]) + TMath::Abs(meanselerr[1]/meansel[1])) ); |
| } |
| else |
| 1752,7 → 1912,6 |
| double range[4]; |
| TGraph2D *gScan2D; |
| gScan2D = new TGraph2D(); |
| gScan2D->SetName("surfscan"); |
| range[0] = TMath::MinElement(nrfiles, surfx); |
| range[1] = TMath::MaxElement(nrfiles, surfx); |
| range[2] = TMath::MinElement(nrfiles, surfy); |
| 1855,8 → 2014,6 |
| { |
| gCanvas->Modified(); |
| gCanvas->Update(); |
| UpdateIntegrateSurface(-1); |
| } |
| } |
| } |
| /lab/sipmscan/trunk/src/connections.cpp |
|---|
| 1360,6 → 1360,9 |
| // Start the acquisition |
| void TGAppMainFrame::StartAcq() |
| { |
| // Save measurement settings any time we run a new measurement |
| SaveMeasSettings(); |
| // Variable that will initialize camac only once (for scans) |
| int scanon = 0; |
| /lab/sipmscan/trunk/src/daqscope.C |
|---|
| 2,7 → 2,7 |
| #include <stdlib.h> |
| #include <string.h> |
| #include "../include/vxi11_x86_64/vxi11_user.h" |
| #include "../include/vxi11_i686/vxi11_user.h" |
| #include "../include/daqscope.h" |
| #include "../include/workstation.h" |
| /lab/sipmscan/trunk/src/daqusb.C |
|---|
| 7,7 → 7,7 |
| #include <signal.h> |
| #include <ctype.h> |
| #include <time.h> |
| //#include "../include/wusbxx_dll.h" /* the header of the shared library */ |
| #include "../include/wusbxx_dll.h" /* the header of the shared library */ |
| #include "../include/daq.h" |
| //#define DEBUG /* vkljuci dodatni izpis */ |
| 26,11 → 26,11 |
| //#define NADCCH 8 |
| int ctrlc=0; |
| char *ccserial=(char*)"CC0126"; |
| int devDetect; // variable to tell if we detect any devices |
| //int devDetect; // variable to tell if we detect any devices |
| int daq::connect(){ |
| // odpri daq |
| /* xxusb_device_type devices[100]; |
| xxusb_device_type devices[100]; |
| //struct usb_device *dev; |
| devDetect = xxusb_devices_find(devices); |
| // printf("Detected devices: %d\n", devDetect); |
| 44,16 → 44,16 |
| printf("daq::connect()\n"); |
| } |
| else |
| */ printf("daq::connect() - No devices were detected!\n"); |
| printf("daq::connect() - No devices were detected!\n"); |
| return 0; |
| } |
| int daq::init(int chan = 0){ |
| // int i; |
| // long k; |
| int i; |
| long k; |
| /* DBGFUNI(xxusb_register_write(udev,1,0x0)); // Stop DAQ mode |
| DBGFUNI(xxusb_register_write(udev,1,0x0)); // Stop DAQ mode |
| while (xxusb_usbfifo_read(udev, (int*) stackdump,BUFF_L,100)>0); |
| CCCZ; |
| 115,27 → 115,26 |
| // ret[0] = CAMAC_register_read(udev,1,&k); |
| // printf("k (return %d) -> 0x%08lX\n",ret[0],k); |
| */ printf("daq::init()\n"); |
| printf("daq::init()\n"); |
| return 0; |
| } |
| int daq::start(){ |
| // xxusb_register_write(udev,1,0x1); // Start DAQ mode |
| xxusb_register_write(udev,1,0x1); // Start DAQ mode |
| printf("daq::start()\n"); |
| return 0; |
| } |
| int daq::stop(){ |
| // xxusb_register_write(udev,1,0x0); // Stop DAQ mode |
| // while (xxusb_usbfifo_read(udev,(int *)stackdump,BUFF_L,30)>0); |
| xxusb_register_write(udev,1,0x0); // Stop DAQ mode |
| while (xxusb_usbfifo_read(udev,(int *)stackdump,BUFF_L,30)>0); |
| printf("daq::stop()\n"); |
| return 0; |
| } |
| int daq::event(unsigned int *data, int maxn){ |
| // int ib,count; |
| int count; |
| /* int events,evsize; |
| int ib,count; |
| int events,evsize; |
| short ret; |
| ib=0; |
| 150,7 → 149,7 |
| DBG(printf("Event:%d EvSize:%d\n", events, evsize);) |
| for (int i=0;i<(NTDCCH+NADCCH);i++,ib++) data[count++] =stackdata[ib++]&0xffff; |
| if (stackdata[ib++]!=0xfafb){ |
| printf("Error!\n");, |
| printf("Error!\n"); |
| return 0; |
| } |
| events--; |
| 160,14 → 159,14 |
| printf("Error!\n"); |
| return 0; |
| } |
| */ |
| count = 1; |
| // count = 1; |
| return count; |
| } |
| int daq::disconnect(){ |
| // zapri daq |
| // WUSBXX_close(); |
| WUSBXX_close(); |
| printf("daq::disconnect()\n"); |
| return 0; |
| } |
| 204,7 → 203,7 |
| // intercept routine |
| if (signal (SIGINT, CatchSig) == SIG_E,RR) perror ("sigignore"); |
| if (signal (SIGINT, CatchSig) == SIG_ERR) perror ("sigignore"); |
| #define BSIZE 10000 |
| int i,ieve,nc,nb; |
| 212,8 → 211,8 |
| int hdr[4]={1,(NTDCCH+NADCCH+4)*sizeof(int)}; |
| unsigned short adc; |
| unsigned int data[BSIZE]; |
| daq *d= new daq();, |
| time_t time_check;, |
| daq *d= new daq(); |
| time_t time_check; |
| // odpremo datoteko za pisanje |
| FILE *fp=fopen(fname,"w"); |
| /lab/sipmscan/trunk/src/sipmscan.cpp |
|---|
| 150,7 → 150,7 |
| void TGAppMainFrame::HandleMenu(Int_t id) |
| { |
| // int ret = 0; |
| int ret = 0; |
| char cmd[256]; |
| switch(id) |
| 164,13 → 164,33 |
| break; |
| case M_FILE_SAVE_MSETTINGS: |
| // Here, we save the set values in the measurement layout (automatically done when we safely exit the application and after each start of measurement). |
| SaveMeasSettings(); |
| break; |
| case M_FILE_SAVE_ASETTINGS: |
| // Here, we save the set values in the analysis layout (automatically done when we safely exit the application and after each start of analysis). |
| SaveAnalSettings(); |
| break; |
| case M_FILE_DEF_MSETTINGS: |
| printf("Reseting measurement settings to default.\n"); |
| sprintf(cmd, "cp %s/settings/default_measurement_settings.txt %s/settings/measurement_settings.txt", rootdir, rootdir); |
| ret = system(cmd); |
| break; |
| case M_FILE_DEF_ASETTINGS: |
| printf("Reseting analysis settings to default.\n"); |
| sprintf(cmd, "cp %s/settings/default_analysis_settings.txt %s/settings/analysis_settings.txt", rootdir, rootdir); |
| ret = system(cmd); |
| break; |
| case M_FILE_DEF_SETTINGS: |
| printf("Reseting all settings to default.\n"); |
| sprintf(cmd, "cp %s/settings/default_measurement_settings.txt %s/settings/measurement_settings.txt", rootdir, rootdir); |
| ret = system(cmd); |
| sprintf(cmd, "cp %s/settings/default_analysis_settings.txt %s/settings/analysis_settings.txt", rootdir, rootdir); |
| ret = system(cmd); |
| break; |
| case M_FILE_CHECK_WIDTH: |
| printf("\nSettings window: %dx%d\n", measLayout[0]->GetWidth(), measLayout[0]->GetHeight()); |
| printf("Histogram window: %dx%d\n", measLayout[1]->GetWidth(), measLayout[1]->GetHeight()); |
| 302,6 → 322,9 |
| fMenuFile->AddSeparator(); |
| fMenuFile->AddEntry(new TGHotString("Save current &measurement settings"), M_FILE_SAVE_MSETTINGS); |
| fMenuFile->AddEntry(new TGHotString("Save current &analysis settings"), M_FILE_SAVE_ASETTINGS); |
| fMenuFile->AddEntry(new TGHotString("Set default measurement settings"), M_FILE_DEF_MSETTINGS); |
| fMenuFile->AddEntry(new TGHotString("Set default analysis settings"), M_FILE_DEF_ASETTINGS); |
| fMenuFile->AddEntry(new TGHotString("Set default settings"), M_FILE_DEF_SETTINGS); |
| fMenuFile->AddEntry(new TGHotString("&Check frame width (Testing)"), M_FILE_CHECK_WIDTH); |
| fMenuFile->AddSeparator(); |
| fMenuFile->AddEntry(new TGHotString("E&xit"), M_FILE_EXIT); |
| 533,12 → 556,12 |
| fH2 = new TGCompositeFrame(fG1, 3*subgroup[0]/4, 30, kFixedWidth | kHorizontalFrame); |
| xPos = new TSubStructure(); |
| for(int i = 0; i < 6; i++) numform[i] = 0; |
| numform[0] = 9; numform[3] = 2; numform[4] = -100; numform[5] = 215000; |
| numform[0] = 9; numform[3] = 2; numform[4] = -100; numform[5] = 375000; //numform[4] = -100; numform[5] = 215000; // use commented part if Z is the longer axis and X the shorter |
| if(xPos->TGLabelNEntry(fH2, 8*subgroup[0]/16, 30, "X:", 0, numform, "center")) |
| fH2->AddFrame(xPos->outsidebox, f0centerX); |
| zPosMin = new TSubStructure(); |
| numform[5] = 375000; |
| numform[5] = 215000; //numform[5] = 375000; // use commented part if Z is the longer axis and X the shorter |
| if(zPosMin->TGLabelNEntry(fH2, 8*subgroup[0]/16, 30, "Z (min):", 0, numform, "center")) |
| fH2->AddFrame(zPosMin->outsidebox, f0centerX); |
| fG1->AddFrame(fH2, f1expandXpad); |
| 550,7 → 573,7 |
| fH2->AddFrame(yPos->outsidebox, f0centerX); |
| zPosMax = new TSubStructure(); |
| numform[5] = 375000; |
| numform[5] = 215000; //numform[5] = 375000; // use commented part if Z is the longer axis and X the shorter |
| if(zPosMax->TGLabelNEntry(fH2, 8*subgroup[0]/16, 30, "Z (max):", 0, numform, "center")) |
| fH2->AddFrame(zPosMax->outsidebox, f0centerX); |
| fG1->AddFrame(fH2, f1expandXpad); |
| 557,7 → 580,7 |
| fH2 = new TGCompositeFrame(fG1, 3*subgroup[0]/4, 30, kFixedWidth | kHorizontalFrame); |
| zPos = new TSubStructure(); |
| numform[5] = 375000; |
| numform[5] = 215000; //numform[5] = 375000; // use commented part if Z is the longer axis and X the shorter |
| if(zPos->TGLabelNEntry(fH2, 8*subgroup[0]/16, 30, "Z:", 0, numform, "center")) |
| fH2->AddFrame(zPos->outsidebox, f0centerX); |
| 580,11 → 603,12 |
| fH2 = new TGCompositeFrame(fG1, 3*subgroup[0]/4, 30, kFixedWidth | kHorizontalFrame); |
| xPosMin = new TSubStructure(); |
| for(int i = 0; i < 6; i++) numform[i] = 0; |
| numform[0] = 9; numform[3] = 2; numform[4] = -100; numform[5] = 215000; |
| numform[0] = 9; numform[3] = 2; numform[4] = -100; numform[5] = 375000; //numform[5] = 215000; // use commented part if Z is the longer axis and X the shorter |
| if(xPosMin->TGLabelNEntry(fH2, 8*subgroup[0]/16, 30, "X (min):", 0, numform, "center")) |
| fH2->AddFrame(xPosMin->outsidebox, f0centerX); |
| yPosMin = new TSubStructure(); |
| numform[5] = 215000; |
| if(yPosMin->TGLabelNEntry(fH2, 8*subgroup[0]/16, 30, "Y (min):", 0, numform, "center")) |
| fH2->AddFrame(yPosMin->outsidebox, f0centerX); |
| fG1->AddFrame(fH2, f1expandXpad); |
| 591,10 → 615,12 |
| fH2 = new TGCompositeFrame(fG1, 3*subgroup[0]/4, 30, kFixedWidth | kHorizontalFrame); |
| xPosMax = new TSubStructure(); |
| numform[5] = 375000; //numform[5] = 215000; // use commented part if Z is the longer axis and X the shorter |
| if(xPosMax->TGLabelNEntry(fH2, 8*subgroup[0]/16, 30, "X (max):", 0, numform, "center")) |
| fH2->AddFrame(xPosMax->outsidebox, f0centerX); |
| yPosMax = new TSubStructure(); |
| numform[5] = 215000; |
| if(yPosMax->TGLabelNEntry(fH2, 8*subgroup[0]/16, 30, "Y (max):", 0, numform, "center")) |
| fH2->AddFrame(yPosMax->outsidebox, f0centerX); |
| fG1->AddFrame(fH2, f1expandXpad); |
| 629,11 → 655,18 |
| fG1->AddFrame(rotPos->outsidebox, f1expandXpad); |
| // Set, get, home and reset rotation buttons |
| if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *rotButtons -> 5 buttons (set rotation, read current rotation, home the motor, reset controller and emergency stop)\n"); |
| if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *rotButtons -> 4 buttons (set rotation, read current rotation, home the motor, reset controller)\n"); |
| rotButtons = new TSubStructure(); |
| selnames[0] = "Set"; selnames[1] = "Get"; selnames[2] = "Home"; selnames[3] = "Reset"; selnames[4] = "Emergency stop"; |
| if(rotButtons->TGMultiButton(fG1, 3*subgroup[0]/4, 30, 5, selnames, "center")) |
| selnames[0] = "Set"; selnames[1] = "Get"; selnames[2] = "Home"; selnames[3] = "Reset"; |
| if(rotButtons->TGMultiButton(fG1, 3*subgroup[0]/4, 30, 4, selnames, "center")) |
| fG1->AddFrame(rotButtons->outsidebox, f1expandXpad); |
| // Emergency stop rotation buttons |
| if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *rotButEmergency -> 1 button (emergency stop)\n"); |
| rotButEmergency = new TSubStructure(); |
| selnames[0] = "Emergency stop"; |
| if(rotButEmergency->TGMultiButton(fG1, 3*subgroup[0]/4, 30, 1, selnames, "center")) |
| fG1->AddFrame(rotButEmergency->outsidebox, f1expandXpad); |
| // Rotation scan controls |
| if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *rotPosMin -> Number entry for starting angle\n"); |
| 714,10 → 747,10 |
| Pixel_t pixel_color; |
| gClient->GetColorByName("white", pixel_color); |
| posButtons->widgetTB[4]->SetTextColor(pixel_color); |
| rotButtons->widgetTB[4]->SetTextColor(pixel_color); |
| rotButEmergency->widgetTB[0]->SetTextColor(pixel_color); |
| gClient->GetColorByName("red", pixel_color); |
| posButtons->widgetTB[4]->SetBackgroundColor(pixel_color); |
| rotButtons->widgetTB[4]->SetBackgroundColor(pixel_color); |
| rotButEmergency->widgetTB[0]->SetBackgroundColor(pixel_color); |
| // Actions for Main window //TODO |
| vOutOpt->widgetChBox[0]->Connect("Clicked()", "TGAppMainFrame", this, "NegativePolarity()"); |
| 733,7 → 766,7 |
| rotButtons->widgetTB[1]->Connect("Clicked()", "TGAppMainFrame", this, "RotationSet(=1)"); |
| rotButtons->widgetTB[2]->Connect("Clicked()", "TGAppMainFrame", this, "RotationSet(=2)"); |
| rotButtons->widgetTB[3]->Connect("Clicked()", "TGAppMainFrame", this, "RotationSet(=3)"); |
| rotButtons->widgetTB[4]->Connect("Clicked()", "TGAppMainFrame", this, "RotationSet(=4)"); |
| rotButEmergency->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "RotationSet(=4)"); |
| fileName->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "SaveFile()"); |
| measProgress->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "StartAcq()"); |
| // TODO - Save file |
| 1200,6 → 1233,10 |
| exportHist->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "UpdateHistogram(=1)"); |
| // Histogram controls pane ----------------------------------------------------------------- |
| // Setting starting settings (when opening program) |
| GetMeasSettings(); |
| GetAnalSettings(); |
| } |
| // ------------------------------------------------------------------- |
| /lab/sipmscan/trunk/src/tooltips.cpp |
|---|
| 103,7 → 103,7 |
| SetToolTipText("Move the rotation sample holder to angle 0 deg."); |
| rotButtons->widgetTB[3]-> |
| SetToolTipText("Reposition to 0 deg, reset and initialize controller for the rotation sample holder.\nOnly use, if there is a problem with moving the table. If further problems\noccur, check under \"Movement table\" in the \"Help\" file."); |
| rotButtons->widgetTB[4]-> |
| rotButEmergency->widgetTB[0]-> |
| SetToolTipText("Emergency stop of the rotation samble holder. Use if you know the motor is about to hit something."); |
| evtNum->widgetNE[0]->GetNumberEntry()-> |
| /lab/sipmscan/trunk/src/window_layout.cpp |
|---|
| 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) |
| { |