40,7 → 40,7 |
TGLayoutHints *fMenuBarItemLayout; |
TGPopupMenu *fMenuFile, *fMenuAnalysis, *fMenuTools, *fMenuWindow, *fMenuHelp; |
TGPopupMenu *fMenuHisttype; |
TGMdiSubwindow *settingsPane, *mainSubwindow, *histogramPane, *histogramPaneFile, *histogramPaneCtr; |
TGMdiSubwindow *settingsPane, *mainSubwindow, *histogramPane, *histogramPaneFile, *histogramPaneCtr, *fieldpointPane, *headerPane; |
|
void InitMenu(); |
void MeasurementLayout(); |
79,6 → 79,7 |
void ListMultiSelect(); |
void ListSelectAll(); |
void FileListNavigation(int pn); |
void HeaderEdit(); |
|
void DisplayHistogram(char *histfile, int histtype); |
void SetHistRange(); |
86,7 → 87,7 |
void ChangeChannel(); |
void HistogramExport(); |
void MakeSurfPlot(TList *files); |
void MakeBreakdownPlot(int nrp, double *volt, double *volterr, double *psep1, double *pseperr1, double *psep2, double *pseperr2, double *psep3, double *pseperr3, char *plotfile); |
void MakeBreakdownPlot(int nrp, double *volt, double *volterr, double *psep1, double *pseperr1, double *psep2, double *pseperr2, double *psep3, double *pseperr3, char *plotfile, int separations); |
|
void FitSpectrum(TList *files, int q); |
void EdgeDetection(TGraph *pdf, TGraph *cdf, char *outname, TCanvas *g1dCanvas, double pdfmax, int direction); |
98,7 → 99,11 |
void ExportTempPlot(); |
void GetTempFile(int set); |
|
void RunMeas(void *ptr, int runCase, int zaxisscan); |
void EditTickToggle(int set); |
void headerchange(char *histfile, bool *changetype); |
void headeredit(); |
|
void RunMeas(void *ptr, int runCase, int zaxisscan, int &scanon); |
}; |
|
const char *histExt = ".root"; |
201,6 → 206,7 |
TGCheckButton *multiSelectAll; |
TGTextButton *prevFile; |
TGTextButton *nextFile; |
TGTextButton *editHeader; |
|
TGTextEntry *disptime; |
TGNumberEntry *dispbias; |
226,9 → 232,10 |
TGNumberEntry *fitTresh; |
TGNumberEntry *fitInter; |
TGNumberEntry *accError; |
TGNumberEntry *minPeak; |
TGNumberEntry *pedesLow; |
TGCheckButton *exfitplots; |
|
//TGButtonGroup *sChangroup; |
TGCheckButton *sCH[8]; |
TGComboBox *sMeasType; |
TGCheckButton *sCamaclink; |
252,6 → 259,18 |
TGTextButton *exportTemp; |
//TGTextButton *closeTemp; |
|
TGCheckButton *biasedittick; |
TGNumberEntry *biasedit; |
TGCheckButton *posedittick; |
TGNumberEntry *posedit[3]; |
TGCheckButton *tempedittick; |
TGNumberEntry *tempedit; |
TGCheckButton *angleedittick; |
TGNumberEntry *angleedit; |
TGCheckButton *laseredittick; |
TGTextEntry *laseredit; |
TGTextButton *editHead; |
|
Bool_t firstrun = kTRUE; |
Bool_t started; |
Bool_t cleanPlots = kTRUE; |
834,6 → 853,8 |
tempHour[set]->Select(timeinfo->tm_hour); |
tempMinute[set]->Select(timeinfo->tm_min); |
tempSecond[set]->Select(timeinfo->tm_sec); |
|
inroot->Close(); |
} |
else |
printf("No file selected.\n"); |
868,6 → 889,215 |
|
// -------------------------------------------------------------- |
|
// Header editor functions -------------------------------------- |
|
// Toggle the edit possibility for header entries |
void TGAppMainFrame::EditTickToggle(int set) |
{ |
if(set == 1) |
{ |
if(biasedittick->IsDown()) biasedit->SetState(kTRUE); |
else biasedit->SetState(kFALSE); |
} |
else if(set == 2) |
{ |
if(posedittick->IsDown()) |
{ |
posedit[0]->SetState(kTRUE); |
posedit[1]->SetState(kTRUE); |
posedit[2]->SetState(kTRUE); |
} |
else |
{ |
posedit[0]->SetState(kFALSE); |
posedit[1]->SetState(kFALSE); |
posedit[2]->SetState(kFALSE); |
} |
} |
else if(set == 3) |
{ |
if(tempedittick->IsDown()) tempedit->SetState(kTRUE); |
else tempedit->SetState(kFALSE); |
} |
else if(set == 4) |
{ |
if(angleedittick->IsDown()) angleedit->SetState(kTRUE); |
else angleedit->SetState(kFALSE); |
} |
else if(set == 5) |
{ |
if(laseredittick->IsDown()) laseredit->SetState(kTRUE); |
else laseredit->SetState(kFALSE); |
} |
} |
|
// Run the editing of file headers |
void TGAppMainFrame::headerchange(char *histfile, bool *changetype) |
{ |
if(debug) |
printf("Selected file: %s\n", histfile); |
|
// Preparing input file and the temporary output file |
inroot = new TFile(histfile, "READ"); |
|
char outname[256]; |
sprintf(outname, "%s/results/temp.root", rootdir); |
outroot = new TFile(outname, "RECREATE"); |
|
// Tree structure of input file |
TTree *header_data, *meas_data, *scope_data; |
|
inroot->GetObject("header_data", header_data); |
inroot->GetObject("meas_data", meas_data); |
inroot->GetObject("scope_data", scope_data); |
|
// Tree structure of output file |
TTree *new_meas_data = meas_data->CloneTree(); |
TTree *new_scope_data = scope_data->CloneTree(); |
|
// Save branches from the old header to temporary variables |
header_data->SetBranchAddress("nrch", &evtheader.nrch); |
header_data->GetEntry(0); |
header_data->SetBranchAddress("timestamp", &evtheader.timestamp); |
header_data->GetEntry(0); |
header_data->SetBranchAddress("biasvolt", &evtheader.biasvolt); |
header_data->GetEntry(0); |
header_data->SetBranchAddress("xpos", &evtheader.xpos); |
header_data->GetEntry(0); |
header_data->SetBranchAddress("ypos", &evtheader.ypos); |
header_data->GetEntry(0); |
header_data->SetBranchAddress("zpos", &evtheader.zpos); |
header_data->GetEntry(0); |
header_data->SetBranchAddress("temperature", &evtheader.temperature); |
header_data->GetEntry(0); |
if( header_data->FindBranch("angle") ) |
{ |
header_data->SetBranchAddress("angle", &evtheader.angle); |
header_data->GetEntry(0); |
} |
header_data->SetBranchAddress("laserinfo", &evtheader.laserinfo); |
header_data->GetEntry(0); |
|
int itemp[5] = {0,0,0,0,0}; |
double dtemp[3] = {0.,0.,0.}; |
char ctemp[256]; |
|
itemp[0] = evtheader.nrch; |
itemp[1] = evtheader.timestamp; |
itemp[2] = evtheader.xpos; |
itemp[3] = evtheader.ypos; |
itemp[4] = evtheader.zpos; |
dtemp[0] = evtheader.biasvolt; |
dtemp[1] = evtheader.temperature; |
if( header_data->FindBranch("angle") ) |
dtemp[2] = evtheader.angle; |
else |
dtemp[2] = 0.; |
sprintf(ctemp, "%s", evtheader.laserinfo); |
|
delete header_data; |
delete meas_data; |
delete scope_data; |
inroot->Close(); |
delete inroot; |
|
// 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"); |
new_header_data->Branch("timestamp", &evtheader.timestamp, "timestamp/I"); |
new_header_data->Branch("biasvolt", &evtheader.biasvolt, "biasvolt/D"); |
new_header_data->Branch("xpos", &evtheader.xpos, "xpos/I"); |
new_header_data->Branch("ypos", &evtheader.ypos, "ypos/I"); |
new_header_data->Branch("zpos", &evtheader.zpos, "zpos/I"); |
new_header_data->Branch("temperature", &evtheader.temperature, "temperature/D"); |
new_header_data->Branch("angle", &evtheader.angle, "temperature/D"); |
new_header_data->Branch("laserinfo", &evtheader.laserinfo, "laserinfo/C"); |
|
// Save new values (and old ones where we don't want to edit anything) |
evtheader.nrch = itemp[0]; |
evtheader.timestamp = itemp[1]; |
if(changetype[0]) |
evtheader.biasvolt = (double)biasedit->GetNumber(); |
else |
evtheader.biasvolt = dtemp[0]; |
if(changetype[1]) |
{ |
evtheader.xpos = (int)posedit[0]->GetNumber(); |
evtheader.ypos = (int)posedit[1]->GetNumber(); |
evtheader.zpos = (int)posedit[2]->GetNumber(); |
} |
else |
{ |
evtheader.xpos = itemp[2]; |
evtheader.ypos = itemp[3]; |
evtheader.zpos = itemp[4]; |
} |
if(changetype[2]) |
evtheader.temperature = (double)tempedit->GetNumber(); |
else |
evtheader.temperature = dtemp[1]; |
if(changetype[3]) |
evtheader.angle = (double)angleedit->GetNumber(); |
else |
evtheader.angle = dtemp[2]; |
if(changetype[4]) |
sprintf(evtheader.laserinfo, "%s", laseredit->GetText()); |
else |
sprintf(evtheader.laserinfo, "%s", ctemp); |
|
new_header_data->Fill(); |
|
// Write down the temporary output file |
new_header_data->Write(); |
new_meas_data->Write(); |
new_scope_data->Write(); |
|
delete new_header_data; |
delete new_meas_data; |
delete new_scope_data; |
outroot->Close(); |
delete outroot; |
|
// Replace the original file with temporary output file (and delete temporary file) |
sprintf(outname, "cp -f %s/results/temp.root %s", rootdir, histfile); |
retTemp = system(outname); |
sprintf(outname, "rm -f %s/results/temp.root", rootdir); |
retTemp = system(outname); |
|
printf("Edited header in file: %s\n", histfile); |
} |
|
// Setup the editing of file headers |
void TGAppMainFrame::headeredit() |
{ |
unsigned int nrfiles = fileList->GetNumberOfEntries(); |
TList *files; |
// Changelist: Bias, Position, Temperature, Angle, Laser info |
bool changelist[] = { biasedittick->IsDown(), posedittick->IsDown(), tempedittick->IsDown(), angleedittick->IsDown(), laseredittick->IsDown() }; |
|
if( nrfiles > 0 ) |
{ |
// check the selected file/files and return its name/their names |
files = new TList(); |
fileList->GetSelectedEntries(files); |
if(files) |
{ |
for(int i = 0; i < (int)nrfiles; i++) |
{ |
if(files->At(i)) |
{ |
if(debug) |
printf("Filename: %s\n", files->At(i)->GetTitle()); |
|
headerchange( (char*)(files->At(i)->GetTitle()), changelist ); |
} |
} |
} |
} |
} |
|
// -------------------------------------------------------------- |
|
// Class related functions -------------------------------------- |
|
// Apply the upper voltage limit from settings pane to main window |
1425,7 → 1655,7 |
} |
|
// Make breakdown voltage plot |
void TGAppMainFrame::MakeBreakdownPlot(int nrp, double *volt, double *volterr, double *psep1, double *pseperr1, double *psep2, double *pseperr2, double *psep3, double *pseperr3, char *plotfile) |
void TGAppMainFrame::MakeBreakdownPlot(int nrp, double *volt, double *volterr, double *psep1, double *pseperr1, double *psep2, double *pseperr2, double *psep3, double *pseperr3, char *plotfile, int separations) |
{ |
double fparam[2], fparamerr[2], meanval; |
TLatex *latex; |
1432,12 → 1662,25 |
char ctemp[256]; |
int sortindex[nrp]; |
|
TCanvas *canvas = new TCanvas("canv","canv",900,1200); |
canvas->Divide(1,3); |
|
TCanvas *canvas; |
|
if(separations == 1) |
{ |
canvas = new TCanvas("canv","canv",900,400); |
} |
else if(separations == 2) |
{ |
canvas = new TCanvas("canv","canv",900,800); |
canvas->Divide(1,2); |
} |
else |
{ |
canvas = new TCanvas("canv","canv",900,1200); |
canvas->Divide(1,3); |
} |
|
// First graph is plotted always |
TGraphErrors *gr1 = new TGraphErrors(nrp, volt, psep1, volterr, pseperr1); |
TGraphErrors *gr2 = new TGraphErrors(nrp, volt, psep2, volterr, pseperr2); |
TGraphErrors *gr3 = new TGraphErrors(nrp, volt, psep3, volterr, pseperr3); |
|
if(!cleanPlots) |
gr1->SetTitle("1st - 2nd peak separation"); |
1446,26 → 1689,7 |
gr1->SetLineColor(kBlue); |
gr1->SetMarkerColor(kBlue); |
gr1->SetMarkerStyle(20); |
gr1->SetMarkerSize(0.6); |
|
|
if(!cleanPlots) |
gr2->SetTitle("2nd - 3rd peak separation"); |
else |
gr2->SetTitle(); |
gr2->SetLineColor(kMagenta); |
gr2->SetMarkerColor(kMagenta); |
gr2->SetMarkerStyle(21); |
gr2->SetMarkerSize(0.4); |
|
if(!cleanPlots) |
gr3->SetTitle("3rd - 4th peak separation"); |
else |
gr3->SetTitle(); |
gr3->SetLineColor(kGreen); |
gr3->SetMarkerColor(kGreen); |
gr3->SetMarkerStyle(22); |
gr3->SetMarkerSize(0.6); |
gr1->SetMarkerSize(0.4); |
|
// Plotting the first breakdown voltage plot |
canvas->cd(1); |
1492,67 → 1716,98 |
sprintf(ctemp, "#splitline{#Delta_{p}(U) = (%.2lf #pm %.2lf)#timesU + (%.2lf #pm %.3lf)}{U_{0} = %.2lf #pm %.3lf}", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
latex = new TLatex(); |
latex->SetTextSize(0.039); |
latex->DrawLatex(volt[0]-(volt[1]-volt[0]), 0.97*psep1[sortindex[nrp-1]], ctemp); |
latex->DrawLatex(volt[0], 0.97*psep1[sortindex[nrp-1]], ctemp); |
} |
else |
printf("#Delta_p(U) = (%.2lf #pm %.2lf)*U + (%.2lf #pm %.3lf)\nU_0 = %.2lf #pm %.3lf", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
|
// Plotting the second breakdown voltage plot |
canvas->cd(2); |
gPad->SetGridx(1); |
gPad->SetGridy(1); |
|
gr2->Draw("AP"); |
gr2->GetXaxis()->SetTitle("Bias voltage (V)"); |
gr2->GetYaxis()->SetTitle("Peak separation"); |
gr2->GetYaxis()->CenterTitle(); |
gr2->Fit("pol1","Q"); |
|
TF1 *fit2 = gr2->GetFunction("pol1"); |
fparam[0] = fit2->GetParameter(0); |
fparamerr[0] = fit2->GetParError(0); |
fparam[1] = fit2->GetParameter(1); |
fparamerr[1] = fit2->GetParError(1); |
|
meanval = -fparam[0]/fparam[1]; |
if(!cleanPlots) |
// Second graph |
if(separations > 1) |
{ |
sprintf(ctemp, "#splitline{#Delta_{p}(U) = (%.2lf #pm %.2lf)#timesU + (%.2lf #pm %.3lf)}{U_{0} = %.2lf #pm %.3lf}", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
latex = new TLatex(); |
latex->SetTextSize(0.039); |
latex->DrawLatex(volt[0]-(volt[1]-volt[0]), 0.97*psep2[sortindex[nrp-1]], ctemp); |
TGraphErrors *gr2 = new TGraphErrors(nrp, volt, psep2, volterr, pseperr2); |
|
if(!cleanPlots) |
gr2->SetTitle("2nd - 3rd peak separation"); |
else |
gr2->SetTitle(); |
gr2->SetLineColor(kMagenta); |
gr2->SetMarkerColor(kMagenta); |
gr2->SetMarkerStyle(21); |
gr2->SetMarkerSize(0.4); |
|
// Plotting the second breakdown voltage plot |
canvas->cd(2); |
gPad->SetGridx(1); |
gPad->SetGridy(1); |
|
gr2->Draw("AP"); |
gr2->GetXaxis()->SetTitle("Bias voltage (V)"); |
gr2->GetYaxis()->SetTitle("Peak separation"); |
gr2->GetYaxis()->CenterTitle(); |
gr2->Fit("pol1","Q"); |
|
TF1 *fit2 = gr2->GetFunction("pol1"); |
fparam[0] = fit2->GetParameter(0); |
fparamerr[0] = fit2->GetParError(0); |
fparam[1] = fit2->GetParameter(1); |
fparamerr[1] = fit2->GetParError(1); |
|
meanval = -fparam[0]/fparam[1]; |
if(!cleanPlots) |
{ |
sprintf(ctemp, "#splitline{#Delta_{p}(U) = (%.2lf #pm %.2lf)#timesU + (%.2lf #pm %.3lf)}{U_{0} = %.2lf #pm %.3lf}", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
latex = new TLatex(); |
latex->SetTextSize(0.039); |
latex->DrawLatex(volt[0], 0.97*psep2[sortindex[nrp-1]], ctemp); |
} |
else |
printf("#Delta_p(U) = (%.2lf #pm %.2lf)*U + (%.2lf #pm %.3lf)\nU_0 = %.2lf #pm %.3lf", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
} |
else |
printf("#Delta_p(U) = (%.2lf #pm %.2lf)*U + (%.2lf #pm %.3lf)\nU_0 = %.2lf #pm %.3lf", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
|
// Plotting the third breakdown voltage plot |
canvas->cd(3); |
gPad->SetGridx(1); |
gPad->SetGridy(1); |
|
gr3->Draw("AP"); |
gr3->GetXaxis()->SetTitle("Bias voltage (V)"); |
gr3->GetYaxis()->SetTitle("Peak separation"); |
gr3->GetYaxis()->CenterTitle(); |
gr3->Fit("pol1","Q"); |
|
TF1 *fit3 = gr3->GetFunction("pol1"); |
fparam[0] = fit3->GetParameter(0); |
fparamerr[0] = fit3->GetParError(0); |
fparam[1] = fit3->GetParameter(1); |
fparamerr[1] = fit3->GetParError(1); |
|
meanval = -fparam[0]/fparam[1]; |
if(!cleanPlots) |
// Third graph |
if(separations > 2) |
{ |
sprintf(ctemp, "#splitline{#Delta_{p}(U) = (%.2lf #pm %.2lf)#timesU + (%.2lf #pm %.3lf)}{U_{0} = %.2lf #pm %.3lf}", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
latex = new TLatex(); |
latex->SetTextSize(0.039); |
latex->DrawLatex(volt[0]-(volt[1]-volt[0]), 0.97*psep3[sortindex[nrp-1]], ctemp); |
TGraphErrors *gr3 = new TGraphErrors(nrp, volt, psep3, volterr, pseperr3); |
|
if(!cleanPlots) |
gr3->SetTitle("3rd - 4th peak separation"); |
else |
gr3->SetTitle(); |
gr3->SetLineColor(kGreen); |
gr3->SetMarkerColor(kGreen); |
gr3->SetMarkerStyle(22); |
gr3->SetMarkerSize(0.4); |
|
// Plotting the third breakdown voltage plot |
canvas->cd(3); |
gPad->SetGridx(1); |
gPad->SetGridy(1); |
|
gr3->Draw("AP"); |
gr3->GetXaxis()->SetTitle("Bias voltage (V)"); |
gr3->GetYaxis()->SetTitle("Peak separation"); |
gr3->GetYaxis()->CenterTitle(); |
gr3->Fit("pol1","Q"); |
|
TF1 *fit3 = gr3->GetFunction("pol1"); |
fparam[0] = fit3->GetParameter(0); |
fparamerr[0] = fit3->GetParError(0); |
fparam[1] = fit3->GetParameter(1); |
fparamerr[1] = fit3->GetParError(1); |
|
meanval = -fparam[0]/fparam[1]; |
if(!cleanPlots) |
{ |
sprintf(ctemp, "#splitline{#Delta_{p}(U) = (%.2lf #pm %.2lf)#timesU + (%.2lf #pm %.3lf)}{U_{0} = %.2lf #pm %.3lf}", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
latex = new TLatex(); |
latex->SetTextSize(0.039); |
latex->DrawLatex(volt[0], 0.97*psep3[sortindex[nrp-1]], ctemp); |
} |
else |
printf("#Delta_p(U) = (%.2lf #pm %.2lf)*U + (%.2lf #pm %.3lf)\nU_0 = %.2lf #pm %.3lf", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
} |
else |
printf("#Delta_p(U) = (%.2lf #pm %.2lf)*U + (%.2lf #pm %.3lf)\nU_0 = %.2lf #pm %.3lf", fparam[0], fparamerr[0], fparam[1], fparamerr[1], meanval, meanval*(TMath::Abs(fparamerr[0]/fparam[0]) + TMath::Abs(fparamerr[1]/fparam[1])) ); |
|
// Saving the produced plot |
canvas->SaveAs(plotfile); |
} |
|
1582,21 → 1837,24 |
fp = fopen(paramname, "w"); |
fclose(fp); |
|
int peaklimit = 5; |
int peaklimit = minPeak->GetNumber()+1; // +1 to account for the pedestal peak |
printf("The minimum peak limit is set to: %d\n", peaklimit); |
int p = 0; |
double dtemp; |
double volt[files->GetSize()], volterr[files->GetSize()], sep[3][files->GetSize()], seperr[3][files->GetSize()]; |
int first = 1; |
|
// Initialize all values |
for(int m = 0; m < files->GetSize(); m++) |
{ |
volt[m] = 0; volterr[m] = 0; |
for(int i = 0; i < 3; i++) |
{ sep[i][m] = 0; seperr[i][m] = 0; } |
if(m < 20) { meanparam[m] = 0; meanparamerr[m] = 0; } |
} |
|
for(int m = 0; m < files->GetSize(); m++) |
{ |
for(int i = 0; i < 20; i++) { meanparam[20] = 0; meanparamerr[20] = 0; } |
|
DisplayHistogram( (char*)(files->At(m)->GetTitle()), 0); |
dtemp = evtheader.biasvolt; |
gCanvas->Modified(); |
1624,9 → 1882,7 |
float yp = h2->GetBinContent(bin); |
par[3*i] = yp; |
par[3*i+1] = xp; |
// par[3*i+2] = 3; |
par[3*i+2] = (double)fitSigma->GetNumber(); |
// printf("Peak %d: %f\n", i+1, xp); |
} |
|
// Fit the histogram |
1642,6 → 1898,7 |
// Gather the parameters (mean peak value for now) |
int j = 1; |
int nrfit = 0; |
bool errors = false; |
while(1) |
{ |
if( (fparam[j] < 1.E-30) || (fparamerr[j] < 1.E-10) ) |
1648,7 → 1905,7 |
break; |
else |
{ |
if(fparam[j] > 0) |
if(fparam[j] > pedesLow->GetNumber()) |
{ |
meanparam[nrfit] = fparam[j]; |
meanparamerr[nrfit] = fparamerr[j]; |
1658,68 → 1915,125 |
|
j+=3; |
} |
printf("%d peaks fitted.\n",nrfit); |
|
// Write out parameters to a file |
fp = fopen(paramname, "a"); |
|
TMath::Sort(nrfit, meanparam, sortindex, kFALSE); |
|
// Only save the ones that do not have a too large error on peak separation for the first three peaks |
if( ((TMath::Abs(meanparamerr[sortindex[2]]) + TMath::Abs(meanparamerr[sortindex[1]]))/(meanparam[sortindex[2]] - meanparam[sortindex[1]]) < accError->GetNumber()) && ((TMath::Abs(meanparamerr[sortindex[3]]) + TMath::Abs(meanparamerr[sortindex[2]]))/(meanparam[sortindex[3]] - meanparam[sortindex[2]]) < accError->GetNumber()) && ((TMath::Abs(meanparamerr[sortindex[4]]) + TMath::Abs(meanparamerr[sortindex[3]]))/(meanparam[sortindex[4]] - meanparam[sortindex[3]]) < accError->GetNumber()) ) |
// if( (seperr[0][0]/sep[0][0] < accError->GetNumber()) && (seperr[1][0]/sep[1][0] < accError->GetNumber()) && (seperr[2][0]/sep[2][0] < accError->GetNumber()) ) |
if(nrfit >= peaklimit) |
{ |
fprintf(fp, "%le\t%d\t", dtemp, nrfit); |
TMath::Sort(nrfit, meanparam, sortindex, kFALSE); |
|
for(int i = 0; i < nrfit; i++) |
// Write out parameters to a file |
// fp = fopen(paramname, "a"); |
|
// Only save the ones that do not have a too large error on peak separation for the first three peaks |
// if( ((TMath::Abs(meanparamerr[sortindex[2]]) + TMath::Abs(meanparamerr[sortindex[1]]))/(meanparam[sortindex[2]] - meanparam[sortindex[1]]) < accError->GetNumber()) && ((TMath::Abs(meanparamerr[sortindex[3]]) + TMath::Abs(meanparamerr[sortindex[2]]))/(meanparam[sortindex[3]] - meanparam[sortindex[2]]) < accError->GetNumber()) && ((TMath::Abs(meanparamerr[sortindex[4]]) + TMath::Abs(meanparamerr[sortindex[3]]))/(meanparam[sortindex[4]] - meanparam[sortindex[3]]) < accError->GetNumber()) ) |
// if( (seperr[0][0]/sep[0][0] < accError->GetNumber()) && (seperr[1][0]/sep[1][0] < accError->GetNumber()) && (seperr[2][0]/sep[2][0] < accError->GetNumber()) ) |
// { |
// fprintf(fp, "%le\t%d\t", dtemp, nrfit); |
|
// for(int i = 0; i < nrfit; i++) |
// { |
// if(debug) |
// printf("Peak %d (%lfV): %lf\t%lf\n", i+1, dtemp, meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
// fprintf(fp, "%le\t%le\t", meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
// } |
// printf("\n"); |
// fprintf(fp, "\n"); |
// } |
|
// fclose(fp); |
|
h2->SetStats(0); |
|
gCanvas->Modified(); |
gCanvas->Update(); |
|
// Save each fitting plot |
if(exfitplots->IsDown()) |
{ |
if(debug) |
printf("Peak %d (%lfV): %lf\t%lf\n", i+1, dtemp, meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
fprintf(fp, "%le\t%le\t", meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
remove_ext((char*)files->At(m)->GetTitle(), ctemp); |
sprintf(exportname, "%s_fit.pdf", ctemp); |
gCanvas->SaveAs(exportname); |
} |
printf("\n"); |
fprintf(fp, "\n"); |
} |
|
volt[p] = dtemp; |
volterr[p] = 1.e-4; |
|
fclose(fp); |
if(nrfit == 3) |
{ |
sep[0][p] = meanparam[sortindex[2]] - meanparam[sortindex[1]]; |
seperr[0][p] = TMath::Abs(meanparamerr[sortindex[2]]) + TMath::Abs(meanparamerr[sortindex[1]]); |
|
h2->SetStats(0); |
|
gCanvas->Modified(); |
gCanvas->Update(); |
errors = (seperr[0][p]/sep[0][p] < accError->GetNumber()); |
|
// Save each fitting plot |
if(exfitplots->IsDown()) |
{ |
remove_ext((char*)files->At(m)->GetTitle(), ctemp); |
sprintf(exportname, "%s_fit.pdf", ctemp); |
gCanvas->SaveAs(exportname); |
} |
if(debug) |
printf("p=%d:\t%lf\t%lf\t%lf\n", p, volt[p], sep[0][p], seperr[0][p]); |
} |
else if(nrfit == 4) |
{ |
sep[0][p] = meanparam[sortindex[2]] - meanparam[sortindex[1]]; |
sep[1][p] = meanparam[sortindex[3]] - meanparam[sortindex[2]]; |
seperr[0][p] = TMath::Abs(meanparamerr[sortindex[2]]) + TMath::Abs(meanparamerr[sortindex[1]]); |
seperr[1][p] = TMath::Abs(meanparamerr[sortindex[3]]) + TMath::Abs(meanparamerr[sortindex[2]]); |
|
// Get points for mean peak values and create a breakdown voltage plot |
if(nrfit >= peaklimit) |
{ |
sep[0][p] = meanparam[sortindex[2]] - meanparam[sortindex[1]]; |
sep[1][p] = meanparam[sortindex[3]] - meanparam[sortindex[2]]; |
sep[2][p] = meanparam[sortindex[4]] - meanparam[sortindex[3]]; |
|
seperr[0][p] = TMath::Abs(meanparamerr[sortindex[2]]) + TMath::Abs(meanparamerr[sortindex[1]]); |
seperr[1][p] = TMath::Abs(meanparamerr[sortindex[3]]) + TMath::Abs(meanparamerr[sortindex[2]]); |
seperr[2][p] = TMath::Abs(meanparamerr[sortindex[4]]) + TMath::Abs(meanparamerr[sortindex[3]]); |
|
volt[p] = dtemp; |
volterr[p] = 1.e-4; |
|
if(debug) |
printf("p=%d:\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n", p, volt[p], sep[0][p], seperr[0][p], sep[1][p], seperr[1][p], sep[2][p], seperr[2][p]); |
|
errors = ((seperr[0][p]/sep[0][p] < accError->GetNumber()) && (seperr[1][p]/sep[1][p] < accError->GetNumber())); |
|
if(debug) |
printf("p=%d:\t%lf\t%lf\t%lf\t%lf\t%lf\n", p, volt[p], sep[0][p], seperr[0][p], sep[1][p], seperr[1][p]); |
} |
else if(nrfit > 4) |
{ |
sep[0][p] = meanparam[sortindex[2]] - meanparam[sortindex[1]]; |
sep[1][p] = meanparam[sortindex[3]] - meanparam[sortindex[2]]; |
sep[2][p] = meanparam[sortindex[4]] - meanparam[sortindex[3]]; |
seperr[0][p] = TMath::Abs(meanparamerr[sortindex[2]]) + TMath::Abs(meanparamerr[sortindex[1]]); |
seperr[1][p] = TMath::Abs(meanparamerr[sortindex[3]]) + TMath::Abs(meanparamerr[sortindex[2]]); |
seperr[2][p] = TMath::Abs(meanparamerr[sortindex[4]]) + TMath::Abs(meanparamerr[sortindex[3]]); |
|
errors = ((seperr[0][p]/sep[0][p] < accError->GetNumber()) && (seperr[1][p]/sep[1][p] < accError->GetNumber()) && (seperr[2][p]/sep[2][p] < accError->GetNumber())); |
|
if(debug) |
printf("p=%d:\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n", p, volt[p], sep[0][p], seperr[0][p], sep[1][p], seperr[1][p], sep[2][p], seperr[2][p]); |
} |
|
// Write out parameters to a file |
fp = fopen(paramname, "a"); |
|
// Accept only the points with a small enough error |
if( (seperr[0][p]/sep[0][p] < accError->GetNumber()) && (seperr[1][p]/sep[1][p] < accError->GetNumber()) && (seperr[2][p]/sep[2][p] < accError->GetNumber()) ) |
if( errors ) |
{ |
if(first == 1) |
{ |
fprintf(fp, "%le\t%d\t", dtemp, nrfit); |
|
for(int i = 0; i < nrfit; i++) |
{ |
if(debug) |
printf("Peak %d (%lfV): %lf\t%lf\n", i+1, dtemp, meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
fprintf(fp, "%le\t%le\t", meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
} |
printf("\n"); |
fprintf(fp, "\n"); |
first = 0; |
} |
|
p++; |
} |
else |
printf("Point (at %.2lfV) rejected due to errors: %lf, %lf, %lf\n", volt[p], seperr[0][p]/sep[0][p], seperr[1][p]/sep[1][p], seperr[2][p]/sep[2][p]); |
{ |
if(nrfit == 3) |
printf("Point (at %.2lfV) rejected due to too large errors: %lf\n", volt[p], seperr[0][p]/sep[0][p]); |
else if(nrfit == 4) |
printf("Point (at %.2lfV) rejected due to too large errors: %lf, %lf\n", volt[p], seperr[0][p]/sep[0][p], seperr[1][p]/sep[1][p]); |
else if(nrfit > 4) |
printf("Point (at %.2lfV) rejected due to too large errors: %lf, %lf, %lf\n", volt[p], seperr[0][p]/sep[0][p], seperr[1][p]/sep[1][p], seperr[2][p]/sep[2][p]); |
} |
|
fclose(fp); |
} |
|
if(q == 1) break; |
|
first = 1; |
} |
|
// Plot & fit breakdown voltage plots |
1727,7 → 2041,7 |
{ |
remove_from_last((char*)files->At(0)->GetTitle(), '_', ctemp); |
sprintf(paramname, "%s_breakdown.pdf", ctemp); |
MakeBreakdownPlot(p, volt, volterr, sep[0], seperr[0], sep[1], seperr[1], sep[2], seperr[2], paramname); |
MakeBreakdownPlot(p, volt, volterr, sep[0], seperr[0], sep[1], seperr[1], sep[2], seperr[2], paramname, peaklimit-2); |
} |
} |
|
1905,6 → 2219,7 |
*/ |
integralCount[i] += ((double)m)/((double)k); |
|
inroot->Close(); |
delete inroot; |
} |
} |
2149,24 → 2464,22 |
char ctemp[256]; |
int j, k = 0, m = 0, n = 0, k2 = 0, m2 = 0; |
|
// TCanvas *gCanvas = new TCanvas("canv","canv",900,900); |
TCanvas *gCanvas; |
TTree *header_data, *meas_data; |
double *integralCount, *integralPedestal; |
integralCount = new double[nrfiles]; |
integralPedestal = new double[nrfiles]; |
// double xsurfmin, ysurfmin, zsurfmin; |
double *angle; |
double *pdeval; |
double *muval; |
angle = new double[nrfiles]; |
pdeval = new double[nrfiles]; |
muval = new double[nrfiles]; |
for(int i = 0; i < (int)nrfiles; i++) {integralCount[i] = 0; integralPedestal[i] = 0; } |
|
// TGraph *gScan[2]; // graph for angle dependence |
int nrentries; |
// double minInteg, maxInteg; |
|
// char exportname[256]; |
|
TSpectrum *spec; |
TH1F *histtemp; |
TH1 *histback; |
2291,8 → 2604,16 |
inroot->GetObject("meas_data", meas_data); |
|
// Reading the header |
// header_data->SetBranchAddress("angle", &evtheader.angle); |
// header_data->GetEntry(0); |
if( header_data->FindBranch("angle") ) |
{ |
header_data->SetBranchAddress("angle", &evtheader.angle); |
header_data->GetEntry(0); |
} |
else |
{ |
printf("Error! Selected file has no angle header value. Please edit header to add the angle header value.\n"); |
break; |
} |
|
char rdc[256]; |
j = selectCh->GetNumber(); |
2332,9 → 2653,7 |
} |
} |
|
// angle[i] = (double)(evtheader.angle); |
angle[i] = (double)(i*15.*TMath::ACos(-1.)/180.); // angle in radians |
cout << "Angle = " << angle[i] << endl; |
angle[i] = (double)(evtheader.angle); // angle in radians |
|
// integralCount[i] += ((double)m)/((double)k); |
integralCount[i] += (double)m; |
2344,8 → 2663,10 |
cout << "Integral (" << k2 << " evts) = " << integralPedestal[i] << endl; |
|
muval[i] = -TMath::Log((double)k2/(double)k); |
cout << "Mu = " << muval[i] << endl; |
|
pdeval[i] = muval[i]/(muval[0]*TMath::Cos(angle[i]*TMath::ACos(-1.)/180.)); |
|
inroot->Close(); |
delete inroot; |
} |
} |
2357,12 → 2678,45 |
for(int i = 0; i < (int)files->GetSize(); i++) |
{ |
// Relative PDE calculation |
cout << angle[i] << "\t" << muval[i] << "\t" << muval[i]/(muval[0]*TMath::Cos(angle[i])) << endl; |
cout << angle[i] << "\t" << muval[i] << "\t" << pdeval[i] << endl; |
} |
|
// Plot mu and PDE angle dependance plots |
gCanvas = new TCanvas("canv","canv",1200,900); |
gCanvas->SetGrid(); |
|
TGraph *pde = new TGraph(nrentries, angle, pdeval); |
pde->SetMarkerStyle(21); |
pde->SetMarkerSize(1.0); |
pde->SetMarkerColor(2); |
pde->SetLineWidth(2); |
pde->SetLineColor(2); |
pde->GetXaxis()->SetLabelSize(0.030); |
pde->GetXaxis()->CenterTitle(); |
pde->GetXaxis()->SetRange(-5,90); |
pde->GetXaxis()->SetRangeUser(-5,90); |
pde->GetYaxis()->SetTitleOffset(1.2); |
pde->GetYaxis()->SetLabelSize(0.030); |
pde->GetYaxis()->CenterTitle(); |
pde->GetYaxis()->SetRangeUser(0.3, 1.18); |
pde->Draw("ALP"); |
|
pde->SetTitle(";Incidence angle (#circ);Relative PDE(#theta) / #mu(#theta)"); |
|
TGraph *mugr = new TGraph(nrentries, angle, muval); |
mugr->SetMarkerStyle(20); |
mugr->SetMarkerSize(1.0); |
mugr->SetMarkerColor(4); |
mugr->SetLineWidth(2); |
mugr->SetLineColor(4); |
mugr->Draw("SAME;LP"); |
|
gCanvas->Modified(); |
gCanvas->Update(); |
} |
} |
|
void TGAppMainFrame::RunMeas(void *ptr, int runCase, int zaxisscan) |
void TGAppMainFrame::RunMeas(void *ptr, int runCase, int zaxisscan, int &scanon) |
{ |
printf("Start of Run, run case %d\n", runCase); |
float progVal; |
2553,6 → 2907,11 |
|
if (gDaq) |
{ |
if(scanon == 0) |
{ |
gDaq->init(evtheader.nrch); |
scanon = 1; |
} |
gDaq->fStop=0; |
// Start gathering |
gDaq->start(); |
2643,6 → 3002,9 |
// Start the acquisition |
void TGAppMainFrame::StartAcq() |
{ |
// Variable that will initialize camac only once (for scans) |
int scanon = 0; |
|
// Determine the type of measurement to perform |
int vscan = 0, pscan = 0, zscan = 0; |
if(voltscanOn->IsOn()) vscan = 1; |
2715,7 → 3077,7 |
printf("Continuing...\n"); |
|
// Here comes function to start histogramming <<<<<<<<<<<<<<<<<<<<<<<< |
RunMeas((void*)0, i, 0); |
RunMeas((void*)0, i, 0, scanon); |
fflush(stdout); |
} |
|
2828,7 → 3190,7 |
// for (k=0;k<(NTDCCH+NADCCH)/2;k++) gHisto2D[k]->Reset(); |
|
// Here comes function to start histogramming <<<<<<<<<<<<<<<<<<<<<<<< |
RunMeas((void*)0, (j*repetX + i), zscan ); |
RunMeas((void*)0, (j*repetX + i), zscan , scanon); |
|
fflush(stdout); |
} |
2893,7 → 3255,7 |
started = kTRUE; |
|
printf("Running a single scan...\n"); |
RunMeas((void*)0, 0, 0); |
RunMeas((void*)0, 0, 0, scanon); |
printf("Measurement finished...\n"); |
printf("\n"); |
} |
3035,6 → 3397,12 |
} |
} |
|
// Open the header edit window when pressing on editHeader button |
void TGAppMainFrame::HeaderEdit() |
{ |
OpenWindow(2); |
} |
|
// Display the currently selected histogram in file list |
void TGAppMainFrame::DisplayHistogram(char* histfile, int histtype) |
{ |
3064,8 → 3432,11 |
header_data->GetEntry(0); |
header_data->SetBranchAddress("temperature", &evtheader.temperature); |
header_data->GetEntry(0); |
header_data->SetBranchAddress("angle", &evtheader.angle); |
header_data->GetEntry(0); |
if( header_data->FindBranch("angle") ) |
{ |
header_data->SetBranchAddress("angle", &evtheader.angle); |
header_data->GetEntry(0); |
} |
header_data->SetBranchAddress("laserinfo", &evtheader.laserinfo); |
header_data->GetEntry(0); |
|
3082,8 → 3453,10 |
printf("- Table position (X,Y,Z): %d, %d, %d\n", evtheader.xpos, evtheader.ypos, evtheader.zpos); |
if(evtheader.temperature) |
printf("- Temperature: %lf\n", evtheader.temperature); |
if(evtheader.angle) |
if( header_data->FindBranch("angle") ) |
printf("- Incidence angle: %lf\n", evtheader.angle); |
else |
printf("- Incidence angle: No angle information!\n"); |
printf("- Laser and filter settings: %s\n", evtheader.laserinfo); |
} |
|
3096,7 → 3469,7 |
disptemp->SetNumber(evtheader.temperature); |
else |
disptemp->SetNumber(0.0); |
if(evtheader.angle) |
if( header_data->FindBranch("angle") ) |
dispangle->SetNumber(evtheader.angle); |
else |
dispangle->SetNumber(0.0); |
3386,6 → 3759,7 |
printf("Progress = %lf\n", progVal); |
}*/ |
|
inroot->Close(); |
delete inroot; |
} |
} |
3836,6 → 4210,11 |
fMenuBar->AddPopup(new TGHotString("&Tools"),fMenuTools,fMenuBarItemLayout); |
fMenuBar->AddPopup(new TGHotString("&Windows"),fMenuWindow,fMenuBarItemLayout); |
fMenuBar->AddPopup(new TGHotString("&Help"), fMenuHelp, fMenuBarItemLayout); |
|
// Disable fieldpoint if we are not connected to the IJS network |
#if IJSNET == 0 |
fMenuTools->DisableEntry(M_TOOLS_FIELDPOINT); |
#endif |
} |
|
//--------------------------------------------------------------- |
4426,7 → 4805,7 |
fileList->Resize(300, (3*subwin[1]/7)-10 ); |
mdiFrame->AddFrame(fileList, f2); |
|
// Multiple file selection toggle, previous/next controls and clear list |
// Multiple file selection toggle, previous/next controls, clear list and edit header |
fH1 = new TGHorizontalFrame(mdiFrame, subgroup[0], 30); |
multiSelect = new TGCheckButton(fH1, "Multiple file select"); |
multiSelect->Resize(50,22); |
4444,6 → 4823,12 |
clearList->Resize(80,22); |
fH1->AddFrame(clearList, f0right); |
|
TGTextButton *editHeader = new TGTextButton(fH1, "Edit header"); |
editHeader->SetTextJustify(36); |
editHeader->SetWrapLength(-1); |
editHeader->Resize(80,22); |
fH1->AddFrame(editHeader, f0right); |
|
nextFile = new TGTextButton(fH1, ">>"); |
nextFile->SetTextJustify(36); |
nextFile->SetWrapLength(-1); |
4521,7 → 4906,7 |
mdiFrame = histogramPaneCtr->GetMdiFrame(); |
|
// Control for histogram X range |
subgroup[0] = subwin[0]-10; |
subgroup[0] = subwin[0]-6; |
fG1 = new TGGroupFrame(mdiFrame, "Histogram display"); |
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
lab = new TGLabel(fH1, "ADC range (min, max):"); |
4620,37 → 5005,57 |
// Fitting controls for ADC spectrum |
fG1 = new TGGroupFrame(mdiFrame, "Fit Settings"); |
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
lab = new TGLabel(fH1, "Peak sigma:"); |
fH1->AddFrame(lab, f0centery); |
fitSigma = new TGNumberEntry(fH1, 1.2, 3, 999, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEANonNegative); |
fH2 = new TGHorizontalFrame(fH1, subgroup[0], 30); |
lab = new TGLabel(fH2, "Peak sigma:"); |
fH2->AddFrame(lab, f0centery); |
fitSigma = new TGNumberEntry(fH2, 1.2, 3, 999, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEANonNegative); |
fitSigma->Resize(60,22); |
fH1->AddFrame(fitSigma, f0centery); |
fG1->AddFrame(fH1, f2); |
fH2->AddFrame(fitSigma, f0centery); |
|
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
lab = new TGLabel(fH1, "Signal/Noise treshold:"); |
fH1->AddFrame(lab, f0centery); |
fitTresh = new TGNumberEntry(fH1, 5.0E-3, 3, 999, TGNumberFormat::kNESReal, TGNumberFormat::kNEANonNegative); |
lab = new TGLabel(fH2, " Signal/Noise treshold:"); |
fH2->AddFrame(lab, f0centery); |
fitTresh = new TGNumberEntry(fH2, 5.0E-3, 3, 999, TGNumberFormat::kNESReal, TGNumberFormat::kNEANonNegative); |
fitTresh->Resize(60,22); |
fH1->AddFrame(fitTresh, f0centery); |
fH2->AddFrame(fitTresh, f0centery); |
fH1->AddFrame(fH2, f0centerx); |
fG1->AddFrame(fH1, f2); |
|
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
lab = new TGLabel(fH1, "Background interpolation:"); |
fH1->AddFrame(lab, f0centery); |
fitInter = new TGNumberEntry(fH1, 7, 3, 999, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); |
fH2 = new TGHorizontalFrame(fH1, subgroup[0], 30); |
lab = new TGLabel(fH2, "Background interpolation:"); |
fH2->AddFrame(lab, f0centery); |
fitInter = new TGNumberEntry(fH2, 7, 3, 999, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); |
fitInter->Resize(60,22); |
fH1->AddFrame(fitInter, f0centery); |
fH2->AddFrame(fitInter, f0centery); |
fH1->AddFrame(fH2, f0centerx); |
fG1->AddFrame(fH1, f2); |
|
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
lab = new TGLabel(fH1, "Peak fit max. acceptable error:"); |
fH1->AddFrame(lab, f0centery); |
accError = new TGNumberEntry(fH1, 0.15, 3, 999, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); |
fH2 = new TGHorizontalFrame(fH1, subgroup[0], 30); |
lab = new TGLabel(fH2, "Peak fit max. acceptable error:"); |
fH2->AddFrame(lab, f0centery); |
accError = new TGNumberEntry(fH2, 0.15, 3, 999, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); |
accError->Resize(60,22); |
fH1->AddFrame(accError, f0centery); |
fH2->AddFrame(accError, f0centery); |
fH1->AddFrame(fH2, f0centerx); |
fG1->AddFrame(fH1, f2); |
|
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
fH2 = new TGHorizontalFrame(fH1, subgroup[0], 30); |
lab = new TGLabel(fH2, "Peak min. limit:"); |
fH2->AddFrame(lab, f0centery); |
minPeak = new TGNumberEntry(fH2, 4, 3, 999, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative, TGNumberFormat::kNELLimitMinMax, 2, 20); |
minPeak->Resize(50,22); |
fH2->AddFrame(minPeak, f0centery); |
|
lab = new TGLabel(fH2, " Pedestal lower limit:"); |
fH2->AddFrame(lab, f0centery); |
pedesLow = new TGNumberEntry(fH2, 0.00, 3, 999, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); |
pedesLow->Resize(60,22); |
fH2->AddFrame(pedesLow, f0centery); |
fH1->AddFrame(fH2, f0centerx); |
fG1->AddFrame(fH1, f2); |
|
exfitplots = new TGCheckButton(fG1, "Export fitting plots ON/OFF"); |
exfitplots->Resize(50,22); |
exfitplots->SetState(kButtonUp); |
4686,6 → 5091,7 |
selectDir->Connect("Clicked()", "TGAppMainFrame", this, "SelectDirectory()"); |
multiSelect->Connect("Clicked()", "TGAppMainFrame", this, "ListMultiSelect()"); |
multiSelectAll->Connect("Clicked()", "TGAppMainFrame", this, "ListSelectAll()"); |
editHeader->Connect("Clicked()", "TGAppMainFrame", this, "HeaderEdit()"); |
prevFile->Connect("Clicked()", "TGAppMainFrame", this, "FileListNavigation(=-2)"); |
nextFile->Connect("Clicked()", "TGAppMainFrame", this, "FileListNavigation(=-3)"); |
fileList->Connect("DoubleClicked(Int_t)", "TGAppMainFrame", this, "FileListNavigation(Int_t)"); |
4741,6 → 5147,7 |
{ |
/* WinID: |
* - 1 = fieldpoint temperature sensor |
* - 2 = file header editor |
*/ |
|
TGMdiFrame *mdiFrame; |
4762,8 → 5169,8 |
int yearrange[2]; |
|
subwin[0] = 3*((winWidth/4)-5); subwin[1] = (int)(2*((winHeight/3)-5))+10; |
histogramPaneCtr = new TGMdiSubwindow(fMainFrame, subwin[0], subwin[1]); |
mdiFrame = histogramPaneCtr->GetMdiFrame(); |
fieldpointPane = new TGMdiSubwindow(fMainFrame, subwin[0], subwin[1]); |
mdiFrame = fieldpointPane->GetMdiFrame(); |
|
subgroup[0] = subwin[0]-10; |
subgroup[1] = 7*subwin[1]/12; |
5068,6 → 5475,117 |
// closeTemp->Connect("Clicked()", "TGAppMainFrame", this, "UpdateTempPlot()"); |
} |
// Fieldpoint pane ------------------------------------------------------------------------- |
// |
// Header editor pane ---------------------------------------------------------------------- |
else if(winid == 2) |
{ |
subwin[0] = 12*((winWidth/16)-5); subwin[1] = (int)(1*((winHeight/3)-10)); |
headerPane = new TGMdiSubwindow(fMainFrame, subwin[0], subwin[1]); |
mdiFrame = headerPane->GetMdiFrame(); |
|
subgroup[0] = subwin[0]-10; |
subgroup[1] = 7*subwin[1]/12; |
|
// Changing header info (no timestamp change possible) |
fG1 = new TGGroupFrame(mdiFrame, "Header edit information"); |
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
biasedittick = new TGCheckButton(fH1, "Bias voltage edit: "); |
biasedittick->Resize(80,22); |
biasedittick->SetState(kButtonUp); |
fH1->AddFrame(biasedittick, f0centerx); |
biasedit = new TGNumberEntry(fH1, 0.00, 4, 999, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEANonNegative); |
biasedit->Resize(80,22); |
biasedit->SetState(kFALSE); |
fH1->AddFrame(biasedit, f0centery); |
fG1->AddFrame(fH1, f0); |
|
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
posedittick = new TGCheckButton(fH1, "Table position edit (X, Y, Z): "); |
posedittick->Resize(80,22); |
posedittick->SetState(kButtonUp); |
fH1->AddFrame(posedittick, f0centerx); |
for(int i = 0; i < 3; i++) |
{ |
posedit[i] = new TGNumberEntry(fH1, 0, 6, 999, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber); |
posedit[i]->Resize(80,22); |
posedit[i]->SetState(kFALSE); |
fH1->AddFrame(posedit[i], f0centery); |
} |
fG1->AddFrame(fH1, f0); |
|
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
tempedittick = new TGCheckButton(fH1, "Chamber temperature edit: "); |
tempedittick->Resize(80,22); |
tempedittick->SetState(kButtonUp); |
fH1->AddFrame(tempedittick, f0centerx); |
tempedit = new TGNumberEntry(fH1, 0.00, 6, 999, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAAnyNumber); |
tempedit->Resize(80,22); |
tempedit->SetState(kFALSE); |
fH1->AddFrame(tempedit, f0centery); |
fG1->AddFrame(fH1, f0); |
|
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
angleedittick = new TGCheckButton(fH1, "Incidence angle edit: "); |
angleedittick->Resize(80,22); |
angleedittick->SetState(kButtonUp); |
fH1->AddFrame(angleedittick, f0centerx); |
angleedit = new TGNumberEntry(fH1, 0.00, 6, 999, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAAnyNumber); |
angleedit->Resize(80,22); |
angleedit->SetState(kFALSE); |
fH1->AddFrame(angleedit, f0centery); |
fG1->AddFrame(fH1, f0); |
|
fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
laseredittick = new TGCheckButton(fH1, "Laser settings edit: "); |
laseredittick->Resize(80,22); |
laseredittick->SetState(kButtonUp); |
fH1->AddFrame(laseredittick, f0centerx); |
laseredit = new TGTextEntry(fH1, ""); |
laseredit->Resize(440,22); |
laseredit->SetState(kFALSE); |
fH1->AddFrame(laseredit, f0centery); |
fG1->AddFrame(fH1, f0); |
|
ULong_t fcolor; |
gClient->GetColorByName("red", fcolor); |
|
lab = new TGLabel(fG1, "Note: Tick checkbox in front of each header information you wish to change (for security, they are unticked by default)."); |
fG1->AddFrame(lab, f0centerx); |
lab = new TGLabel(fG1, "Warning: Using button \"Edit header\" will edit headers in all files currently selected in the Histogram file selection window."); |
lab->SetTextColor(fcolor); |
fG1->AddFrame(lab, f0centerx); |
|
mdiFrame->AddFrame(fG1, f2); |
|
editHead = new TGTextButton(mdiFrame, "Edit header"); |
editHead->SetTextJustify(36); |
editHead->SetWrapLength(-1); |
editHead->Resize(80,22); |
mdiFrame->AddFrame(editHead, f0centerx); |
|
mdiFrame->SetMdiHints(kMdiMinimize | kMdiMaximize | kMdiClose); |
mdiFrame->SetWindowName("Edit datafile header"); |
mdiFrame->MapSubwindows(); |
mdiFrame->Layout(); |
mdiFrame->Move(1*((winWidth/12)-5)-30,(int)(1*((winHeight/12)-5))); |
|
// Action connections |
biasedittick->Connect("Clicked()", "TGAppMainFrame", this, "EditTickToggle(=1)"); |
posedittick->Connect("Clicked()", "TGAppMainFrame", this, "EditTickToggle(=2)"); |
tempedittick->Connect("Clicked()", "TGAppMainFrame", this, "EditTickToggle(=3)"); |
angleedittick->Connect("Clicked()", "TGAppMainFrame", this, "EditTickToggle(=4)"); |
laseredittick->Connect("Clicked()", "TGAppMainFrame", this, "EditTickToggle(=5)"); |
editHead->Connect("Clicked()", "TGAppMainFrame", this, "headeredit()"); |
/* updateTemp->Connect("Clicked()", "TGAppMainFrame", this, "UpdateTempPlot()"); |
tempEndOn->Connect("Clicked()", "TGAppMainFrame", this, "TempEndToggle()"); |
exportTemp->Connect("Clicked()", "TGAppMainFrame", this, "ExportTempPlot()"); |
tempFile[0]->Connect("Clicked()", "TGAppMainFrame", this, "GetTempFile(=0)"); |
tempFile[1]->Connect("Clicked()", "TGAppMainFrame", this, "GetTempFile(=1)"); |
*/ } |
// Header editor pane ---------------------------------------------------------------------- |
// |
else |
printf("Window not implemented yet.\n"); |
} |
|
//--------------------------------------------------------------- |
5107,19 → 5625,15 |
|
Bool_t TGMdiSubwindow::CloseWindow() |
{ |
int ret = 0; |
/* int ret = 0; |
|
// if(noq == 0) |
// { |
new TGMsgBox(gClient->GetRoot(), fMdiFrame, |
fMdiFrame->GetWindowName(), "Really want to close the window?", |
kMBIconExclamation, kMBYes | kMBNo, &ret); |
if (ret == kMBYes) return fMdiFrame->CloseWindow(); |
new TGMsgBox(gClient->GetRoot(), fMdiFrame, |
fMdiFrame->GetWindowName(), "Really want to close the window?", |
kMBIconExclamation, kMBYes | kMBNo, &ret); |
if (ret == kMBYes) return fMdiFrame->CloseWindow(); |
|
return kFALSE; |
// } |
// else |
// return fMdiFrame->CloseWindow(); |
return kFALSE;*/ |
return fMdiFrame->CloseWindow(); |
} |
|
//--------------------------------------------------------------- |