[ROOT] Extraction of data from Tree

From: cstrato@EUnet.at
Date: Sun Jun 04 2000 - 23:06:30 MEST


Dear ROOTers:

Recently, I have downloaded version 2.24/04 of ROOT, this really
excellent framework,
to my PowerBook G3/Wallstreet running LinuxPPC. Everything did work
immediately.

Since I am new to ROOT I am trying some code and have already some
questions:

1, I have stored an ascii-table (5 columns: num, idx, x, y, z) in one
TBranch
of a TTree. Now I would like to extract "x:y:z" for each idx.

First I tried it interactively:
root [0] .x TestTree.C
root [3] idTree->Draw(">>myList","idx==2")
root [4] idTree->SetEventList(myList)
root [8] a=idTree->GetV1()
 (Float_t*)0x30027010
root [12] for(int i=0;i<40;i++) cout<<a[i]<<","
root [13] cout<<endl

In this way I can extract "x,y,z" using GetV1(), GetV2(), GetV3().

However, when I used TTree->MakeCode("Code4idTree.cc"), and use
printf() in the
loop of the automatically generated code, I get strange values instead
of my table.

Can someone help me and tell me what I did wrong?
Below I enclose the files:
a, TestTree.C: this file stores the data in the tree
b, Code4idTree.cc: the automatically generated file with modified loop
only
c, Code4idTree1.cc: the automatically generated but modified file

2, I have a second ascii-table (4 columns: x, y, data1, data2), which I
have currently
stored in a Ttuple as: data1[x][y] and data2[x][y]
I would like to extract data1, data2 from this table for each idx of the
first table.
What is the best way to do this?
Should I store data1, data2 differently?

Thank you very much in advance for your help
Christian
(Christian Stratowa, Vienna, Austria)

APPENDICES
a, TestTree.C: this file stores the data in the tree
{
//   example of macro to read data from ascii file mytest.txt
//   and create a root file with a tree.
   gROOT->Reset();
#include <iostream.h>

   ifstream in;
   in.open("mytest.txt", ios::in);

Int_t num, idx, x, y, z;
   typedef struct {
      Int_t idx, x, y, z;
   } INDEX;
//   static INDEX id;
   INDEX id;

   TFile *f = new TFile("TestTree.root","RECREATE");
   TTree *idTree = new TTree("idTree","data from file mytest.txt");
   TBranch *idBranch = idTree->Branch("idBranch",&id,"idx/I:x:y:z");

// read header line
   Int_t nlines = 0;
   if(nlines == 0) {
      char header[81];
      in.getline(header,80);
      nlines++;
   }

   while (1) {
      in >> num >> idx >> x >> y >> z;
      if (!in.good()) break;
      id.idx = idx;
      id.x = x;
      id.y = y;
      id.z = z;
      if (nlines < 5) printf("idx=%8i,z=%8i,x=%8i,y=%8i\n",idx,z,x,y);
      idTree->Fill();
      nlines++;
   }
   printf(" found %d lines\n",nlines);

   in.close();

   f->Write();
}


b, Code4idTree.cc: the automatically generated file with modified loop
only
{
//////////////////////////////////////////////////////////
//   This file has been automatically generated
//     (Sun Jun  4 17:23:33 2000 by ROOT version2.24/04)
//   from TTree idTree/data from file mytest.txt
//   found on file: TestTree.root
//////////////////////////////////////////////////////////


//Reset ROOT and connect tree file
//   gROOT->Reset();
   TFile *f =
(TFile*)gROOT->GetListOfFiles()->FindObject("TestTree.root");
   if (!f) {
      f = new TFile("TestTree.root");
   }
   TTree *idTree = (TTree*)gDirectory->Get("idTree");

//Declaration of leaves types
   Int_t           idBranch_idx;
   Int_t           idBranch_x;
   Int_t           idBranch_y;
   Int_t           idBranch_z;

//Set branch addresses
   idTree->SetBranchAddress("idBranch",&idBranch_idx);
   idTree->SetBranchAddress("idBranch",&idBranch_x);
   idTree->SetBranchAddress("idBranch",&idBranch_y);
   idTree->SetBranchAddress("idBranch",&idBranch_z);

//     This is the loop skeleton
//       To read only selected branches, Insert statements like:
// idTree->SetBranchStatus("*",0);  // disable all branches
// TTreePlayer->SetBranchStatus("branchname",1);  // activate branchname

   Int_t nentries = idTree->GetEntries();

   Int_t nbytes = 0;
   for (Int_t i=0; i<nentries;i++) {
      nbytes += idTree->GetEntry(i);
      if(i<100) {
        printf("idx,x,y,z=
%8i,%8i,%8i,%8i\n",idBranch_idx,idBranch_x,idBranch_y,idBranch_z);
//       printf("idx,x,y,z= \n");
      }
   }
   printf("nentries= %8i, nbytes= %8i \n",nentries,nbytes);
}


c, Code4idTree1.cc: the automatically generated but modified file
{
//////////////////////////////////////////////////////////
//   This file has been automatically generated
//     (Sun Jun  4 17:23:33 2000 by ROOT version2.24/04)
//   from TTree idTree/data from file mytest.txt
//   found on file: TestTree.root
//////////////////////////////////////////////////////////


//Reset ROOT and connect tree file
//   gROOT->Reset();
   TFile *f =
(TFile*)gROOT->GetListOfFiles()->FindObject("TestTree.root");
   if (!f) {
      f = new TFile("TestTree.root");
   }
   TTree *idTree = (TTree*)gDirectory->Get("idTree");
//   TBranch *idBranch = idTree->GetBranch("idBranch");

//Declaration of leaves types
   typedef struct {
      Int_t idx, x, y, z;
   } INDEX;
   INDEX id;

//Set branch addresses
   idTree->SetBranchAddress("idBranch",&id.idx);
   idTree->SetBranchAddress("idBranch",&id.x);
   idTree->SetBranchAddress("idBranch",&id.y);
   idTree->SetBranchAddress("idBranch",&id.z);

//     This is the loop skeleton
//       To read only selected branches, Insert statements like:
// idTree->SetBranchStatus("*",0);  // disable all branches
// TTreePlayer->SetBranchStatus("branchname",1);  // activate branchname

   Int_t nentries = idTree->GetEntries();

   Int_t nbytes = 0;
   for (Int_t i=0; i<nentries;i++) {
      nbytes += idTree->GetEntry(i);
//      nbytes += idBranch->GetEntry(i);
      if(i<100) {
        printf("idx,x,y,z= %8i,%8i,%8i,%8i\n",id.idx,id.x,id.y,id.z);
      }
   }
   printf("nentries= %8i, nbytes= %8i \n",nentries,nbytes);
}



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:27 MET