|
| 1 | +/* https://root.cern/doc/master/ntpl001__staff_8C.html */ |
| 2 | +R__LOAD_LIBRARY(ROOTNTuple) |
| 3 | +#include <ROOT/RField.hxx> |
| 4 | +#include <ROOT/RNTuple.hxx> |
| 5 | +#include <ROOT/RNTupleModel.hxx> |
| 6 | +#include <ROOT/RNTupleWriter.hxx> |
| 7 | +#include <ROOT/RNTupleUtil.hxx> |
| 8 | +#include <ROOT/RRawFile.hxx> |
| 9 | + |
| 10 | +#include <cassert> |
| 11 | +#include <variant> |
| 12 | + |
| 13 | +using RNTupleModel = ROOT::Experimental::RNTupleModel; |
| 14 | +using RNTupleWriter = ROOT::Experimental::RNTupleWriter; |
| 15 | +template <typename T> |
| 16 | +using RField = ROOT::Experimental::RField<T>; |
| 17 | +using EColumnType = ROOT::Experimental::EColumnType; |
| 18 | + |
| 19 | +void rntuple_float_types() { |
| 20 | + std::string rootFileName{"test_float_types_rntuple_v1-0-0-0.root"}; |
| 21 | + auto model = RNTupleModel::Create(); |
| 22 | + |
| 23 | + auto trunc10 = std::make_unique<RField<float>>("trunc10"); |
| 24 | + trunc10->SetColumnRepresentatives({{EColumnType::kReal32Trunc}}); |
| 25 | + trunc10->SetTruncated(10); |
| 26 | + model->AddField(std::move(trunc10)); |
| 27 | + |
| 28 | + auto trunc16 = std::make_unique<RField<float>>("trunc16"); |
| 29 | + trunc16->SetColumnRepresentatives({{EColumnType::kReal32Trunc}}); |
| 30 | + trunc16->SetTruncated(16); |
| 31 | + model->AddField(std::move(trunc16)); |
| 32 | + |
| 33 | + auto trunc24 = std::make_unique<RField<float>>("trunc24"); |
| 34 | + trunc24->SetColumnRepresentatives({{EColumnType::kReal32Trunc}}); |
| 35 | + trunc24->SetTruncated(24); |
| 36 | + model->AddField(std::move(trunc24)); |
| 37 | + |
| 38 | + auto trunc31 = std::make_unique<RField<float>>("trunc31"); |
| 39 | + trunc31->SetColumnRepresentatives({{EColumnType::kReal32Trunc}}); |
| 40 | + trunc31->SetTruncated(31); |
| 41 | + model->AddField(std::move(trunc31)); |
| 42 | + |
| 43 | + auto quant1 = std::make_unique<RField<float>>("quant1"); |
| 44 | + quant1->SetColumnRepresentatives({{EColumnType::kReal32Quant}}); |
| 45 | + quant1->SetQuantized(-2.f, 3.f, 1); |
| 46 | + model->AddField(std::move(quant1)); |
| 47 | + |
| 48 | + auto quant8 = std::make_unique<RField<float>>("quant8"); |
| 49 | + quant8->SetColumnRepresentatives({{EColumnType::kReal32Quant}}); |
| 50 | + quant8->SetQuantized(-2.f, 3.f, 8); |
| 51 | + model->AddField(std::move(quant8)); |
| 52 | + |
| 53 | + auto quant16 = std::make_unique<RField<float>>("quant16"); |
| 54 | + quant16->SetColumnRepresentatives({{EColumnType::kReal32Quant}}); |
| 55 | + quant16->SetQuantized(-2.f, 3.f, 16); |
| 56 | + model->AddField(std::move(quant16)); |
| 57 | + |
| 58 | + auto quant20 = std::make_unique<RField<float>>("quant20"); |
| 59 | + quant20->SetColumnRepresentatives({{EColumnType::kReal32Quant}}); |
| 60 | + quant20->SetQuantized(-2.f, 3.f, 20); |
| 61 | + model->AddField(std::move(quant20)); |
| 62 | + |
| 63 | + auto quant24 = std::make_unique<RField<float>>("quant24"); |
| 64 | + quant24->SetColumnRepresentatives({{EColumnType::kReal32Quant}}); |
| 65 | + quant24->SetQuantized(-2.f, 3.f, 24); |
| 66 | + model->AddField(std::move(quant24)); |
| 67 | + |
| 68 | + auto quant25 = std::make_unique<RField<float>>("quant25"); |
| 69 | + quant25->SetColumnRepresentatives({{EColumnType::kReal32Quant}}); |
| 70 | + quant25->SetQuantized(-2.f, 3.f, 25); |
| 71 | + model->AddField(std::move(quant25)); |
| 72 | + |
| 73 | + auto quant32 = std::make_unique<RField<float>>("quant32"); |
| 74 | + quant32->SetColumnRepresentatives({{EColumnType::kReal32Quant}}); |
| 75 | + quant32->SetQuantized(-2.f, 3.f, 32); |
| 76 | + model->AddField(std::move(quant32)); |
| 77 | + |
| 78 | + auto ntuple = RNTupleWriter::Recreate(std::move(model), "ntuple", rootFileName); |
| 79 | + auto e = ntuple->CreateEntry(); |
| 80 | + |
| 81 | + *e->GetPtr<float>("trunc10") = 1.23456789f; // 00111111100111100000011001010010 |
| 82 | + *e->GetPtr<float>("trunc16") = 1.23456789f; |
| 83 | + *e->GetPtr<float>("trunc24") = 1.23456789f; |
| 84 | + *e->GetPtr<float>("trunc31") = 1.23456789f; |
| 85 | + *e->GetPtr<float>("quant1") = 1.23456789f; |
| 86 | + *e->GetPtr<float>("quant8") = 1.23456789f; |
| 87 | + *e->GetPtr<float>("quant16") = 1.23456789f; |
| 88 | + *e->GetPtr<float>("quant20") = 1.23456789f; |
| 89 | + *e->GetPtr<float>("quant24") = 1.23456789f; |
| 90 | + *e->GetPtr<float>("quant25") = 1.23456789f; |
| 91 | + *e->GetPtr<float>("quant32") = 1.23456789f; |
| 92 | + |
| 93 | + ntuple->Fill(*e); |
| 94 | + |
| 95 | + *e->GetPtr<float>("trunc10") = 1.4660155e13f; // 01010101010101010101010101010101 |
| 96 | + *e->GetPtr<float>("trunc16") = 1.4660155e13f; |
| 97 | + *e->GetPtr<float>("trunc24") = 1.4660155e13f; |
| 98 | + *e->GetPtr<float>("trunc31") = 1.4660155e13f; |
| 99 | + *e->GetPtr<float>("quant1") = 1.6666666f; // 00111111110101010101010101010101 |
| 100 | + *e->GetPtr<float>("quant8") = 1.6666666f; |
| 101 | + *e->GetPtr<float>("quant16") = 1.6666666f; |
| 102 | + *e->GetPtr<float>("quant20") = 1.6666666f; |
| 103 | + *e->GetPtr<float>("quant24") = 1.6666666f; |
| 104 | + *e->GetPtr<float>("quant25") = 1.6666666f; |
| 105 | + *e->GetPtr<float>("quant32") = 1.6666666f; |
| 106 | + |
| 107 | + ntuple->Fill(*e); |
| 108 | + |
| 109 | + *e->GetPtr<float>("trunc10") = -6.2875986e-22f; // 10011100001111100000011111110000 |
| 110 | + *e->GetPtr<float>("trunc16") = -6.2875986e-22f; |
| 111 | + *e->GetPtr<float>("trunc24") = -6.2875986e-22f; |
| 112 | + *e->GetPtr<float>("trunc31") = -6.2875986e-22f; |
| 113 | + *e->GetPtr<float>("quant1") = -6.2875986e-22f; |
| 114 | + *e->GetPtr<float>("quant8") = -6.2875986e-22f; |
| 115 | + *e->GetPtr<float>("quant16") = -6.2875986e-22f; |
| 116 | + *e->GetPtr<float>("quant20") = -6.2875986e-22f; |
| 117 | + *e->GetPtr<float>("quant24") = -6.2875986e-22f; |
| 118 | + *e->GetPtr<float>("quant25") = -6.2875986e-22f; |
| 119 | + *e->GetPtr<float>("quant32") = -6.2875986e-22f; |
| 120 | + |
| 121 | + ntuple->Fill(*e); |
| 122 | + |
| 123 | + *e->GetPtr<float>("trunc10") = -1.9060668f; // 10111111111100111111100111111111 |
| 124 | + *e->GetPtr<float>("trunc16") = -1.9060668f; |
| 125 | + *e->GetPtr<float>("trunc24") = -1.9060668f; |
| 126 | + *e->GetPtr<float>("trunc31") = -1.9060668f; |
| 127 | + *e->GetPtr<float>("quant1") = -1.9060668f; |
| 128 | + *e->GetPtr<float>("quant8") = -1.9060668f; |
| 129 | + *e->GetPtr<float>("quant16") = -1.9060668f; |
| 130 | + *e->GetPtr<float>("quant20") = -1.9060668f; |
| 131 | + *e->GetPtr<float>("quant24") = -1.9060668f; |
| 132 | + *e->GetPtr<float>("quant25") = -1.9060668f; |
| 133 | + *e->GetPtr<float>("quant32") = -1.9060668f; |
| 134 | + |
| 135 | + ntuple->Fill(*e); |
| 136 | +} |
0 commit comments