Logo ROOT  
Reference Guide
Go to the documentation of this file.
1// @(#)root/base:$Id$
2// Author: Philippe Canal 13/05/2003
5 * Copyright (C) 1995-2000, Rene Brun, 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 *************************************************************************/
12/** \class TBranchProxyDirector
13This class is used to 'drive' and hold a serie of TBranchProxy objects
14which represent and give access to the content of TTree object.
15This is intended to be used as part of a generate Selector class
16which will hold the directory and its associate
20#include "TBranchProxy.h"
21#include "TFriendProxy.h"
22#include "TTree.h"
23#include "TEnv.h"
24#include "TH1F.h"
25#include "TVirtualPad.h"
26#include "TList.h"
28#include <algorithm>
32namespace ROOT {
33namespace Internal {
35 // Helper function to call Reset on each TBranchProxy
36 void NotifyDirected(Detail::TBranchProxy *x) { x->Notify(); }
38 // Helper function to call SetReadEntry on all TFriendProxy
41 // Helper class to call Update on all TFriendProxy
42 struct Update {
43 Update(TTree *newtree) : fNewTree(newtree) {}
45 void operator()(TFriendProxy *x) { x->Update(fNewTree); }
46 };
48 ////////////////////////////////////////////////////////////////////////////////
49 /// Simple constructor
52 fTree(tree),
53 fEntry(i)
54 {
55 }
57 ////////////////////////////////////////////////////////////////////////////////
58 /// Simple constructor
61 // cint has a problem casting int to long long
62 fTree(tree),
63 fEntry(i)
64 {
65 }
67 ////////////////////////////////////////////////////////////////////////////////
68 /// Attach a TBranchProxy object to this director. The director just
69 /// 'remembers' this BranchProxy and does not own it. It will be use
70 /// to apply Tree wide operation (like reseting).
74 fDirected.push_back(p);
75 }
77 ////////////////////////////////////////////////////////////////////////////////
78 /// Attach a TFriendProxy object to this director. The director just
79 /// 'remembers' this BranchProxy and does not own it. It will be use
80 /// to apply Tree wide operation (like reseting).
84 fFriends.push_back(p);
85 }
87 ////////////////////////////////////////////////////////////////////////////////
88 /// Create a temporary 1D histogram.
91 Int_t nbins = gEnv->GetValue("Hist.Binning.1D.x",100);
92 Double_t vmin=0, vmax=0;
93 Double_t xmin=0, xmax=0;
94 Bool_t canExtend = kTRUE;
95 TString opt( options );
96 Bool_t optSame = opt.Contains("same");
97 if (optSame) canExtend = kFALSE;
99 if (gPad && optSame) {
100 TListIter np(gPad->GetListOfPrimitives());
101 TObject *op;
102 TH1 *oldhtemp = 0;
103 while ((op = np()) && !oldhtemp) {
104 if (op->InheritsFrom(TH1::Class())) oldhtemp = (TH1 *)op;
105 }
106 if (oldhtemp) {
107 nbins = oldhtemp->GetXaxis()->GetNbins();
108 vmin = oldhtemp->GetXaxis()->GetXmin();
109 vmax = oldhtemp->GetXaxis()->GetXmax();
110 } else {
111 vmin = gPad->GetUxmin();
112 vmax = gPad->GetUxmax();
113 }
114 } else {
115 vmin = xmin;
116 vmax = xmax;
117 if (xmin < xmax) canExtend = kFALSE;
118 }
119 TH1F *hist = new TH1F("htemp","htemp",nbins,vmin,vmax);
128 if (canExtend) hist->SetCanExtend(TH1::kAllAxes);
129 hist->GetXaxis()->SetTitle("var");
130 hist->SetBit(kCanDelete);
131 hist->SetDirectory(0);
133 if (opt.Length() && opt.Contains("e")) hist->Sumw2();
134 return hist;
135 }
137 ////////////////////////////////////////////////////////////////////////////////
138 /// Set the BranchProxy to be looking at a new tree.
139 /// Reset all.
140 /// Return the old tree.
144 TTree* oldtree = fTree;
145 fTree = newtree;
146 if(!Notify()) return nullptr;
147 return oldtree;
148 }
150 ////////////////////////////////////////////////////////////////////////////////
153 fEntry = -1;
154 bool retVal = true;
155 for_each(fDirected.begin(),fDirected.end(),NotifyDirected);
156 for (auto brProxy : fDirected) {
157 retVal = retVal && brProxy->Notify();
158 }
160 for_each(fFriends.begin(),fFriends.end(),update);
161 return retVal;
162 }
164} // namespace Internal
165} // namespace ROOT
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
const Bool_t kFALSE
Definition: RtypesCore.h:101
long long Long64_t
Definition: RtypesCore.h:80
const Bool_t kTRUE
Definition: RtypesCore.h:100
#define ClassImp(name)
Definition: Rtypes.h:375
R__EXTERN TEnv * gEnv
Definition: TEnv.h:170
winID h TVirtualViewer3D TVirtualGLPainter p
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 np
float xmin
Definition: THbookFile.cxx:95
float xmax
Definition: THbookFile.cxx:95
@ kCanDelete
Definition: TObject.h:354
#define gPad
Definition: TVirtualPad.h:288
Base class for all the proxy object.
Definition: TBranchProxy.h:74
Long64_t fEntry
Entry currently being read (in the local TTree rather than the TChain)
TTree * fTree
TTree we are currently looking at.
std::list< Detail::TBranchProxy * > fDirected
std::vector< TFriendProxy * > fFriends
TTree * SetTree(TTree *newtree)
Set the BranchProxy to be looking at a new tree.
TBranchProxyDirector(const TBranchProxyDirector &)
TH1F * CreateHistogram(const char *options)
Create a temporary 1D histogram.
void Attach(Detail::TBranchProxy *p)
Attach a TBranchProxy object to this director.
void ResetReadEntry()
Refresh the cached read entry number from the original tree.
virtual Color_t GetFillColor() const
Return the fill area color.
Definition: TAttFill.h:30
virtual Style_t GetFillStyle() const
Return the fill area style.
Definition: TAttFill.h:31
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition: TAttFill.h:37
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
Definition: TAttFill.h:39
virtual Color_t GetLineColor() const
Return the line color.
Definition: TAttLine.h:33
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Definition: TAttLine.h:42
virtual Width_t GetLineWidth() const
Return the line width.
Definition: TAttLine.h:35
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition: TAttLine.h:43
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TAttLine.h:40
virtual Style_t GetLineStyle() const
Return the line style.
Definition: TAttLine.h:34
virtual Style_t GetMarkerStyle() const
Return the marker style.
Definition: TAttMarker.h:32
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Definition: TAttMarker.h:38
virtual Color_t GetMarkerColor() const
Return the marker color.
Definition: TAttMarker.h:31
virtual Size_t GetMarkerSize() const
Return the marker size.
Definition: TAttMarker.h:33
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Definition: TAttMarker.h:40
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Definition: TAttMarker.h:41
Double_t GetXmax() const
Definition: TAxis.h:135
Double_t GetXmin() const
Definition: TAxis.h:134
Int_t GetNbins() const
Definition: TAxis.h:121
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Definition: TEnv.cxx:491
1-D histogram with a float per channel (see TH1 documentation)}
Definition: TH1.h:574
TH1 is the base class of all histogram classes in ROOT.
Definition: TH1.h:58
virtual void SetDirectory(TDirectory *dir)
By default, when a histogram is created, it is added to the list of histogram objects in the current ...
Definition: TH1.cxx:8814
@ kAllAxes
Definition: TH1.h:75
static TClass * Class()
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
Definition: TH1.h:319
virtual UInt_t SetCanExtend(UInt_t extendBitMask)
Make the histogram axes extendable / not extendable according to the bit mask returns the previous bi...
Definition: TH1.cxx:6641
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
Definition: TH1.cxx:8897
Iterator of linked list.
Definition: TList.h:191
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
Definition: TNamed.cxx:164
Mother of all ROOT objects.
Definition: TObject.h:37
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:696
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
Definition: TObject.cxx:445
Basic string class.
Definition: TString.h:136
Ssiz_t Length() const
Definition: TString.h:410
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:624
A TTree represents a columnar dataset.
Definition: TTree.h:79
Double_t x[n]
Definition: legend1.C:17
void ResetReadEntry(TFriendProxy *fp)
Helper function to call SetReadEntry on all TFriendProxy.
void NotifyDirected(Detail::TBranchProxy *x)
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
Definition: tree.py:1
void operator()(TFriendProxy *x)