00001 void tv3() {
00002 gSystem->Load("libPhysics");
00003 TCanvas *c1 = new TCanvas("c1","demo of Trees",10,10,600,800);
00004 c1->Divide(1,2);
00005 tv3Write();
00006 c1->cd(1);
00007 tv3Read1();
00008 c1->cd(2);
00009 tv3Read2();
00010 }
00011 void tv3Write() {
00012
00013 TVector3 *v = new TVector3();
00014 TVector3::Class()->IgnoreTObjectStreamer();
00015 TFile *f = new TFile("v3.root","recreate");
00016 TTree *T = new TTree("T","v3 Tree");
00017 T->Branch("v3","TVector3",&v,32000,1);
00018 TRandom r;
00019 for (Int_t i=0;i<10000;i++) {
00020 v->SetXYZ(r.Gaus(0,1),r.Landau(0,1),r.Gaus(100,10));
00021 T->Fill();
00022 }
00023 T->Write();
00024 T->Print();
00025 delete f;
00026 }
00027 void tv3Read1() {
00028
00029 TVector3 *v = 0;
00030 TFile *f = new TFile("v3.root");
00031 TTree *T = (TTree*)f->Get("T");
00032 T->SetBranchAddress("v3",&v);
00033 TH1F *h1 = new TH1F("x","x component of TVector3",100,-3,3);
00034 Int_t nentries = Int_t(T->GetEntries());
00035 for (Int_t i=0;i<nentries;i++) {
00036 T->GetEntry(i);
00037 h1->Fill(v->x());
00038 }
00039 h1->Draw();
00040 }
00041
00042 void tv3Read2() {
00043
00044 TVector3 *v = 0;
00045 TFile *f = new TFile("v3.root");
00046 TTree *T = (TTree*)f->Get("T");
00047 T->SetBranchAddress("v3",&v);
00048 TBranch *by = T->GetBranch("fY");
00049 TH1F *h2 = new TH1F("y","y component of TVector3",100,-5,20);
00050 Int_t nentries = Int_t(T->GetEntries());
00051 for (Int_t i=0;i<nentries;i++) {
00052 by->GetEntry(i);
00053 h2->Fill(v->y());
00054 }
00055 h2->Draw();
00056 }
00057