Hello, I have written a very basic class which inherits from TNamed. When creating a TTree, I appear to be setting the name with myTest->SetName("JunkName"); but I can't read it back in from the file with myTest->GetName(); I'm just assuming that the TNamed functions and data members are all inherited properly and that the default streamer is sufficient here. _Should_ this work as I am expecting? Code follows. Thanks, Steve #ifndef ROOT_TsTest #define ROOT_TsTest //////////////////////////////////////////////////////////////// // // file: TsTest.h // //////////////////////////////////////////////////////////////// #include "TObject.h" #include "TNamed.h" #include "TClonesArray.h" #include "TH1.h" #include "TMath.h" #include <iostream.h> class TsTest : public TNamed { private: public: TsTest(); TsTest(Text_t *name, Text_t *title); virtual ~TsTest(); ClassDef(TsTest,1) //Event structure }; #endif //////////////////////////////////////////////////////////////// // // file: TsTest.cxx // //////////////////////////////////////////////////////////////// #include "TsTest.h" ClassImp(TsTest) //_____________________________________________________________ TsTest::TsTest() : TNamed() { // Default ctor for TsTest } //____________________________________________________________ TsTest::TsTest(Text_t *name, Text_t *title) : TNamed(name, title) { // Ctor } //_____________________________________________________________ TsTest::~TsTest() { // Dtor for TsTest } //////////////////////////////////////////////////////////////// // // file: TsTestMain.cxx // //////////////////////////////////////////////////////////////// #include <stdlib.h> #include <iostream.h> #include <stdio.h> #include "TROOT.h" #include "TFile.h" #include "TRandom.h" #include "TTree.h" #include "TBranch.h" #include "TClonesArray.h" #include "TStopwatch.h" #include "TsTest.h" //_________________________________________________________________ int main(int argc, char **argv) { TROOT simple("simple","Example of creation of a tree"); Int_t nevent = 400; // by default create 400 events Int_t comp = 1; // by default file is compressed Int_t split = 1; // by default, split Event in sub branches Int_t write = 1; // by default the tree is filled Int_t hfill = 0; // by default histograms are not filled Int_t read = 0; Int_t arg4 = 1; Int_t arg5 = 600; //default number of tracks per event if (argc > 1) nevent = atoi(argv[1]); if (argc > 2) comp = atoi(argv[2]); if (argc > 3) split = atoi(argv[3]); if (argc > 4) arg4 = atoi(argv[4]); if (argc > 5) arg5 = atoi(argv[5]); if (arg4 == 0) { write = 0; hfill = 0; read = 1;} if (arg4 == 1) { write = 1; hfill = 0;} if (arg4 == 10) { write = 0; hfill = 1;} if (arg4 == 11) { write = 1; hfill = 1;} if (arg4 == 20) { write = 0; read = 1;} //read sequential if (arg4 == 25) { write = 0; read = 2;} //read random TFile *hfile; TTree *tree; TsTest *mytest = new TsTest(); // Create a timer object to benchmark this loop TStopwatch timer; timer.Start(); Int_t nb = 0; Int_t ev; Int_t bufsize; Double_t told = 0; Double_t tnew = 0; Int_t printev = 100; if (arg5 < 100) printev = 1000; if (arg5 < 10) printev = 10000; // Read case if (read) { hfile = new TFile("Test.root"); tree = (TTree*)hfile->Get("T"); TBranch *branch = tree->GetBranch("test"); branch->SetAddress(&mytest); Int_t nentries = (Int_t)tree->GetEntries(); nevent = TMath::Max(nevent,nentries); if (read == 1) { //read sequential for (ev = 0; ev < nevent; ev++) { if (ev%printev == 0) cout<<"event_here1="<<ev<<endl; nb += tree->GetEntry(ev); //read complete event in memory cout << mytest->GetName() << endl; } } else { //read random Int_t evrandom; for (ev = 0; ev < nevent; ev++) { if (ev%printev == 0) cout<<"event_here2="<<ev<<endl; evrandom = Int_t(nevent*gRandom->Rndm(1)); nb += tree->GetEntry(evrandom); //read complete event in memory const Text_t *name = mytest->GetName(); cout << name << endl; } } } else { // Write case // Create a new ROOT binary machine independent file. // Note that this file may contain any kind of ROOT objects, histograms, // pictures, graphics objects, detector geometries, tracks, events, etc.. // This file is now becoming the current directory. hfile = new TFile("Test.root","RECREATE","Test ROOT file"); hfile->SetCompressionLevel(comp); // Create histogram to show write_time in function of time Float_t curtime = -0.5; Int_t ntime = nevent/printev; TH1F *htime = new TH1F("htime","Real-Time to write versus time",ntime,0,ntime); // Create a ROOT Tree and one superbranch TTree *tree = new TTree("T","An example of a ROOT tree"); tree->SetAutoSave(1000000000); // autosave when 1 Gbyte written bufsize = 256000; if (split) bufsize /= 4; tree->Branch("test", "TsTest", &mytest, bufsize,split); for (ev = 0; ev < nevent; ev++) { if (ev%printev == 0) { tnew = timer.RealTime(); printf("event_here3:%d, rtime=%f s\n",ev,tnew-told); htime->Fill(curtime,tnew-told); curtime += 1; told=tnew; timer.Continue(); } Float_t sigmat, sigmas; gRandom->Rannor(sigmat,sigmas); Int_t ntrack = Int_t(arg5 +arg5*sigmat/120.); Float_t random = gRandom->Rndm(1); mytest->SetName("JunkName"); /* event->SetHeader(ev, 200, 960312, random); event->SetNseg(Int_t(10*ntrack+20*sigmas)); event->SetNvertex(1); event->SetFlag(UInt_t(random+0.5)); event->SetTemperature(random+20.); */ if (write) nb += tree->Fill(); //fill the tree } if (write) { hfile->Write(); tree->Print(); } } // Stop timer and print results timer.Stop(); Float_t mbytes = 0.000001*nb; Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); printf("\n%d events and %d bytes processed.\n",nevent,nb); printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime); if (read) { printf("You read %f Mbytes/Realtime seconds\n",mbytes/rtime); printf("You read %f Mbytes/Cputime seconds\n",mbytes/ctime); } else { printf("compression level=%d, split=%d, arg4=%d\n",comp,split,arg4); printf("You write %f Mbytes/Realtime seconds\n",mbytes/rtime); printf("You write %f Mbytes/Cputime seconds\n",mbytes/ctime); } hfile->Close(); return 0; } ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:23 MET