{ "cells": [ { "cell_type": "markdown", "id": "f493e052", "metadata": {}, "source": [ "# ntpl015_processor_join\n", "Demonstrate the RNTupleProcessor for horizontal compositions (joins) of RNTuples\n", "\n", "\n", "\n", "\n", "**Author:** The ROOT Team \n", "This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Tuesday, May 19, 2026 at 08:15 PM." ] }, { "cell_type": "code", "execution_count": 1, "id": "124ee61e", "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-05-19T20:15:32.998056Z", "iopub.status.busy": "2026-05-19T20:15:32.997946Z", "iopub.status.idle": "2026-05-19T20:15:33.035238Z", "shell.execute_reply": "2026-05-19T20:15:33.034639Z" } }, "outputs": [], "source": [ "%%cpp -d\n", "#include \n", "#include \n", "#include \n", "\n", "#include \n", "#include \n", "#include \n", "\n", "using ROOT::Experimental::RNTupleOpenSpec;\n", "using ROOT::Experimental::RNTupleProcessor;\n", "\n", "const std::string kPrimaryNTupleName = \"mainNTuple\";\n", "const std::string kMainNTuplePath = \"main_ntuple.root\";\n", "const std::string kAuxNTupleName = \"auxNTuple\";\n", "const std::string kAuxNTuplePath = \"aux_ntuple.root\";\n", "\n", "constexpr int kNEvents = 10000;" ] }, { "cell_type": "markdown", "id": "085d1ce0", "metadata": {}, "source": [ " NOTE: The RNTupleProcessor and related classes are experimental at this point.\n", "Functionality and interface are still subject to changes.\n", "Import classes from the `Experimental` namespace for the time being.\n", "Number of events to generate for the auxiliary ntuple. The primary ntuple will have a fifth of this number.\n", " " ] }, { "cell_type": "code", "execution_count": 2, "id": "1bc8e2c9", "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-05-19T20:15:33.037043Z", "iopub.status.busy": "2026-05-19T20:15:33.036921Z", "iopub.status.idle": "2026-05-19T20:15:33.265522Z", "shell.execute_reply": "2026-05-19T20:15:33.264782Z" } }, "outputs": [], "source": [ "%%cpp -d\n", "void WritePrimary(std::string_view ntupleName, std::string_view ntupleFileName)\n", "{\n", " auto model = ROOT::RNTupleModel::Create();\n", "\n", " auto fldI = model->MakeField(\"i\");\n", " auto fldVpx = model->MakeField(\"vpx\");\n", "\n", " auto writer = ROOT::RNTupleWriter::Recreate(std::move(model), ntupleName, ntupleFileName);\n", "\n", " // The primary ntuple only contains a subset of the entries present in the auxiliary ntuple.\n", " for (int i = 0; i < kNEvents; i += 5) {\n", " *fldI = i;\n", " *fldVpx = gRandom->Gaus();\n", "\n", " writer->Fill();\n", " }\n", "\n", " std::cout << \"Wrote \" << writer->GetNEntries() << \" to the primary RNTuple\" << std::endl;\n", "}" ] }, { "cell_type": "markdown", "id": "b9426993", "metadata": {}, "source": [ " Definition of a helper function: " ] }, { "cell_type": "code", "execution_count": 3, "id": "540820ca", "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-05-19T20:15:33.267059Z", "iopub.status.busy": "2026-05-19T20:15:33.266935Z", "iopub.status.idle": "2026-05-19T20:15:33.374836Z", "shell.execute_reply": "2026-05-19T20:15:33.374148Z" } }, "outputs": [], "source": [ "%%cpp -d\n", "void WriteAux(std::string_view ntupleName, std::string_view ntupleFileName)\n", "{\n", " auto model = ROOT::RNTupleModel::Create();\n", "\n", " auto fldI = model->MakeField(\"i\");\n", " auto fldVpy = model->MakeField(\"vpy\");\n", "\n", " auto writer = ROOT::RNTupleWriter::Recreate(std::move(model), ntupleName, ntupleFileName);\n", "\n", " for (int i = 0; i < kNEvents; ++i) {\n", " *fldI = i;\n", " *fldVpy = gRandom->Gaus();\n", "\n", " writer->Fill();\n", " }\n", "\n", " std::cout << \"Wrote \" << writer->GetNEntries() << \" to the auxiliary RNTuple\" << std::endl;\n", "}" ] }, { "cell_type": "markdown", "id": "15a2cfc5", "metadata": {}, "source": [ " Definition of a helper function: " ] }, { "cell_type": "code", "execution_count": 4, "id": "08cefa9d", "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-05-19T20:15:33.376441Z", "iopub.status.busy": "2026-05-19T20:15:33.376312Z", "iopub.status.idle": "2026-05-19T20:15:33.511304Z", "shell.execute_reply": "2026-05-19T20:15:33.511004Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[runStaticInitializersOnce]: Failed to materialize symbols: { (main, { _ZNRSt8__detail9__variant14_UninitializedINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE6_M_getEv, _ZNSt8__detail9__variant15_Variadic_unionILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEC1IJRKS7_EEESt16in_place_index_tILm0EEDpOT_, _ZNSt15__uniq_ptr_implIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EE6_M_ptrEv, _ZNKSt12__shared_ptrIfLN9__gnu_cxx12_Lock_policyE2EEcvbEv, _ZNSt8__detail9__variant13_Variant_baseIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEC2ILm0EJRKS7_EEESt16in_place_index_tIXT_EEDpOT0_, _ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ERKS6_, _ZNSt8__detail9__variant14_UninitializedINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2IJRKS7_EEESt16in_place_index_tILm0EEDpOT_, _ZN4ROOT12Experimental16RNTupleProcessor9RIteratorC2ERS1_m, _ZNSt15__uniq_ptr_implIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EE10_M_deleterEv, _ZNKSt19__shared_ptr_accessIN4ROOT12Experimental8Internal21RNTupleProcessorEntryELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv, cling_module_259_, _ZSt3getILm1EJPN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_, _ZNSt10_Head_baseILm1ESt14default_deleteIN4ROOT12Experimental16RNTupleProcessorEELb1EE7_M_headERS5_, _ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_, _ZNK4ROOT12Experimental16RNTupleProcessor20GetNEntriesProcessedEv, _ZNSt7variantIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEC1IRKS5_vvS5_vEEOT_, _ZNSt8__detail9__variant17_Move_assign_baseILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEECI2NS0_16_Variant_storageILb0EJS7_S9_EEEILm0EJRKS7_EEESt16in_place_index_tIXT_EEDpOT0_, _ZNSt7variantIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEED2Ev, _ZN4ROOT12Experimental16RNTupleProcessor12RequestFieldIfEENS0_27RNTupleProcessorOptionalPtrIT_EERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPv, _ZNSt10shared_ptrIfEC1EDn, _ZNSt7variantIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEC1ILm0EJRKS5_ES5_vEESt16in_place_index_tIXT_EEDpOT0_, _ZN4ROOT12Experimental15RNTupleOpenSpecD1Ev, _ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeImLb0EEEEED2Ev, _ZNSt10shared_ptrIN4ROOT12Experimental8Internal21RNTupleProcessorEntryEED1Ev, _ZNSt10_HashtableImmSaImENSt8__detail9_IdentityESt8equal_toImESt4hashImENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE5clearEv, _ZSt12__get_helperILm0EPN4ROOT12Experimental16RNTupleProcessorEJSt14default_deleteIS2_EEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE, _ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeImLb0EEEELb1EE6_M_getEv, _ZNSt8__detail9__variant15_Variadic_unionILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEC2IJRKS7_EEESt16in_place_index_tILm0EEDpOT_, _ZNKSt15__uniq_ptr_implIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EE6_M_ptrEv, _ZNSt8__detail9__variant15_Move_ctor_baseILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEED2Ev, _ZNK4ROOT12Experimental8Internal21RNTupleProcessorEntry12IsValidFieldEm, _ZSt10__do_visitIvZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvEUlOT_E_JRSt7variantIJS8_SA_EEEEDcOT0_DpOT1_, _ZNSt12__shared_ptrIN4ROOT12Experimental8Internal21RNTupleProcessorEntryELN9__gnu_cxx12_Lock_policyE2EED2Ev, _ZNRSt8__detail9__variant14_UninitializedIP10TDirectoryLb1EE6_M_getEv, _ZNSt8__detail9__variant5__getILm1ERSt7variantIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEEEDcOT0_, _ZNKSt14default_deleteIN4ROOT12Experimental16RNTupleProcessorEEclEPS2_, _ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3endEv, _ZNKSt10unique_ptrIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EE3getEv, _ZNSt10shared_ptrIN4ROOT12Experimental8Internal21RNTupleProcessorEntryEED2Ev, _ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeImLb0EEEEE22_M_deallocate_node_ptrEPS2_, _ZNSt10_Head_baseILm0EPN4ROOT12Experimental16RNTupleProcessorELb0EE7_M_headERKS4_, _ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeImLb0EEEEE17_M_node_allocatorEv, _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC1ESt16initializer_listIS5_ERKS6_, _ZNSt15__new_allocatorINSt8__detail10_Hash_nodeImLb0EEEED2Ev, _ZNKSt19__shared_ptr_accessIN4ROOT12Experimental8Internal21RNTupleProcessorEntryELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv, _ZN4ROOT12Experimental27RNTupleProcessorOptionalPtrIfEC1EPNS0_8Internal21RNTupleProcessorEntryEm, _ZN4ROOT12Experimental16RNTupleProcessor3endEv, _ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS7_EET0_T_SC_SB_, _ZNKSt7variantIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE5indexEv, _ZNSt7variantIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEED1Ev, _ZNSt11_Tuple_implILm1EJSt14default_deleteIN4ROOT12Experimental16RNTupleProcessorEEEE7_M_headERS5_, _ZStanSt12memory_orderSt23__memory_order_modifier, _ZNK4ROOT10RFieldBase6RValue6GetPtrIfEESt10shared_ptrIT_Ev, _ZNSt8__detail9__variant17_Move_assign_baseILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEED2Ev, _ZNSt8__detail9__variant7__get_nILm0ERNS0_15_Variadic_unionILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEEEEDcOT0_, _ZNSt11_Tuple_implILm0EJPN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EEE7_M_headERKS6_, _ZSt16__do_uninit_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET0_T_SA_S9_, _ZNKSt6atomicIPKSt9type_infoE4loadESt12memory_order, _ZNSt19__ptr_traits_ptr_toIPNSt8__detail10_Hash_nodeImLb0EEES2_Lb0EE10pointer_toERS2_, _ZN8TAttFill12SetFillColorEs, _ZNK4ROOT12Experimental27RNTupleProcessorOptionalPtrIfEdeEv, _ZNKSt10_HashtableImmSaImENSt8__detail9_IdentityESt8equal_toImESt4hashImENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE8_M_beginEv, $.cling-module-259.__inits.0, _ZNSt6atomicIPKSt9type_infoE5storeES2_St12memory_order, _ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_, _ZNSt7variantIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEC2ILm0EJRKS5_ES5_vEESt16in_place_index_tIXT_EEDpOT0_, _ZNSt12__shared_ptrIN4ROOT12Experimental8Internal21RNTupleProcessorEntryELN9__gnu_cxx12_Lock_policyE2EEC2ERKS6_, _ZN7TObjectnwEm, _ZSt8_DestroyIP10TDirectoryEvPT_, _ZNSt10unique_ptrIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EE11get_deleterEv, _ZNKSt9type_info4nameEv, _ZNSt10unique_ptrIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EED1Ev, _ZSt3getILm0EJPN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSA_, _ZNSt10_HashtableImmSaImENSt8__detail9_IdentityESt8equal_toImESt4hashImENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE21_M_deallocate_bucketsEv, _ZNSt8__detail9__variant17__gen_vtable_implINS0_12_Multi_arrayIPFvOZNS0_16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvEUlOT_E_RSt7variantIJS9_SB_EEEJEEESt16integer_sequenceImJLm0EEEE14__visit_invokeESG_SJ_, _ZNSt10_HashtableImmSaImENSt8__detail9_IdentityESt8equal_toImESt4hashImENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE21_M_deallocate_bucketsEPPNS1_15_Hash_node_baseEm, _ZNSt10shared_ptrIN4ROOT12Experimental8Internal21RNTupleProcessorEntryEEC2ERKS4_, _ZNSt13unordered_setImSt4hashImESt8equal_toImESaImEED2Ev, _ZNK4ROOT10RFieldBase6RValue18EnsureMatchingTypeIfEEvv, _ZN9__gnu_cxx16__aligned_membufINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE7_M_addrEv, _Z4Readv, _ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeImLb0EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm, _ZSt22__uninitialized_copy_aIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_S5_ET0_T_SA_S9_RSaIT1_E, _ZNSt13unordered_setImSt4hashImESt8equal_toImESaImEED1Ev, cling_module_259_.33, _ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_, _ZNSt8__detail9__variant15_Copy_ctor_baseILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEECI2NS0_16_Variant_storageILb0EJS7_S9_EEEILm0EJRKS7_EEESt16in_place_index_tIXT_EEDpOT0_, _ZNKSt9type_infoeqERKS_, __orc_init_func.cling-module-259, _ZNKSt10unique_ptrIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EEdeEv, _ZZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvENUlOT_E_clIRS7_EEDaSC_, _ZSt13__invoke_implIvZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvEUlOT_E_JRSA_EESC_St14__invoke_otherOT0_DpOT1_, cling_module_259_.32, _ZNKSt12__shared_ptrIN4ROOT12Experimental8Internal21RNTupleProcessorEntryELN9__gnu_cxx12_Lock_policyE2EE3getEv, _ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeImLb0EEEEE19_M_deallocate_nodesEPS2_, _ZNSt8__detail9__variant15_Copy_ctor_baseILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEED2Ev, _ZZSt10__do_visitIvZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvEUlOT_E_JRSt7variantIJS8_SA_EEEEDcOT0_DpOT1_ENKUlSH_zE_clB5cxx11ESH_z, _ZNSt15__new_allocatorINSt8__detail10_Hash_nodeImLb0EEEE10deallocateEPS2_m, _ZNSt10shared_ptrIN4ROOT12Experimental8Internal21RNTupleProcessorEntryEEC1ERKS4_, _ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_, _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ISt17basic_string_viewIcS2_EvEERKT_RKS3_, _ZNSt10_HashtableImmSaImENSt8__detail9_IdentityESt8equal_toImESt4hashImENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEED2Ev, _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ESt16initializer_listIS5_ERKS6_, _ZN4ROOT12Experimental16RNTupleProcessor5beginEv, _ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4sizeEv, _ZSt13__invoke_implIvZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvEUlOT_E_JRS8_EESC_St14__invoke_otherOT0_DpOT1_, _ZNKSt8__detail10_Hash_nodeImLb0EE7_M_nextEv, _ZNSt11_Tuple_implILm0EJPN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EEE7_M_headERS6_, _ZN9__gnu_cxx16__aligned_bufferImE7_M_addrEv, _ZSt12__get_helperILm0EPN4ROOT12Experimental16RNTupleProcessorEJSt14default_deleteIS2_EEERKT0_RKSt11_Tuple_implIXT_EJS6_DpT1_EE, _ZNK4ROOT12Experimental8Internal21RNTupleProcessorEntry8GetValueEm, _ZNKSt6vectorIN4ROOT12Experimental8Internal21RNTupleProcessorEntry15RProcessorValueESaIS4_EEixEm, _ZNSt8__detail9__variant5__getILm0ERSt7variantIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEEEDcOT0_, _ZNSt8__detail9__variant17_Copy_assign_baseILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEECI2NS0_16_Variant_storageILb0EJS7_S9_EEEILm0EJRKS7_EEESt16in_place_index_tIXT_EEDpOT0_, _ZSt14__variant_castIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryERNSt8__detail9__variant16_Variant_storageILb0EJS5_S7_EEEEDcOT0_, _ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE5beginEv, _ZNSt8__detail9__variant17__gen_vtable_implINS0_12_Multi_arrayIPFvOZNS0_16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvEUlOT_E_RSt7variantIJS9_SB_EEEJEEESt16integer_sequenceImJLm1EEEE14__visit_invokeESG_SJ_, _ZN4ROOT12Experimental16RNTupleProcessor9RIteratorC1ERS1_m, _ZSt3getILm0EJPN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_, _ZZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvENUlOT_E_clIRS9_EEDaSC_, _ZSt10__invoke_rIvZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvEUlOT_E_JRS8_EENSt9enable_ifIX16is_invocable_r_vISC_T0_DpT1_EESC_E4typeEOSH_DpOSI_, _ZN4ROOT12Experimental27RNTupleProcessorOptionalPtrIfEC2EPNS0_8Internal21RNTupleProcessorEntryEm, _ZN4ROOT12Experimental15RNTupleOpenSpecD2Ev, _ZNSt10_Head_baseILm0EPN4ROOT12Experimental16RNTupleProcessorELb0EE7_M_headERS4_, _ZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEED2Ev, _ZNSt10_HashtableImmSaImENSt8__detail9_IdentityESt8equal_toImESt4hashImENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEED1Ev, cling_module_259_.31, _ZNKSt10_HashtableImmSaImENSt8__detail9_IdentityESt8equal_toImESt4hashImENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE21_M_uses_single_bucketEPPNS1_15_Hash_node_baseE, _ZN4ROOT12Experimental16RNTupleProcessor9RIteratordeEv, _ZNKSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_validEv, _ZNKSt10unique_ptrIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EEptEv, _ZN4ROOT12Experimental15RNTupleOpenSpecC2ESt17basic_string_viewIcSt11char_traitsIcEERKNSt7__cxx1112basic_stringIcS4_SaIcEEE, _ZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEv, _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE21_M_range_initialize_nIPKS5_EEvT_SB_m, _ZNSt8__detail9__variant14_UninitializedINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC1IJRKS7_EEESt16in_place_index_tILm0EEDpOT_, _ZNSt10unique_ptrIN4ROOT12Experimental16RNTupleProcessorESt14default_deleteIS2_EED2Ev, _ZN4ROOT12Experimental16RNTupleProcessor9RIteratorppEv, _ZN4ROOT12Experimental8Internal26RNTupleProcessorProvenanceC1Ev, _ZN9__gnu_cxx16__aligned_membufINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE6_M_ptrEv, _ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeImLb0EEEEE18_M_deallocate_nodeEPS2_, _ZSt12__str_concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_PKNS6_10value_typeENS6_9size_typeES9_SA_RKNS6_14allocator_typeE, _ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeImLb0EEEELb1EED2Ev, _ZNSt8__detail9__variant7__get_nILm1ERNS0_15_Variadic_unionILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEEEEDcOT0_, _ZN4ROOT12Experimental15RNTupleOpenSpecC1ESt17basic_string_viewIcSt11char_traitsIcEERKNSt7__cxx1112basic_stringIcS4_SaIcEEE, _ZNSt8__detail9__variant17_Copy_assign_baseILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEED2Ev, _ZNSt8__detail9__variant15_Move_ctor_baseILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEECI2NS0_16_Variant_storageILb0EJS7_S9_EEEILm0EJRKS7_EEESt16in_place_index_tIXT_EEDpOT0_, _ZSt12__get_helperILm1ESt14default_deleteIN4ROOT12Experimental16RNTupleProcessorEEJEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE, _ZN4ROOT12Experimental8Internal26RNTupleProcessorProvenanceC2Ev, _ZN4ROOT12Experimental8Internal26RNTupleProcessorProvenanceD2Ev, _ZNK4ROOT12Experimental27RNTupleProcessorOptionalPtrIfE6GetPtrEv, _ZN4ROOT12ExperimentalneERKNS0_16RNTupleProcessor9RIteratorES4_, _ZN4ROOT12Experimental8Internal26RNTupleProcessorProvenanceD1Ev, _ZNSt8__detail9__variant13_Variant_baseIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEED2Ev, _ZSt18uninitialized_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET0_T_SA_S9_, _ZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEEC2ILm0EJRKS7_EEESt16in_place_index_tIXT_EEDpOT0_, _ZSt10__invoke_rIvZNSt8__detail9__variant16_Variant_storageILb0EJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP10TDirectoryEE8_M_resetEvEUlOT_E_JRSA_EENSt9enable_ifIX16is_invocable_r_vISC_T0_DpT1_EESC_E4typeEOSH_DpOSI_, _ZNKSt12__shared_ptrIN4ROOT12Experimental8Internal21RNTupleProcessorEntryELN9__gnu_cxx12_Lock_policyE2EEcvbEv, _ZN9__gnu_cxx16__aligned_bufferImE6_M_ptrEv }) }\n" ] } ], "source": [ "%%cpp -d\n", "void Read()\n", "{\n", " auto c = new TCanvas(\"c\", \"RNTupleJoinProcessor Example\", 200, 10, 700, 500);\n", " TH1F hPy(\"h\", \"This is the px + py distribution\", 100, -4, 4);\n", " hPy.SetFillColor(48);\n", "\n", " // The first specified ntuple is the primary ntuple and will be used to drive the processor loop. The subsequent\n", " // list of ntuples (in this case, only one) are auxiliary and will be joined with the entries from the primary\n", " // ntuple. We specify field \"i\" as the join field. This field, which should be present in all ntuples specified is\n", " // used to identify which entries belong together. Multiple join fields can be specified, in which case the\n", " // combination of field values is used. It is possible to specify up to 4 join fields. Providing an empty list of\n", " // join fields signals to the processor that all entries are aligned.\n", " auto processor =\n", " RNTupleProcessor::CreateJoin({kPrimaryNTupleName, kMainNTuplePath}, {kAuxNTupleName, kAuxNTuplePath}, {\"i\"});\n", "\n", " // Access to the processor's fields is done by first requesting them through RNTupleProcessor::RequestField(). The\n", " // returned value can be used to read the current entry's value for that particular field. Fields from the primary\n", " // ntuple are requested by their original name.\n", " auto px = processor->RequestField(\"vpx\");\n", " // Fields from auxiliary ntuples are requested by prepending the name of the auxiliary ntuple.\n", " auto py = processor->RequestField(kAuxNTupleName + \".vpy\");\n", "\n", " // The iterator value is the index of the current entry being processed. In this example, we don't use it.\n", " for (auto _ : *processor) {\n", " hPy.Fill(*px + *py);\n", " }\n", "\n", " std::cout << \"Processed a total of \" << processor->GetNEntriesProcessed() << \" entries\" << std::endl;\n", "\n", " hPy.DrawCopy();\n", "}" ] }, { "cell_type": "code", "execution_count": 5, "id": "32b475a1", "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-05-19T20:15:33.513109Z", "iopub.status.busy": "2026-05-19T20:15:33.512987Z", "iopub.status.idle": "2026-05-19T20:15:34.060840Z", "shell.execute_reply": "2026-05-19T20:15:34.060278Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "cling JIT session error: Failed to materialize symbols: { (main, { _Z4Readv }) }\n", "[runStaticInitializersOnce]: Failed to materialize symbols: { (main, { _ZN12__cling_N51816__cling_Un1Qu317EPv, cling_module_260_.9, cling_module_260_.8, cling_module_260_, __orc_init_func.cling-module-260, $.cling-module-260.__inits.0, cling_module_260_.10 }) }\n" ] } ], "source": [ "WritePrimary(kPrimaryNTupleName, kMainNTuplePath);\n", "WriteAux(kAuxNTupleName, kAuxNTuplePath);\n", "\n", "Read();" ] }, { "cell_type": "markdown", "id": "437e8bf5", "metadata": {}, "source": [ "Draw all canvases " ] }, { "cell_type": "code", "execution_count": 6, "id": "34507892", "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-05-19T20:15:34.062574Z", "iopub.status.busy": "2026-05-19T20:15:34.062459Z", "iopub.status.idle": "2026-05-19T20:15:34.267137Z", "shell.execute_reply": "2026-05-19T20:15:34.266489Z" } }, "outputs": [], "source": [ "gROOT->GetListOfCanvases()->Draw()" ] } ], "metadata": { "kernelspec": { "display_name": "ROOT C++", "language": "c++", "name": "root" }, "language_info": { "codemirror_mode": "text/x-c++src", "file_extension": ".C", "mimetype": " text/x-c++src", "name": "c++" } }, "nbformat": 4, "nbformat_minor": 5 }