Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
ROOT::TTreeProcessorMP Class Reference

This class provides an interface to process a TTree dataset in parallel with multi-process technology.

ROOT::TTreeProcessorMP::Process

The possible usages of the Process method are the following:

  • Process(<dataset>, F func, const std::string& treeName, ULong64_t nToProcess): func is executed nToProcess times with argument a TTreeReader&, initialized for the TTree with name treeName, from the dataset <dataset>. The dataset can be expressed as:
    const std::string& fileName -> single file name
    const std::vector<std::string>& fileNames -> vector of file names
    TFileCollection& files -> collection of TFileInfo objects
    TChain& files -> TChain with the file paths
    TTree& tree -> Reference to an existing TTree object
    char name[80]
    Definition TGX11.cxx:148
    A chain is a collection of files containing TTree objects.
    Definition TChain.h:33
    Class that contains a list of TFileInfo's and accumulated meta data information about its entries.
    Class describing a generic file including meta information.
    Definition TFileInfo.h:39
    A TTree represents a columnar dataset.
    Definition TTree.h:89
    STL class.
    For legacy, the following signature is also supported:
  • Process(<dataset>, TSelector& selector, const std::string& treeName, ULong64_t nToProcess): where selector is a TSelector derived class describing the analysis and the other arguments have the same meaning as above.

For either set of signatures, the processing function is executed as many times as needed by a pool of fNWorkers workers; the number of workers can be passed to the constructor or set via SetNWorkers. It defaults to the number of cores.
A collection containing the result of each execution is returned.
Note: the user is responsible for the deletion of any object that might be created upon execution of func, returned objects included: ROOT::TTreeProcessorMP never deletes what it returns, it simply forgets it.
Note: that the usage of ROOT::TTreeProcessorMP::Process is indicated only when the task to be executed takes more than a few seconds, otherwise the overhead introduced by Process will outrun the benefits of parallel execution on most machines.

Parameters
funca lambda expression, an std::function, a loaded macro, a functor class or a function that takes zero arguments (for the first signature) or one (for the second signature).
argsa standard container (vector, list, deque), an initializer list or a pointer to a TCollection (TList*, TObjArray*, ...).

Note: the version of ROOT::TTreeProcessorMP::Process that takes a TFileCollection* as argument incurs in the overhead of copying data from the TCollection to an STL container. Only use it when absolutely necessary.
Note: in cases where the function to be executed takes more than zero/one argument but all are fixed except zero/one, the function can be wrapped in a lambda or via std::bind to give it the right signature.
Note: the user should take care of initializing random seeds differently in each process (e.g. using the process id in the seed). Otherwise several parallel executions might generate the same sequence of pseudo-random numbers.

Return value:

Methods taking 'F func' return the return type of F. Methods taking a TSelector return a 'TList *' with the selector output list; the output list content is owned by the caller.

Examples:

See tutorials/multicore/mp102_readNtuplesFillHistosAndFit.C and tutorials/multicore/mp103__processSelector.C .

Definition at line 38 of file TTreeProcessorMP.hxx.

Public Member Functions

 TTreeProcessorMP (const TTreeProcessorMP &)=delete
 TTreeProcessorMP (UInt_t nWorkers=0)
 Class constructor.
 ~TTreeProcessorMP ()=default
unsigned GetNWorkers () const
TTreeProcessorMPoperator= (const TTreeProcessorMP &)=delete
template<class F>
auto Process (const std::string &fileName, F procFunc, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
template<class F>
auto Process (const std::string &fileName, F procFunc, TEntryList &entries, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
TListProcess (const std::string &fileName, TSelector &selector, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0)
TListProcess (const std::string &fileName, TSelector &selector, TEntryList &entries, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0)
 TSelector-based tree processing: dataset as a single file.
template<class F>
auto Process (const std::vector< std::string > &fileNames, F procFunc, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
 Process a TTree dataset with a functor: version without entry list.
template<class F>
auto Process (const std::vector< std::string > &fileNames, F procFunc, TEntryList &entries, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
 Process a TTree dataset with a functor.
TListProcess (const std::vector< std::string > &fileNames, TSelector &selector, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0)
 Process a TTree dataset with a selector: version without entry list.
TListProcess (const std::vector< std::string > &fileNames, TSelector &selector, TEntryList &entries, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0)
 Process a TTree dataset with a selector.
template<class F>
auto Process (TChain &chain, F procFunc, TEntryList &entries, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
template<class F>
auto Process (TChain &files, F procFunc, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
TListProcess (TChain &files, TSelector &selector, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0)
TListProcess (TChain &files, TSelector &selector, TEntryList &entries, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0)
 TSelector-based tree processing: dataset as a TChain.
template<class F>
auto Process (TFileCollection &collection, F procFunc, TEntryList &entries, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
template<class F>
auto Process (TFileCollection &files, F procFunc, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
TListProcess (TFileCollection &files, TSelector &selector, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0)
TListProcess (TFileCollection &files, TSelector &selector, TEntryList &entries, const std::string &treeName="", ULong64_t nToProcess=0, ULong64_t jFirst=0)
 TSelector-based tree processing: dataset as a TFileCollection.
template<class F>
auto Process (TTree &tree, F procFunc, TEntryList &entries, ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
template<class F>
auto Process (TTree &tree, F procFunc, ULong64_t nToProcess=0, ULong64_t jFirst=0) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >
TListProcess (TTree &tree, TSelector &selector, TEntryList &entries, ULong64_t nToProcess=0, ULong64_t jFirst=0)
 TSelector-based tree processing: memory resident tree.
TListProcess (TTree &tree, TSelector &selector, ULong64_t nToProcess=0, ULong64_t jFirst=0)
void SetNWorkers (unsigned n)

Private Types

enum class  ETask : unsigned char { kNoTask , kProcByRange , kProcByFile }
 A collection of the types of tasks that TTreeProcessorMP can execute. More...
template<typename F, typename... Args>
using InvokeResult_t = ROOT::TypeTraits::InvokeResult_t<F, Args...>

Private Member Functions

template<class T>
unsigned Broadcast (unsigned code, const std::vector< T > &objs)
 Send a message with a different object to each server.
template<class T>
unsigned Broadcast (unsigned code, std::initializer_list< T > &objs)
 Send a message with a different object to each server.
template<class T>
unsigned Broadcast (unsigned code, T obj, unsigned nMessages=0)
 Send a message containing code and obj to each worker, up to a maximum number of nMessages workers.
unsigned Broadcast (unsigned code, unsigned nMessages=0)
 Send a message with the specified code to at most nMessages workers.
template<class T>
void Collect (std::vector< T > &reslist)
 Listen for messages sent by the workers and call the appropriate handler function.
void DeActivate (TSocket *s)
 DeActivate a certain socket.
void FixLists (std::vector< TObject * > &lists)
 Fix list of lists before merging (to avoid errors about duplicated objects).
bool Fork (TMPWorker &server)
 This method forks the ROOT session into fNWorkers children processes.
bool GetIsParent () const
TMonitorGetMonitor ()
void HandleMPCode (MPCodeBufPair &msg, TSocket *sender)
 Handle messages containing an EMPCode.
template<class T>
void HandlePoolCode (MPCodeBufPair &msg, TSocket *sender, std::vector< T > &reslist)
 Handle message and reply to the worker.
void ReapWorkers ()
 Wait on worker processes and remove their pids from fWorkerPids.
void Remove (TSocket *s)
 Remove a certain socket from the monitor.
void ReplyToIdle (TSocket *s)
 Reply to a worker who is idle.
void Reset ()
 Reset TTreeProcessorMP's state.

Private Attributes

bool fIsParent
 This is true if this is the parent/client process, false if this is a child/worker process.
TMonitor fMon
 This object manages the sockets and detect socket events via TMonitor::Select.
unsigned fNProcessed
 number of arguments already passed to the workers
unsigned fNToProcess
 total number of arguments to pass to the workers
unsigned fNWorkers
 The number of workers that should be spawned upon forking.
ETask fTaskType = ETask::kNoTask
 the kind of task that is being executed, if any
std::vector< pid_t > fWorkerPids
 A vector containing the PIDs of children processes/workers.

#include <ROOT/TTreeProcessorMP.hxx>

Inheritance diagram for ROOT::TTreeProcessorMP:
TMPClient

Member Typedef Documentation

◆ InvokeResult_t

template<typename F, typename... Args>
using ROOT::TTreeProcessorMP::InvokeResult_t = ROOT::TypeTraits::InvokeResult_t<F, Args...>
private

Definition at line 40 of file TTreeProcessorMP.hxx.

Member Enumeration Documentation

◆ ETask

enum class ROOT::TTreeProcessorMP::ETask : unsigned char
strongprivate

A collection of the types of tasks that TTreeProcessorMP can execute.

It is used to interpret in the right way and properly reply to the messages received (see, for example, TTreeProcessorMP::HandleInput)

Enumerator
kNoTask 

no task is being executed

kProcByRange 

a Process method is being executed and each worker will process a certain range of each file

kProcByFile 

a Process method is being executed and each worker will process a different file

Definition at line 182 of file TTreeProcessorMP.hxx.

Constructor & Destructor Documentation

◆ TTreeProcessorMP() [1/2]

ROOT::TTreeProcessorMP::TTreeProcessorMP ( UInt_t nWorkers = 0)
explicit

Class constructor.

nWorkers is the number of times this ROOT session will be forked, i.e. the number of workers that will be spawned.

Definition at line 92 of file TTreeProcessorMP.cxx.

◆ ~TTreeProcessorMP()

ROOT::TTreeProcessorMP::~TTreeProcessorMP ( )
default

◆ TTreeProcessorMP() [2/2]

ROOT::TTreeProcessorMP::TTreeProcessorMP ( const TTreeProcessorMP & )
delete

Member Function Documentation

◆ Broadcast() [1/4]

template<class T>
unsigned TMPClient::Broadcast ( unsigned code,
const std::vector< T > & args )
inherited

Send a message with a different object to each server.

Sockets can either be in an "active" or "non-active" state. This method activates all the sockets through which the client is connected to the workers, and deactivates them when a message is sent to the corresponding worker. This way the sockets pertaining to workers who have been left idle will be the only ones in the active list (TSocket::GetMonitor()->GetListOfActives()) after execution.

Parameters
codethe code of the message to send (e.g. EMPCode)
argsa vector containing the different messages to be sent. If the size of the vector is smaller than the number of workers, a message will be sent only to the first args.size() workers. If the size of the args vector is bigger than the number of workers, only the first fNWorkers arguments will be sent.
Returns
the number of messages successfully sent

Definition at line 73 of file TMPClient.h.

◆ Broadcast() [2/4]

template<class T>
unsigned TMPClient::Broadcast ( unsigned code,
std::initializer_list< T > & args )
inherited

Send a message with a different object to each server.

See TMPClient::Broadcast(unsigned code, const std::vector<T> &args) for more informations.

Definition at line 100 of file TMPClient.h.

◆ Broadcast() [3/4]

template<class T>
unsigned TMPClient::Broadcast ( unsigned code,
T obj,
unsigned nMessages = 0 )
inherited

Send a message containing code and obj to each worker, up to a maximum number of nMessages workers.

See Broadcast(unsigned code, unsigned nMessages) for more informations.

Parameters
codethe code of the message to send (e.g. EMPCode)
objthe object to send
nMessagesthe maximum number of messages to send. If nMessages == 0, send a message to every worker.
Returns
the number of messages successfully sent

Definition at line 120 of file TMPClient.h.

◆ Broadcast() [4/4]

unsigned TMPClient::Broadcast ( unsigned code,
unsigned nMessages = 0 )
inherited

Send a message with the specified code to at most nMessages workers.

Sockets can either be in an "active" or "non-active" state. This method activates all the sockets through which the client is connected to the workers, and deactivates them when a message is sent to the corresponding worker. This way the sockets pertaining to workers who have been left idle will be the only ones in the active list (TSocket::GetMonitor()->GetListOfActives()) after execution.

Parameters
codethe code to send (e.g. EMPCode)
nMessagesthe maximum number of messages to send. If nMessages == 0 || nMessage > fNWorkers, send a message to every worker.
Returns
the number of messages successfully sent

Definition at line 253 of file TMPClient.cxx.

◆ Collect()

template<class T>
void ROOT::TTreeProcessorMP::Collect ( std::vector< T > & reslist)
private

Listen for messages sent by the workers and call the appropriate handler function.

TTreeProcessorMP::HandlePoolCode is called on messages with a code < 1000 and TMPClient::HandleMPCode is called on messages with a code >= 1000.

Definition at line 433 of file TTreeProcessorMP.hxx.

◆ DeActivate()

void TMPClient::DeActivate ( TSocket * s)
inherited

DeActivate a certain socket.

This does not remove it from the monitor: it will be reactivated by the next call to Broadcast() (or possibly other methods that are specified to do so).
A socket should be DeActivated when the corresponding worker is done for now and we want to stop listening to this worker's socket. If the worker is done forever, Remove() should be used instead.

Parameters
sthe socket to be deactivated

Definition at line 286 of file TMPClient.cxx.

◆ FixLists()

void ROOT::TTreeProcessorMP::FixLists ( std::vector< TObject * > & lists)
private

Fix list of lists before merging (to avoid errors about duplicated objects).

Definition at line 334 of file TTreeProcessorMP.cxx.

◆ Fork()

bool TMPClient::Fork ( TMPWorker & server)
inherited

This method forks the ROOT session into fNWorkers children processes.

The ROOT sessions spawned in this way will not have graphical capabilities and will not read from standard input, but will be connected to the original (interactive) session through TSockets. The children processes' PIDs are added to the fWorkerPids vector. The parent session can then communicate with the children using the Broadcast and MPSend methods, and receive messages through MPRecv.

Parameters
serverA pointer to an instance of the class that will take control of the subprocesses after forking. Applications should implement their own class inheriting from TMPWorker. Behaviour can be customized overriding TMPWorker::HandleInput.
Returns
true if Fork succeeded, false otherwise

Definition at line 128 of file TMPClient.cxx.

◆ GetIsParent()

bool TMPClient::GetIsParent ( ) const
inlineinherited

Definition at line 37 of file TMPClient.h.

◆ GetMonitor()

TMonitor & TMPClient::GetMonitor ( )
inlineinherited

Definition at line 36 of file TMPClient.h.

◆ GetNWorkers()

unsigned ROOT::TTreeProcessorMP::GetNWorkers ( ) const
inline

Definition at line 166 of file TTreeProcessorMP.hxx.

◆ HandleMPCode()

void TMPClient::HandleMPCode ( MPCodeBufPair & msg,
TSocket * s )
inherited

Handle messages containing an EMPCode.

This method should be called upon receiving a message with a code >= 1000 (i.e. EMPCode). It handles the most generic types of messages.
Classes inheriting from TMPClient should implement a similar method to handle message codes specific to the application they're part of.

Parameters
msgthe MPCodeBufPair returned by a MPRecv call
sa pointer to the socket from which the message has been received is passed. This way HandleMPCode knows which socket to reply on.

Definition at line 334 of file TMPClient.cxx.

◆ HandlePoolCode()

template<class T>
void ROOT::TTreeProcessorMP::HandlePoolCode ( MPCodeBufPair & msg,
TSocket * sender,
std::vector< T > & reslist )
private

Handle message and reply to the worker.

Definition at line 407 of file TTreeProcessorMP.hxx.

◆ operator=()

TTreeProcessorMP & ROOT::TTreeProcessorMP::operator= ( const TTreeProcessorMP & )
delete

◆ Process() [1/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( const std::string & fileName,
F procFunc,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Definition at line 366 of file TTreeProcessorMP.hxx.

◆ Process() [2/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( const std::string & fileName,
F procFunc,
TEntryList & entries,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Definition at line 259 of file TTreeProcessorMP.hxx.

◆ Process() [3/20]

TList * ROOT::TTreeProcessorMP::Process ( const std::string & fileName,
TSelector & selector,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

Definition at line 306 of file TTreeProcessorMP.cxx.

◆ Process() [4/20]

TList * ROOT::TTreeProcessorMP::Process ( const std::string & fileName,
TSelector & selector,
TEntryList & entries,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

TSelector-based tree processing: dataset as a single file.

Definition at line 288 of file TTreeProcessorMP.cxx.

◆ Process() [5/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( const std::vector< std::string > & fileNames,
F procFunc,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Process a TTree dataset with a functor: version without entry list.

No TEntryList versions of generic processor.

Template Parameters
Ffunctor returning a pointer to TObject or inheriting classes and taking a TTreeReader& (both enforced at compile-time)

Dataset definition:

Parameters
[in]fileNamesvector of strings with the paths of the files with the TTree to process
[in]fileNamestring with the path of the files with the TTree to process
[in]collectionTFileCollection with the files with the TTree to process
[in]chainTChain with the files with the TTree to process
[in]treeTTree to process
[in]treeNameName of the TTree to process
[in]nToProcessNumber of entries to process (0 means all)
[in]jFirstFirst entry to process (0 means the first of the first file)

Definition at line 356 of file TTreeProcessorMP.hxx.

◆ Process() [6/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( const std::vector< std::string > & fileNames,
F procFunc,
TEntryList & entries,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Process a TTree dataset with a functor.

Template Parameters
Ffunctor returning a pointer to TObject or inheriting classes and taking a TTreeReader& (both enforced at compile-time)

Dataset definition:

Parameters
[in]fileNamesvector of strings with the paths of the files with the TTree to process
[in]fileNamestring with the path of the files with the TTree to process
[in]collectionTFileCollection with the files with the TTree to process
[in]chainTChain with the files with the TTree to process
[in]treeTTree to process
[in]entriesTEntryList to filter the dataset
[in]treeNameName of the TTree to process
[in]nToProcessNumber of entries to process (0 means all)
[in]jFirstFirst entry to process (0 means the first of the first file)

Definition at line 192 of file TTreeProcessorMP.hxx.

◆ Process() [7/20]

TList * ROOT::TTreeProcessorMP::Process ( const std::vector< std::string > & fileNames,
TSelector & selector,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

Process a TTree dataset with a selector: version without entry list.

No TEntryList versions of selector processor.

Dataset definition:

Parameters
[in]fileNamesvector of strings with the paths of the files with the TTree to process
[in]fileNamestring with the path of the files with the TTree to process
[in]collectionTFileCollection with the files with the TTree to process
[in]chainTChain with the files with the TTree to process
[in]treeTTree to process
[in]selectorInstance of TSelector to be applied to the dataset
[in]treeNameName of the TTree to process
[in]nToProcessNumber of entries to process (0 means all)
[in]jFirstFirst entry to process (0 means the first of the first file)

Definition at line 299 of file TTreeProcessorMP.cxx.

◆ Process() [8/20]

TList * ROOT::TTreeProcessorMP::Process ( const std::vector< std::string > & fileNames,
TSelector & selector,
TEntryList & entries,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

Process a TTree dataset with a selector.

TSelector-based tree processing: dataset as a vector of files.

Dataset definition:

Parameters
[in]fileNamesvector of strings with the paths of the files with the TTree to process
[in]fileNamestring with the path of the files with the TTree to process
[in]collectionTFileCollection with the files with the TTree to process
[in]chainTChain with the files with the TTree to process
[in]treeTTree to process
[in]selectorInstance of TSelector to be applied to the dataset
[in]entriesTEntryList to filter the dataset
[in]treeNameName of the TTree to process
[in]nToProcessNumber of entries to process (0 means all)
[in]jFirstFirst entry to process (0 means the first of the first file)

Definition at line 170 of file TTreeProcessorMP.cxx.

◆ Process() [9/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( TChain & chain,
F procFunc,
TEntryList & entries,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Definition at line 283 of file TTreeProcessorMP.hxx.

◆ Process() [10/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( TChain & files,
F procFunc,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Definition at line 386 of file TTreeProcessorMP.hxx.

◆ Process() [11/20]

TList * ROOT::TTreeProcessorMP::Process ( TChain & files,
TSelector & selector,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

Definition at line 320 of file TTreeProcessorMP.cxx.

◆ Process() [12/20]

TList * ROOT::TTreeProcessorMP::Process ( TChain & files,
TSelector & selector,
TEntryList & entries,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

TSelector-based tree processing: dataset as a TChain.

Definition at line 274 of file TTreeProcessorMP.cxx.

◆ Process() [13/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( TFileCollection & collection,
F procFunc,
TEntryList & entries,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Definition at line 269 of file TTreeProcessorMP.hxx.

◆ Process() [14/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( TFileCollection & files,
F procFunc,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Definition at line 376 of file TTreeProcessorMP.hxx.

◆ Process() [15/20]

TList * ROOT::TTreeProcessorMP::Process ( TFileCollection & files,
TSelector & selector,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

Definition at line 313 of file TTreeProcessorMP.cxx.

◆ Process() [16/20]

TList * ROOT::TTreeProcessorMP::Process ( TFileCollection & files,
TSelector & selector,
TEntryList & entries,
const std::string & treeName = "",
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

TSelector-based tree processing: dataset as a TFileCollection.

Definition at line 260 of file TTreeProcessorMP.cxx.

◆ Process() [17/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( TTree & tree,
F procFunc,
TEntryList & entries,
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Definition at line 298 of file TTreeProcessorMP.hxx.

◆ Process() [18/20]

template<class F>
auto ROOT::TTreeProcessorMP::Process ( TTree & tree,
F procFunc,
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 ) -> InvokeResult_t< F, std::reference_wrapper< TTreeReader > >

Definition at line 396 of file TTreeProcessorMP.hxx.

◆ Process() [19/20]

TList * ROOT::TTreeProcessorMP::Process ( TTree & tree,
TSelector & selector,
TEntryList & entries,
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

TSelector-based tree processing: memory resident tree.

Definition at line 99 of file TTreeProcessorMP.cxx.

◆ Process() [20/20]

TList * ROOT::TTreeProcessorMP::Process ( TTree & tree,
TSelector & selector,
ULong64_t nToProcess = 0,
ULong64_t jFirst = 0 )

Definition at line 327 of file TTreeProcessorMP.cxx.

◆ ReapWorkers()

void TMPClient::ReapWorkers ( )
inherited

Wait on worker processes and remove their pids from fWorkerPids.

A blocking waitpid is called, but this should actually not block execution since ReapWorkers should only be called when all workers have already quit. ReapWorkers is then called not to leave zombie processes hanging around, and to clean-up fWorkerPids.

Definition at line 313 of file TMPClient.cxx.

◆ Remove()

void TMPClient::Remove ( TSocket * s)
inherited

Remove a certain socket from the monitor.

A socket should be Removed from the monitor when the corresponding worker is done forever. For example HandleMPCode() calls this method on sockets pertaining to workers which sent an MPCode::kShutdownNotice.
If the worker is done for now, DeActivate should be used instead.

Parameters
sthe socket to be removed from the monitor fMon

Definition at line 300 of file TMPClient.cxx.

◆ ReplyToIdle()

void ROOT::TTreeProcessorMP::ReplyToIdle ( TSocket * s)
private

Reply to a worker who is idle.

If still events to process, tell the worker. Otherwise ask for a result

Definition at line 361 of file TTreeProcessorMP.cxx.

◆ Reset()

void ROOT::TTreeProcessorMP::Reset ( )
private

Reset TTreeProcessorMP's state.

Definition at line 350 of file TTreeProcessorMP.cxx.

◆ SetNWorkers()

void ROOT::TTreeProcessorMP::SetNWorkers ( unsigned n)
inline

Definition at line 165 of file TTreeProcessorMP.hxx.

Member Data Documentation

◆ fIsParent

bool TMPClient::fIsParent
privateinherited

This is true if this is the parent/client process, false if this is a child/worker process.

Definition at line 47 of file TMPClient.h.

◆ fMon

TMonitor TMPClient::fMon
privateinherited

This object manages the sockets and detect socket events via TMonitor::Select.

Definition at line 49 of file TMPClient.h.

◆ fNProcessed

unsigned ROOT::TTreeProcessorMP::fNProcessed
private

number of arguments already passed to the workers

Definition at line 176 of file TTreeProcessorMP.hxx.

◆ fNToProcess

unsigned ROOT::TTreeProcessorMP::fNToProcess
private

total number of arguments to pass to the workers

Definition at line 177 of file TTreeProcessorMP.hxx.

◆ fNWorkers

unsigned TMPClient::fNWorkers
privateinherited

The number of workers that should be spawned upon forking.

Definition at line 50 of file TMPClient.h.

◆ fTaskType

ETask ROOT::TTreeProcessorMP::fTaskType = ETask::kNoTask
private

the kind of task that is being executed, if any

Definition at line 188 of file TTreeProcessorMP.hxx.

◆ fWorkerPids

std::vector<pid_t> TMPClient::fWorkerPids
privateinherited

A vector containing the PIDs of children processes/workers.

Definition at line 48 of file TMPClient.h.


The documentation for this class was generated from the following files: