Re: [ROOT] Storing superposed histos in a root file

From: Sebastien Greder (greder@in2p3.fr)
Date: Fri Apr 26 2002 - 16:09:37 MEST


Hello Rene,

In fact it's what I've done through the following method I wrote and which
is called in my analysis code while a file is opened (i.e is the current
dir).

Plot2in1(hJetStudy109,hJetStudy116,1,0,0,"",111111,5,2) ; // in the ana.
code , and :

void Plot2in1(TH1* hist1, TH1* hist2,
              Bool_t logy = 0, Bool_t logx = 0, Bool_t grid = 0,
	      TString fit = "", 
	      Int_t stati = 111111,Int_t histo1color =0 ,Int_t histo2color
= 0)
{
  TCanvas *c1 = (TCanvas*)gROOT->FindObject("c1");
  if (c1) {c1->Clear();} 
  else {c1 = new TCanvas("c1");}
  
  sebstyle(); // this method sets my default canvas, pad, texts ,etc .. style
  TPad* pad1 = new TPad("pad1","pad",0.03,0.03,0.98,0.98);
  pad1->Draw();
  if (logy) pad1->SetLogy();
  if (logx) pad1->SetLogx();

  pad1->cd();
//  pad1->SetGrid(); 
   
  if(stati != 111111) gStyle->SetOptStat(stati);
  if(histo1color !=0 ) hist1->SetFillColor(histo1color); 
  if(histo2color !=0 ) hist2->SetFillColor(histo2color); 
  if (fit != "") {
  hist1->Fit(fit);
  hist2->Fit(fit);}
  
   TString name1 = hist1->GetName();
   TString name2 = hist2->GetName();
   TString newname = name1+"and"+name2;

  hist1->Draw();
//  hist1->Write(); // is in fact here not neede here since I also wrote a
                       quite similar method for one histo
  hist2->Draw("SAME");
  hist2->Write(newname);  

  c1->Update();
}

 
Moreover, when I set the log scale (by putting the 3rd argument to 1 when
calling the method, this is not retained in the root file, I guess it's
due to the TPad ownership of SetLogy as you already told me and which is
not retained when the command histo->Write() is called, but this is not
the important point here)

I don't do f->Write() since I only want some specified histos to be
written in the root file.

Cheers,

seb.

(I'm using 3.02.07 on  Linux RedHat)

On Fri, 26 Apr 2002, Rene Brun wrote:

> It could be that I misunderstand your question, but why not simply do:
> 
> TFile *f = new TFile("myfile.root","recreate");
> ...
> h1->Draw();
> h1->Write();
> h2->Draw("SAME");
> h2->Write();
> h3->Draw("SAME");
> h3->Write();
> ...
> 
> doing f->Write();
> will write all histograms created with f being the current dir to the file.
> See Users Guide for more details.
> 
> Rene Brun
> 
> Sebastien Greder wrote:
> > 
> > Hello Rooters,
> > 
> > I just have a short question ; I'm running some code to fill histos and
> > want them to be then stored in a root file.
> > To store one histo is obvious but I'd like to superpose several histos and
> > store the final superposed histo in the root file (it would be more
> > practical than superposing after having stored all the histos in
> > the root file).
> > To sum up, I would like to do the same operation like :
> > 
> > h1->Draw();
> > h2->Draw("SAME");
> > h3->Draw("SAME");
> > ...
> > 
> > but while writing the histo in a root file.
> > I can't find out how.
> > Could someone give me some advices about this ??
> > 
> > Thanks in advance,
> > 
> > seb.
> 



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