ROOT  6.06/09
Reference Guide
TLeafD.cxx
Go to the documentation of this file.
1 // @(#)root/tree:$Id$
2 // Author: Rene Brun 12/01/96
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
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 /** \class TLeafD
13 A TLeaf for a 64 bit floating point data type.
14 */
15 
16 #include "TLeafD.h"
17 #include "TBranch.h"
18 #include "TClonesArray.h"
19 #include "Riostream.h"
20 
22 
23 ////////////////////////////////////////////////////////////////////////////////
24 /// Default constructor for LeafD.
25 
26 TLeafD::TLeafD(): TLeaf()
27 {
28  fLenType = 8;
29  fMinimum = 0;
30  fMaximum = 0;
31  fValue = 0;
32  fPointer = 0;
33 }
34 
35 ////////////////////////////////////////////////////////////////////////////////
36 /// Create a LeafD.
37 
38 TLeafD::TLeafD(TBranch *parent, const char *name, const char *type)
39  :TLeaf(parent, name,type)
40 {
41  fLenType = 8;
42  fMinimum = 0;
43  fMaximum = 0;
44  fValue = 0;
45  fPointer = 0;
46 }
47 
48 ////////////////////////////////////////////////////////////////////////////////
49 /// Default destructor for a LeafD.
50 
52 {
53  if (ResetAddress(0,kTRUE)) delete [] fValue;
54 }
55 
56 ////////////////////////////////////////////////////////////////////////////////
57 /// Export element from local leaf buffer to ClonesArray.
58 
60 {
61  Int_t j = 0;
62  for (Int_t i=0;i<n;i++) {
63  memcpy((char*)list->UncheckedAt(i) + fOffset,&fValue[j], 8*fLen);
64  j += fLen;
65  }
66 }
67 
68 ////////////////////////////////////////////////////////////////////////////////
69 /// Pack leaf elements in Basket output buffer.
70 
72 {
73  Int_t len = GetLen();
74  if (fPointer) fValue = *fPointer;
75  b.WriteFastArray(fValue,len);
76 }
77 
78 ////////////////////////////////////////////////////////////////////////////////
79 /// Import element from ClonesArray into local leaf buffer.
80 
82 {
83  const Double_t kDoubleUndefined = -9999.;
84  Int_t j = 0;
85  char *clone;
86  for (Int_t i=0;i<n;i++) {
87  clone = (char*)list->UncheckedAt(i);
88  if (clone) memcpy(&fValue[j],clone + fOffset, 8*fLen);
89  else memcpy(&fValue[j],&kDoubleUndefined, 8*fLen);
90  j += fLen;
91  }
92 }
93 
94 ////////////////////////////////////////////////////////////////////////////////
95 /// Prints leaf value.
96 
98 {
100  printf("%g",value[l]);
101 }
102 
103 ////////////////////////////////////////////////////////////////////////////////
104 /// Read leaf elements from Basket input buffer.
105 
107 {
108  if (!fLeafCount && fNdata == 1) {
109  b.ReadDouble(fValue[0]);
110  }else {
111  if (fLeafCount) {
113  if (fLeafCount->GetBranch()->GetReadEntry() != entry) {
114  fLeafCount->GetBranch()->GetEntry(entry);
115  }
116  Int_t len = Int_t(fLeafCount->GetValue());
117  if (len > fLeafCount->GetMaximum()) {
118  printf("ERROR leaf:%s, len=%d and max=%d\n",GetName(),len,fLeafCount->GetMaximum());
119  len = fLeafCount->GetMaximum();
120  }
121  fNdata = len*fLen;
122  b.ReadFastArray(fValue,len*fLen);
123  } else {
125  }
126  }
127 }
128 
129 ////////////////////////////////////////////////////////////////////////////////
130 /// Read leaf elements from Basket input buffer and export buffer to
131 /// TClonesArray objects.
132 
134 {
136 
137  Int_t j = 0;
138  for (Int_t i=0;i<n;i++) {
139  memcpy((char*)list->UncheckedAt(i) + fOffset,&fValue[j], 8*fLen);
140  j += fLen;
141  }
142 }
143 
144 ////////////////////////////////////////////////////////////////////////////////
145 /// Read a double from std::istream s and store it into the branch buffer.
146 
147 void TLeafD::ReadValue(std::istream &s, Char_t /*delim = ' '*/)
148 {
150  for (Int_t i=0;i<fLen;i++) s >> value[i];
151 }
152 
153 ////////////////////////////////////////////////////////////////////////////////
154 /// Set leaf buffer data address.
155 
156 void TLeafD::SetAddress(void *add)
157 {
158  if (ResetAddress(add) && (add!= fValue)) {
159  delete [] fValue;
160  }
161  if (add) {
162  if (TestBit(kIndirectAddress)) {
163  fPointer = (Double_t**) add;
164  Int_t ncountmax = fLen;
165  if (fLeafCount) ncountmax = fLen*(fLeafCount->GetMaximum() + 1);
166  if ((fLeafCount && ncountmax > Int_t(fLeafCount->GetValue())) ||
167  ncountmax > fNdata || *fPointer == 0) {
168  if (*fPointer) delete [] *fPointer;
169  if (ncountmax > fNdata) fNdata = ncountmax;
170  *fPointer = new Double_t[fNdata];
171  }
172  fValue = *fPointer;
173  } else {
174  fValue = (Double_t*)add;
175  }
176  } else {
177  fValue = new Double_t[fNdata];
178  fValue[0] = 0;
179  }
180 }
Double_t * fValue
Definition: TLeafD.h:33
virtual Int_t GetLen() const
Return the number of effective elements of this leaf.
Definition: TLeaf.cxx:276
Long64_t GetReadEntry() const
Definition: TBranch.h:169
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
Definition: TLeaf.h:37
A TLeaf for a 64 bit floating point data type.
Definition: TLeafD.h:28
long long Long64_t
Definition: RtypesCore.h:69
virtual ~TLeafD()
Default destructor for a LeafD.
Definition: TLeafD.cxx:51
virtual void FillBasket(TBuffer &b)
Pack leaf elements in Basket output buffer.
Definition: TLeafD.cxx:71
virtual void ReadBasketExport(TBuffer &b, TClonesArray *list, Int_t n)
Read leaf elements from Basket input buffer and export buffer to TClonesArray objects.
Definition: TLeafD.cxx:133
Buffer base class used for serializing objects.
Definition: TBuffer.h:40
int Int_t
Definition: RtypesCore.h:41
TBranch * GetBranch() const
Definition: TLeaf.h:70
Int_t fLenType
Definition: TLeaf.h:43
virtual void SetAddress(void *add=0)
Set leaf buffer data address.
Definition: TLeafD.cxx:156
virtual void PrintValue(Int_t i=0) const
Prints leaf value.
Definition: TLeafD.cxx:97
virtual void * GetValuePointer() const
Definition: TLeafD.h:45
virtual void ReadDouble(Double_t &d)=0
virtual void Import(TClonesArray *list, Int_t n)
Import element from ClonesArray into local leaf buffer.
Definition: TLeafD.cxx:81
Double_t ** fPointer
Pointer to data buffer.
Definition: TLeafD.h:34
Int_t fLen
Number of elements in fAddress data buffer.
Definition: TLeaf.h:42
virtual Double_t GetValue(Int_t i=0) const
Definition: TLeaf.h:122
virtual Int_t GetMaximum() const
Definition: TLeaf.h:76
TObject * UncheckedAt(Int_t i) const
Definition: TObjArray.h:91
Int_t fNdata
Definition: TLeaf.h:41
PyObject * fValue
Bool_t TestBit(UInt_t f) const
Definition: TObject.h:173
TLine * l
Definition: textangle.C:4
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
Definition: TBranch.cxx:1198
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
Long64_t entry
Double_t fMinimum
Definition: TLeafD.h:31
virtual void ReadFastArray(Bool_t *b, Int_t n)=0
virtual void WriteFastArray(const Bool_t *b, Int_t n)=0
double Double_t
Definition: RtypesCore.h:55
int type
Definition: TGX11.cxx:120
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
virtual void ReadBasket(TBuffer &b)
Read leaf elements from Basket input buffer.
Definition: TLeafD.cxx:106
#define name(a, b)
Definition: linkTestLib0.cpp:5
Int_t fOffset
Definition: TLeaf.h:44
char Char_t
Definition: RtypesCore.h:29
An array of clone (identical) objects.
Definition: TClonesArray.h:32
virtual void ReadValue(std::istream &s, Char_t delim= ' ')
Read a double from std::istream s and store it into the branch buffer.
Definition: TLeafD.cxx:147
Double_t fMaximum
Definition: TLeafD.h:32
TBranch * fBranch
Definition: TLeaf.h:48
ClassImp(TLeafD) TLeafD
Default constructor for LeafD.
Definition: TLeafD.cxx:21
Int_t ResetAddress(void *add, Bool_t destructor=kFALSE)
Helper routine for TLeafX::SetAddress.
Definition: TLeaf.cxx:301
TLeaf * fLeafCount
Definition: TLeaf.h:47
virtual void Export(TClonesArray *list, Int_t n)
Export element from local leaf buffer to ClonesArray.
Definition: TLeafD.cxx:59
A TTree is a list of TBranches.
Definition: TBranch.h:58
const Bool_t kTRUE
Definition: Rtypes.h:91
float value
Definition: math.cpp:443
const Int_t n
Definition: legend1.C:16
TLeafD()
Address of pointer to data buffer.