29 TLeafD32::TLeafD32() : TLeaf()
42 TLeafD32::TLeafD32(TBranch *parent,
const char *name,
const char *type) : TLeaf(parent, name, type)
52 if (strchr(type,
'['))
53 fElement =
new TStreamerElement(Form(
"%s_Element", name), type, 0, 0,
"Double32_t");
61 if (ResetAddress(
nullptr, kTRUE))
71 void TLeafD32::Export(TClonesArray *list, Int_t n)
74 for (Int_t i = 0; i < n; i++) {
75 memcpy((
char *)list->UncheckedAt(i) + fOffset, &fValue[j], 8 * fLen);
83 void TLeafD32::FillBasket(TBuffer &b)
88 b.WriteFastArrayDouble32(fValue, len, fElement);
94 void TLeafD32::Import(TClonesArray *list, Int_t n)
96 const Double32_t kDoubleUndefined = -9999.;
98 for (Int_t i = 0; i < n; i++) {
99 auto clone = (
char *)list->UncheckedAt(i);
101 memcpy(&fValue[j], clone + fOffset, 8 * fLen);
103 memcpy(&fValue[j], &kDoubleUndefined, 8 * fLen);
111 void TLeafD32::PrintValue(Int_t l)
const
113 auto value = (Double32_t *)GetValuePointer();
114 printf(
"%g", value[l]);
120 void TLeafD32::ReadBasket(TBuffer &b)
122 if (!fLeafCount && fNdata == 1) {
123 b.ReadDouble32(fValue, fElement);
126 Long64_t entry = fBranch->GetReadEntry();
127 if (fLeafCount->GetBranch()->GetReadEntry() != entry) {
128 fLeafCount->GetBranch()->GetEntry(entry);
130 auto len = Int_t(fLeafCount->GetValue());
131 if (len > fLeafCount->GetMaximum()) {
132 printf(
"ERROR leaf:%s, len=%d and max=%d\n", GetName(), len, fLeafCount->GetMaximum());
133 len = fLeafCount->GetMaximum();
136 b.ReadFastArrayDouble32(fValue, len * fLen, fElement);
138 b.ReadFastArrayDouble32(fValue, fLen, fElement);
147 void TLeafD32::ReadBasketExport(TBuffer &b, TClonesArray *list, Int_t n)
149 b.ReadFastArrayDouble32(fValue, n * fLen, fElement);
152 for (Int_t i = 0; i < n; i++) {
153 memcpy((
char *)list->UncheckedAt(i) + fOffset, &fValue[j], 8 * fLen);
161 void TLeafD32::ReadValue(std::istream &s, Char_t )
163 auto value = (Double32_t *)GetValuePointer();
164 for (Int_t i = 0; i < fLen; i++)
171 void TLeafD32::SetAddress(
void *add)
173 if (ResetAddress(add) && (add != fValue)) {
177 if (TestBit(kIndirectAddress)) {
178 fPointer = (Double32_t **)add;
179 Int_t ncountmax = fLen;
181 ncountmax = fLen * (fLeafCount->GetMaximum() + 1);
182 if ((fLeafCount && ncountmax > Int_t(fLeafCount->GetValue())) || ncountmax > fNdata || *fPointer ==
nullptr) {
185 if (ncountmax > fNdata)
187 *fPointer =
new Double32_t[fNdata];
191 fValue = (Double32_t *)add;
194 fValue =
new Double32_t[fNdata];
202 void TLeafD32::Streamer(TBuffer &R__b)
204 if (R__b.IsReading()) {
205 R__b.ReadClassBuffer(TLeafD32::Class(),
this);
207 if (fTitle.Contains(
"["))
208 fElement =
new TStreamerElement(Form(
"%s_Element", fName.Data()), fTitle.Data(), 0, 0,
"Double32_t");
210 R__b.WriteClassBuffer(TLeafD32::Class(),
this);