Project
Loading...
Searching...
No Matches
Mergers

O2 Mergers

Mergers are DPL devices able to merge objects produced in parallel. These can be TObjects or custom object inheriting MergeInterface. Topologies of mergers can be created using the o2::mergers::MergerInfrastructureBuilder class. To generate only one Merger, one can also use o2::mergers::MergerBuilder. Mergers provide a handful of options which are listed in the include/Mergers/MergerConfig.h file.

See the snippet from src/mergersTopologyExample.cxx as a usage example:

...
void customize(std::vector<CompletionPolicy>& policies)
{
MergerBuilder::customizeInfrastructure(policies);
}
...
using namespace o2::mergers;
MergerInfrastructureBuilder mergersBuilder;
mergersBuilder.setInfrastructureName("histos");
mergersBuilder.setInputSpecs(mergersInputs);
mergersBuilder.setOutputSpec({{ "main" }, "TST", "HISTO", 0 });
MergerConfig config;
config.inputObjectTimespan = { InputObjectsTimespan::LastDifference };
config.mergedObjectTimespan = {MergedObjectTimespan::FullHistory};
config.publicationDecision = { PublicationDecision::EachNSeconds, 5};
config.topologySize = { TopologySize::NumberOfLayers, 2};
mergersBuilder.setConfig(config);
mergersBuilder.generateInfrastructure(specs);
...
void customize(std::vector< o2::framework::CallbacksPolicy > &policies)

It creates a 2-layer topology of Mergers, which will consume mergerInputs and send merged object on the Output {{"main"}, "TST", "HISTO", 0 }. The infrastructure will integrate the received differences and each 5 seconds it will merge and publish the merged object. It will consist of a full history of the data that the topology will have received.