====== 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 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 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;iGetEntry(i); i++; for (Int_t col = 1; col < nCols; col++) { h = dynamic_cast(histograms[col]); h->SetBinContent(i, entry[col]); } }