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);
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error First event to Number of events to Number of iterations to Number of iterations to Number of initial iterations excluded from const char e
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"