Hi Philippe, thanks for your time. But I do think it will be better if the TNtuple::Draw() method (or TTree::Draw()) not only look for the histograms in the gDirectory, but also look for the histograms in the memory. Just a thought... Weijiang On Mon, 21 Jul 2003, Philippe Canal wrote: > Hi, > > Do: > TFile f(input); > TCut runcut=cut1 && cut2 && cut3; > TTree *all = (TTree*)f.Get("all"); > > TFile fout(output,"RECREATE"); > TH1F *pointetah = new TH1F("pointetah","emc point eta",80,-1,1); > > all->Draw("pointeta>>pointetah",runcut); > > fout.Write(); > > The problem is that > > all->Draw("pointeta>>pointetah",runcut); > > looks for an histogram named 'pointetah' in the current ROOT directory > and if it does not find one, create one with that name. > > In your script, you create histrograms which are stored in the current > directory > at the time (gROOT) and then open the input file, which becomes the current > directory. all->Draw does not find the histograms in this new current > directory > and thus creates some new ones (and display them properly). Later when you > call > Write on the histogram pointers, the first histograms (that were held in > gROOT > and are still empty) are saved in the file. > > Cheers, > Philippe. > > > -----Original Message----- > From: owner-roottalk@pcroot.cern.ch > [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Weijiang Dong > Sent: Monday, July 21, 2003 7:59 PM > To: roottalk@pcroot.cern.ch > Subject: [ROOT] TNtuple::Draw("sth>>hist") and hist->Write() didn't work > > > Hi, > I have a root file which contains a Ntuple. I want to draw some of the > variables in the Ntuple into a few histograms and save the histograms into > a new root file. I have a macro to do this. When the macro ran, root > didn't complain anything. But later when I open the new root file, the > histogram keys were visible, but they were all empty. Need your help! > btw, when I do it step by step, I can see the histrograms were correctly > plotted on the canvas, but none of them were correctly wrote into the new > root file. > > here is my macro(xbadrun.C): > > xbadrun(const char* input, const char* output) > { > > TH1F *pointetah = new TH1F("pointetah","emc point eta",80,-1,1); > TH1F *pointphih = new TH1F("pointphih","emc point > phi",240,-TMath::Pi(),TMath::Pi()); > > TH2F *pointetaphih = new TH2F("pointetaphih","emc point eta and > phi",80,-1,1,240,-TMath::Pi(),TMath::Pi()); > TFile f(input); > TCut cut1="RunId!=4033025"; > TCut cut2="RunId!=4034002"; > TCut cut3="RunId!=4034005"; > TCut runcut=cut1 && cut2 && cut3; > > all->Draw("pointeta>>pointetah",runcut); > all->Draw("pointphi>>pointphih",runcut); > all->Draw("pointeta:pointphi>>pointetaphih",runcut); > > TFile fout(output,"RECREATE"); > fout.cd(); > pointetah->Write(); > pointphih->Write(); > pointetaphih->Write(); > > fout.Close(); > f.Close(); > } > > Thanks. > Weijiang > > >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:13 MET