ROOT  6.06/09
Reference Guide
TBranchProxyDirector.cxx
Go to the documentation of this file.
1 // @(#)root/base:$Id$
2 // Author: Philippe Canal 13/05/2003
3 
4 /*************************************************************************
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  *************************************************************************/
11 
12 /** TBranchProxyDirector
13 This class is used to 'drive' and hold a serie of TBranchProxy objects
14 which represent and give access to the content of TTree object.
15 This is intended to be used as part of a generate Selector class
16 which will hold the directory and its associate
17 */
18 
19 #include "TBranchProxyDirector.h"
20 #include "TBranchProxy.h"
21 #include "TFriendProxy.h"
22 #include "TTree.h"
23 #include "TEnv.h"
24 #include "TH1F.h"
25 #include "TPad.h"
26 #include "TList.h"
27 
28 #include <algorithm>
29 
30 namespace std {} using namespace std;
31 
33 
34 namespace ROOT {
35 namespace Internal {
36 
37  // Helper function to call Reset on each TBranchProxy
38  void Reset(Detail::TBranchProxy *x) { x->Reset(); }
39 
40  // Helper function to call SetReadEntry on all TFriendProxy
42 
43  // Helper class to call Update on all TFriendProxy
44  struct Update {
45  Update(TTree *newtree) : fNewTree(newtree) {}
46  TTree *fNewTree;
47  void operator()(TFriendProxy *x) { x->Update(fNewTree); }
48  };
49 
50 
51  TBranchProxyDirector::TBranchProxyDirector(TTree* tree, Long64_t i) :
52  fTree(tree),
53  fEntry(i)
54  {
55  // Simple constructor
56  }
57 
59  // cint has a problem casting int to long long
60  fTree(tree),
61  fEntry(i)
62  {
63  // Simple constructor
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).
71  fDirected.push_back(p);
72  }
73 
75 
76  // Attach a TFriendProxy object to this director. The director just
77  // 'remembers' this BranchProxy and does not own it. It will be use
78  // to apply Tree wide operation (like reseting).
79  fFriends.push_back(p);
80  }
81 
83  // Create a temporary 1D histogram.
84 
85  Int_t nbins = gEnv->GetValue("Hist.Binning.1D.x",100);
86  Double_t vmin=0, vmax=0;
87  Double_t xmin=0, xmax=0;
88  Bool_t canExtend = kTRUE;
89  TString opt( options );
90  Bool_t optSame = opt.Contains("same");
91  if (optSame) canExtend = kFALSE;
92 
93  if (gPad && optSame) {
94  TListIter np(gPad->GetListOfPrimitives());
95  TObject *op;
96  TH1 *oldhtemp = 0;
97  while ((op = np()) && !oldhtemp) {
98  if (op->InheritsFrom(TH1::Class())) oldhtemp = (TH1 *)op;
99  }
100  if (oldhtemp) {
101  nbins = oldhtemp->GetXaxis()->GetNbins();
102  vmin = oldhtemp->GetXaxis()->GetXmin();
103  vmax = oldhtemp->GetXaxis()->GetXmax();
104  } else {
105  vmin = gPad->GetUxmin();
106  vmax = gPad->GetUxmax();
107  }
108  } else {
109  vmin = xmin;
110  vmax = xmax;
111  if (xmin < xmax) canExtend = kFALSE;
112  }
113  TH1F *hist = new TH1F("htemp","htemp",nbins,vmin,vmax);
114  hist->SetLineColor(fTree->GetLineColor());
115  hist->SetLineWidth(fTree->GetLineWidth());
116  hist->SetLineStyle(fTree->GetLineStyle());
117  hist->SetFillColor(fTree->GetFillColor());
118  hist->SetFillStyle(fTree->GetFillStyle());
119  hist->SetMarkerStyle(fTree->GetMarkerStyle());
120  hist->SetMarkerColor(fTree->GetMarkerColor());
121  hist->SetMarkerSize(fTree->GetMarkerSize());
122  if (canExtend) hist->SetCanExtend(TH1::kAllAxes);
123  hist->GetXaxis()->SetTitle("var");
124  hist->SetBit(kCanDelete);
125  hist->SetDirectory(0);
126 
127  if (opt.Length() && opt.Contains("e")) hist->Sumw2();
128  return hist;
129  }
130 
132 
133  // move to a new entry to read
134  fEntry = entry;
135  if (!fFriends.empty()) {
136  for_each(fFriends.begin(),fFriends.end(),ResetReadEntry);
137  }
138  }
139 
141 
142  // Set the BranchProxy to be looking at a new tree.
143  // Reset all.
144  // Return the old tree.
145 
146  TTree* oldtree = fTree;
147  fTree = newtree;
148  fEntry = -1;
149  //if (fInitialized) fInitialized = setup();
150  //fprintf(stderr,"calling SetTree for %p\n",this);
151  for_each(fDirected.begin(),fDirected.end(),Reset);
152  Update update(fTree);
153  for_each(fFriends.begin(),fFriends.end(),update);
154  return oldtree;
155  }
156 
157 } // namespace Internal
158 } // namespace ROOT
virtual Style_t GetLineStyle() const
Definition: TAttLine.h:48
virtual Style_t GetFillStyle() const
Definition: TAttFill.h:44
float xmin
Definition: THbookFile.cxx:93
long long Long64_t
Definition: RtypesCore.h:69
Namespace for new ROOT classes and functions.
Definition: ROOT.py:1
Ssiz_t Length() const
Definition: TString.h:390
THist< 1, float > TH1F
Definition: THist.h:315
Basic string class.
Definition: TString.h:137
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
int nbins[3]
STL namespace.
Iterator of linked list.
Definition: TList.h:187
TH1F * CreateHistogram(const char *options)
Double_t x[n]
Definition: legend1.C:17
void Class()
Definition: Class.C:29
std::list< TFriendProxy * > fFriends
Double_t GetXmin() const
Definition: TAxis.h:137
virtual Size_t GetMarkerSize() const
Definition: TAttMarker.h:46
std::list< Detail::TBranchProxy * > fDirected
void ResetReadEntry()
Refresh the cached read entry number from the original tree.
Int_t GetNbins() const
Definition: TAxis.h:125
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
Definition: TEnv.cxx:494
virtual Color_t GetFillColor() const
Definition: TAttFill.h:43
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
void ResetReadEntry(TFriendProxy *x)
float xmax
Definition: THbookFile.cxx:93
void Reset(Detail::TBranchProxy *x)
virtual Color_t GetLineColor() const
Definition: TAttLine.h:47
Long64_t entry
ClassImp(ROOT::Internal::TBranchProxyDirector)
TRObject operator()(const T1 &t1) const
double Double_t
Definition: RtypesCore.h:55
R__EXTERN TEnv * gEnv
Definition: TEnv.h:174
Double_t GetXmax() const
Definition: TAxis.h:138
The TH1 histogram class.
Definition: TH1.h:80
Mother of all ROOT objects.
Definition: TObject.h:58
virtual Color_t GetMarkerColor() const
Definition: TAttMarker.h:44
TBranchProxyDirector(const TBranchProxyDirector &)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:567
#define gPad
Definition: TVirtualPad.h:288
A TTree object has a header with a name and a title.
Definition: TTree.h:94
virtual Style_t GetMarkerStyle() const
Definition: TAttMarker.h:45
const Bool_t kTRUE
Definition: Rtypes.h:91
virtual Width_t GetLineWidth() const
Definition: TAttLine.h:49
Histogram class for histograms with DIMENSIONS dimensions, where each bin count is stored by a value ...
Definition: THist.h:31
TAxis * GetXaxis()
Definition: TH1.h:319
void Attach(Detail::TBranchProxy *p)