User Tools

Site Tools


root:loadtext

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
root:loadtext [2010/11/09 16:33] – created nchiaproot:loadtext [2010/11/15 17:17] (current) nchiap
Line 2: Line 2:
 To read data from a text file into a tree all you need are the following two lines To read data from a text file into a tree all you need are the following two lines
 <code C++> <code C++>
-  TTree *myTree = new TTree("ntuple","data from ascii file");+  TTree *myTree = new TTree("mytree","data from ascii file");
   Long64_t nlines = myTree->ReadFile(filename,"col1:col2:col3");   Long64_t nlines = myTree->ReadFile(filename,"col1:col2:col3");
 +</code>
 +
 +
 +=== Dynamic Branche Names ===
 +
 +If you do not give the structure, the first line of your file must contain the tree definition
 +<code text input.csv>
 +bin:hist1:hist2
 +1 12 13
 +[...]
 +</code>
 +
 +To use this tree you then need to get the branch names
 +<code C++>
 +  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);
 +</code>
 +
 +=== 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.
 +
 +<code C++>
 +        /** 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]);
 +          }
 +        }       
 </code> </code>
root/loadtext.1289316788.txt.gz · Last modified: 2010/11/09 16:33 by nchiap