Subversion Repositories f9daq

Compare Revisions

Ignore whitespace Rev 171 → Rev 172

/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;