/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) |
{ |