37 using RNTupleModel = ROOT::Experimental::RNTupleModel;
38 using RFieldBase = ROOT::Experimental::Detail::RFieldBase;
39 using RNTupleReader = ROOT::Experimental::RNTupleReader;
40 using RNTupleWriter = ROOT::Experimental::RNTupleWriter;
42 constexpr
char const* kTreeFileName =
"http://root.cern.ch/files/LHCb/lhcb_B2HHH_MagnetUp.root";
43 constexpr
char const* kNTupleFileName =
"ntpl003_lhcbOpenData.root";
47 std::unique_ptr<TFile> f(TFile::Open(kTreeFileName));
48 assert(f && ! f->IsZombie());
51 auto model = RNTupleModel::Create();
55 auto tree = f->Get<TTree>(
"DecayTree");
56 for (
auto b : TRangeDynCast<TBranch>(*tree->GetListOfBranches())) {
61 TLeaf *l =
static_cast<TLeaf*
>(b->GetListOfLeaves()->First());
64 auto field = RFieldBase::Create(l->GetName(), l->GetTypeName());
65 std::cout <<
"Convert leaf " << l->GetName() <<
" [" << l->GetTypeName() <<
"]"
66 <<
" --> " <<
"field " << field->GetName() <<
" [" << field->GetType() <<
"]" << std::endl;
70 model->AddField(std::unique_ptr<RFieldBase>(field));
74 void *fieldDataPtr = model->GetDefaultEntry()->GetValue(l->GetName()).GetRawPtr();
75 tree->SetBranchAddress(b->GetName(), fieldDataPtr);
79 auto ntuple = RNTupleWriter::Recreate(std::move(model),
"DecayTree", kNTupleFileName);
81 auto nEntries = tree->GetEntries();
82 for (decltype(nEntries) i = 0; i < nEntries; ++i) {
86 if (i && i % 100000 == 0)
87 std::cout <<
"Wrote " << i <<
" entries" << std::endl;
92 void ntpl003_lhcbOpenData()
100 auto ntuple = RNTupleReader::Open(
"DecayTree", kNTupleFileName);
103 auto viewFlightDistance = ntuple->GetView<
double>(
"B_FlightDistance");
105 auto c =
new TCanvas(
"c",
"B Flight Distance", 200, 10, 700, 500);
106 TH1F h(
"h",
"B Flight Distance", 200, 0, 140);
109 for (
auto i : ntuple->GetViewRange()) {
112 h.Fill(viewFlightDistance(i));