/lab/sipmscan/trunk/doc/README |
---|
529,7 → 529,16 |
= 8. Change log === |
=================== |
11.8.2016 (Current Rev): |
??.8.2016 (Current Rev) |
a) Fixed the time estimation for surface and Z-axis scans (TimeEstimateNew). |
b) Did the same as c) in the previous revision, but separately for opening histogram files and for selecting the measurement |
output file. |
c) Added an Emergency stop button to the movement of the table - just in case a wrong value is inserted and there is something |
in the way. |
d) Added a way to integrate the surface scan, when using the "Start and Edit" option. This can be useful for determining the |
angular dependence of the light passing onto a complete camera pixel. |
11.8.2016 (Rev 167): |
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). |
/lab/sipmscan/trunk/include/sipmscan.h |
---|
48,6 → 48,7 |
void layoutMainWindow(int *w, int *h); |
void SeqNumber(int innum, int maxnum, char *outstr); |
void TimeEstimate(clock_t stopw0, time_t time0, float progress, char *retEstim, int offset); |
void TimeEstimateNew(int nr, clock_t stopw0, time_t time0, int rX, int rY, int rZ, int xWait, int yWait, int zWait, char *retEstim); |
void NormateSet(int file, int nrpoint, double *min, double *max, double *setCount, double *setAcc); |
double PointEstimate(int nrp, double *points); |
// Separate functions ----------------------------------------- |
129,6 → 130,9 |
void LayoutSave(); |
void LayoutSet(); |
void ToolTipSet(); |
void ToolTipSetSurfaceScan(); |
void ToolTipSetRelativePDE(); |
void ToolTipSetTempAnalysis(); |
// Subframes where we display everything |
TGCompositeFrame *measLayout[measwin]; |
299,9 → 303,15 |
TSubStructure *runningOff; |
TSubStructure *secondAxis; |
TSubStructure *exportExitAnalysis; |
TSubStructure *xCrop; |
TSubStructure *yCrop; |
TSubStructure *interpolSize; |
TSubStructure *updateCrop; |
// Action connections for temporary analysis edit window (new tab) |
void ApplyRunningAver(); |
void UpdateIntegrateSurface(int val); |
void CloseTempAnalysisTab(int tabval); |
void ExportTempAnalysisPlot(); |
312,8 → 322,9 |
void RunMeas(void *ptr, int runCase, int &scanon); |
int MyTimer(); |
// Open directory |
char *currentOpenDir; |
// Open directory (separate for saving measurement and for opening histograms) |
char *currentMeasDir; |
char *currentAnalDir; |
// ROOT file variable structure ------------------------------- |
struct EventHeader { |
/lab/sipmscan/trunk/src/analysis.cpp |
---|
29,7 → 29,7 |
// cTemp = new char[1024]; |
// sprintf(cTemp, "%s/results", rootdir); |
// file_info.fIniDir = StrDup(cTemp); |
file_info.fIniDir = StrDup(currentOpenDir); |
file_info.fIniDir = StrDup(currentAnalDir); |
file_info.fMultipleSelection = kFALSE; |
new TGFileDialog(gClient->GetDefaultRoot(), fMain, kFDOpen, &file_info); |
// delete[] cTemp; |
58,7 → 58,7 |
} |
else if(analTab->GetCurrent() == 1) // Relative PDE |
{ |
relPde->widgetChBox[1]->SetState(kButtonDown); |
relPde->widgetChBox[0]->SetState(kButtonDown); |
midPeak->widgetChBox[0]->SetState(kButtonUp); |
zeroAngle->widgetNE[0]->SetNumber(0.00); |
} |
370,6 → 370,7 |
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); |
896,7 → 897,7 |
if(j > 50) break; |
} |
if(npeaks > 1) |
if( (npeaks > 1) && (nrfit > 1) ) |
{ |
int bin = histtemp->GetXaxis()->FindBin((int)(meanparam+meansel[sortindex[1]])/2); |
adcpedestal[0] = (meanparam+meansel[sortindex[1]])/2; |
993,7 → 994,14 |
if( (angle[i] == zeroAngle->widgetNE[0]->GetNumber()) && (darkhist != i) ) |
zeromu = i; |
muval[i] = -TMath::Log((double)k2/(double)k); |
// 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); |
printf("PhotonMu(): %lf: muval = %lf\n", angle[i], muval[i]); |
inroot->Close(); |
1040,6 → 1048,10 |
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) |
{ |
1740,6 → 1752,7 |
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); |
1842,6 → 1855,8 |
{ |
gCanvas->Modified(); |
gCanvas->Update(); |
UpdateIntegrateSurface(-1); |
} |
} |
} |
/lab/sipmscan/trunk/src/connections.cpp |
---|
597,7 → 597,6 |
} |
meas_data->Fill(); |
n++; |
sleep(1); |
// Start making a scope measurement |
/* if( (gScopeDaq->scopeUseType == 2) && (sCamaclink->IsDown()) ) |
1210,6 → 1209,32 |
#endif |
PositionSet(1); |
} |
// Abort any motion |
else if(opt == 4) |
{ |
sprintf(cmd, "sudo %s/src/MIKRO/mikro_ctrl -n 1 -c ab", rootdir); // X-axis |
#if WORKSTAT == 'I' |
printf("Emergency stop of the current movement of all linear tables.\n"); |
retTemp = system(cmd); |
#else |
printf("Cmd: %s\n",cmd); |
#endif |
sprintf(cmd, "sudo %s/src/MIKRO/mikro_ctrl -n 2 -c ab", rootdir); // Y-axis |
#if WORKSTAT == 'I' |
retTemp = system(cmd); |
#else |
printf("Cmd: %s\n",cmd); |
#endif |
sprintf(cmd, "sudo %s/src/MIKRO/mikro_ctrl -n 3 -c ab", rootdir); // Z-axis |
#if WORKSTAT == 'I' |
retTemp = system(cmd); |
#else |
printf("Cmd: %s\n",cmd); |
#endif |
PositionSet(1); |
} |
} |
// Set, get, home or reset the rotation platform |
1296,23 → 1321,40 |
#endif |
RotationSet(1); |
} |
// Abort any motion |
else if(opt == 4) |
{ |
sprintf(cmd, "sudo %s/src/MIKRO/mikro_ctrl -n 4 -c ab", rootdir); |
#if WORKSTAT == 'I' |
printf("Emergency stop of the current movement of the rotation platform.\n"); |
retTemp = system(cmd); |
#else |
printf("Cmd: %s\n",cmd); |
#endif |
RotationSet(1); |
} |
} |
// File browser for selecting the save file |
void TGAppMainFrame::SaveFile() |
{ |
// char *cTemp; |
TGFileInfo file_info; |
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(currentMeasDir); |
new TGFileDialog(gClient->GetDefaultRoot(), fMain, kFDSave, &file_info); |
delete[] cTemp; |
// delete[] cTemp; |
if(file_info.fFilename != NULL) |
{ |
fileName->widgetTE->SetText(file_info.fFilename); |
remove_from_last(file_info.fFilename, '/', currentMeasDir); |
} |
} |
// Start the acquisition |
1605,6 → 1647,8 |
measProgress->widgetPB->SetPosition(progVal); |
gVirtualX->Update(1); |
int nrAverMeas = -1; |
clkt0 = clock(); |
timet0 = time(NULL); |
1668,8 → 1712,8 |
progVal = (float)(100.00/(abs(repetX)*abs(repetY)*abs(repetZ)))*(k*abs(repetX)*abs(repetY) + j*abs(repetX) + i); |
measProgress->widgetPB->SetPosition(progVal); |
TimeEstimate(clkt0, timet0, progVal, cmd, doublewait*((abs(repetX)+2)*abs(repetY)+2)*abs(repetZ)); |
measProgress->widgetTE->SetText(cmd); |
// TimeEstimate(clkt0, timet0, progVal, cmd, doublewait*((abs(repetX)+2)*abs(repetY)+2)*abs(repetZ)); |
// measProgress->widgetTE->SetText(cmd); |
gVirtualX->Update(1); |
1687,6 → 1731,9 |
printf("Next X position...\n"); |
fflush(stdout); |
TimeEstimateNew(nrAverMeas, clkt0, timet0, repetX, repetY, repetZ, doublewait, 2*doublewait, 2*doublewait, cmd); |
measProgress->widgetTE->SetText(cmd); |
printf("Waiting for position change...\n"); |
sleep(doublewait); |
1694,8 → 1741,9 |
printf("Continuing...\n"); |
// Here comes function to start histogramming <<<<<<<<<<<<<<<<<<<<<<<< |
clkt0 = clock(); |
RunMeas((void*)0, (j*repetX + i), scanon); |
nrAverMeas++; |
fflush(stdout); |
i++; |
1969,7 → 2017,7 |
// cTemp = new char[1024]; |
// sprintf(cTemp, "%s/results", rootdir); |
// file_info.fIniDir = StrDup(cTemp); |
file_info.fIniDir = StrDup(currentOpenDir); |
file_info.fIniDir = StrDup(currentAnalDir); |
file_info.fMultipleSelection = kTRUE; |
new TGFileDialog(gClient->GetDefaultRoot(), fMain, kFDOpen, &file_info); |
// delete[] cTemp; |
1983,7 → 2031,7 |
while(file=(TSystemFile*)next()) |
{ |
fname = file->GetName(); |
remove_from_last((char*)fname.Data(), '/', currentOpenDir); |
remove_from_last((char*)fname.Data(), '/', currentAnalDir); |
fileList->AddEntry(fname.Data(), i); |
i++; |
} |
/lab/sipmscan/trunk/src/new_tabs.cpp |
---|
588,6 → 588,7 |
if(DBGSIG > 1) printf("TempAnalysisTab(): Current tab = %d, Nr. of tabs = %d\n", startTab, newTab ); |
double numform[6]; |
double numform2[6]; |
int subgroup[2]; |
subgroup[0] = mainTab->GetWidth()-10; |
615,7 → 616,7 |
} |
tempAnalysisCanvas->GetCanvas()->SetGrid(); |
// Specific options for plotting (analtype: 0 = Normal integration, 1 = Edge scans, 2 = Relative PDE,...) |
// Specific options for plotting (analtype: 0 = Normal integration, 1 = Edge scans, 2 = Relative PDE, 3 = Breakdown voltage, 4 = Surface scan, 5 = Timing,...) |
// Normal integration |
if(analtype == 0) |
{ |
653,8 → 654,57 |
runningAver->widgetNE[0]->Connect("ValueSet(Long_t)", "TGAppMainFrame", this, "ApplyRunningAver()"); |
runningOff->widgetNE[0]->Connect("ValueSet(Long_t)", "TGAppMainFrame", this, "ApplyRunningAver()"); |
ToolTipSetRelativePDE(); |
} |
// Breakdown voltage |
else if(analtype == 3) |
{ |
} |
// Surface scan |
else if(analtype == 4) |
{ |
fH1 = new TGCompositeFrame(fV1, subgroup[0], subgroup[1], kHorizontalFrame); |
// Values to create a crop of the graph |
if(DBGSIG > 1) printf("TempAnalysisTab(): Creating TSubStructure *xCrop -> Set how many X parts of the surface scan to crop.\n"); |
xCrop = new TSubStructure(); |
for(int i = 0; i < 6; i++) { numform[i] = 0; numform2[i] = 0; } |
if(posUnitsPlot->widgetCB->GetSelected() == 0) { numform[0] = 8; numform[2] = 2; numform2[0] = 8; numform2[2] = 2; } |
else if(posUnitsPlot->widgetCB->GetSelected() == 1) { numform[0] = 8; numform[1] = 2; numform[2] = 2; numform2[0] = 8; numform2[1] = 2; numform2[2] = 2; } |
if(xCrop->TGLabelDoubleNEntry(fH1, subgroup[0]/4-50, 30, "X axis crop values:", 0, numform, 0, numform2, "center")) |
fH1->AddFrame(xCrop->outsidebox, f1expandXpad); |
if(DBGSIG > 1) printf("TempAnalysisTab(): Creating TSubStructure *yCrop -> Set how many Y parts of the surface scan to crop.\n"); |
yCrop = new TSubStructure(); |
for(int i = 0; i < 6; i++) { numform[i] = 0; numform2[i] = 0; } |
if(posUnitsPlot->widgetCB->GetSelected() == 0) { numform[0] = 8; numform[2] = 2; numform2[0] = 8; numform2[2] = 2; } |
else if(posUnitsPlot->widgetCB->GetSelected() == 1) { numform[0] = 8; numform[1] = 2; numform[2] = 2; numform2[0] = 8; numform2[1] = 2; numform2[2] = 2; } |
if(yCrop->TGLabelDoubleNEntry(fH1, subgroup[0]/4-50, 30, "Y axis crop values:", 0, numform, 0, numform2, "center")) |
fH1->AddFrame(yCrop->outsidebox, f1expandXpad); |
if(DBGSIG > 1) printf("TempAnalysisTab(): Creating TSubStructure *interpolSize -> Set the interpolation step size of the 2D graph.\n"); |
interpolSize = new TSubStructure(); |
for(int i = 0; i < 6; i++) { numform[i] = 0; numform2[i] = 0; } |
if(posUnitsPlot->widgetCB->GetSelected() == 0) { numform[0] = 8; numform[2] = 2; numform2[0] = 8; numform2[2] = 2; } |
else if(posUnitsPlot->widgetCB->GetSelected() == 1) { numform[0] = 8; numform[1] = 2; numform[2] = 2; numform2[0] = 8; numform2[1] = 2; numform2[2] = 2; } |
if(interpolSize->TGLabelDoubleNEntry(fH1, subgroup[0]/4+20, 30, "Interpol. step size:", 500, numform, 500, numform2, "center")) |
fH1->AddFrame(interpolSize->outsidebox, f1expandXpad); |
if(DBGSIG > 1) printf("TempAnalysisTab(): Creating TSubStructure *updateCrop -> 2 buttons for either updating the crop or making an integral\n"); |
updateCrop = new TSubStructure(); |
const char *selnames[512] = {"Update","Integrate surface scan"}; |
if(updateCrop->TGMultiButton(fH1, subgroup[0]/4-50, 30, 2, selnames, "center")) |
fH1->AddFrame(updateCrop->outsidebox, f1expandXpad); |
fV1->AddFrame(fH1, f1expandXpad); |
updateCrop->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "UpdateIntegrateSurface(=0)"); |
updateCrop->widgetTB[1]->Connect("Clicked()", "TGAppMainFrame", this, "UpdateIntegrateSurface(=1)"); |
ToolTipSetSurfaceScan(); |
} |
// Export and close buttons |
if(DBGSIG > 1) printf("TempAnalysisTab(): Creating TSubStructure *exportExitAnalysis -> 2 buttons for either exporting the plot or closing the tab\n"); |
exportExitAnalysis = new TSubStructure(); |
674,6 → 724,8 |
fMain->MapWindow(); |
fMain->Layout(); |
ToolTipSetTempAnalysis(); |
// Set tab ID |
*tabid = newTab; |
775,6 → 827,83 |
} |
} |
void TGAppMainFrame::UpdateIntegrateSurface(int val) |
{ |
TCanvas *gCanvas = tempAnalysisCanvas->GetCanvas(); |
TList *funcList = (TList*)gCanvas->GetListOfPrimitives(); |
unsigned int nrfunc = funcList->GetSize(); |
TGraph2D *baseGr; |
char funcname[512]; |
double integralValue; |
int pointCount; |
double xStepsize, yStepsize; |
int xInterpol, yInterpol; |
for(int i = 0; i < nrfunc; i++) |
{ |
sprintf(funcname, "%s", funcList->At(i)->GetName()); |
if(DBGSIG) printf("UpdateIntegrateSurface(): Function is: %s\n", funcname); |
if(strcmp(funcname,"surfscan") == 0) |
{ |
baseGr = (TGraph2D*)gCanvas->GetPrimitive(funcname); |
// Just set the initial things for the surface scan |
if(val == -1) |
{ |
xCrop->widgetNE[0]->SetNumber(baseGr->GetXaxis()->GetXmin()); |
xCrop->widgetNE[1]->SetNumber(baseGr->GetXaxis()->GetXmax()); |
yCrop->widgetNE[0]->SetNumber(baseGr->GetYaxis()->GetXmin()); |
yCrop->widgetNE[1]->SetNumber(baseGr->GetYaxis()->GetXmax()); |
xCrop->widgetNE[0]->SetLimits(TGNumberFormat::kNELLimitMinMax, baseGr->GetXaxis()->GetXmin(), baseGr->GetXaxis()->GetXmax()); |
xCrop->widgetNE[1]->SetLimits(TGNumberFormat::kNELLimitMinMax, baseGr->GetXaxis()->GetXmin(), baseGr->GetXaxis()->GetXmax()); |
yCrop->widgetNE[0]->SetLimits(TGNumberFormat::kNELLimitMinMax, baseGr->GetYaxis()->GetXmin(), baseGr->GetYaxis()->GetXmax()); |
yCrop->widgetNE[1]->SetLimits(TGNumberFormat::kNELLimitMinMax, baseGr->GetYaxis()->GetXmin(), baseGr->GetYaxis()->GetXmax()); |
} |
// Update the cropping |
else if(val == 0) |
{ |
baseGr->GetXaxis()->SetRange(xCrop->widgetNE[0]->GetNumber(), xCrop->widgetNE[1]->GetNumber()); |
baseGr->GetXaxis()->SetRangeUser(xCrop->widgetNE[0]->GetNumber(), xCrop->widgetNE[1]->GetNumber()); |
baseGr->GetYaxis()->SetRange(yCrop->widgetNE[0]->GetNumber(), yCrop->widgetNE[1]->GetNumber()); |
baseGr->GetYaxis()->SetRangeUser(yCrop->widgetNE[0]->GetNumber(), yCrop->widgetNE[1]->GetNumber()); |
gCanvas->Modified(); |
gCanvas->Update(); |
} |
// Make an integral over all histogram values in range |
else if(val == 1) |
{ |
integralValue = 0; |
pointCount = 0; |
xStepsize = interpolSize->widgetNE[0]->GetNumber(); |
yStepsize = interpolSize->widgetNE[1]->GetNumber(); |
xInterpol = (int)((xCrop->widgetNE[1]->GetNumber() - xCrop->widgetNE[0]->GetNumber())/xStepsize); |
yInterpol = (int)((yCrop->widgetNE[1]->GetNumber() - yCrop->widgetNE[0]->GetNumber())/yStepsize); |
for(int j = 0; j < xInterpol; j++) |
{ |
for(int k = 0; k < yInterpol; k++) |
{ |
if((xCrop->widgetNE[0]->GetNumber()+j*xStepsize+xStepsize/2. <= xCrop->widgetNE[1]->GetNumber()) && (yCrop->widgetNE[0]->GetNumber()+k*yStepsize+yStepsize/2. <= yCrop->widgetNE[1]->GetNumber())) |
{ |
if(DBGSIG) cout << "Interpolation at (" << xCrop->widgetNE[0]->GetNumber()+j*xStepsize+xStepsize/2. << "," << yCrop->widgetNE[0]->GetNumber()+k*yStepsize+yStepsize/2. << ") is " << baseGr->Interpolate(xCrop->widgetNE[0]->GetNumber()+j*xStepsize+xStepsize/2., yCrop->widgetNE[0]->GetNumber()+k*yStepsize+yStepsize/2.) << endl; |
integralValue += baseGr->Interpolate(xCrop->widgetNE[0]->GetNumber()+j*xStepsize+xStepsize/2., yCrop->widgetNE[0]->GetNumber()+k*yStepsize+yStepsize/2.); |
pointCount++; |
} |
} |
} |
cout << "Total integral value (" << pointCount << " points) = " << integralValue << endl << "Total normated integral value = " << (double)integralValue/pointCount << endl; |
} |
} |
} |
} |
void TGAppMainFrame::ExportTempAnalysisPlot() |
{ |
TCanvas *gCanvas = tempAnalysisCanvas->GetCanvas(); |
786,7 → 915,7 |
cTemp = new char[1024]; |
// sprintf(cTemp, "%s/results", rootdir); |
// file_info.fIniDir = StrDup(cTemp); |
file_info.fIniDir = StrDup(currentOpenDir); |
file_info.fIniDir = StrDup(currentAnalDir); |
new TGFileDialog(gClient->GetDefaultRoot(), fMain, kFDSave, &file_info); |
delete[] cTemp; |
/lab/sipmscan/trunk/src/separate_functions.cpp |
---|
165,6 → 165,37 |
sprintf(retEstim, "Estimated end time: %s", ctemp); |
} |
void TimeEstimateNew(int nr, clock_t stopw0, time_t time0, int rX, int rY, int rZ, int xWait, int yWait, int zWait, char *retEstim) |
{ |
clock_t clkt1; |
char ctemp[512]; |
double timeSec; |
double averMeasTime; |
clkt1 = clock() - stopw0; |
if(nr == -1) |
return; |
else if(nr == 0) |
averMeasTime = (double)clkt1/CLOCKS_PER_SEC; |
else |
averMeasTime = (averMeasTime + (double)clkt1/CLOCKS_PER_SEC)/2.0; |
// calculate the time of one row |
timeSec = rX*(xWait + averMeasTime); |
// calculate the time of a surface scan |
timeSec = timeSec + rY*(timeSec + yWait); |
// calculate the time of a zscan |
if(rZ == 1) |
timeSec = timeSec + zWait; |
else |
timeSec = timeSec + rZ*(timeSec + zWait); |
GetTime((int)timeSec+(int)time0, ctemp); |
sprintf(retEstim, "Estimated end time: %s", ctemp); |
printf("TimeEstimateNew(): Average time of measurement = %lf, Measurement time = %lf, Finishing time = %s\n", averMeasTime, timeSec, ctemp); |
} |
void NormateSet(int file, int nrpoint, double *min, double *max, double *setCount, double *setAcc) |
{ |
int count = 0; |
/lab/sipmscan/trunk/src/sipmscan.cpp |
---|
15,8 → 15,10 |
char *cTemp; |
// Prepare the default open directory (basedir) |
currentOpenDir = new char[1024]; |
sprintf(currentOpenDir, "%s/results", rootdir); |
currentMeasDir = new char[1024]; |
sprintf(currentMeasDir, "%s/results", rootdir); |
currentAnalDir = new char[1024]; |
sprintf(currentAnalDir, "%s/results", rootdir); |
// CAMAC and Scope objects |
gDaq = new daq(); |
567,10 → 569,10 |
fG1->AddFrame(fH2, f1expandXpad); |
// Set, get, home and reset position buttons |
if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *posButtons -> 4 buttons (set position, read current position, home the motor and reset all three controllers)\n"); |
if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *posButtons -> 5 buttons (set position, read current position, home the motor, reset all three controllers and emergency stop)\n"); |
posButtons = new TSubStructure(); |
selnames[0] = "Set"; selnames[1] = "Get"; selnames[2] = "Home"; selnames[3] = "Reset"; |
if(posButtons->TGMultiButton(fG1, 3*subgroup[0]/4, 30, 4, selnames, "center")) |
selnames[0] = "Set"; selnames[1] = "Get"; selnames[2] = "Home"; selnames[3] = "Reset"; selnames[4] = "Emergency stop"; |
if(posButtons->TGMultiButton(fG1, 3*subgroup[0]/4, 30, 5, selnames, "center")) |
fG1->AddFrame(posButtons->outsidebox, f1expandXpad); |
// Position scan controls |
627,10 → 629,10 |
fG1->AddFrame(rotPos->outsidebox, f1expandXpad); |
// Set, get, home and reset rotation buttons |
if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *rotButtons -> 4 buttons (set rotation, read current rotation, home the motor and reset controller)\n"); |
if(DBGSIG > 1) printf("AppLayout(): Creating TSubStructure *rotButtons -> 5 buttons (set rotation, read current rotation, home the motor, reset controller and emergency stop)\n"); |
rotButtons = new TSubStructure(); |
selnames[0] = "Set"; selnames[1] = "Get"; selnames[2] = "Home"; selnames[3] = "Reset"; |
if(rotButtons->TGMultiButton(fG1, 3*subgroup[0]/4, 30, 4, selnames, "center")) |
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")) |
fG1->AddFrame(rotButtons->outsidebox, f1expandXpad); |
// Rotation scan controls |
709,6 → 711,14 |
measLayout[2]->AddFrame(measProgress->outsidebox, f1expandXpad); |
} |
Pixel_t pixel_color; |
gClient->GetColorByName("white", pixel_color); |
posButtons->widgetTB[4]->SetTextColor(pixel_color); |
rotButtons->widgetTB[4]->SetTextColor(pixel_color); |
gClient->GetColorByName("red", pixel_color); |
posButtons->widgetTB[4]->SetBackgroundColor(pixel_color); |
rotButtons->widgetTB[4]->SetBackgroundColor(pixel_color); |
// Actions for Main window //TODO |
vOutOpt->widgetChBox[0]->Connect("Clicked()", "TGAppMainFrame", this, "NegativePolarity()"); |
vOutButtons->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "VoltOut(=0)"); |
718,10 → 728,12 |
posButtons->widgetTB[1]->Connect("Clicked()", "TGAppMainFrame", this, "PositionSet(=1)"); |
posButtons->widgetTB[2]->Connect("Clicked()", "TGAppMainFrame", this, "PositionSet(=2)"); |
posButtons->widgetTB[3]->Connect("Clicked()", "TGAppMainFrame", this, "PositionSet(=3)"); |
posButtons->widgetTB[4]->Connect("Clicked()", "TGAppMainFrame", this, "PositionSet(=4)"); |
rotButtons->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "RotationSet(=0)"); |
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)"); |
fileName->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "SaveFile()"); |
measProgress->widgetTB[0]->Connect("Clicked()", "TGAppMainFrame", this, "StartAcq()"); |
// TODO - Save file |
/lab/sipmscan/trunk/src/tooltips.cpp |
---|
84,6 → 84,8 |
SetToolTipText("Move the movement table to its predetermined initial position (home)."); |
posButtons->widgetTB[3]-> |
SetToolTipText("Reset, initialize and home all controllers for the movement table. Only use,\nif there is a problem with moving the table. If further problems\noccur, check under \"Movement table\" in the \"Help\" file."); |
posButtons->widgetTB[4]-> |
SetToolTipText("Emergency stop of all three linear motors. Use if you know the motor is about to hit something."); |
rotPos->widgetNE[0]->GetNumberEntry()-> |
SetToolTipText("Incidence angle of the laser onto the sample (in units set by \"Rotation units\" in the\n\"Settings pane\"). 0 degrees corresponds to perpendicular laser light onto the surface."); |
101,6 → 103,8 |
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]-> |
SetToolTipText("Emergency stop of the rotation samble holder. Use if you know the motor is about to hit something."); |
evtNum->widgetNE[0]->GetNumberEntry()-> |
SetToolTipText("Number of events to obtain before stopping data acquisition."); |
113,6 → 117,8 |
measProgress->widgetTB[0]-> |
SetToolTipText("Start a new measurement. Stopping a measurement before finishing is\nonly possible for single measurements (not for scans)."); |
/* measProgress->widgetTE-> |
SetToolTipText("Estimated time for the current measurement to end.\nIf the system has a heavy load, the time will be higher.");*/ |
// Analysis ------------------------------------------------------------------------- |
// Histogram file selection pane |
252,3 → 258,39 |
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."); |
} |
void TGAppMainFrame::ToolTipSetSurfaceScan() |
{ |
xCrop->widgetNE[0]->GetNumberEntry()-> |
SetToolTipText("Position value to cut on left side of the surface scan."); |
xCrop->widgetNE[1]->GetNumberEntry()-> |
SetToolTipText("Position value to cut on right side of the surface scan."); |
yCrop->widgetNE[0]->GetNumberEntry()-> |
SetToolTipText("Position value to cut on the bottom of the surface scan."); |
yCrop->widgetNE[1]->GetNumberEntry()-> |
SetToolTipText("Position value to cut on the top of the surface scan."); |
interpolSize->widgetNE[0]->GetNumberEntry()-> |
SetToolTipText("Set the step size of X axis to be used for integration."); |
interpolSize->widgetNE[1]->GetNumberEntry()-> |
SetToolTipText("Set the step size of Y axis to be used for integration."); |
updateCrop->widgetTB[0]-> |
SetToolTipText("Update the surface scan to the current cut settings."); |
updateCrop->widgetTB[1]-> |
SetToolTipText("Start integration of the surface scan using the interpolation step size."); |
} |
void TGAppMainFrame::ToolTipSetRelativePDE() |
{ |
runningOff->widgetNE[0]->GetNumberEntry()-> |
SetToolTipText("The offset for the running average estimation."); |
runningAver->widgetNE[0]->GetNumberEntry()-> |
SetToolTipText("Set how many points to use for running average. If set to 0, running average will not be plotted."); |
} |
void TGAppMainFrame::ToolTipSetTempAnalysis() |
{ |
exportExitAnalysis->widgetTB[0]-> |
SetToolTipText("Export the above plot and decide where to save it."); |
exportExitAnalysis->widgetTB[1]-> |
SetToolTipText("Close the temporary analysis tab."); |
} |