Skip to content

Commit d975302

Browse files
victor-gonzalezVictor
andauthored
[PWGCF] DptDpt - Proper handling of new event selection at Gen level (#12796)
Co-authored-by: Victor <victor@cern.ch>
1 parent 6c9e716 commit d975302

File tree

2 files changed

+47
-31
lines changed

2 files changed

+47
-31
lines changed

PWGCF/TableProducer/dptDptFilter.cxx

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ struct DptDptFilter {
539539
Produces<aod::DptDptCFGenCollisionsInfo> gencollisionsinfo;
540540

541541
Multiplicity multiplicity;
542+
Preslice<DptDptFullTracksDetLevel> perCollision = aod::track::collisionId;
542543

543544
void init(InitContext const&)
544545
{
@@ -737,29 +738,33 @@ struct DptDptFilter {
737738
template <typename CollisionObject, typename ParticlesList>
738739
bool processGenerated(CollisionObject const& mccollision, ParticlesList const& mcparticles, float centormult);
739740

740-
template <typename CollisionsGroup, typename AllCollisions>
741+
template <typename CollisionsGroup, typename AllCollisions, typename AllTracks>
741742
void processGeneratorLevel(aod::McCollision const& mccollision,
742743
CollisionsGroup const& collisions,
743744
aod::McParticles const& mcparticles,
744745
AllCollisions const& allcollisions,
746+
AllTracks const& alltracks,
745747
float defaultcent);
746748

747749
void processWithCentGeneratorLevel(aod::McCollision const& mccollision,
748750
soa::SmallGroups<soa::Join<aod::CollisionsEvSelCent, aod::McCollisionLabels>> const& collisions,
749751
aod::McParticles const& mcparticles,
750-
aod::CollisionsEvSelCent const& allcollisions);
752+
aod::CollisionsEvSelCent const& allcollisions,
753+
DptDptFullTracksDetLevel const& alltracks);
751754
PROCESS_SWITCH(DptDptFilter, processWithCentGeneratorLevel, "Process generated with centrality", false);
752755

753756
void processWithRun2CentGeneratorLevel(aod::McCollision const& mccollision,
754757
soa::SmallGroups<soa::Join<aod::CollisionsEvSelRun2Cent, aod::McCollisionLabels>> const& collisions,
755758
aod::McParticles const& mcparticles,
756-
aod::CollisionsEvSelRun2Cent const& allcollisions);
759+
aod::CollisionsEvSelRun2Cent const& allcollisions,
760+
DptDptFullTracksDetLevel const& alltracks);
757761
PROCESS_SWITCH(DptDptFilter, processWithRun2CentGeneratorLevel, "Process generated with centrality", false);
758762

759763
void processWithoutCentGeneratorLevel(aod::McCollision const& mccollision,
760764
soa::SmallGroups<soa::Join<aod::CollisionsEvSel, aod::McCollisionLabels>> const& collisions,
761765
aod::McParticles const& mcparticles,
762-
aod::CollisionsEvSel const& allcollisions);
766+
aod::CollisionsEvSel const& allcollisions,
767+
DptDptFullTracksDetLevel const& alltracks);
763768
PROCESS_SWITCH(DptDptFilter, processWithoutCentGeneratorLevel, "Process generated without centrality", false);
764769

765770
void processOnTheFlyGeneratorLevel(aod::McCollision const& mccollision,
@@ -908,11 +913,12 @@ bool DptDptFilter::processGenerated(CollisionObject const& mccollision, Particle
908913
return static_cast<bool>(acceptedevent);
909914
}
910915

911-
template <typename CollisionsGroup, typename AllCollisions>
916+
template <typename CollisionsGroup, typename AllCollisions, typename AllTracks>
912917
void DptDptFilter::processGeneratorLevel(aod::McCollision const& mccollision,
913918
CollisionsGroup const& collisions,
914919
aod::McParticles const& mcparticles,
915920
AllCollisions const& allcollisions,
921+
AllTracks const& alltracks,
916922
float defaultcent)
917923
{
918924
using namespace dptdptfilter;
@@ -928,6 +934,8 @@ void DptDptFilter::processGeneratorLevel(aod::McCollision const& mccollision,
928934
if (tmpcollision.has_mcCollision()) {
929935
if (tmpcollision.mcCollisionId() == mccollision.globalIndex()) {
930936
typename AllCollisions::iterator const& collision = allcollisions.iteratorAt(tmpcollision.globalIndex());
937+
auto collisionTracks = alltracks.sliceBy(perCollision, collision.globalIndex());
938+
storeMultiplicitiesAndCentralities(collision, collisionTracks);
931939
if (isEventSelected(collision, defaultcent)) {
932940
if (processGenerated(mccollision, mcparticles, defaultcent)) {
933941
fhTrueVertexZAA->Fill((mccollision.posZ()));
@@ -946,25 +954,28 @@ void DptDptFilter::processGeneratorLevel(aod::McCollision const& mccollision,
946954
void DptDptFilter::processWithCentGeneratorLevel(aod::McCollision const& mccollision,
947955
soa::SmallGroups<soa::Join<aod::CollisionsEvSelCent, aod::McCollisionLabels>> const& collisions,
948956
aod::McParticles const& mcparticles,
949-
aod::CollisionsEvSelCent const& allcollisions)
957+
aod::CollisionsEvSelCent const& allcollisions,
958+
DptDptFullTracksDetLevel const& alltracks)
950959
{
951-
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, 50.0);
960+
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, alltracks, 50.0);
952961
}
953962

954963
void DptDptFilter::processWithRun2CentGeneratorLevel(aod::McCollision const& mccollision,
955964
soa::SmallGroups<soa::Join<aod::CollisionsEvSelRun2Cent, aod::McCollisionLabels>> const& collisions,
956965
aod::McParticles const& mcparticles,
957-
aod::CollisionsEvSelRun2Cent const& allcollisions)
966+
aod::CollisionsEvSelRun2Cent const& allcollisions,
967+
DptDptFullTracksDetLevel const& alltracks)
958968
{
959-
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, 50.0);
969+
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, alltracks, 50.0);
960970
}
961971

962972
void DptDptFilter::processWithoutCentGeneratorLevel(aod::McCollision const& mccollision,
963973
soa::SmallGroups<soa::Join<aod::CollisionsEvSel, aod::McCollisionLabels>> const& collisions,
964974
aod::McParticles const& mcparticles,
965-
aod::CollisionsEvSel const& allcollisions)
975+
aod::CollisionsEvSel const& allcollisions,
976+
DptDptFullTracksDetLevel const& alltracks)
966977
{
967-
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, 50.0);
978+
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, alltracks, 50.0);
968979
}
969980

970981
void DptDptFilter::processOnTheFlyGeneratorLevel(aod::McCollision const& mccollision,
@@ -1016,7 +1027,6 @@ T computeRMS(std::vector<T>& vec)
10161027
}
10171028

10181029
struct DptDptFilterTracks {
1019-
10201030
Produces<aod::ScannedTracks> scannedtracks;
10211031
Produces<aod::DptDptCFTracksInfo> tracksinfo;
10221032
Produces<aod::ScannedTrueTracks> scannedgentracks;

PWGCF/TableProducer/dptDptFilter.h

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,17 +1287,21 @@ inline bool centralitySelection<aod::McCollision>(aod::McCollision const&, float
12871287
/// @brief evalues the exclusion formula for the current multiplicity / centrality parameters
12881288
/// @return true if the collision is not excluded according to the formula false otherwise
12891289
/// WARNING: it has always to be called after filling the multiplicity / centrality observables
1290+
/// NOTE: for MC generator level does nothing, as expected
1291+
template <typename CollisionObject>
12901292
inline bool isCollisionNotExcluded()
12911293
{
12921294
bool notExcluded = true;
1293-
if (useCentralityMultiplicityCorrelationsExclusion) {
1294-
[&]() {
1295-
/* set the formula parameter values */
1296-
for (size_t iPar = 0; iPar < observableIndexForCentralityMultiplicityParameter.size(); ++iPar) {
1297-
multiplicityCentralityCorrelationsExclusion->SetParameter(iPar, collisionMultiplicityCentralityObservables[observableIndexForCentralityMultiplicityParameter[iPar]]);
1298-
}
1299-
}();
1300-
notExcluded = multiplicityCentralityCorrelationsExclusion->Eval() != 0;
1295+
if constexpr (!framework::has_type_v<aod::mccollision::GeneratorsID, typename CollisionObject::all_columns>) {
1296+
if (useCentralityMultiplicityCorrelationsExclusion) {
1297+
[&]() {
1298+
/* set the formula parameter values */
1299+
for (size_t iPar = 0; iPar < observableIndexForCentralityMultiplicityParameter.size(); ++iPar) {
1300+
multiplicityCentralityCorrelationsExclusion->SetParameter(iPar, collisionMultiplicityCentralityObservables[observableIndexForCentralityMultiplicityParameter[iPar]]);
1301+
}
1302+
}();
1303+
notExcluded = multiplicityCentralityCorrelationsExclusion->Eval() != 0;
1304+
}
13011305
}
13021306
collisionFlags.set(CollSelMULTCORRELATIONS, notExcluded);
13031307
return notExcluded;
@@ -1405,20 +1409,22 @@ inline bool isEventSelected(CollisionObject const& collision, float& centormult)
14051409

14061410
bool trigsel = triggerSelection(collision);
14071411

1408-
bool rctsel = false;
1412+
/* run condition table information */
1413+
bool rctsel = true;
14091414
if (useRctInformation) {
1410-
if constexpr (framework::has_type_v<aod::evsel::Rct, typename CollisionObject::all_columns>) {
1411-
if (rctChecker.checkTable(collision)) {
1412-
rctsel = true;
1413-
collisionFlags.set(CollSelRCTBIT);
1414-
}
1415+
if constexpr (framework::has_type_v<aod::mccollision::GeneratorsID, typename CollisionObject::all_columns>) {
1416+
/* RCT condition not considered for generator level */
14151417
} else {
1416-
LOGF(fatal, "RCT check required but the dataset does not have RCT information associated. Please, fix it");
1418+
if constexpr (framework::has_type_v<aod::evsel::Rct, typename CollisionObject::all_columns>) {
1419+
if (!rctChecker.checkTable(collision)) {
1420+
rctsel = false;
1421+
}
1422+
} else {
1423+
LOGF(fatal, "RCT check required but the dataset does not have RCT information associated. Please, fix it");
1424+
}
14171425
}
1418-
} else {
1419-
collisionFlags.set(CollSelRCTBIT);
1420-
rctsel = true;
14211426
}
1427+
collisionFlags.set(CollSelRCTBIT, rctsel);
14221428

14231429
bool occupancysel = occupancySelection(collision);
14241430

@@ -1439,7 +1445,7 @@ inline bool isEventSelected(CollisionObject const& collision, float& centormult)
14391445

14401446
bool centmultsel = centralitySelection(collision, centormult);
14411447

1442-
bool centmultexclusion = isCollisionNotExcluded();
1448+
bool centmultexclusion = isCollisionNotExcluded<CollisionObject>();
14431449

14441450
bool accepted = trigsel && rctsel && occupancysel && zvtxsel && centmultsel && centmultexclusion;
14451451

0 commit comments

Comments
 (0)