Logo ROOT   6.18/05
Reference Guide
TTreeReaderGenerator.h
Go to the documentation of this file.
1// @(#)root/treeplayer:$Id$
2// Author: Akos Hajdu 22/06/2015
3
4/*************************************************************************
5 * Copyright (C) 1995-2015, Rene Brun and Fons Rademakers and al. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TTreeReaderGenerator
13#define ROOT_TTreeReaderGenerator
14
15//////////////////////////////////////////////////////////////////////////
16// //
17// TTreeReaderGenerator //
18// //
19// Generate a Selector using the TTreeReader interface //
20// (TTreeReaderValue, TTreeReaderArray) to access the data in the tree. //
21// //
22//////////////////////////////////////////////////////////////////////////
23
24#include "TTreeGeneratorBase.h"
25
26#include "TNamed.h"
27
28class TBranch;
29class TBranchElement;
30class TLeaf;
31
32namespace ROOT {
33namespace Internal {
34
35 // 0 for the general case, 1 when this a split clases inside a TClonesArray,
36 // 2 when this is a split classes inside an STL container.
37 enum ELocation { kOut=0, kClones, kSTL };
38
40 public:
42 ReaderType fType; // Type of the reader: Value or Array
43 TString fDataType; // Data type of reader
44 TString fName; // Reader name
45 TString fBranchName; // Branch corresponding to the reader
46
48 fType(type),
49 fDataType(dataType),
50 fName(name),
51 fBranchName(branchName) { }
52 };
53
54 class TBranchDescriptor : public TNamed {
55 public:
56 ELocation fIsClones; // Type of container
57 TString fContainerName; // Name of the container
58 TString fBranchName; // Name of the branch
59 TString fSubBranchPrefix;// Prefix (e.g. if the branch name is "A." the prefix is "A"
60 TVirtualStreamerInfo *fInfo; // Streamer info
61 TBranchDescriptor *fParent; // Descriptor of the parent branch (NULL for topmost)
62
64 const char *branchname, const char *subBranchPrefix, ELocation isclones,
65 const TString &containerName, TBranchDescriptor *parent = 0) :
67 fIsClones(isclones),
68 fContainerName(containerName),
69 fBranchName(branchname),
70 fSubBranchPrefix(subBranchPrefix),
71 fInfo(info),
72 fParent(parent)
73 {
76 }
77 }
78
79 Bool_t IsClones() const { return fIsClones == kClones; }
80
81 Bool_t IsSTL() const { return fIsClones == kSTL; }
82 };
83
85 {
86 TString fClassname; // Class name of the selector
87 TList fListOfReaders; // List of readers
88 Bool_t fIncludeAllLeaves; // Should all leaves be included
89 Bool_t fIncludeAllTopmost; // Should all topmost branches be included
90 std::vector<TString> fIncludeLeaves; // Branches whose leaves should be included
91 std::vector<TString> fIncludeStruct; // Branches whom should be included
92
94 TString branchName, TBranchDescriptor *parent = 0, Bool_t isLeaf = kTRUE);
98 UInt_t AnalyzeOldLeaf(TLeaf *leaf, Int_t nleaves);
99 Bool_t BranchNeedsReader(TString branchName, TBranchDescriptor *parent, Bool_t isLeaf);
100
101 void ParseOptions();
102 void AnalyzeTree(TTree *tree);
103 void WriteSelector();
104
105 public:
106 TTreeReaderGenerator(TTree* tree, const char *classname, Option_t *option);
107 };
108}
109}
110
111#endif
int Int_t
Definition: RtypesCore.h:41
unsigned int UInt_t
Definition: RtypesCore.h:42
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kTRUE
Definition: RtypesCore.h:87
const char Option_t
Definition: RtypesCore.h:62
char name[80]
Definition: TGX11.cxx:109
int type
Definition: TGX11.cxx:120
TBranchDescriptor(const char *type, TVirtualStreamerInfo *info, const char *branchname, const char *subBranchPrefix, ELocation isclones, const TString &containerName, TBranchDescriptor *parent=0)
TTreeReaderDescriptor(ReaderType type, TString dataType, TString name, TString branchName)
void AnalyzeTree(TTree *tree)
Analyze tree and extract readers.
UInt_t AnalyzeBranches(TBranchDescriptor *desc, TBranchElement *branch, TVirtualStreamerInfo *info)
Analyse sub-branches of 'branch' recursively and extract readers.
void ParseOptions()
Parse the user options.
TTreeReaderGenerator(TTree *tree, const char *classname, Option_t *option)
Constructor. Analyzes the tree and writes selector.
void AddReader(TTreeReaderDescriptor::ReaderType type, TString dataType, TString name, TString branchName, TBranchDescriptor *parent=0, Bool_t isLeaf=kTRUE)
Add a reader to the generated code.
Bool_t BranchNeedsReader(TString branchName, TBranchDescriptor *parent, Bool_t isLeaf)
Check whether a branch should have a corresponding reader added, depending on the options provided by...
UInt_t AnalyzeOldLeaf(TLeaf *leaf, Int_t nleaves)
Analyze the leaf and add the variables found.
UInt_t AnalyzeOldBranch(TBranch *branch)
Analyze branch and add the variables found.
void WriteSelector()
Generate code for selector class.
A Branch for the case of an object.
A TTree is a list of TBranches.
Definition: TBranch.h:65
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
Definition: TLeaf.h:49
A doubly linked list.
Definition: TList.h:44
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
Mother of all ROOT objects.
Definition: TObject.h:37
Basic string class.
Definition: TString.h:131
Ssiz_t Length() const
Definition: TString.h:405
TString & Remove(Ssiz_t pos)
Definition: TString.h:668
A TTree represents a columnar dataset.
Definition: TTree.h:71
Abstract Interface class describing Streamer information for one class.
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21
Definition: tree.py:1