Hi Gunasingha,
there are some problems with your macro. The attached version should work.
Axel.
Rat Gunasingha wrote:
> Hi,
> I am using following script(see attached file) to
> draw some histos and
> get
> the mean values
> after doing some fitting.
> In this file I have a while loop, that takes two
> variables tubn, dist from
> a input file and run through it. Before I start this
> in root, I run
> another script to merger several root files.
> and also I do TH1F *h1=new TH1F("h1","
> ",100,0.,1000.);
>
> My question is this.
> Just after the while loop I have a h1->Delete(); line
> to delete the
> histogram from previous one. When this line is, I get
> the following
> error(attached file).
> saying segmentation violation. Without that line (
> h1->Delete() ), Program
> runs and get a warning (see attached file) at each
> histogram. It says potential memory leak when it
> replaces the previous
> one.
> I have copied the warning, ERROR and the script to the
> attached file.
> I am using ROOT 3.10/01 and RedHat Linux 9.0.
> How can I get this fixed.
>
> Thanks,
>
> Gunasingha
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Meet the all-new My Yahoo! - Try it today!
> http://my.yahoo.com
>
ifstream input;
ofstream output;
Double_t average,gausave,dist;
Double_t mini,maxi;
Int_t tubn;
gStyle->SetOptFit();
gStyle->SetStatX(0.9);
gStyle->SetStatY(0.9);
input.open("c_dist.dat");
output.open("39005.dat");
// move outside the loop, no need to do this every iteration
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
output.setf(ios::fixed);
output.setf(ios::showpoint);
output.precision(2);
if(input.fail()){
cout<<" Can not open input file. "<<endl;
exit(1);
}
// create outside the loop, so it is known in all iterations
// set to 0, so the first delete won't do anything.
TH1F* h1=0;
while(input>>tubn>>dist){
cout<<"tubn : "<<tubn<<endl;
delete h1; // delete the provious iteration's histogram
h1=new TH1F("h1"," ",100,0.,1000.);
chain->Draw("cpul>>h1",Form("ctub==39005&&btub==%d",tubn));
average = h1->GetMean();
mini = average - 120;
maxi = average + 120;
h1->GetYaxis()->SetTitle("Counts");
h1->Fit("gaus","R","",mini,maxi);
gausave = h1->GetMean();
h1->GetXaxis()->SetTitle("ADC");
c1->SetFillColor(0);
c1->SaveAs(Form("39005_%d.eps",tubn));
if(gausave!=0.0){
cout<<tubn<<" "<<dist<<" "<<gausave<<endl;
output<<tubn<<" "<<dist<<" "<<gausave<<endl;
}
}
} Received on Fri Feb 18 2005 - 21:49:08 MET
This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:05 MET