Skip to content

Commit 5b5256f

Browse files
[PWGLF] Add total MC multiplicity in StraMCCollMults table (AliceO2Group#9619)
1 parent d565c3f commit 5b5256f

File tree

4 files changed

+89
-9
lines changed

4 files changed

+89
-9
lines changed

PWGLF/DataModel/LFStrangenessTables.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,11 @@ using StraStamps = StraStamps_001;
243243
using StraCollision = StraCollisions::iterator;
244244
using StraCent = StraCents::iterator;
245245

246+
namespace stramccollision
247+
{
248+
DECLARE_SOA_COLUMN(TotalMultMCParticles, totalMultMCParticles, int); //! total number of MC particles in a generated collision
249+
} // namespace stramccollision
250+
246251
//______________________________________________________
247252
// for correlating information with MC
248253
// also allows for collision association cross-checks
@@ -253,11 +258,14 @@ DECLARE_SOA_TABLE_VERSIONED(StraMCCollisions_001, "AOD", "STRAMCCOLLISION", 1, /
253258
o2::soa::Index<>, mccollision::PosX, mccollision::PosY, mccollision::PosZ,
254259
mccollision::ImpactParameter, mccollision::EventPlaneAngle);
255260
using StraMCCollisions = StraMCCollisions_001;
261+
using StraMCCollision = StraMCCollisions::iterator;
256262

257-
DECLARE_SOA_TABLE(StraMCCollMults, "AOD", "STRAMCCOLLMULTS", //! MC collision multiplicities
263+
DECLARE_SOA_TABLE(StraMCCollMults_000, "AOD", "STRAMCCOLLMULTS", //! MC collision multiplicities
258264
mult::MultMCFT0A, mult::MultMCFT0C, mult::MultMCNParticlesEta05, mult::MultMCNParticlesEta08, mult::MultMCNParticlesEta10, o2::soa::Marker<2>);
265+
DECLARE_SOA_TABLE_VERSIONED(StraMCCollMults_001, "AOD", "STRAMCCOLLMULTS", 1, //! MC collision multiplicities
266+
mult::MultMCFT0A, mult::MultMCFT0C, mult::MultMCNParticlesEta05, mult::MultMCNParticlesEta08, mult::MultMCNParticlesEta10, stramccollision::TotalMultMCParticles);
259267

260-
using StraMCCollision = StraMCCollisions::iterator;
268+
using StraMCCollMults = StraMCCollMults_001;
261269

262270
namespace dautrack
263271
{

PWGLF/TableProducer/Strangeness/Converters/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,9 @@ o2physics_add_dpl_workflow(stramccollisionconverter
8787
o2physics_add_dpl_workflow(strastampsconverter
8888
SOURCES strastampsconverter.cxx
8989
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
90+
COMPONENT_NAME Analysis)
91+
92+
o2physics_add_dpl_workflow(stramccollmultconverter
93+
SOURCES stramccollmultconverter.cxx
94+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
9095
COMPONENT_NAME Analysis)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
#include "Framework/runDataProcessing.h"
12+
#include "Framework/AnalysisTask.h"
13+
#include "Framework/AnalysisDataModel.h"
14+
#include "PWGLF/DataModel/LFStrangenessTables.h"
15+
16+
using namespace o2;
17+
using namespace o2::framework;
18+
19+
// Converts V0 version 001 to 002
20+
struct stramccollmultconverter {
21+
Produces<aod::StraMCCollMults_001> straMCCollMults_001;
22+
23+
void process(aod::StraMCCollMults_000 const& straMCcolls)
24+
{
25+
for (auto& straMCcoll : straMCcolls) {
26+
straMCCollMults_001(straMCcoll.multMCFT0A(),
27+
straMCcoll.multMCFT0C(),
28+
straMCcoll.multMCNParticlesEta05(),
29+
straMCcoll.multMCNParticlesEta08(),
30+
straMCcoll.multMCNParticlesEta10(),
31+
-1 /* dummy value for totalMultMCParticles */);
32+
}
33+
}
34+
};
35+
36+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
37+
{
38+
return WorkflowSpec{
39+
adaptAnalysisTask<stramccollmultconverter>(cfgc)};
40+
}

PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#include "Common/DataModel/PIDResponse.h"
4949
#include "Common/DataModel/Qvectors.h"
5050
#include "Framework/StaticFor.h"
51+
#include "Framework/O2DatabasePDGPlugin.h"
5152
#include "Common/DataModel/McCollisionExtra.h"
5253
#include "PWGLF/DataModel/EPCalibrationTables.h"
5354

@@ -202,6 +203,8 @@ struct strangederivedbuilder {
202203
Preslice<aod::McParticles> mcParticlePerMcCollision = o2::aod::mcparticle::mcCollisionId;
203204
Preslice<UDCollisionsFull> udCollisionsPerCollision = o2::aod::udcollision::collisionId;
204205

206+
Service<o2::framework::O2DatabasePDG> pdg;
207+
205208
std::vector<uint32_t> genK0Short;
206209
std::vector<uint32_t> genLambda;
207210
std::vector<uint32_t> genAntiLambda;
@@ -549,18 +552,42 @@ struct strangederivedbuilder {
549552
}
550553

551554
// master function to process a collision
552-
template <typename mccoll>
553-
void populateMCCollisionTable(mccoll const& mcCollisions)
555+
template <typename mccoll, typename mcparts>
556+
void populateMCCollisionTable(mccoll const& mcCollisions, mcparts const& mcParticlesEntireTable)
554557
{
555558
// ______________________________________________
556559
// fill all MC collisions, correlate via index later on
557560
for (const auto& mccollision : mcCollisions) {
561+
const uint64_t mcCollIndex = mccollision.globalIndex();
562+
auto mcParticles = mcParticlesEntireTable.sliceBy(mcParticlePerMcCollision, mcCollIndex);
563+
564+
// count total MC multiplicity in generated collision
565+
// reproduces what is done here:
566+
// https://github.com/AliceO2Group/O2Physics/blob/master/Common/TableProducer/multiplicityTable.cxx#L654
567+
int totalMult = 0;
568+
for (const auto& mcPart : mcParticles) {
569+
if (!mcPart.isPhysicalPrimary()) {
570+
continue;
571+
}
572+
573+
auto charge = 0.;
574+
auto* p = pdg->GetParticle(mcPart.pdgCode());
575+
if (p != nullptr) {
576+
charge = p->Charge();
577+
}
578+
if (std::abs(charge) < 1e-3) {
579+
continue; // reject neutral particles in counters
580+
}
581+
totalMult++;
582+
}
583+
558584
strangeMCColl(mccollision.posX(), mccollision.posY(), mccollision.posZ(),
559585
mccollision.impactParameter(), mccollision.eventPlaneAngle());
560586
strangeMCMults(mccollision.multMCFT0A(), mccollision.multMCFT0C(),
561587
mccollision.multMCNParticlesEta05(),
562588
mccollision.multMCNParticlesEta08(),
563-
mccollision.multMCNParticlesEta10());
589+
mccollision.multMCNParticlesEta10(),
590+
totalMult);
564591
}
565592
}
566593

@@ -574,15 +601,15 @@ struct strangederivedbuilder {
574601
populateCollisionTables(collisions, udCollisions, V0s, Cascades, KFCascades, TraCascades);
575602
}
576603

577-
void processCollisionsWithMC(soa::Join<aod::Collisions, aod::FT0Mults, aod::FV0Mults, aod::FDDMults, aod::PVMults, aod::ZDCMults, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs, aod::CentFV0As, aod::EvSels, aod::McCollisionLabels, aod::MultsExtra, aod::MultsGlobal> const& collisions, soa::Join<aod::V0Datas, aod::McV0Labels> const& V0s, soa::Join<aod::V0MCCores, aod::V0MCCollRefs> const& /*V0MCCores*/, soa::Join<aod::CascDatas, aod::McCascLabels> const& Cascades, aod::KFCascDatas const& KFCascades, aod::TraCascDatas const& TraCascades, aod::BCsWithTimestamps const& /*bcs*/, soa::Join<aod::McCollisions, aod::McCollsExtra, aod::MultsExtraMC> const& mcCollisions, aod::McParticles const&)
604+
void processCollisionsWithMC(soa::Join<aod::Collisions, aod::FT0Mults, aod::FV0Mults, aod::FDDMults, aod::PVMults, aod::ZDCMults, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs, aod::CentFV0As, aod::EvSels, aod::McCollisionLabels, aod::MultsExtra, aod::MultsGlobal> const& collisions, soa::Join<aod::V0Datas, aod::McV0Labels> const& V0s, soa::Join<aod::V0MCCores, aod::V0MCCollRefs> const& /*V0MCCores*/, soa::Join<aod::CascDatas, aod::McCascLabels> const& Cascades, aod::KFCascDatas const& KFCascades, aod::TraCascDatas const& TraCascades, aod::BCsWithTimestamps const& /*bcs*/, soa::Join<aod::McCollisions, aod::McCollsExtra, aod::MultsExtraMC> const& mcCollisions, aod::McParticles const& mcParticles)
578605
{
579-
populateMCCollisionTable(mcCollisions);
606+
populateMCCollisionTable(mcCollisions, mcParticles);
580607
populateCollisionTables(collisions, collisions, V0s, Cascades, KFCascades, TraCascades);
581608
}
582609

583-
void processCollisionsWithUDWithMC(soa::Join<aod::Collisions, aod::FT0Mults, aod::FV0Mults, aod::FDDMults, aod::PVMults, aod::ZDCMults, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs, aod::CentFV0As, aod::EvSels, aod::McCollisionLabels, aod::MultsExtra, aod::MultsGlobal> const& collisions, soa::Join<aod::V0Datas, aod::McV0Labels> const& V0s, soa::Join<aod::V0MCCores, aod::V0MCCollRefs> const& /*V0MCCores*/, soa::Join<aod::CascDatas, aod::McCascLabels> const& Cascades, aod::KFCascDatas const& KFCascades, aod::TraCascDatas const& TraCascades, aod::BCsWithTimestamps const& /*bcs*/, UDCollisionsFull const& udCollisions, soa::Join<aod::McCollisions, aod::McCollsExtra, aod::MultsExtraMC> const& mcCollisions, aod::McParticles const&)
610+
void processCollisionsWithUDWithMC(soa::Join<aod::Collisions, aod::FT0Mults, aod::FV0Mults, aod::FDDMults, aod::PVMults, aod::ZDCMults, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs, aod::CentFV0As, aod::EvSels, aod::McCollisionLabels, aod::MultsExtra, aod::MultsGlobal> const& collisions, soa::Join<aod::V0Datas, aod::McV0Labels> const& V0s, soa::Join<aod::V0MCCores, aod::V0MCCollRefs> const& /*V0MCCores*/, soa::Join<aod::CascDatas, aod::McCascLabels> const& Cascades, aod::KFCascDatas const& KFCascades, aod::TraCascDatas const& TraCascades, aod::BCsWithTimestamps const& /*bcs*/, UDCollisionsFull const& udCollisions, soa::Join<aod::McCollisions, aod::McCollsExtra, aod::MultsExtraMC> const& mcCollisions, aod::McParticles const& mcParticles)
584611
{
585-
populateMCCollisionTable(mcCollisions);
612+
populateMCCollisionTable(mcCollisions, mcParticles);
586613
populateCollisionTables(collisions, udCollisions, V0s, Cascades, KFCascades, TraCascades);
587614
}
588615

0 commit comments

Comments
 (0)