29 TLeafF16::TLeafF16() : TLeaf()
42 TLeafF16::TLeafF16(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,
"Float16_t");
61 if (ResetAddress(
nullptr, kTRUE))
71 void TLeafF16::Export(TClonesArray *list, Int_t n)
73 Float16_t *value = fValue;
74 for (Int_t i = 0; i < n; i++) {
75 auto first = (
char *)list->UncheckedAt(i);
76 auto ff = (Float16_t *)&first[fOffset];
77 for (Int_t j = 0; j < fLen; j++) {
87 void TLeafF16::FillBasket(TBuffer &b)
92 b.WriteFastArrayFloat16(fValue, len, fElement);
98 void TLeafF16::Import(TClonesArray *list, Int_t n)
100 const Float16_t kFloatUndefined = -9999.;
102 for (Int_t i = 0; i < n; i++) {
103 auto clone = (
char *)list->UncheckedAt(i);
105 memcpy(&fValue[j], clone + fOffset, 4 * fLen);
107 memcpy(&fValue[j], &kFloatUndefined, 4 * fLen);
115 void TLeafF16::PrintValue(Int_t l)
const
117 auto value = (Float16_t *)GetValuePointer();
118 printf(
"%g", value[l]);
124 void TLeafF16::ReadBasket(TBuffer &b)
126 if (!fLeafCount && fNdata == 1) {
127 b.ReadFloat16(fValue, fElement);
130 Long64_t entry = fBranch->GetReadEntry();
131 if (fLeafCount->GetBranch()->GetReadEntry() != entry) {
132 fLeafCount->GetBranch()->GetEntry(entry);
134 auto len = Int_t(fLeafCount->GetValue());
135 if (len > fLeafCount->GetMaximum()) {
136 printf(
"ERROR leaf:%s, len=%d and max=%d\n", GetName(), len, fLeafCount->GetMaximum());
137 len = fLeafCount->GetMaximum();
140 b.ReadFastArrayFloat16(fValue, len * fLen, fElement);
142 b.ReadFastArrayFloat16(fValue, fLen, fElement);
151 void TLeafF16::ReadBasketExport(TBuffer &b, TClonesArray *list, Int_t n)
154 b.ReadFloat16(fValue, fElement);
156 b.ReadFastArrayFloat16(fValue, n * fLen, fElement);
159 Float16_t *value = fValue;
160 for (Int_t i = 0; i < n; i++) {
161 auto first = (
char *)list->UncheckedAt(i);
162 auto ff = (Float16_t *)&first[fOffset];
163 for (Int_t j = 0; j < fLen; j++) {
173 void TLeafF16::ReadValue(std::istream &s, Char_t )
175 auto value = (Float16_t *)GetValuePointer();
176 for (Int_t i = 0; i < fLen; i++)
183 void TLeafF16::SetAddress(
void *add)
185 if (ResetAddress(add) && (add != fValue)) {
190 if (TestBit(kIndirectAddress)) {
191 fPointer = (Float16_t **)add;
192 Int_t ncountmax = fLen;
194 ncountmax = fLen * (fLeafCount->GetMaximum() + 1);
195 if ((fLeafCount && ncountmax > Int_t(fLeafCount->GetValue())) || ncountmax > fNdata || *fPointer ==
nullptr) {
198 if (ncountmax > fNdata)
200 *fPointer =
new Float16_t[fNdata];
204 fValue = (Float16_t *)add;
207 fValue =
new Float16_t[fNdata];
215 void TLeafF16::Streamer(TBuffer &R__b)
217 if (R__b.IsReading()) {
218 R__b.ReadClassBuffer(TLeafF16::Class(),
this);
220 if (fTitle.Contains(
"["))
221 fElement =
new TStreamerElement(Form(
"%s_Element", fName.Data()), fTitle.Data(), 0, 0,
"Float16_t");
223 R__b.WriteClassBuffer(TLeafF16::Class(),
this);