Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
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#include <vector>
28
29class TBranch;
30class TBranchElement;
31class TLeaf;
32
33namespace ROOT {
34namespace Internal {
35
36 /// 0 for the general case, 1 when this a split clases inside a TClonesArray,
37 /// 2 when this is a split classes inside an STL container.
38 enum ELocation { kOut=0, kClones, kSTL };
39
41 public:
43 ReaderType fType; ///< Type of the reader: Value or Array
44 TString fDataType; ///< Data type of reader
45 TString fName; ///< Reader name
46 TString fBranchName; ///< Branch corresponding to the reader
47
49 fType(type),
50 fDataType(dataType),
51 fName(name),
52 fBranchName(branchName) { }
53 };
54
55 class TBranchDescriptor : public TNamed {
56 public:
57 ELocation fIsClones; ///< Type of container
58 TString fContainerName; ///< Name of the container
59 TString fBranchName; ///< Name of the branch
60 TString fSubBranchPrefix;///< Prefix (e.g. if the branch name is "A." the prefix is "A"
61 TVirtualStreamerInfo *fInfo; ///< Streamer info
62 TBranchDescriptor *fParent; ///< Descriptor of the parent branch (NULL for topmost)
63
65 const char *branchname, const char *subBranchPrefix, ELocation isclones,
66 const TString &containerName, TBranchDescriptor *parent = nullptr) :
68 fIsClones(isclones),
69 fContainerName(containerName),
70 fBranchName(branchname),
71 fSubBranchPrefix(subBranchPrefix),
72 fInfo(info),
73 fParent(parent)
74 {
75 if (fSubBranchPrefix.Length() && fSubBranchPrefix[fSubBranchPrefix.Length() - 1] == '.') {
76 fSubBranchPrefix.Remove(fSubBranchPrefix.Length()-1);
77 }
78 }
79
80 bool IsClones() const { return fIsClones == kClones; }
81
82 bool IsSTL() const { return fIsClones == kSTL; }
83 };
84
86 {
87 TString fClassname; ///< Class name of the selector
88 TList fListOfReaders; ///< List of readers
89 bool fIncludeAllLeaves; ///< Should all leaves be included
90 bool fIncludeAllTopmost; ///< Should all topmost branches be included
91 std::vector<TString> fIncludeLeaves; ///< Branches whose leaves should be included
92 std::vector<TString> fIncludeStruct; ///< Branches whom should be included
93
95 TString branchName, TBranchDescriptor *parent = nullptr, bool isLeaf = true);
99 UInt_t AnalyzeOldLeaf(TLeaf *leaf, Int_t nleaves);
100 bool BranchNeedsReader(TString branchName, TBranchDescriptor *parent, bool isLeaf);
101
102 void ParseOptions();
103 void AnalyzeTree(TTree *tree);
104 void WriteSelector();
105
106 public:
107 TTreeReaderGenerator(TTree* tree, const char *classname, Option_t *option);
108 };
109}
110}
111
112#endif
int Int_t
Definition RtypesCore.h:45
unsigned int UInt_t
Definition RtypesCore.h:46
const char Option_t
Definition RtypesCore.h:66
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
char name[80]
Definition TGX11.cxx:110
TBranchDescriptor(const char *type, TVirtualStreamerInfo *info, const char *branchname, const char *subBranchPrefix, ELocation isclones, const TString &containerName, TBranchDescriptor *parent=nullptr)
TString fBranchName
Name of the branch.
TVirtualStreamerInfo * fInfo
Streamer info.
ELocation fIsClones
Type of container.
TBranchDescriptor * fParent
Descriptor of the parent branch (NULL for topmost)
TString fContainerName
Name of the container.
TString fSubBranchPrefix
Prefix (e.g. if the branch name is "A." the prefix is "A".
TTreeGeneratorBase(TTree *tree, const char *option)
Constructor.
TString fBranchName
Branch corresponding to the reader.
ReaderType fType
Type of the reader: Value or Array.
TTreeReaderDescriptor(ReaderType type, TString dataType, TString name, TString branchName)
std::vector< TString > fIncludeStruct
Branches whom should be included.
void AnalyzeTree(TTree *tree)
Analyze tree and extract readers.
TString fClassname
Class name of the selector.
std::vector< TString > fIncludeLeaves
Branches whose leaves should be included.
UInt_t AnalyzeBranches(TBranchDescriptor *desc, TBranchElement *branch, TVirtualStreamerInfo *info)
Analyse sub-branches of 'branch' recursively and extract readers.
void ParseOptions()
Parse the user options.
bool fIncludeAllTopmost
Should all topmost branches be included.
void AddReader(TTreeReaderDescriptor::ReaderType type, TString dataType, TString name, TString branchName, TBranchDescriptor *parent=nullptr, bool isLeaf=true)
Add a reader to the generated code.
bool BranchNeedsReader(TString branchName, TBranchDescriptor *parent, bool isLeaf)
Check whether a branch should have a corresponding reader added, depending on the options provided by...
bool fIncludeAllLeaves
Should all leaves be included.
TTreeReaderGenerator(TTree *tree, const char *classname, Option_t *option)
Constructor. Analyzes the tree and writes selector.
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:93
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
Definition TLeaf.h:57
A doubly linked list.
Definition TList.h:38
TNamed()
Definition TNamed.h:36
TObject()
TObject constructor.
Definition TObject.h:251
Basic string class.
Definition TString.h:139
A TTree represents a columnar dataset.
Definition TTree.h:79
Abstract Interface class describing Streamer information for one class.
ELocation
0 for the general case, 1 when this a split clases inside a TClonesArray, 2 when this is a split clas...
The namespace of The Lean Mean C++ Option Parser.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...