Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 22 additions & 12 deletions PWGCF/TableProducer/dptDptFilter.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,7 @@ struct DptDptFilter {
Produces<aod::DptDptCFGenCollisionsInfo> gencollisionsinfo;

Multiplicity multiplicity;
Preslice<DptDptFullTracksDetLevel> perCollision = aod::track::collisionId;

void init(InitContext const&)
{
Expand Down Expand Up @@ -737,29 +738,33 @@ struct DptDptFilter {
template <typename CollisionObject, typename ParticlesList>
bool processGenerated(CollisionObject const& mccollision, ParticlesList const& mcparticles, float centormult);

template <typename CollisionsGroup, typename AllCollisions>
template <typename CollisionsGroup, typename AllCollisions, typename AllTracks>
void processGeneratorLevel(aod::McCollision const& mccollision,
CollisionsGroup const& collisions,
aod::McParticles const& mcparticles,
AllCollisions const& allcollisions,
AllTracks const& alltracks,
float defaultcent);

void processWithCentGeneratorLevel(aod::McCollision const& mccollision,
soa::SmallGroups<soa::Join<aod::CollisionsEvSelCent, aod::McCollisionLabels>> const& collisions,
aod::McParticles const& mcparticles,
aod::CollisionsEvSelCent const& allcollisions);
aod::CollisionsEvSelCent const& allcollisions,
DptDptFullTracksDetLevel const& alltracks);
PROCESS_SWITCH(DptDptFilter, processWithCentGeneratorLevel, "Process generated with centrality", false);

void processWithRun2CentGeneratorLevel(aod::McCollision const& mccollision,
soa::SmallGroups<soa::Join<aod::CollisionsEvSelRun2Cent, aod::McCollisionLabels>> const& collisions,
aod::McParticles const& mcparticles,
aod::CollisionsEvSelRun2Cent const& allcollisions);
aod::CollisionsEvSelRun2Cent const& allcollisions,
DptDptFullTracksDetLevel const& alltracks);
PROCESS_SWITCH(DptDptFilter, processWithRun2CentGeneratorLevel, "Process generated with centrality", false);

void processWithoutCentGeneratorLevel(aod::McCollision const& mccollision,
soa::SmallGroups<soa::Join<aod::CollisionsEvSel, aod::McCollisionLabels>> const& collisions,
aod::McParticles const& mcparticles,
aod::CollisionsEvSel const& allcollisions);
aod::CollisionsEvSel const& allcollisions,
DptDptFullTracksDetLevel const& alltracks);
PROCESS_SWITCH(DptDptFilter, processWithoutCentGeneratorLevel, "Process generated without centrality", false);

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

template <typename CollisionsGroup, typename AllCollisions>
template <typename CollisionsGroup, typename AllCollisions, typename AllTracks>
void DptDptFilter::processGeneratorLevel(aod::McCollision const& mccollision,
CollisionsGroup const& collisions,
aod::McParticles const& mcparticles,
AllCollisions const& allcollisions,
AllTracks const& alltracks,
float defaultcent)
{
using namespace dptdptfilter;
Expand All @@ -928,6 +934,8 @@ void DptDptFilter::processGeneratorLevel(aod::McCollision const& mccollision,
if (tmpcollision.has_mcCollision()) {
if (tmpcollision.mcCollisionId() == mccollision.globalIndex()) {
typename AllCollisions::iterator const& collision = allcollisions.iteratorAt(tmpcollision.globalIndex());
auto collisionTracks = alltracks.sliceBy(perCollision, collision.globalIndex());
storeMultiplicitiesAndCentralities(collision, collisionTracks);
if (isEventSelected(collision, defaultcent)) {
if (processGenerated(mccollision, mcparticles, defaultcent)) {
fhTrueVertexZAA->Fill((mccollision.posZ()));
Expand All @@ -946,25 +954,28 @@ void DptDptFilter::processGeneratorLevel(aod::McCollision const& mccollision,
void DptDptFilter::processWithCentGeneratorLevel(aod::McCollision const& mccollision,
soa::SmallGroups<soa::Join<aod::CollisionsEvSelCent, aod::McCollisionLabels>> const& collisions,
aod::McParticles const& mcparticles,
aod::CollisionsEvSelCent const& allcollisions)
aod::CollisionsEvSelCent const& allcollisions,
DptDptFullTracksDetLevel const& alltracks)
{
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, 50.0);
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, alltracks, 50.0);
}

void DptDptFilter::processWithRun2CentGeneratorLevel(aod::McCollision const& mccollision,
soa::SmallGroups<soa::Join<aod::CollisionsEvSelRun2Cent, aod::McCollisionLabels>> const& collisions,
aod::McParticles const& mcparticles,
aod::CollisionsEvSelRun2Cent const& allcollisions)
aod::CollisionsEvSelRun2Cent const& allcollisions,
DptDptFullTracksDetLevel const& alltracks)
{
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, 50.0);
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, alltracks, 50.0);
}

void DptDptFilter::processWithoutCentGeneratorLevel(aod::McCollision const& mccollision,
soa::SmallGroups<soa::Join<aod::CollisionsEvSel, aod::McCollisionLabels>> const& collisions,
aod::McParticles const& mcparticles,
aod::CollisionsEvSel const& allcollisions)
aod::CollisionsEvSel const& allcollisions,
DptDptFullTracksDetLevel const& alltracks)
{
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, 50.0);
processGeneratorLevel(mccollision, collisions, mcparticles, allcollisions, alltracks, 50.0);
}

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

struct DptDptFilterTracks {

Produces<aod::ScannedTracks> scannedtracks;
Produces<aod::DptDptCFTracksInfo> tracksinfo;
Produces<aod::ScannedTrueTracks> scannedgentracks;
Expand Down
44 changes: 25 additions & 19 deletions PWGCF/TableProducer/dptDptFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -1287,17 +1287,21 @@ inline bool centralitySelection<aod::McCollision>(aod::McCollision const&, float
/// @brief evalues the exclusion formula for the current multiplicity / centrality parameters
/// @return true if the collision is not excluded according to the formula false otherwise
/// WARNING: it has always to be called after filling the multiplicity / centrality observables
/// NOTE: for MC generator level does nothing, as expected
template <typename CollisionObject>
inline bool isCollisionNotExcluded()
{
bool notExcluded = true;
if (useCentralityMultiplicityCorrelationsExclusion) {
[&]() {
/* set the formula parameter values */
for (size_t iPar = 0; iPar < observableIndexForCentralityMultiplicityParameter.size(); ++iPar) {
multiplicityCentralityCorrelationsExclusion->SetParameter(iPar, collisionMultiplicityCentralityObservables[observableIndexForCentralityMultiplicityParameter[iPar]]);
}
}();
notExcluded = multiplicityCentralityCorrelationsExclusion->Eval() != 0;
if constexpr (!framework::has_type_v<aod::mccollision::GeneratorsID, typename CollisionObject::all_columns>) {
if (useCentralityMultiplicityCorrelationsExclusion) {
[&]() {
/* set the formula parameter values */
for (size_t iPar = 0; iPar < observableIndexForCentralityMultiplicityParameter.size(); ++iPar) {
multiplicityCentralityCorrelationsExclusion->SetParameter(iPar, collisionMultiplicityCentralityObservables[observableIndexForCentralityMultiplicityParameter[iPar]]);
}
}();
notExcluded = multiplicityCentralityCorrelationsExclusion->Eval() != 0;
}
}
collisionFlags.set(CollSelMULTCORRELATIONS, notExcluded);
return notExcluded;
Expand Down Expand Up @@ -1405,20 +1409,22 @@ inline bool isEventSelected(CollisionObject const& collision, float& centormult)

bool trigsel = triggerSelection(collision);

bool rctsel = false;
/* run condition table information */
bool rctsel = true;
if (useRctInformation) {
if constexpr (framework::has_type_v<aod::evsel::Rct, typename CollisionObject::all_columns>) {
if (rctChecker.checkTable(collision)) {
rctsel = true;
collisionFlags.set(CollSelRCTBIT);
}
if constexpr (framework::has_type_v<aod::mccollision::GeneratorsID, typename CollisionObject::all_columns>) {
/* RCT condition not considered for generator level */
} else {
LOGF(fatal, "RCT check required but the dataset does not have RCT information associated. Please, fix it");
if constexpr (framework::has_type_v<aod::evsel::Rct, typename CollisionObject::all_columns>) {
if (!rctChecker.checkTable(collision)) {
rctsel = false;
}
} else {
LOGF(fatal, "RCT check required but the dataset does not have RCT information associated. Please, fix it");
}
}
} else {
collisionFlags.set(CollSelRCTBIT);
rctsel = true;
}
collisionFlags.set(CollSelRCTBIT, rctsel);

bool occupancysel = occupancySelection(collision);

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

bool centmultsel = centralitySelection(collision, centormult);

bool centmultexclusion = isCollisionNotExcluded();
bool centmultexclusion = isCollisionNotExcluded<CollisionObject>();

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

Expand Down
Loading