Belle II Software development
|
This class provides the core event processing loop for parallel processing. More...
#include <pEventProcessor.h>
Public Member Functions | |
pEventProcessor () | |
Constructor. | |
virtual | ~pEventProcessor () |
Destructor. | |
void | process (const PathPtr &spath, long maxEvent) |
Processes the full module chain, starting with the first module in the given path. | |
void | gotSigINT () |
signal handler for Ctrl+C (async-safe) | |
void | killRingBuffers () |
signal handler (async-safe) | |
void | cleanup () |
clean up IPC resources (should only be called in one process). | |
void | setProfileModuleName (const std::string &name) |
Set the name of the module we want to profile. | |
Static Public Member Functions | |
static void | writeToStdErr (const char msg[]) |
async-safe method to write something to STDERR. | |
static void | installSignalHandler (int sig, void(*fn)(int)) |
Install a signal handler 'fn' for given signal. | |
static void | installMainSignalHandlers (void(*fn)(int)=nullptr) |
Install signal handler for INT, TERM and QUIT signals. | |
Protected Member Functions | |
void | processInitialize (const ModulePtrList &modulePathList, bool setEventInfo=true) |
Initializes the modules. | |
void | processCore (const PathPtr &startPath, const ModulePtrList &modulePathList, long maxEvent=0, bool isInputProcess=true) |
Processes the full module chain consisting of an arbitrary number of connected paths, starting with the first module in the specified path. | |
bool | processEvent (PathIterator moduleIter, bool skipMasterModule) |
Calls event() functions on all modules for the current event. | |
void | callEvent (Module *module) |
Calls event() on one single module, setting up logging and statistics as needed. | |
void | processTerminate (const ModulePtrList &modulePathList) |
Terminates the modules. | |
void | processBeginRun (bool skipDB=false) |
Calls the begin run methods of all modules. | |
void | processEndRun () |
Calls the end run methods of all modules. | |
long | getMaximumEventNumber (long maxEvent) const |
Calculate the maximum event number out of the argument from command line and the environment. | |
Protected Attributes | |
const Module * | m_master |
The master module that determines the experiment/run/event number. | |
ModulePtrList | m_moduleList |
List of all modules in order initialized. | |
std::string | m_profileModuleName |
Name of the module which should be profiled, empty if no profiling is requested. | |
Module * | m_profileModule = nullptr |
Adress of the module which we want to profile, nullptr if no profiling is requested. | |
StoreObjPtr< EventMetaData > | m_eventMetaDataPtr |
EventMetaData is used by processEvent()/processCore(). | |
EventMetaData | m_previousEventMetaData |
Stores state of EventMetaData before it was last changed. | |
StoreObjPtr< ProcessStatistics > | m_processStatisticsPtr |
Also used in a number of places. | |
bool | m_inRun |
Are we currently in a run? If yes, processEndRun() needs to do something. | |
double | m_lastMetadataUpdate |
Time in seconds of last call for metadata update in event loop. | |
double | m_metadataUpdateInterval |
Minimal time difference in seconds for metadata updates in event loop. | |
bool | m_steerRootInputModuleOn = false |
True if the SteerRootInputModule is in charge for event processing. | |
Private Member Functions | |
void | analyzePath (const PathPtr &path) |
Analyze given path. | |
void | preparePaths () |
Adds internal modules to paths, prepare RingBuffers. | |
RingBuffer * | connectViaRingBuffer (const char *name, const PathPtr &a, PathPtr &b) |
Create RingBuffer with name from given environment variable, add Tx and Rx modules to a and b. | |
void | dump_modules (const std::string &, const ModulePtrList &) |
Dump module names in the ModulePtrList. | |
void | clearFileList () |
TFiles are stored in a global list and cleaned up by root since this will happen in all forked processes, these will be corrupted if we don't clean the list! | |
Static Private Member Functions | |
static ModulePtrList | getModulesWithFlag (const ModulePtrList &modules, Module::EModulePropFlags flag) |
Return only modules which have the given Module flag set. | |
static ModulePtrList | getModulesWithoutFlag (const ModulePtrList &modules, Module::EModulePropFlags flag) |
Return only modules which do not have the given Module flag set. | |
static void | prependModulesIfNotPresent (ModulePtrList *modules, const ModulePtrList &prependModules) |
Prepend given 'prependModules' to 'modules', if they're not already present. | |
Private Attributes | |
std::unique_ptr< ProcHandler > | m_procHandler |
handler to fork and manage processes. | |
PathPtr | m_inputPath |
Input path. | |
PathPtr | m_mainPath |
Main (parallel section) path. | |
PathPtr | m_outputPath |
Output path. | |
RingBuffer * | m_rbin = nullptr |
input RingBuffer | |
RingBuffer * | m_rbout = nullptr |
output RingBuffer | |
ModulePtr | m_histoman |
Pointer to HistoManagerModule, or nullptr if not found. | |
This class provides the core event processing loop for parallel processing.
Definition at line 28 of file pEventProcessor.h.
pEventProcessor | ( | ) |
Constructor.
Definition at line 62 of file pEventProcessor.cc.
|
virtual |
Destructor.
Definition at line 69 of file pEventProcessor.cc.
|
private |
Analyze given path.
Fills m_*path objects.
Definition at line 296 of file pEventProcessor.cc.
|
protectedinherited |
Calls event() on one single module, setting up logging and statistics as needed.
module | Module to call the event() function |
Definition at line 226 of file EventProcessor.cc.
void cleanup | ( | ) |
clean up IPC resources (should only be called in one process).
Definition at line 75 of file pEventProcessor.cc.
|
private |
TFiles are stored in a global list and cleaned up by root since this will happen in all forked processes, these will be corrupted if we don't clean the list!
needs to be called at the end of every process.
Definition at line 99 of file pEventProcessor.cc.
|
private |
Create RingBuffer with name from given environment variable, add Tx and Rx modules to a and b.
Definition at line 373 of file pEventProcessor.cc.
|
private |
Dump module names in the ModulePtrList.
Definition at line 413 of file pEventProcessor.cc.
|
protectedinherited |
Calculate the maximum event number out of the argument from command line and the environment.
Definition at line 113 of file EventProcessor.cc.
|
staticprivate |
Return only modules which have the given Module flag set.
Definition at line 433 of file pEventProcessor.cc.
|
staticprivate |
Return only modules which do not have the given Module flag set.
Definition at line 443 of file pEventProcessor.cc.
void gotSigINT | ( | ) |
signal handler for Ctrl+C (async-safe)
When called the first time, does nothing (input process handles SIGINT by itself). On subsequent calls, RingBuffers are cleared, discarding any events that have been partly produced (mostly equivalent to previous behaviour on Ctrl+C)
Definition at line 86 of file pEventProcessor.cc.
|
staticinherited |
Install signal handler for INT, TERM and QUIT signals.
If argument is NULL, EventProcessor's own signal handler will be installed.
Definition at line 312 of file EventProcessor.cc.
|
staticinherited |
Install a signal handler 'fn' for given signal.
Definition at line 297 of file EventProcessor.cc.
void killRingBuffers | ( | ) |
signal handler (async-safe)
Fairly abrupt termination after the current event.
Definition at line 92 of file pEventProcessor.cc.
|
private |
Adds internal modules to paths, prepare RingBuffers.
Definition at line 398 of file pEventProcessor.cc.
|
staticprivate |
Prepend given 'prependModules' to 'modules', if they're not already present.
Definition at line 453 of file pEventProcessor.cc.
void process | ( | const PathPtr & | spath, |
long | maxEvent | ||
) |
Processes the full module chain, starting with the first module in the given path.
Processes all events for the given run number and for events from 0 to maxEvent.
spath | The processing starts with the first module of this path. |
maxEvent | The maximum number of events that will be processed. If the number is smaller or equal 0, all events will be processed. |
Definition at line 107 of file pEventProcessor.cc.
|
protectedinherited |
Calls the begin run methods of all modules.
Loops over all module instances specified in a list and calls their beginRun() method. Please note: the beginRun() method of the module which triggered the beginRun() loop will also be called.
Definition at line 467 of file EventProcessor.cc.
|
protectedinherited |
Processes the full module chain consisting of an arbitrary number of connected paths, starting with the first module in the specified path.
startPath | The processing starts with the first module of this path. |
modulePathList | A list of all modules which could be executed during the data processing (used for calling the beginRun() and endRun() method). |
maxEvent | The maximum number of events that will be processed. If the number is smaller or equal 0, all events are processed. |
isInputProcess | true when this is either the only or the input process |
Definition at line 406 of file EventProcessor.cc.
|
protectedinherited |
Calls the end run methods of all modules.
Loops over all module instances specified in a list and calls their endRun() method. Please note: the endRun() method of the module which triggered the endRun() loop will also be called.
Definition at line 501 of file EventProcessor.cc.
|
protectedinherited |
Calls event() functions on all modules for the current event.
Used by processCore.
moduleIter | iterator of the path containing all the modules |
skipMasterModule | skip the execution of the master module, presumably because this is the first event and it's already been done in initialize() |
Definition at line 321 of file EventProcessor.cc.
|
protectedinherited |
Initializes the modules.
Loops over all module instances specified in a list and calls their initialize() method.
modulePathList | A list of all modules which could be executed during the data processing. |
setEventInfo | if true the first event call of the master module will be called immidiately to load the event info right away so that it's available for subsequent modules |
Definition at line 242 of file EventProcessor.cc.
|
protectedinherited |
Terminates the modules.
Loops over all module instances in reverse order specified in a list and calls their terminate() method.
modulePathList | A list of all modules which could be executed during the data processing. |
Definition at line 440 of file EventProcessor.cc.
|
inlineinherited |
Set the name of the module we want to profile.
name | Name of the module as returned by getName() |
Definition at line 57 of file EventProcessor.h.
|
staticinherited |
async-safe method to write something to STDERR.
Definition at line 72 of file EventProcessor.cc.
|
protectedinherited |
EventMetaData is used by processEvent()/processCore().
Definition at line 163 of file EventProcessor.h.
|
private |
Pointer to HistoManagerModule, or nullptr if not found.
Definition at line 108 of file pEventProcessor.h.
|
private |
Input path.
Definition at line 96 of file pEventProcessor.h.
|
protectedinherited |
Are we currently in a run? If yes, processEndRun() needs to do something.
Definition at line 172 of file EventProcessor.h.
|
protectedinherited |
Time in seconds of last call for metadata update in event loop.
Definition at line 175 of file EventProcessor.h.
|
private |
Main (parallel section) path.
Definition at line 98 of file pEventProcessor.h.
|
protectedinherited |
The master module that determines the experiment/run/event number.
Definition at line 153 of file EventProcessor.h.
|
protectedinherited |
Minimal time difference in seconds for metadata updates in event loop.
Definition at line 178 of file EventProcessor.h.
|
protectedinherited |
List of all modules in order initialized.
Definition at line 154 of file EventProcessor.h.
|
private |
Output path.
Definition at line 100 of file pEventProcessor.h.
|
protectedinherited |
Stores state of EventMetaData before it was last changed.
Useful since processEndRun() needs info about which run it needs to end.
Definition at line 166 of file EventProcessor.h.
|
protectedinherited |
Also used in a number of places.
Definition at line 169 of file EventProcessor.h.
|
private |
handler to fork and manage processes.
Definition at line 93 of file pEventProcessor.h.
|
protectedinherited |
Adress of the module which we want to profile, nullptr if no profiling is requested.
Definition at line 160 of file EventProcessor.h.
|
protectedinherited |
Name of the module which should be profiled, empty if no profiling is requested.
Definition at line 157 of file EventProcessor.h.
|
private |
input RingBuffer
Definition at line 103 of file pEventProcessor.h.
|
private |
output RingBuffer
Definition at line 105 of file pEventProcessor.h.
|
protectedinherited |
True if the SteerRootInputModule is in charge for event processing.
Definition at line 181 of file EventProcessor.h.