Rene,
When I first create the ntuple, then use code like append2 to append,
it not only overwrites the entries, but i only get the last
entry saved. Is that code right? Using the append method I get all the
data, but the "factorial" type saving makes the file HUGE. Below is my
minimal code segment, for the append 2 type save:
void StRichPadMonitor::doResiduals(){
TFile * residFile = new TFile("resid.root","NEW");
TNtuple * residNtuple = 0;
int appending = 0;
float tempArray = {1,2,3,4,5,6,7,8,9,10,11};
if( !residFile->IsOpen() ){
delete residFile;
residFile = new TFile("resid.root","UPDATE");
residNtuple = (TNtuple*)residFile->Get("residNtuple");
appending = 1;
cout << "appending" << endl;
}
else{
residNtuple =
new TNtuple("residNtuple","Residual Info","run:evt:hitX:hitY:hitCharge:mipX:mipY:mipPx:mipPy:mipPz:zVert");
cout << "creating new" << endl;
}
residNtuple->Fill(tempArray);
//should keep latest header file only...may not
if(appending)
residNtuple->Write("",TObject::kOverwrite);
else
residNtuple->Write();
residFile->Close();
delete residFile;
}
thanks alot
jon
On Wed, 5 Jul 2000, Rene Brun wrote:
> Hi Jonathan,
>
> a small example showing how to create an ntuple (ntwrite) and appending
> new data to an existing ntuple (ntappend, ntappend2). see comments in code
>
> Rene Brun
>
> void ntwrite()
> {
>
> TFile *file = new TFile("ntuple.root","RECREATE");
>
> TNtuple *ntuple = new TNtuple("ntuple","Demo ntuple","px:py:pz:random:i");
>
> Float_t px, py, pz;
> for (Int_t i = 0; i < 25000; i++) {
> gRandom->Rannor(px,py);
> pz = px*px + py*py;
> Float_t random = gRandom->Rndm(1);
> ntuple->Fill(px,py,pz,random,i);
> }
>
> ntuple->Write();
> file->Close();
> delete file;
> }
>
> void ntappend()
> {
>
> TFile *file = new TFile("ntuple.root","UPDATE");
>
> TNtuple *ntuple = (TNtuple*)file->Get("ntuple");
>
> Float_t px, py, pz;
> for (Int_t i = 0; i < 25000; i++) {
> gRandom->Rannor(px,py);
> pz = px*px + py*py;
> Float_t random = gRandom->Rndm(1);
> ntuple->Fill(px,py,pz,random,i);
> }
>
> //each ntuple->Write saves a new ntuple header. You will get the
> // keys ntuple1;1 ntuple;2 ntuple;3 ,etc
> // Assuming 3 cycles (1 call to ntwrite and 2 calls to ntappend),
> // in an interactive session, you can do:
> // TNtuple *ntuple1 = (TNtuple*) file.Get("ntuple;1");
> // ntuple1->Draw("px>>hpx1"); // hpx1 will have 25000 entries
> // TNtuple *ntuple2 = (TNtuple*) file.Get("ntuple;2");
> // ntuple2->Draw("px>>hpx2"); // hpx2 will have 50000 entries
> // TNtuple *ntuple3 = (TNtuple*) file.Get("ntuple;3");
> // ntuple3->Draw("px>>hpx3"); // hpx3 will have 75000 entries
>
> ntuple->Write();
> file->Close();
> delete file;
> }
>
> void ntappend2()
> {
>
> TFile *file = new TFile("ntuple.root","UPDATE");
>
> TNtuple *ntuple = (TNtuple*)file->Get("ntuple");
>
> Float_t px, py, pz;
> for (Int_t i = 0; i < 25000; i++) {
> gRandom->Rannor(px,py);
> pz = px*px + py*py;
> Float_t random = gRandom->Rndm(1);
> ntuple->Fill(px,py,pz,random,i);
> }
>
> // keep the latest ntuple header only
> ntuple->Write("",TObject::kOverwrite);
> file->Close();
> delete file;
> }
>
>
> Jon Gans wrote:
> >
> > Dear Rooters...
> >
> > I want to append to a saved NTuple in a TFile. However doing a
> > file->write() merely adds another entry to the current file with the same
> > name. How can I get it to append?
> > Thanks
> > jon
> >
> > ______________________________________________________________________________
> >
> > Jonathan Gans
> > Yale University
> > Physics Department
> > PO BOX 208120
> > New Haven, CT 06520-8120 http://www.jongans.com
>
______________________________________________________________________________
Jonathan Gans Home: (203) 789 - 8029
Yale University Office (305 WNSL): (203) 432 - 5637
Physics Department Cellular: (203) 676 - 9963
PO BOX 208120 Fax: (516) 213 - 4967
New Haven, CT 06520-8120 http://www.jongans.com
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:29 MET