13#include <fairlogger/Logger.h>
28bool HitProcessingManager::setupChain()
30 if (mBackgroundFileNames.size() == 0 && mSignalFileNames.size() == 0) {
32 LOG(warning) <<
"No files to be analysed";
37 int sourcecounter = 0;
39 for (
auto& pair : mSignalFileNames) {
41 maxsourceid = std::max(pair.first, maxsourceid);
43 if (maxsourceid != sourcecounter) {
44 LOG(warning) <<
"max source id " << maxsourceid <<
" vs " << sourcecounter;
46 LOG(info) <<
"setting up " << maxsourceid + 1 <<
" chains";
47 mSimChains.resize(maxsourceid + 1);
50 for (
int i = 0;
i < mSimChains.size(); ++
i) {
52 mSimChains[
i] =
new TChain(
"o2sim");
56 auto&
c = *mSimChains[0];
58 for (
auto&
filename : mBackgroundFileNames) {
62 for (
auto& pair : mSignalFileNames) {
63 const auto& signalid = pair.first;
64 const auto& filenamevector = pair.second;
65 auto&
chain = *mSimChains[signalid];
66 for (
auto&
filename : filenamevector) {
79 if (mGeometryFile.size() > 0) {
81 TGeoManager::Import(mGeometryFile.c_str());
85 if (ncollisions != -1) {
86 mNumberOfCollisions = ncollisions;
88 mNumberOfCollisions = mSimChains[0]->GetEntries();
89 LOG(info) <<
"Automatic deduction of number of collisions ... will just take number of background entries "
90 << mNumberOfCollisions;
99 std::vector<std::string> prefixes;
100 prefixes.emplace_back(mBackgroundFileNames[0]);
101 for (
auto k : mSignalFileNames) {
102 prefixes.emplace_back(k.second[0]);
116 context->printCollisionSummary();
117 mDigitizationContext = *context;
120 LOG(warn) <<
"NO DIGITIZATIONCONTEXT FOUND";
135 auto getBackgroundRoundRobin = [
this]() {
136 static int bgcounter = 0;
137 int numbg = mSimChains[0]->GetEntries();
138 if (bgcounter == numbg) {
144 const int nsignalids = mSimChains.size() - 1;
145 auto getSignalRoundRobin = [
this, nsignalids]() {
146 static int bgcounter = 0;
147 static int signalid = 0;
148 static std::vector<int>
counter(nsignalids, 0);
149 if (signalid == nsignalids) {
152 const auto realsourceid = signalid + 1;
153 int numentries = mSimChains[realsourceid]->GetEntries();
154 if (
counter[signalid] == numentries) {
163 auto getRandomBackground = [
this, &rnd]() {
164 int numbg = mSimChains[0]->GetEntries();
165 const auto eventID = (
int)numbg * rnd.Rndm();
169 auto getRandomSignal = [
this, nsignalids, &rnd]() {
170 const auto sourceID = 1 + (
int)(rnd.Rndm() * nsignalids);
171 const auto signalID = (
int)(rnd.Rndm() * mSimChains[sourceID]->GetEntries());
180 eventparts[
i].clear();
186 if (mSampleCollisionsRandomly) {
187 eventparts[
i].emplace_back(getRandomBackground());
188 if (mSimChains.size() > 1) {
189 eventparts[
i].emplace_back(getRandomSignal());
194 eventparts[
i].emplace_back(getBackgroundRoundRobin());
195 if (mSimChains.size() > 1) {
196 eventparts[
i].emplace_back(getSignalRoundRobin());
204 if (mSimChains.size() > 1) {
215 for (
auto&
f : mRegisteredRunFunctions) {
216 f(mDigitizationContext);
ClassImp(o2::steer::HitProcessingManager)
static std::string getMCHeadersFileName(const std::string_view prefix=STANDARDSIMPREFIX)
void printCollisionSummary(bool withQED=false, int truncateOutputTo=-1) const
void setSimPrefixes(std::vector< std::string > const &p)
std::vector< o2::InteractionTimeRecord > & getEventRecords(bool withQED=false)
void setNCollisions(int n)
int getNCollisions() const
std::vector< std::vector< o2::steer::EventPart > > & getEventParts(bool withQED=false)
void setMaxNumberParts(int maxp)
void saveToFile(std::string_view filename) const
void setBunchFilling(o2::BunchFilling const &bf)
static DigitizationContext * loadFromFile(std::string_view filename="")
O2 specific run class; steering hit processing.
bool setupRunFromExistingContext(const char *filename)
void writeDigitizationContext(const char *filename) const
void sampleCollisionConstituents()
void sampleCollisionTimes()
void setupRun(int ncollisions=-1)
const BunchFilling & getBunchFilling() const
void generateCollisionTimes(std::vector< o2::InteractionTimeRecord > &dest)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"