00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "TFile.h"
00017 #include "TClonesArray.h"
00018 #include "TH2.h"
00019 #include "TLine.h"
00020 #include "TTree.h"
00021 #include "TBenchmark.h"
00022 #include "TRandom.h"
00023
00024 void tclwrite(Int_t split)
00025 {
00026
00027
00028 TFile f("tcl.root","recreate");
00029 f.SetCompressionLevel(1);
00030 TTree T("T","test tcl");
00031 TClonesArray *arr = new TClonesArray("TLine");
00032 TClonesArray &ar = *arr;
00033 T.Branch("tcl",&arr,256000,split);
00034
00035
00036
00037
00038
00039 arr->BypassStreamer();
00040 for (Int_t ev=0;ev<10000;ev++) {
00041 ar.Clear();
00042 Int_t nlines = Int_t(gRandom->Gaus(50,10));
00043 if(nlines < 0) nlines = 1;
00044 for (Int_t i=0;i<nlines;i++) {
00045 Float_t x1 = gRandom->Rndm();
00046 Float_t y1 = gRandom->Rndm();
00047 Float_t x2 = gRandom->Rndm();
00048 Float_t y2 = gRandom->Rndm();
00049 new(ar[i]) TLine(x1,y1,x2,y2);
00050 }
00051 T.Fill();
00052 }
00053 T.Print();
00054 T.Write();
00055 }
00056
00057 void tclread()
00058 {
00059
00060
00061
00062 TFile *f = new TFile("tcl.root");
00063 TTree *T = (TTree*)f->Get("T");
00064 TH2F *h2 = new TH2F("h2","center of lines",40,0,1,40,0,1);
00065
00066 TClonesArray *arr = new TClonesArray("TLine");
00067 T->GetBranch("tcl")->SetAutoDelete(kFALSE);
00068 T->SetBranchAddress("tcl",&arr);
00069 Int_t nentries = (Int_t)(T->GetEntries());
00070 for (Int_t ev=0;ev<nentries;ev++) {
00071 arr->Clear();
00072 T->GetEntry(ev);
00073 Int_t nlines = arr->GetEntriesFast();
00074 for (Int_t i=0;i<nlines;i++) {
00075 TLine *line = (TLine*)arr->At(i);
00076 h2->Fill(0.5*(line->GetX1()+line->GetX2()), 0.5*(line->GetY1()+line->GetY2()));
00077 }
00078 }
00079 h2->Draw("lego");
00080 }
00081
00082 void tcl(Int_t split=0)
00083 {
00084 gBenchmark->Start("tcl");
00085 tclwrite(split);
00086 tclread();
00087 gBenchmark->Show("tcl");
00088 }