Hi,
I tried without success to
- read 48 objects of the type TGraphErrors (no more than 200 points each)
- fit them with a simple fit-function
- display the results in a Canvas which has been divided in 8x6 Pads
Everything works fine until I try to display the results. All TGraphErrors have been found and all fits gave resonable results. But every attempt to draw the results (compiled or interpreted) results in an error of TGraph::Paint
The funny thing is: the program works, if I draw only 13 (or less) Objects rather than 48
Is there any stupid, embarrasing error I am unable to find?
Thanks a lot, Jörn.
void testgfit() {
TGraphErrors* gGraph[48];
TF1* gFitFn[48];
// open file with TGraphErrors
TFile* ff = new TFile ("testg.root");
if (!ff) { cerr << "can't open testg.root" << endl; return; }
for (int i=0; i<48; i++) {
// get the TGraphErrors (works fine, found all)
char graph_name [80];
sprintf (graph_name, "L1.%02d", i+1);
gGraph[i]=(TGraphErrors*) ff->Get(graph_name);
if (gGraph[i] == NULL) {
cerr << "graph " << graph_name << "not found in file" << endl;
gGraph[i]=NULL;
gFitFn[i]=NULL;
continue;
}
// create the fit function (works fine, created all)
char funct_name [80];
sprintf (funct_name, "ftdc%d", i);
TF1* ftdc = new TF1(funct_name, "[0]+[1]*x+[2]*x*x", 0., 4096.);
ftdc->SetParameters(2.,0.05,0.00001);
ftdc->SetLineColor(4);
// do the fit (fitError always 0, indicating successful fit)
int fitError = gGraph[i]->Fit(ftdc,"0q");
if (fitError) {
gFitFn[i] = NULL;
cerr << "fit for " << graph_name << " returns " << fitError << endl;
continue;
}
// store the function to use it later
gFitFn[i] = ftdc;
// all fit parameter very resonable
cout << i << "\t" << gFitFn[i]->GetParameter(1)
<< "\t" << gFitFn[i]->GetParameter(2) << endl;
}
// create canvas to show the results
TCanvas* Csec = new TCanvas("Csec", "Csec", 1024, 768);
Csec->Divide(8, 6, 0.001, 0.001);
// *** Error caused by TGraph::Paint() *** in this loop
for (int i=0; i<48; i++) {
Csec->cd(i+1);
if (gGraph[i]) {
gGraph[i]->Draw("AP");
if (gFitFn[i]) {
gFitFn[i]->Draw("same");
}
}
}
}
testg.root (909 KB)