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
159 changes: 98 additions & 61 deletions PWGJE/Tasks/jetHadronRecoil.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@
std::vector<double> dRBinning = {0.0, 1.0e-9, 0.003, 0.006, 0.009, 0.012, 0.015, 0.018, 0.021, 0.024,
0.027, 0.03, 0.033, 0.036, 0.039, 0.042, 0.045, 0.048, 0.051, 0.054,
0.057, 0.06, 0.063, 0.066, 0.069, 0.072, 0.075, 0.078, 0.081, 0.084,
0.087, 0.09, 0.093, 0.096, 0.099, 0.102, 0.105, 0.108, 0.111, 0.114,

Check failure on line 105 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-mass]

Avoid hard-coded particle masses. Use o2::constants::physics::Mass... instead.
0.117, 0.12, 0.123, 0.126, 0.129, 0.132, 0.135, 0.138, 0.141, 0.144,
0.147, 0.15, 0.153, 0.156, 0.159, 0.162, 0.165, 0.168, 0.171, 0.174,
0.177, 0.18, 0.183, 0.186, 0.189, 0.192, 0.195, 0.198, 0.201, 0.204,
Expand Down Expand Up @@ -281,7 +281,7 @@
registry.fill(HIST("hNtrig"), 0.5, weight);
registry.fill(HIST("hRefEventTriggers"), nTT, weight);
registry.fill(HIST("hRhoReference"), rhoReference, weight);
for (double shift = 0.0; shift <= 2.0; shift += 0.1) {

Check failure on line 284 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hRhoReferenceShift"), rho + shift, shift, weight);
}
registry.fill(HIST("hReferenceTriggersPtHard"), ptTT / pTHat, weight);
Expand Down Expand Up @@ -316,31 +316,31 @@
float dphi = RecoDecay::constrainAngle(jet.phi() - phiTT);
double dR = getWTAaxisDifference(jet, tracks);
if (isSigCol) {
if (std::abs(dphi - o2::constants::math::PI) < 0.6) {

Check failure on line 319 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hDeltaRpTSignal"), jet.pt() - (rho * jet.area()), dR, weight);
registry.fill(HIST("hDeltaRSignal"), dR, weight);
}
registry.fill(HIST("hDeltaRpTDPhiSignal"), jet.pt() - (rho * jet.area()), dphi, dR, weight);
registry.fill(HIST("hSignalPtDPhi"), dphi, jet.pt() - (rho * jet.area()), weight);
if (std::abs(dphi - o2::constants::math::PI) < 0.6) {

Check failure on line 325 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hSignalPt"), jet.pt() - (rho * jet.area()), weight);
registry.fill(HIST("hSignalPtHard"), jet.pt() - (rho * jet.area()), ptTT / pTHat, weight);
}
}
if (!isSigCol) {
if (std::abs(dphi - o2::constants::math::PI) < 0.6) {

Check failure on line 331 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hDeltaRpTReference"), jet.pt() - (rhoReference * jet.area()), dR, weight);
registry.fill(HIST("hDeltaRReference"), dR, weight);
}
registry.fill(HIST("hDeltaRpTDPhiReference"), jet.pt() - (rhoReference * jet.area()), dphi, dR, weight);
for (double shift = 0.0; shift <= 2.0; shift += 0.1) {

Check failure on line 336 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hDeltaRpTDPhiReferenceShifts"), jet.pt() - ((rho + shift) * jet.area()), dphi, dR, shift, weight);
}
registry.fill(HIST("hReferencePtDPhi"), dphi, jet.pt() - (rhoReference * jet.area()), weight);
for (double shift = 0.0; shift <= 2.0; shift += 0.1) {

Check failure on line 340 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hReferencePtDPhiShifts"), dphi, jet.pt() - ((rho + shift) * jet.area()), shift, weight);
}
if (std::abs(dphi - o2::constants::math::PI) < 0.6) {

Check failure on line 343 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hReferencePt"), jet.pt() - (rhoReference * jet.area()), weight);
registry.fill(HIST("hReferencePtHard"), jet.pt() - (rhoReference * jet.area()), ptTT / pTHat, weight);
}
Expand Down Expand Up @@ -423,7 +423,7 @@
registry.fill(HIST("hNtrig"), 0.5, weight);
registry.fill(HIST("hRefEventTriggers"), nTT, weight);
registry.fill(HIST("hRhoReference"), rhoReference, weight);
for (double shift = 0.0; shift <= 2.0; shift += 0.1) {

Check failure on line 426 in PWGJE/Tasks/jetHadronRecoil.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
registry.fill(HIST("hRhoReferenceShift"), rho + shift, shift, weight);
}
registry.fill(HIST("hReferenceTriggersPtHard"), ptTT / pTHat, weight);
Expand Down Expand Up @@ -655,29 +655,20 @@
}

template <typename T, typename U, typename X, typename Y>
void fillRecoilJetMatchedHistograms(T const& jetsBase, U const&, X const& tracks, Y const& particles, float weight = 1.0, float rho = 0.0, float pTHat = 999.0)
void fillRecoilJetMatchedHistograms(T const&, U const& jetsTag, X const& tracks, Y const& particles, float weight = 1.0, float rho = 0.0, float pTHat = 999.0)
{
std::vector<double> phiTTAr;
std::vector<double> phiTTArPart;
double phiTT = 0;
double phiTTPart = 0;
int nTT = 0;

for (const auto& track : tracks) {
if (!track.has_mcParticle()) {
continue;
}
if (!jetderiveddatautilities::selectTrack(track, trackSelection)) {
continue;
}
if (track.pt() > pTHatTrackMaxMCD * pTHat) {
for (const auto& particle : particles) {
if (particle.pt() > pTHatTrackMaxMCP * pTHat) {
if (outlierRejectEvent) {
return;
} else {
continue;
}
}
auto particle = track.template mcParticle_as<Y>();
auto pdgParticle = pdg->GetParticle(particle.pdgCode());
if (!pdgParticle) {
continue;
Expand All @@ -687,44 +678,42 @@
}
if (particle.pt() < ptTTsigMax && particle.pt() > ptTTsigMin) {
nTT++;
phiTTAr.push_back(track.phi());
phiTTArPart.push_back(particle.phi());
phiTTAr.push_back(particle.phi());
}
}

if (nTT > 0) {
int trigNumber = rand->Integer(nTT);
phiTT = phiTTAr[trigNumber];
phiTTPart = phiTTArPart[trigNumber];
} else {
return;
}

for (const auto& jetBase : jetsBase) {
for (const auto& jetTag : jetsTag) {

if (jetBase.pt() > pTHatMaxMCD * pTHat) {
if (jetTag.pt() > pTHatMaxMCP * pTHat) {
if (outlierRejectEvent) {
return;
} else {
continue;
}
}

float dphi = RecoDecay::constrainAngle(jetBase.phi() - phiTT);
double dR = getWTAaxisDifference(jetBase, tracks);
float dphip = RecoDecay::constrainAngle(jetTag.phi() - phiTT);
double dRp = getWTAaxisDifference(jetTag, particles);

if (jetBase.has_matchedJetGeo()) {
for (const auto& jetTag : jetBase.template matchedJetGeo_as<std::decay_t<U>>()) {
if (jetTag.pt() > pTHatMaxMCP * pTHat) {
if (jetTag.has_matchedJetGeo()) {
for (const auto& jetBase : jetTag.template matchedJetGeo_as<std::decay_t<T>>()) {
if (jetBase.pt() > pTHatMaxMCD * pTHat) {
if (outlierRejectEvent) {
return;
} else {
continue;
}
}

float dphip = RecoDecay::constrainAngle(jetTag.phi() - phiTTPart);
double dRp = getWTAaxisDifference(jetTag, particles);
float dphi = RecoDecay::constrainAngle(jetBase.phi() - phiTT);
double dR = getWTAaxisDifference(jetBase, tracks);
registry.fill(HIST("hPhiMatched"), dphi, dphip, weight);
registry.fill(HIST("hPhiMatched2d"), jetTag.phi(), jetTag.pt(), weight);
registry.fill(HIST("hPhiResolution"), jetTag.pt(), dphip - dphi, weight);
Expand Down Expand Up @@ -872,39 +861,63 @@
}
PROCESS_SWITCH(JetHadronRecoil, processMCDWeightedWithRhoSubtraction, "process MC detector level with event weights and rho subtraction", false);

void processMCP(aod::JetMcCollision const& collision,
void processMCP(aod::JetMcCollision const& mccollision,
soa::SmallGroups<aod::JetCollisionsMCD> const& collisions,
soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents>> const& jets,
soa::Filtered<aod::JetParticles> const& particles)
{
if (std::abs(collision.posZ()) > vertexZCut) {
if (std::abs(mccollision.posZ()) > vertexZCut) {
return;
}
if (skipMBGapEvents && collision.subGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
if (skipMBGapEvents && mccollision.subGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
return;
}
if (collision.ptHard() < pTHatMinEvent) {
if (mccollision.ptHard() < pTHatMinEvent) {
return;
}
registry.fill(HIST("hZvtxSelected"), collision.posZ());
fillMCPHistograms(jets, particles, 1.0, collision.ptHard());
if (collisions.size() < 1) {
return;
}
for (auto const& collision : collisions) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
return;
}
if (!jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
return;
}
}
registry.fill(HIST("hZvtxSelected"), mccollision.posZ());
fillMCPHistograms(jets, particles, 1.0, mccollision.ptHard());
}
PROCESS_SWITCH(JetHadronRecoil, processMCP, "process MC particle level", false);

void processMCPWeighted(aod::JetMcCollision const& collision,
void processMCPWeighted(aod::JetMcCollision const& mccollision,
soa::SmallGroups<aod::JetCollisionsMCD> const& collisions,
soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents>> const& jets,
soa::Filtered<aod::JetParticles> const& particles)
{
if (std::abs(collision.posZ()) > vertexZCut) {
if (std::abs(mccollision.posZ()) > vertexZCut) {
return;
}
if (skipMBGapEvents && collision.subGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
if (skipMBGapEvents && mccollision.subGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
return;
}
if (collision.ptHard() < pTHatMinEvent) {
if (mccollision.ptHard() < pTHatMinEvent) {
return;
}
registry.fill(HIST("hZvtxSelected"), collision.posZ(), collision.weight());
fillMCPHistograms(jets, particles, collision.weight(), collision.ptHard());
if (collisions.size() < 1) {
return;
}
for (auto const& collision : collisions) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
return;
}
if (!jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
return;
}
}
registry.fill(HIST("hZvtxSelected"), mccollision.posZ(), mccollision.weight());
fillMCPHistograms(jets, particles, mccollision.weight(), mccollision.ptHard());
}
PROCESS_SWITCH(JetHadronRecoil, processMCPWeighted, "process MC particle level with event weights", false);

Expand Down Expand Up @@ -1004,75 +1017,99 @@
}
PROCESS_SWITCH(JetHadronRecoil, processJetsMCPMCDMatchedWeightedWithRhoSubtraction, "process MC matched with event weights (inc jets) and rho subtraction", false);

void processRecoilJetsMCPMCDMatched(soa::Filtered<soa::Join<aod::JetCollisionsMCD, aod::JMcCollisionLbs>>::iterator const& collision,
void processRecoilJetsMCPMCDMatched(aod::JetMcCollisions::iterator const& mccollision,
soa::SmallGroups<aod::JetCollisionsMCD> const& collisions,
soa::Filtered<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets>> const& mcdjets,
soa::Filtered<aod::JetTracksMCD> const& tracks,
soa::Filtered<aod::JetParticles> const& particles,
aod::JetMcCollisions const&,
soa::Filtered<aod::JetTracksMCD> const& tracks,
soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const& mcpjets)
{
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
if (std::abs(mccollision.posZ()) > vertexZCut) {
return;
}
if (!jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
if (skipMBGapEvents && mccollision.subGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
return;
}
if (!collision.has_mcCollision()) {
if (mccollision.ptHard() < pTHatMinEvent) {
return;
}
if (collision.mcCollision().ptHard() < pTHatMinEvent) {
if (collisions.size() < 1) {
return;
}
registry.fill(HIST("hZvtxSelected"), collision.posZ());
fillRecoilJetMatchedHistograms(mcdjets, mcpjets, tracks, particles, 1.0, 0.0, collision.mcCollision().ptHard());
for (auto const& collision : collisions) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
return;
}
if (!jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
return;
}
}
registry.fill(HIST("hZvtxSelected"), mccollision.posZ(), mccollision.weight());
fillRecoilJetMatchedHistograms(mcdjets, mcpjets, tracks, particles, 1.0, 0.0, mccollision.ptHard());
}
PROCESS_SWITCH(JetHadronRecoil, processRecoilJetsMCPMCDMatched, "process MC matched (recoil jets)", false);

void processRecoilJetsMCPMCDMatchedWeighted(soa::Filtered<soa::Join<aod::JetCollisionsMCD, aod::JMcCollisionLbs>>::iterator const& collision,
void processRecoilJetsMCPMCDMatchedWeighted(aod::JetMcCollisions::iterator const& mccollision,
soa::SmallGroups<aod::JetCollisionsMCD> const& collisions,
soa::Filtered<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets>> const& mcdjets,
soa::Filtered<aod::JetTracksMCD> const& tracks,
soa::Filtered<aod::JetParticles> const& particles,
aod::JetMcCollisions const&,
soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const& mcpjets)
{
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
if (std::abs(mccollision.posZ()) > vertexZCut) {
return;
}
if (!jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
if (skipMBGapEvents && mccollision.subGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
return;
}
if (!collision.has_mcCollision()) {
if (mccollision.ptHard() < pTHatMinEvent) {
return;
}
if (collision.mcCollision().ptHard() < pTHatMinEvent) {
if (collisions.size() < 1) {
return;
}
registry.fill(HIST("hZvtxSelected"), collision.posZ());
fillRecoilJetMatchedHistograms(mcdjets, mcpjets, tracks, particles, collision.mcCollision().weight(), 0.0, collision.mcCollision().ptHard());
for (auto const& collision : collisions) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
return;
}
if (!jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
return;
}
}
registry.fill(HIST("hZvtxSelected"), mccollision.posZ(), mccollision.weight());
fillRecoilJetMatchedHistograms(mcdjets, mcpjets, tracks, particles, mccollision.weight(), 0.0, mccollision.ptHard());
}
PROCESS_SWITCH(JetHadronRecoil, processRecoilJetsMCPMCDMatchedWeighted, "process MC matched with event weights (recoil jets)", false);

void processRecoilJetsMCPMCDMatchedWeightedWithRhoSubtraction(soa::Filtered<soa::Join<aod::JetCollisionsMCD, aod::JMcCollisionLbs, aod::BkgChargedRhos>>::iterator const& collision,
void processRecoilJetsMCPMCDMatchedWeightedWithRhoSubtraction(soa::Join<aod::JetMcCollisions, aod::BkgChargedRhos>::iterator const& mccollision,
soa::SmallGroups<aod::JetCollisionsMCD> const& collisions,
soa::Filtered<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets>> const& mcdjets,
soa::Filtered<aod::JetTracksMCD> const& tracks,
soa::Filtered<aod::JetParticles> const& particles,
aod::JetMcCollisions const&,
soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const& mcpjets)
{
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
if (std::abs(mccollision.posZ()) > vertexZCut) {
return;
}
if (!jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
if (skipMBGapEvents && mccollision.subGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
return;
}
if (!collision.has_mcCollision()) {
if (mccollision.ptHard() < pTHatMinEvent) {
return;
}
if (collision.mcCollision().ptHard() < pTHatMinEvent) {
if (collisions.size() < 1) {
return;
}
registry.fill(HIST("hZvtxSelected"), collision.posZ());
fillRecoilJetMatchedHistograms(mcdjets, mcpjets, tracks, particles, collision.mcCollision().weight(), collision.rho(), collision.mcCollision().ptHard());
for (auto const& collision : collisions) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
return;
}
if (!jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
return;
}
}
registry.fill(HIST("hZvtxSelected"), mccollision.posZ(), mccollision.weight());
fillRecoilJetMatchedHistograms(mcdjets, mcpjets, tracks, particles, mccollision.weight(), mccollision.rho(), mccollision.ptHard());
}
PROCESS_SWITCH(JetHadronRecoil, processRecoilJetsMCPMCDMatchedWeightedWithRhoSubtraction, "process MC matched with event weights (recoil jets) and rho subtraction", false);

Expand All @@ -1083,7 +1120,7 @@
double deltaY = -1;
double dR = -1;
jetConstituents.clear();
for (auto& jetConstituent : jet.template tracks_as<X>()) {

Check failure on line 1123 in PWGJE/Tasks/jetHadronRecoil.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.
fastjetutilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex());
}
jetReclustered.clear();
Expand Down
Loading