Re: [ROOT] Problem with opening and closing file

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Sep 20 2002 - 14:26:08 MEST


Hi Francescoo,

When closing a file, all objects associated with this file in the current
directory in memory are also deleted.
See Chapter "Object Ownsership" at page 107 of the Users Guide.

Your statement 
  delete h1;
deletes an already deleted object. You can remove this statement.

Rene Brun

On Fri, 20 Sep 2002, Perfetto Francesco wrote:

> Hi all,
> I have a problem with the following code:
> I want plotting the histo hdiv2 in the canvas for any values of howbins...
> ...
> 
>   TF1   *f  = new TF1("myfunc",myfunction,-1,.88,0);
>   TFile *f1 = new TFile("analisi_mc.root");
>   TFile *f2 = new TFile("efficienza_Y.root");
>   TH1D  *h1 = new TH1D("h1","daliy_rec",howbins,-1,.88);
>   TH1D  *h2 = new TH1D("h2","eff_Y",howbins,-1,.88);
>   TH1D  *heff = new TH1D("heff","eff_Y" ,howbins,-1,.88);
>   TH1D  *hdiv = new TH1D("hdiv","hdiv" ,howbins,-1,.88);
>   TH1D  *hdiv2 = new TH1D("hdiv2","FIT" ,howbins,-1,.88);
> 
>   tmc->Draw("daliy_mc_rec >> h1","isrec==1");
>   tmc->Draw("daliy_mc >> h2");
>   heff->Sumw2();
>   heff->Divide(h1,h2,1,1,"B");
> 
>   f1->cd();
>   h1 = new TH1D("h1","daliy_rec",howbins,-1,.88);
>   tmc->Draw("daliy_rec >> h1","isrec==1");
>   hdiv->Divide(h1,heff,1,1,"E");
> 
>   Int_t nbins = hdiv->GetNbinsX();
> 
>   for (Int_t i=1;i<=nbins;i++)
>     {
>       Double_t min_bin    = hdiv->GetBinLowEdge(i);
>       Double_t max_bin    = min_bin + hdiv->GetBinWidth(i);
>       Double_t binContent = hdiv->GetBinContent(i);
>       Double_t integrale  = f->Integral(min_bin,max_bin);
>       Double_t div = binContent/(2*integrale);
> 
>       hdiv2->SetBinContent(i,div);
>     }
> 
>   hdiv2->Draw("E");
> 
> If I delete the files open (how in the example)
>   delete f1;
>   delete f2;
>   delete h1;
>   ...
> 
> it do:
> 
> *** Break *** illegal instruction
> Root > Function myfunc() busy flag cleared
> 
> if on the other hand I close the file :
> f1->Close();
> f2->Close();
> it don't give me any error but it don't draw the histogram hdiv2 in the
> canvas.
> Is there someone that can to show me where mistake (possibly wiyh an
> example).
> 
>                                             ManyThanks to all
> 					        Francesco.
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:10 MET