User Tools

Site Tools


root:loadtext

Read data from text file

To read data from a text file into a tree all you need are the following two lines

  TTree *myTree = new TTree("mytree","data from ascii file");
  Long64_t nlines = myTree->ReadFile(filename,"col1:col2:col3");

Dynamic Branche Names

If you do not give the structure, the first line of your file must contain the tree definition

input.csv
bin:hist1:hist2
1 12 13
[...]

To use this tree you then need to get the branch names

  TTree *myTree = new TTree("mytree","data from ascii file");
  Long64_t nlines = myTree->ReadFile(filename);
 
  TString col0Name = T->GetListOfBranches()->At(0)->GetName();
  TString col1Name = T->GetListOfBranches()->At(1)->GetName();
  TString col2Name = T->GetListOfBranches()->At(2)->GetName();
 
  Float_t bin,hist1,hist2;
  T->SetBranchAddress(col0Name.Data(),&bin);
  T->SetBranchAddress(col1Name.Data(),&hist1);
  T->SetBranchAddress(col2Name.Data(),&hist2);

Dynamic Tree Structure

You can extend this idea to plot all histograms in an unknown tree. The following code reads a tree form a datafile with a arbitrary number of columns and creates a histogram for each of them.

        /** Load Data into Tree **/
        TTree *T = new TTree("myT","data from ascii file");
        Long64_t nlines = T->ReadFile(filename);
 
        /** Attache memory to tree **/
        Int_t nCols = T->GetListOfBranches()->GetEntries();
        std::vector<Float_t> entry(nCols, 0);
        for (Int_t i=0; i < nCols; i++) {
          TString colName = T->GetListOfBranches()->At(i)->GetName();
          T->SetBranchAddress(colName.Data(),&(entry[i]));
        }
 
        /** Calculate binning **/
        Int_t nentries = (Int_t)T->GetEntries();
 
        T->GetEntry(0);
        Float_t first = entry[0];
        T->GetEntry(1);
        Float_t second = entry[0];
        Float_t step = second-first;
        first = first - step/2;
        Float_t last = first+step*(nlines);
 
        /** Create Histograms **/
        TH1F *h;
        TObjArray histograms;
        for (Int_t i = 0; i < nCols; i++) {
          TString hName = Form("hist%d",i);
          if (i == 1) {
            h = new TH1F(hName,histTitle,nlines,first,last);
          } else {
            h = new TH1F(hName,"",nlines,first,last);
          }
          histograms.AddLast(h);
        }
 
        /** Fill Histograms **/
        for (Int_t i=0;i<nentries;) {  // increment inside loop
          T->GetEntry(i);
          i++;
          for (Int_t col = 1; col < nCols; col++) {
                  h = dynamic_cast<TH1F*>(histograms[col]);
                  h->SetBinContent(i, entry[col]);
          }
        }       
root/loadtext.txt · Last modified: 2010/11/15 17:17 by nchiap