I’m having a problem trying to plot a TGraphAsymmErrors plot in a loop, where sometimes points need to be removed if they are less than a certain value. The y, eyl and eyh (y, y error low, and y error high) are stored in 2D arrays.
float x[14] = {,,,}; // not including numbers for sake of clarity and ease
float exl[14] = {,,,};
float exh[14] = {,,,};
float y[14][46] = {,,,};
float eyl[14][46] = {,,,};
float eyh[14][46] = {,,,};
for(int j=0; j<46; j++)
{
TCanvas *c1 = new TCanvas("c1","Cross Section",10,10,900,500);
gr = new TGraphAsymmErrors(14);
for(int i=0;i<14;i++)
{
if(y[i][j] > 1e-7)
{
gr->SetPoint(i,x[i],y[i][j];
gr->SetPointError(i,exl[i],exh[i],eyl[i][j],eyh[i][j];
}
}
gr->Draw("AP");
}
This works for one loop, but as soon as I have points that don’t meet the IF statement, then points stick around from the previous loop. I fixed this by using
but then I get garbage in the absent points, rather than them simply being absent.
If I remove the IF condition from SetPoint and instead add
if(y[i][j] < 1e-7)
{
gr->RemovePoint(i);
}
after the SetPoint section, then I get duplicate points (a second y value for same x value), using the x value from the next lowest defined point but a different y value (from the previous loop). If I reset the plot (using the gr->Set(0) command), I get garbage data in those removed points.
If I use the IF statements for both SetPoint and RemovePoint, the same thing happens with the duplicate points (and I get garbage data with gr->Set(0) between main loop iterations).
Any strategies I can try to get around this? I want the points completely removed from the plot in a given iteration of the main loop, not just set to 0 or whatever’s in memory.