Skip to content

Commit d5a438e

Browse files
committed
Improve Vertex handling in MCEventHeader
1 parent 0b38692 commit d5a438e

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

Generators/include/Generators/GeneratorFromFile.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,11 @@ class GeneratorFromEventPool : public o2::eventgen::Generator
144144

145145
void updateHeader(o2::dataformats::MCEventHeader* eventHeader) override
146146
{
147+
// Copy current vertex position from the event header
148+
const double xyz[3] = {eventHeader->GetX(), eventHeader->GetY(), eventHeader->GetZ()};
147149
mO2KineGenerator->updateHeader(eventHeader);
150+
// Event pool uses vertex position from current simulation, only extKinO2 takes the one from the file instead
151+
eventHeader->SetVertex(xyz[0], xyz[1], xyz[2]);
148152
}
149153

150154
// determine the collection of available files

Generators/include/Generators/GeneratorHybrid.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ class GeneratorHybrid : public Generator
120120
bool mIsInitialized = false;
121121

122122
o2::dataformats::MCEventHeader mMCEventHeader; // to capture event headers
123+
int mHeaderGeneratorIndex = -1; // index of the generator that updated the header in current event
123124

124125
enum class GenMode {
125126
kSeq,

Generators/src/GeneratorHybrid.cxx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,10 @@ bool GeneratorHybrid::importParticles()
417417

418418
// Clear particles and event header
419419
mParticles.clear();
420-
mMCEventHeader.clearInfo();
420+
// event header of underlying generator must be fully reset
421+
// this is important when using extKinO2 or event pools where the full header information is forwarded from the generator
422+
// otherwise some events might have mixed header information from different generators
423+
mMCEventHeader.Reset();
421424
if (mCocktailMode) {
422425
// in cocktail mode we need to merge the particles from the different generators
423426
bool baseGen = true; // first generator of the cocktail is used as reference to update the event header information
@@ -445,6 +448,7 @@ bool GeneratorHybrid::importParticles()
445448
if (baseGen) {
446449
gens[subIndex]->updateHeader(&mMCEventHeader);
447450
baseGen = false;
451+
mHeaderGeneratorIndex = subIndex; // store index of generator updating the header
448452
}
449453
mInputTaskQueue.push(subIndex);
450454
mTasksStarted++;
@@ -467,6 +471,7 @@ bool GeneratorHybrid::importParticles()
467471

468472
// fetch the event Header information from the underlying generator
469473
gens[genIndex]->updateHeader(&mMCEventHeader);
474+
mHeaderGeneratorIndex = genIndex; // store index of generator updating the header
470475
mInputTaskQueue.push(genIndex);
471476
mTasksStarted++;
472477
}
@@ -484,6 +489,11 @@ bool GeneratorHybrid::importParticles()
484489
void GeneratorHybrid::updateHeader(o2::dataformats::MCEventHeader* eventHeader)
485490
{
486491
if (eventHeader) {
492+
// Overwrite current vertex position only if extkinO2 is not used as underlying generator
493+
if (mGens[mHeaderGeneratorIndex] != "extkinO2") {
494+
mMCEventHeader.SetVertex(eventHeader->GetX(), eventHeader->GetY(), eventHeader->GetZ());
495+
}
496+
mHeaderGeneratorIndex = -1; // reset header generator index for next event
487497
// Forward the base class fields from FairMCEventHeader
488498
static_cast<FairMCEventHeader&>(*eventHeader) = static_cast<FairMCEventHeader&>(mMCEventHeader);
489499
// Copy the key-value store info

0 commit comments

Comments
 (0)