diff --git a/DataFormats/simulation/include/SimulationDataFormat/MCEventHeader.h b/DataFormats/simulation/include/SimulationDataFormat/MCEventHeader.h index 3af79fb360737..2a0338828ac17 100644 --- a/DataFormats/simulation/include/SimulationDataFormat/MCEventHeader.h +++ b/DataFormats/simulation/include/SimulationDataFormat/MCEventHeader.h @@ -74,6 +74,12 @@ class MCEventHeader : public FairMCEventHeader return ref; }; + /// prints a summary of info keys/types attached to this header + void printInfo() const + { + mEventInfo.print(); + } + /** methods **/ virtual void Reset(); diff --git a/Generators/src/GeneratorPythia8.cxx b/Generators/src/GeneratorPythia8.cxx index 751002d132c3e..54a4a4e6fd0d8 100644 --- a/Generators/src/GeneratorPythia8.cxx +++ b/Generators/src/GeneratorPythia8.cxx @@ -196,15 +196,37 @@ void GeneratorPythia8::updateHeader(o2::dataformats::MCEventHeader* eventHeader) { /** update header **/ + eventHeader->putInfo("generator", "pythia8"); + eventHeader->putInfo("version", PYTHIA_VERSION_INTEGER); + #if PYTHIA_VERSION_INTEGER < 8300 auto hiinfo = mPythia.info.hiinfo; #else auto hiinfo = mPythia.info.hiInfo; #endif - /** set impact parameter if in heavy-ion mode **/ if (hiinfo) { + /** set impact parameter **/ eventHeader->SetB(hiinfo->b()); + eventHeader->putInfo("Bimpact", hiinfo->b()); + /** set Ncoll, Npart and Nremn **/ + int nColl, nPart; + int nPartProtonProj, nPartNeutronProj, nPartProtonTarg, nPartNeutronTarg; + int nRemnProtonProj, nRemnNeutronProj, nRemnProtonTarg, nRemnNeutronTarg; + getNcoll(nColl); + getNpart(nPart); + getNpart(nPartProtonProj, nPartNeutronProj, nPartProtonTarg, nPartNeutronTarg); + getNremn(nRemnProtonProj, nRemnNeutronProj, nRemnProtonTarg, nRemnNeutronTarg); + eventHeader->putInfo("Ncoll", nColl); + eventHeader->putInfo("Npart", nPart); + eventHeader->putInfo("Npart_proj_p", nPartProtonProj); + eventHeader->putInfo("Npart_proj_n", nPartNeutronProj); + eventHeader->putInfo("Npart_targ_p", nPartProtonTarg); + eventHeader->putInfo("Npart_targ_n", nPartNeutronTarg); + eventHeader->putInfo("Nremn_proj_p", nRemnProtonProj); + eventHeader->putInfo("Nremn_proj_n", nRemnNeutronProj); + eventHeader->putInfo("Nremn_targ_p", nRemnProtonTarg); + eventHeader->putInfo("Nremn_targ_n", nRemnNeutronTarg); } } diff --git a/run/O2HitMerger.h b/run/O2HitMerger.h index adc652bf03dc2..2b90119ea2715 100644 --- a/run/O2HitMerger.h +++ b/run/O2HitMerger.h @@ -551,7 +551,7 @@ class O2HitMerger : public FairMQDevice std::vector nprimaries; // collecting primary particles in each subevent std::vector nsubevents; // collecting of subevent numbers - std::unique_ptr eventheader; // The event header + o2::dataformats::MCEventHeader* eventheader = nullptr; // The event header // the MC labels (trackID) for hits o2::data::SubEventInfo* info = nullptr; @@ -562,9 +562,9 @@ class O2HitMerger : public FairMQDevice trackoffsets.emplace_back(info->npersistenttracks); nprimaries.emplace_back(info->nprimarytracks); nsubevents.emplace_back(info->part); + info->mMCEventHeader.printInfo(); if (eventheader == nullptr) { - eventheader = std::unique_ptr( - new dataformats::MCEventHeader(info->mMCEventHeader)); + eventheader = &info->mMCEventHeader; } else { eventheader->getMCEventStats().add(info->mMCEventHeader.getMCEventStats()); } @@ -580,9 +580,9 @@ class O2HitMerger : public FairMQDevice } // put the event headers into the new TTree - o2::dataformats::MCEventHeader* headerptr = eventheader.get(); - auto headerbr = o2::base::getOrMakeBranch(*mOutTree, "MCEventHeader.", &headerptr); - headerbr->SetAddress(&headerptr); + eventheader->printInfo(); + auto headerbr = o2::base::getOrMakeBranch(*mOutTree, "MCEventHeader.", &eventheader); + headerbr->SetAddress(&eventheader); headerbr->Fill(); headerbr->ResetAddress();