ROOT   Reference Guide
ROOT::TTreeProcessorMT Class Reference

A class to process the entries of a TTree in parallel.

By means of its Process method, ROOT::TTreeProcessorMT provides a way to process the entries of a TTree in parallel. When invoking TTreeProcessor::Process, the user passes a function whose only parameter is a TTreeReader. The function iterates on a subrange of entries by using that TTreeReader.

The implementation of ROOT::TTreeProcessorMT parallelizes the processing of the subranges, each corresponding to a cluster in the TTree. This is possible thanks to the use of a ROOT::TThreadedObject, so that each thread works with its own TFile and TTree objects.

Definition at line 85 of file TTreeProcessorMT.hxx.

## Public Member Functions

TTreeProcessorMT (const std::vector< std::string_view > &filenames, std::string_view treename="")
Constructor based on a collection of file names. More...

TTreeProcessorMT (std::string_view filename, std::string_view treename="")
Constructor based on a file name. More...

TTreeProcessorMT (TTree &tree)
Constructor based on a TTree. More...

TTreeProcessorMT (TTree &tree, const TEntryList &entries)
Constructor based on a TTree and a TEntryList. More...

void Process (std::function< void(TTreeReader &)> func)
Process the entries of a TTree in parallel. More...

## Static Public Member Functions

Sets the maximum number of tasks created per file, per worker. More...

static void SetMaxTasksPerFilePerWorker (unsigned int m)
Sets the maximum number of tasks created per file, per worker. More...

## Private Member Functions

std::vector< std::string > FindTreeNames ()
Retrieve the names of the TTrees in each of the input files, throw if a TTree cannot be found. More...

Internal::FriendInfo GetFriendInfo (TTree &tree)
Get and store the names, aliases and file names of the friends of the tree. More...

## Private Attributes

const TEntryList fEntryList
User-defined selection of entry numbers to be processed, empty if none was provided. More...

const std::vector< std::string > fFileNames
Names of the files. More...

const Internal::FriendInfo fFriendInfo

const std::vector< std::string > fTreeNames
TTree names (always same size and ordering as fFileNames) More...

## Static Private Attributes

static unsigned int fgMaxTasksPerFilePerWorker = 24U

#include <ROOT/TTreeProcessorMT.hxx>

## ◆ TTreeProcessorMT() [1/4]

 TTreeProcessorMT::TTreeProcessorMT ( std::string_view filename, std::string_view treename = "" )

Constructor based on a file name.

Parameters
 [in] filename Name of the file containing the tree to process. [in] treename Name of the tree to process. If not provided, the implementation will search for a TTree key in the file and will use the first one it finds.

Definition at line 403 of file TTreeProcessorMT.cxx.

## ◆ TTreeProcessorMT() [2/4]

 TTreeProcessorMT::TTreeProcessorMT ( const std::vector< std::string_view > & filenames, std::string_view treename = "" )

Constructor based on a collection of file names.

Parameters
 [in] filenames Collection of the names of the files containing the tree to process. [in] treename Name of the tree to process. If not provided, the implementation will search filenames for a TTree key and will use the first one it finds in each file.

If different files contain TTrees with different names and automatic TTree name detection is not an option (for example, because some of the files contain multiple TTrees) please manually create a TChain and pass it to the appropriate TTreeProcessorMT constructor.

Definition at line 430 of file TTreeProcessorMT.cxx.

## ◆ TTreeProcessorMT() [3/4]

 TTreeProcessorMT::TTreeProcessorMT ( TTree & tree, const TEntryList & entries )

Constructor based on a TTree and a TEntryList.

Parameters
 [in] tree Tree or chain of files containing the tree to process. [in] entries List of entry numbers to process.

Definition at line 468 of file TTreeProcessorMT.cxx.

## ◆ TTreeProcessorMT() [4/4]

 TTreeProcessorMT::TTreeProcessorMT ( TTree & tree )

Constructor based on a TTree.

Parameters
 [in] tree Tree or chain of files containing the tree to process.

Definition at line 477 of file TTreeProcessorMT.cxx.

## ◆ FindTreeNames()

 std::vector< std::string > TTreeProcessorMT::FindTreeNames ( )
private

Retrieve the names of the TTrees in each of the input files, throw if a TTree cannot be found.

Definition at line 371 of file TTreeProcessorMT.cxx.

## ◆ GetFriendInfo()

 Internal::FriendInfo TTreeProcessorMT::GetFriendInfo ( TTree & tree )
private

Get and store the names, aliases and file names of the friends of the tree.

Parameters
 [in] tree The main tree whose friends to

Note that "friends of friends" and circular references in the lists of friends are not supported.

Definition at line 328 of file TTreeProcessorMT.cxx.

static

Sets the maximum number of tasks created per file, per worker.

Returns
The maximum number of tasks created per file, per worker

Definition at line 557 of file TTreeProcessorMT.cxx.

## ◆ Process()

 void TTreeProcessorMT::Process ( std::function< void(TTreeReader &)> func )

Process the entries of a TTree in parallel.

The user-provided function receives a TTreeReader which can be used to iterate on a subrange of entries

// Use content of current entry
}
});
Process the entries of a TTree in parallel.
A simple, robust and fast interface to read values from ROOT columnar datasets such as TTree,...
Bool_t Next()
Move to the next entry (or index of the TEntryList if that is set).

The user needs to be aware that each of the subranges can potentially be processed in parallel. This means that the code of the user function should be thread safe.

Parameters
 [in] func User-defined function that processes a subrange of entries

Definition at line 496 of file TTreeProcessorMT.cxx.

static

Sets the maximum number of tasks created per file, per worker.

Parameters
 [in] maxTasksPerFile Name of the file containing the tree to process.

This allows to create a reasonable number of tasks even if any of the processed files features a bad clustering, for example with a lot of entries and just a few entries per cluster.

Definition at line 569 of file TTreeProcessorMT.cxx.

## ◆ fEntryList

 const TEntryList ROOT::TTreeProcessorMT::fEntryList
private

User-defined selection of entry numbers to be processed, empty if none was provided.

Definition at line 90 of file TTreeProcessorMT.hxx.

## ◆ fFileNames

 const std::vector ROOT::TTreeProcessorMT::fFileNames
private

Names of the files.

Definition at line 87 of file TTreeProcessorMT.hxx.

## ◆ fFriendInfo

 const Internal::FriendInfo ROOT::TTreeProcessorMT::fFriendInfo
private

Definition at line 91 of file TTreeProcessorMT.hxx.

staticprivate

Definition at line 97 of file TTreeProcessorMT.hxx.

## ◆ fTreeNames

 const std::vector ROOT::TTreeProcessorMT::fTreeNames
private

TTree names (always same size and ordering as fFileNames)

Definition at line 88 of file TTreeProcessorMT.hxx.