Skip to content
Merged
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
54 changes: 32 additions & 22 deletions PWGJE/TableProducer/mcOutlierRejector.cxx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.

Check failure on line 1 in PWGJE/TableProducer/mcOutlierRejector.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-task]

Specify task name only when it cannot be derived from the struct name. Only append to the default name.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
Expand Down Expand Up @@ -37,10 +37,14 @@

Configurable<bool> checkmcCollisionForCollision{"checkmcCollisionForCollision", true, "additionally reject collision based on mcCollision"};
Configurable<float> ptHatMax{"ptHatMax", 4.0, "maximum factor of pt hat the leading jet in the event is allowed"};
Configurable<float> ptTrackMaxMinBias{"ptTrackMaxMinBias", 20.0, "maximum pt for track originating from minimum bias event"};
Configurable<std::string> trackSelections{"trackSelections", "globalTracks", "set track selections"};

std::vector<bool> collisionFlag;
std::vector<bool> mcCollisionFlag;

int trackSelection = jetderiveddatautilities::initialiseTrackSelection(static_cast<std::string>(trackSelections));

void processSetupCollisionSelection(aod::JCollisions const& collisions)
{
collisionFlag.clear();
Expand All @@ -59,34 +63,40 @@
void collisionSelection(int32_t collisionIndex, int32_t mcCollisionId, T const& selectionObjects, float ptHard, std::vector<bool>& flagArray, std::optional<std::reference_wrapper<const soa::Join<aod::JetMcCollisions, aod::JMcCollisionPIs>>> mcCollisionsOpt = std::nullopt)
{
if (selectionObjects.size() != 0) {
bool isTrueOutlier = true;
float maxSelectionObjectPt = 0.0;
float selectionObjectPt = 0.0;
if constexpr (std::is_same_v<std::decay_t<T>, aod::JetTracksMCD> || std::is_same_v<std::decay_t<T>, aod::JetParticles>) {
for (auto selectionObject : selectionObjects) {

Check failure on line 68 in PWGJE/TableProducer/mcOutlierRejector.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
if (selectionObject.pt() > maxSelectionObjectPt) {
maxSelectionObjectPt = selectionObject.pt();
// may be slow - could save only MC particle then check difference only for tracks IDd as outliers?
if constexpr (std::is_same_v<std::decay_t<T>, aod::JetTracksMCD>) {
auto& mcCollisions = mcCollisionsOpt.value().get();
auto mcParticle = selectionObject.template mcParticle_as<soa::Join<aod::JetParticles, aod::JMcParticlePIs>>();
auto mcCollision = mcCollisions.sliceBy(perColParticle, mcParticle.mcCollisionId());
int subGenID = mcCollision.begin().subGeneratorId();
int diffCollisionID = mcParticle.mcCollisionId() - mcCollisionId;
if (subGenID != jetderiveddatautilities::JCollisionSubGeneratorId::mbGap &&
diffCollisionID != 0) {
isTrueOutlier = true;
} else {
isTrueOutlier = false;
selectionObjectPt = selectionObject.pt();
// may be slow - could save only MC particle then check difference only for tracks IDd as outliers?
if constexpr (std::is_same_v<std::decay_t<T>, aod::JetTracksMCD>) { // tracks
if (!jetderiveddatautilities::selectTrack(selectionObject, trackSelection)) {
continue;
}
auto& mcCollisions = mcCollisionsOpt.value().get();
auto mcParticle = selectionObject.template mcParticle_as<soa::Join<aod::JetParticles, aod::JMcParticlePIs>>();
auto mcCollision = mcCollisions.sliceBy(perColParticle, mcParticle.mcCollisionId());
int subGenID = mcCollision.begin().subGeneratorId();
int diffCollisionID = mcParticle.mcCollisionId() - mcCollisionId;
if (diffCollisionID != 0 &&
selectionObjectPt > ptHatMax * ptHard) {
if (subGenID != jetderiveddatautilities::JCollisionSubGeneratorId::mbGap && selectionObjectPt > ptHatMax * ptHard) {
flagArray[collisionIndex] = true;
}
if (subGenID == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap && selectionObjectPt > ptTrackMaxMinBias) {
flagArray[collisionIndex] = true;
}
}
} else { // particles
if (selectionObjectPt > ptHatMax * ptHard) {
flagArray[collisionIndex] = true;
}
}
}
} else {
maxSelectionObjectPt = selectionObjects.iteratorAt(0).pt();
}

if (maxSelectionObjectPt > ptHatMax * ptHard && isTrueOutlier) {
flagArray[collisionIndex] = true; // Currently if running multiple different jet finders, then a single type of jet can veto an event for others. Decide if this is the best way
} else { // jets
selectionObjectPt = selectionObjects.iteratorAt(0).pt();
if (selectionObjectPt > ptHatMax * ptHard) {
flagArray[collisionIndex] = true; // Currently if running multiple different jet finders, then a single type of jet can veto an event for others. Decide if this is the best way
}
}
}
}
Expand Down Expand Up @@ -155,4 +165,4 @@
PROCESS_SWITCH(McOutlierRejectorTask, processStoreMcCollisionDecision, "write out decision of rejecting mcCollision", true);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{adaptAnalysisTask<McOutlierRejectorTask>(cfgc, TaskName{"mc-outlier-rejector"})}; }

Check failure on line 168 in PWGJE/TableProducer/mcOutlierRejector.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-task]

Specified task name mc-outlier-rejector produces device name mc-outlier-rejector which does not match the device name mc-outlier-rejector-task from the struct name McOutlierRejectorTask. (Matching struct name McOutlierRejector)
Loading