Hi all, I should know this but I have files photon_1.root with ntuple phot1 photon_2.root with ntuple phot2 photon_3.root with ntuple phot3 If the file is there I want to return a pointer to it and a pointer to the ntuple it contains. If it is not there, I want to return a pointer to a file ready to write to and a pointer to an ntuple ready to fill. the new TFile and new TNtuple are lost when I go out of scope (I believe) so when I do nin->GetEntries() before leaving I get the anwer when I do it after leaving the function, I get a seg fault. I now its a scope thing but I cannot recall the solution. Core example it is below. Thanks, Kevin Int_t GetNtuple(Int_t stage, TFile *fin, TNtuple *nin) { char fname[256]; sprintf(fname,"photons_%d.root",stage); char ntname[256]; sprintf(ntname,"phot%d",stage); cout << ntname << " " << fname << endl; TFile *tfin = new TFile("photons_1.root","READ"); if (!fin->IsOpen()) { fin = new TFile(fname,"RECREATE"); nin=new TNtuple(ntname,"photons","x:y:z:dx:dy:dz:lambda"); } else { tnin = (TNtuple*)gROOT->FindObject(ntname); } fin=tfin->Copy((TObject*)tfin); nin=tnin->Copy((TObject*)tnin); cout << nin->GetEntries() << endl; //works here (there are 10,000 if file is there else 0) return 0; } int main() { TNtuple *phot1; TFile *f1; Int_t nocode=GetNtuple(1,f1,phot1); cout << phot1->GetEntries() << endl; // segfault } |------------------------------------|---------------------------------| | Kevin Reil | 2575 Sand Hill Road, MS 26 | | X2447, 103D A&E Bldg. 041 | Menlo Park, CA 94025 | |------------------------------------|---------------------------------| | http://www.slac.stanford.edu/~reil | Office (650) 926-2447 | | reil@slac.stanford.edu | Home (650) 938-1767 | | http://reil.no-ip.org | Fax (650) 926-5368 | |----------------------------------------------------------------------| | And my father dwelt in a tent. | |----------------------------------------------------------------------| On Thu, 29 May 2003, Mayly Sanchez wrote: > >Hi Rene, >the root file is here: >http://minos.phy.tufts.edu/msanchez/dchisq90_c.root >Mayly > >On Thursday, May 29, 2003, at 01:47 PM, Rene Brun wrote: > >> Hi Mayly, >> >> Could you send the canvas.root file instead of canvas.gif? >> >> Rene Brun >> >> On Thu, 29 May >> 2003, Mayly Sanchez wrote: >> >>> >>> Thanks Rene, that fixed the contours but now it has a funny problem in >>> the lego plots. For some cases (I still have to determine the >>> pattern), >>> it draws lego plots where part of it shows as a wireframe while the >>> rest seems ok. The best way to explain is a picture: >>> http://minos.phy.tufts.edu/msanchez/dchisq90_lego.gif >>> >>> Any ideas? >>> Mayly >>> >>> On Wednesday, May 21, 2003, at 06:42 PM, Rene Brun wrote: >>> >>>> Hi, >>>> >>>> Some changes have been made in the past few weeks by Olivier Couet >>>> to solve the kind of problems you are reporting. >>>> Take the version from CVS head and install from source. >>>> >>>> Rene Brun >>>> >>>> On Wed, >>>> 21 May 2003, Mayly Sanchez wrote: >>>> >>>>> >>>>> Hi, >>>>> I have a macro for drawing non-equidistant 2d contours that used to >>>>> work before but fails in most recent versions of root. The latest >>>>> test >>>>> has been done with 3.05/05. >>>>> >>>>> Here are the steps I follow: >>>>> {TH2F *ch = new >>>>> TH2F("ch","",nbinx,nbinxmin,nbinxmax,nbiny,nbinymin,nbinymax); >>>>> ch->Fill(x,y,weight); >>>>> ch->SetContour(2); >>>>> ch->SetContourLevel(0,0.0) >>>>> ch->SetContourLevel(1,2.0) >>>>> >>>>> ch->Draw("cont2"); >>>>> } >>>>> >>>>> Now what happens is: that if I do a lego2 plot before drawing the >>>>> contours, the levels are set at the proper heights. Once I have run >>>>> Draw("cont2") or any of the other cont options it recalculates the >>>>> levels in a weird way. It seems to put the first level at the >>>>> GetMinimum value and the second half way between the maximum and the >>>>> minimum, as if it wanted to do equidistant contours. >>>>> >>>>> Did something change? Can I force it to do non-equidistant contours >>>>> again? I need this urgently so any workarounds are welcome, thanks, >>>>> >>>>> Mayly >>>>> >>>>> ps. the method with SetContourLevels(2,vector) was also tested and >>>>> gave >>>>> the same results >>>>> >>>>> >>> > >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:12 MET