Re: replacing histogram in a loop

From: Axel Naumann <axel_at_fnal.gov>
Date: Fri, 18 Feb 2005 17:07:51 -0600


Hi Gunasingha,

see http://root.cern.ch/root/html/TH1#TH1:Fit, where it says TF1 *myfunc = h->GetFunction("gaus");
is the line to use. It also tells you how to access the fit parameters (mean etc); see "Associated functions", "Access to the fit results".

Axel.

Rat Gunasingha wrote:

> Hi Axel,
>    Thank you for the reply. I tried it and it work
> without giving memory error. 
>  But  the value of h1->GetMean() before the fit and 
>  h1->GetMean() after the gaussian fit are the same.
>  Is there any other command to get the mean value
> after the gaussian fit.(i.e. mean from gaussian fit).
> 
> Thank you,
> 
> Gunasingha
> 
> --- Axel Naumann <axel-naumann_at_gmx.de> wrote:
> 
> 

>>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
>>>
>>
>>>======================== SCRIPT
>>
>>============================
>>
>>
>>{
>> 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;
>> }
>> }
>>
>>}
>>
>>
> 
> 
> 
> 
> 		
> __________________________________ 
> Do you Yahoo!? 
> Read only the mail you want - Yahoo! Mail SpamGuard. 
> http://promotions.yahoo.com/new_mail 
> 
Received on Sat Feb 19 2005 - 00:17:50 MET

This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:05 MET