Subversion Repositories f9daq

Compare Revisions

Ignore whitespace Rev 166 → Rev 167

/lab/sipmscan/trunk/doc/README
529,7 → 529,16
= 8. Change log ===
===================
 
4.4.2016 (Current Rev):
11.8.2016 (Current Rev):
a) When using breakdown voltage or relative PDE analysis and with only one file selected, the analysis is stopped and the fit
is displayed on the graph. This makes it easier to setup fitting settings.
b) Added the possibility to export plots created through analysis ("Start and edit" option).
c) Everytime, when opening a histogram file, the following open and save dialog windows automatically open up in that directory.
This makes it easier to find the directory that was used last.
d) Added a dropdown list to the Analysis tab, so that it is possible to set position units for plots (table units or microns).
e) Normalization to a maximum of 1 now works for surface scans.
 
4.4.2016 (Rev 146):
a) Complete restructure of the program, so that it now runs seperately, not through ROOT (libraries are constructed pre-run).
Program is now split into multiple tabs for easier use, three of which are Measurement, Analysis and Help.
b) Added support for relative PDE measurements with included sample rotation table.
/lab/sipmscan/trunk/doc/documentation.html
511,8 → 511,17
<div class="backtop"><a href="#top">Back to top</a></div>
 
<h2 id="changelog">8. Change log</h2>
<p>4.4.2016 (Current Rev):</p>
<p>11.8.2016 (Current Rev):</p>
<ol type="a">
<li>When using breakdown voltage or relative PDE analysis and with only one file selected, the analysis is stopped and the fit is displayed on the graph. This makes it easier to setup fitting settings.</li>
<li>Added the possibility to export plots created through analysis ("Start and edit" option).</li>
<li>Everytime, when opening a histogram file, the following open and save dialog windows automatically open up in that directory. This makes it easier to find the directory that was used last.</li>
<li>Added a dropdown list to the Analysis tab, so that it is possible to set position units for plots (table units or microns).</li>
<li>Normalization to a maximum of 1 now works for surface scans.</li>
</ol><br/>
 
<p>4.4.2016 (Rev 146):</p>
<ol type="a">
<li>Complete restructure of the program, so that it now runs seperately, not through ROOT (libraries are constructed pre-run). Program is now split into multiple tabs for easier use, three of which are Measurement, Analysis and Help.</li>
<li>Added support for relative PDE measurements with included sample rotation table.</li>
<li>Improvement of analysis part of the program (includes ADC spectrum integration, breakdown voltage characterization, surface scans, relative PDE characterization,...).</li>
/lab/sipmscan/trunk/include/sipmscan.h
219,6 → 219,7
TSubStructure *histOpt;
TSubStructure *exportHist;
TSubStructure *editSelHist;
TSubStructure *posUnitsPlot;
 
// Substructures for analysis pane (analysis layout)
TSubStructure *intSpect;
302,6 → 303,7
// Action connections for temporary analysis edit window (new tab)
void ApplyRunningAver();
void CloseTempAnalysisTab(int tabval);
void ExportTempAnalysisPlot();
 
// Additional functions
void DisplayHistogram(char *histfile, int histtype, int opt);
310,6 → 312,9
void RunMeas(void *ptr, int runCase, int &scanon);
int MyTimer();
 
// Open directory
char *currentOpenDir;
 
// ROOT file variable structure -------------------------------
struct EventHeader {
int nrch;
/lab/sipmscan/trunk/include/workstation.h
11,7 → 11,7
#define IJSNET 0
 
#ifdef WORKSTAT
#define rootdir "/home/gasper/Gasper/Delo/ijs_sipm/sipmscan_standalone"
#define rootdir "/data0/gkukec/private/ijs-sipm/sipmscan/trunk"
#endif
 
// Title colors and font
/lab/sipmscan/trunk/src/analysis.cpp
26,12 → 26,13
const char *filetypes[] = {"Histograms",histextall,0,0};
char *cTemp;
file_info.fFileTypes = filetypes;
cTemp = new char[1024];
sprintf(cTemp, "%s/results", rootdir);
file_info.fIniDir = StrDup(cTemp);
// cTemp = new char[1024];
// sprintf(cTemp, "%s/results", rootdir);
// file_info.fIniDir = StrDup(cTemp);
file_info.fIniDir = StrDup(currentOpenDir);
file_info.fMultipleSelection = kFALSE;
new TGFileDialog(gClient->GetDefaultRoot(), fMain, kFDOpen, &file_info);
delete[] cTemp;
// delete[] cTemp;
 
if(file_info.fFilename != NULL)
{
245,7 → 246,7
}
 
// X, Y and Z values from each file (table units or microns)
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
{
if(direction == 1)
surfxy[i] = (double)(evtheader.xpos);
253,7 → 254,7
surfxy[i] = (double)(evtheader.ypos);
surfz[i] = (double)(evtheader.zpos);
}
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
{
if(direction == 1)
surfxy[i] = (double)(evtheader.xpos*lenconversion);
417,7 → 418,7
gScan2D->GetYaxis()->SetTitleOffset(1.9);
gScan2D->GetYaxis()->CenterTitle(kTRUE);
gScan2D->GetYaxis()->SetLabelSize(0.027);
gScan2D->GetXaxis()->SetLabelOffset(0.02);
gScan2D->GetYaxis()->SetLabelOffset(0.02);
gScan2D->GetYaxis()->SetRangeUser(range[2], range[3]);
gScan2D->GetYaxis()->SetNoExponent(kTRUE);
 
428,16 → 429,16
{
if(direction == 1)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan2D->SetTitle("Laser focal point;X [table units];Z [table units]");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan2D->SetTitle("Laser focal point;X [#mum];Z [#mum]");
}
else if(direction == 2)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan2D->SetTitle("Laser focal point;Y [table units];Z [table units]");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan2D->SetTitle("Laser focal point;Y [#mum];Z [#mum]");
}
}
445,16 → 446,16
{
if(direction == 1)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan2D->SetTitle(";X [table units];Z [table units]");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan2D->SetTitle(";X [#mum];Z [#mum]");
}
else if(direction == 2)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan2D->SetTitle(";Y [table units];Z [table units]");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan2D->SetTitle(";Y [#mum];Z [#mum]");
}
}
583,16 → 584,16
{
if(axis == 1)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan[1]->SetTitle("SiPM edge detection;X [table units];Normalized ADC integral");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan[1]->SetTitle("SiPM edge detection;X [#mum];Normalized ADC integral");
}
else if(axis == 2)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan[1]->SetTitle("SiPM edge detection;Y [table units];Normalized ADC integral");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan[1]->SetTitle("SiPM edge detection;Y [#mum];Normalized ADC integral");
}
}
600,16 → 601,16
{
if(axis == 1)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan[1]->SetTitle(";X [table units];Normalized ADC integral");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan[1]->SetTitle(";X [#mum];Normalized ADC integral");
}
else if(axis == 2)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan[1]->SetTitle(";Y [table units];Normalized ADC integral");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan[1]->SetTitle(";Y [#mum];Normalized ADC integral");
}
}
693,6 → 694,91
{
for(int i = 0; i < (int)nrfiles; i++)
{
if( (nrfiles == 1) || (!multiSelect->widgetChBox[0]->IsDown()) )
{
printf("PhotonMu(): Only one file selected. Not running analysis, just showing the fit.\n");
 
// 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;
// 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);
 
fittingfunc->Draw("SAME");
analysisCanvas->GetCanvas()->Modified();
analysisCanvas->GetCanvas()->Update();
 
meanparam = meansel[sortindex[0]];
paramsigma = sigmasel[sortindex[0]];
 
for(j = 0; j < nrfit; j++)
printf("PhotonMu(): %d: peak mean = %lf\n", j, meansel[sortindex[j]]);
 
 
 
return;
}
if(files->At(i))
{
if(strcmp(files->At(i)->GetTitle(),darkRun->widgetTE->GetText()) == 0)
1011,6 → 1097,17
printf("PhotonMu(): %lf\t%lf\t%lf\n", angle[i], muval[i], pdeval[i]);
}
 
// Check for range of values to plot
double plotMax = 0.;
for(int i = 0; i < (int)nrfiles; i++)
{
plotMax = TMath::Max(plotMax, muval[i]);
plotMax = TMath::Max(plotMax, pdeval[i]);
}
if(plotMax <= 0.)
plotMax = 1.1;
printf("PhotonMu(): Maximum value: %lf\n", plotMax);
 
if(DBGSIG) printf("\n");
if(darkhist != -1)
printf("PhotonMu(): Number of excluded points: %d\n", (nrfiles-1-m));
1035,13 → 1132,15
pde->GetXaxis()->CenterTitle();
// pde->GetXaxis()->SetRange(angle[0],angle[nrfiles-1]);
// pde->GetXaxis()->SetRangeUser(angle[0],angle[nrfiles-1]);
pde->GetXaxis()->SetRange(-90,90);
pde->GetXaxis()->SetRangeUser(-90,90);
pde->GetXaxis()->SetLimits(-90,90);
pde->GetXaxis()->SetRange(-90.0,90.0);
pde->GetXaxis()->SetRangeUser(-90.0,90.0);
pde->GetXaxis()->SetLimits(-90.0,90.0);
pde->GetYaxis()->SetTitleOffset(1.2);
pde->GetYaxis()->SetLabelSize(0.030);
pde->GetYaxis()->CenterTitle();
pde->GetYaxis()->SetRangeUser(0., 1.2);
pde->GetYaxis()->SetRange(0., 1.1*plotMax);
pde->GetYaxis()->SetRangeUser(0., 1.1*plotMax);
pde->GetYaxis()->SetLimits(0., 1.1*plotMax);
pde->SetName("pde");
pde->Draw("ALP");
 
1139,6 → 1238,90
{
for(int i = 0; i < (int)nrfiles; i++)
{
if( (nrfiles == 1) || (!multiSelect->widgetChBox[0]->IsDown()) )
{
printf("BreakdownVolt(): Only one file selected. Not running analysis, just showing the fit.\n");
 
// 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;
// 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);
 
fittingfunc->Draw("SAME");
analysisCanvas->GetCanvas()->Modified();
analysisCanvas->GetCanvas()->Update();
 
meanparam = meansel[sortindex[0]];
meanparamerr = meanselerr[sortindex[0]];
paramsigma = sigmasel[sortindex[0]];
 
for(j = 0; j < nrfit; j++)
printf("BreakdownVolt(): %d: peak mean = %lf, peak err = %lf\n", j, meansel[sortindex[j]], meanselerr[sortindex[j]]);
 
return;
}
if(files->At(i))
{
// Replot the spectrum on analysisCanvas and do not close the input file
1383,9 → 1566,10
latex = new TLatex();
latex->SetTextSize(0.039);
latex->DrawLatex(volt[0], 0.97*sep[0][sortindex[p-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
printf("#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])) );
printf("#Delta_{p}(U) = (%.2lf #pm %.2lf)#timesU + (%.2lf #pm %.3lf)}{U_{0} = %.2lf #pm %.3lf\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])) );
 
if(edit == 0)
{
1423,9 → 1607,9
surfy = new double[nrfiles];
double xsurfmin = 0, ysurfmin = 0;
int nrentries;
// double minInteg, maxInteg;
double minInteg, maxInteg;
bool norm = surfScanOpt->widgetChBox[0]->IsDown();
// double curzval;
double curyval;
// bool edge2d = false;
TCanvas *gCanvas;
1487,7 → 1671,7
}
 
// X, Y and Z values from each file (table units or microns)
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
{
if(n == 1)
{
1498,7 → 1682,7
surfx[i] = (double)(evtheader.xpos);
surfy[i] = (double)(evtheader.ypos);
}
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
{
if(n == 1)
{
1529,60 → 1713,24
nrentries = n;
printf("SurfaceScan(): %d files were selected.\n", nrfiles);
 
// // If only an integral is needed, do not plot and exit here
// if( direction == 0 )
// {
// delete[] integralCount;
// delete[] surfxy;
// delete[] surfz;
// return;
// }
//
// // Current z value and the accumulated counter
// curzval = surfz[0];
// j = 0;
// int acc = 0;
// int zb;
// for(int i = 0; i <= (int)nrfiles; i++)
// {
// // Collect the accumulated integral in order to produce a PDF from a CDF
// // While we are at the same Z value, save under one set
// if( (surfz[i] == curzval) && (acc != nrfiles) )
// {
// integralAcc[j] = integralCount[i];
// if(DBGSIG) printf("IntegSpectrum(): Integral check 1 (i=%d,j=%d,z=%.2lf): %lf\t%lf\n", i, j, surfz[i], integralCount[i], integralAcc[j]);
// j++;
// acc++;
// }
// // When we switch to a new set of Z values and at the end, we must save the previous ones to make 1D edge plots
// else
// {
// // Find minimal and maximal integral values to subtract the offset and normate PDF to 1
// NormateSet(i, j, &minInteg, &maxInteg, integralCount, integralAcc);
//
// if(acc != nrfiles)
// {
// curzval = surfz[i];
// // PDF and CDF plot
// PlotEdgeDistribution(files, i, j, &minInteg, &maxInteg, surfxy, integralAcc, direction, edge2d, edit);
// i--;
// j = 0;
// }
// else
// {
// // PDF and CDF plot
// PlotEdgeDistribution(files, i, j, &minInteg, &maxInteg, surfxy, integralAcc, direction, edge2d, edit);
// i--;
// break;
// }
// }
//
// // Update the progress bar
// progVal = (float)(15.00/nrfiles)*i+75.00;
// analysisProgress->widgetPB->SetPosition(progVal);
// gVirtualX->Update(1);
// }
// Check for Minimum and Maximum values and normalize to 1, if normalization is selected
if(norm)
{
minInteg = TMath::MinElement(nrfiles, integralCount);
for(int i = 0; i < nrfiles; i++)
{
integralCount[i] -= minInteg;
if(DBGSIG) printf("Subtraction: %lf\n", integralCount[i]);
}
 
maxInteg = TMath::MaxElement(nrfiles, integralCount);
for(int i = 0; i < nrfiles; i++)
{
integralCount[i] = integralCount[i]/maxInteg;
if(DBGSIG) printf("Normalization: %lf\n", integralCount[i]);
}
}
 
// Make the 2D surface plot
if(edit == 0)
gCanvas = new TCanvas("canv","canv",1100,900);
1638,16 → 1786,16
if(!cleanPlots)
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan2D->SetTitle("Surface scan;X [table units];Y [table units]");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan2D->SetTitle("Surface scan;X [#mum];Y [#mum]");
}
else
{
if(posUnits->widgetCB->GetSelected() == 0)
if(posUnitsPlot->widgetCB->GetSelected() == 0)
gScan2D->SetTitle(";X [table units];Y [table units]");
else if(posUnits->widgetCB->GetSelected() == 1)
else if(posUnitsPlot->widgetCB->GetSelected() == 1)
gScan2D->SetTitle(";X [#mum];Y [#mum]");
}
/* TGaxis *xax = (TGaxis*)gScan2D->GetXaxis();
1670,10 → 1818,10
gScan2D->GetYaxis()->SetTitleOffset(1.9);
gScan2D->GetYaxis()->CenterTitle(kTRUE);
gScan2D->GetYaxis()->SetLabelSize(0.027);
gScan2D->GetXaxis()->SetLabelOffset(0.02);
gScan2D->GetYaxis()->SetLabelOffset(0.02);
gScan2D->GetYaxis()->SetRangeUser(range[2], range[3]);
gScan2D->GetYaxis()->SetNoExponent(kTRUE);
 
gCanvas->Modified();
gCanvas->Update();
 
/lab/sipmscan/trunk/src/connections.cpp
1961,17 → 1961,18
void TGAppMainFrame::SelectDirectory()
{
int i = fileList->GetNumberOfEntries();
char *cTemp;
// char *cTemp;
 
TGFileInfo file_info;
const char *filetypes[] = {"Histograms",histextall,0,0};
file_info.fFileTypes = filetypes;
cTemp = new char[1024];
sprintf(cTemp, "%s/results", rootdir);
file_info.fIniDir = StrDup(cTemp);
// cTemp = new char[1024];
// sprintf(cTemp, "%s/results", rootdir);
// file_info.fIniDir = StrDup(cTemp);
file_info.fIniDir = StrDup(currentOpenDir);
file_info.fMultipleSelection = kTRUE;
new TGFileDialog(gClient->GetDefaultRoot(), fMain, kFDOpen, &file_info);
delete[] cTemp;
// delete[] cTemp;
 
TList *files = file_info.fFileNamesList;
if(files)
1982,6 → 1983,7
while(file=(TSystemFile*)next())
{
fname = file->GetName();
remove_from_last((char*)fname.Data(), '/', currentOpenDir);
fileList->AddEntry(fname.Data(), i);
i++;
}
/lab/sipmscan/trunk/src/new_tabs.cpp
464,7 → 464,7
delete scope_data;
delete inroot;
printf("HeaderChange(): 6\n");
//printf("HeaderChange(): 6\n");
// Prepare branches for the new header
TTree *new_header_data = new TTree("header_data", "Header information for the measurement.");
new_header_data->Branch("nrch", &evtheader.nrch, "nrch/I");
477,7 → 477,7
new_header_data->Branch("angle", &evtheader.angle, "temperature/D");
new_header_data->Branch("laserinfo", &evtheader.laserinfo, "laserinfo/C");
 
printf("HeaderChange(): 7\n");
//printf("HeaderChange(): 7\n");
// Save new values (and old ones where we don't want to edit anything)
evtheader.nrch = itemp[0];
evtheader.timestamp = itemp[1];
517,7 → 517,7
else
sprintf(evtheader.laserinfo, "%s", ctemp);
 
printf("HeaderChange(): 8\n");
//printf("HeaderChange(): 8\n");
new_header_data->Fill();
 
// Write down the temporary output file
526,7 → 526,7
if(scopeTemp)
new_scope_data->Write();
 
printf("HeaderChange(): 9\n");
//printf("HeaderChange(): 9\n");
delete new_header_data;
delete new_meas_data;
if(scopeTemp)
664,6 → 664,7
 
// Actions for header editor
char cTemp[512];
exportExitAnalysis->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "ExportTempAnalysisPlot()");
sprintf(cTemp, "CloseTempAnalysisTab(=%d)", newTab*100+startTab);
exportExitAnalysis->widgetTB[1]->Connect("Clicked()", "TGAppMainFrame", this, cTemp);
 
774,4 → 775,23
}
}
 
void TGAppMainFrame::ExportTempAnalysisPlot()
{
TCanvas *gCanvas = tempAnalysisCanvas->GetCanvas();
 
TGFileInfo file_info;
const char *filetypes[] = {"PDF","*.pdf","Encapsulated PostScript (.eps)","*.eps", "JPG/JPEG", "*.jpg", "PNG", "*.png",0,0};
char *cTemp;
file_info.fFileTypes = filetypes;
cTemp = new char[1024];
// sprintf(cTemp, "%s/results", rootdir);
// file_info.fIniDir = StrDup(cTemp);
file_info.fIniDir = StrDup(currentOpenDir);
new TGFileDialog(gClient->GetDefaultRoot(), fMain, kFDSave, &file_info);
delete[] cTemp;
 
if(file_info.fFilename != NULL)
gCanvas->SaveAs(file_info.fFilename);
}
 
// Temporary analysis window ------------------------------------------
/lab/sipmscan/trunk/src/sipmscan.cpp
14,6 → 14,10
 
char *cTemp;
 
// Prepare the default open directory (basedir)
currentOpenDir = new char[1024];
sprintf(currentOpenDir, "%s/results", rootdir);
 
// CAMAC and Scope objects
gDaq = new daq();
gScopeDaq = new daqscope();
1155,6 → 1159,14
if(editSelHist->TGLabelButton(analysisLayout[3], subgroup[0], 30, "Edit selected histograms:", "Edit", "center"))
analysisLayout[3]->AddFrame(editSelHist->outsidebox, f1expandXpad);
 
// Select position units to use for ploting (micrometer, table position units)
if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *posUnitsPlot -> Dropdown menu for selecting the position units for ploting\n");
posUnitsPlot = new TSubStructure();
selnames[0] = "table units"; selnames[1] = "micrometers";
sprintf(selected, "table units");
if(posUnitsPlot->TGLabelDrop(analysisLayout[3], 2.*subgroup[0]/3., 30, "Position units for plots:", 2, selnames, selected))
analysisLayout[3]->AddFrame(posUnitsPlot->outsidebox, f0centerX);
 
// Actions for histogram controls pane //TODO
for(int i = 0; i < 2; i++)
{
/lab/sipmscan/trunk/src/tooltips.cpp
162,7 → 162,7
SetToolTipText("Replace the current \"Integrate spectrum\" settings with default settings.");
 
relPde->widgetChBox[0]->
SetToolTipText("Normalize the ADC integral to the number of events ([ADC integral]/[Nr. of events]).");
SetToolTipText("Normalize the ADC integral so that it is in a range between 0 and 1.");
midPeak->widgetChBox[0]->
SetToolTipText("Instead of taking the complete pedestal peak as noise, take only half of the peak.");
darkRun->widgetTE->
190,7 → 190,7
SetToolTipText("Replace the current \"Breakdown voltage\" settings with default settings.");
 
surfScanOpt->widgetChBox[0]->
SetToolTipText("Normalize the ADC integral to the number of events ([ADC integral]/[Nr. of events]).");
SetToolTipText("Normalize the ADC integral so that it is in a range between 0 and 1.");
surfScanOpt->widgetChBox[1]->
SetToolTipText("Start the X and Y axis values from zero in the bottom left corner of the 2D plot,\ninstead of taking the actual position of the table.");
resolSurf->widgetNE[0]->GetNumberEntry()->
250,4 → 250,5
SetToolTipText("Export the currently selected histogram (ADC, TDC or\nADC/TDC from selected files) into the .pdf format.");
editSelHist->widgetTB[0]->
SetToolTipText("Open the currently visible plot in the \"Histogram\"\nwindow in a new tab to enable further editing.");
// posUnitsPlot->widgetTB[0]->SetToolTipText("Open the currently visible plot in the \"Histogram\"\nwindow in a new tab to enable further editing.");
}