Skip to content

Commit 809724b

Browse files
authored
[PWGLF] added function to compute 2d weights (#10646)
1 parent 14eb301 commit 809724b

File tree

1 file changed

+110
-202
lines changed

1 file changed

+110
-202
lines changed

PWGLF/Tasks/Strangeness/strangenessInJets.cxx

Lines changed: 110 additions & 202 deletions
Original file line numberDiff line numberDiff line change
@@ -1881,262 +1881,170 @@ struct StrangenessInJets {
18811881
}
18821882
PROCESS_SWITCH(StrangenessInJets, processMCefficiency, "Process MC Efficiency", false);
18831883

1884-
/*
18851884
void processGen(o2::aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles)
18861885
{
18871886
for (const auto& mccollision : mcCollisions) {
18881887

1889-
registryMC.fill(HIST("number_of_events_mc"), 3.5);
1890-
18911888
// Selection on z_{vertex}
1892-
if (std::fabs(mccollision.posZ()) > 10)
1889+
if (std::fabs(mccollision.posZ()) > 10.0)
18931890
continue;
1894-
registryMC.fill(HIST("number_of_events_mc"), 4.5);
18951891

18961892
// MC Particles per Collision
18971893
auto mcParticlesPerColl = mcParticles.sliceBy(perMCCollision, mccollision.globalIndex());
18981894

1899-
// List of Tracks
1900-
std::vector<TVector3> trk;
1901-
std::vector<int> ntrk;
1902-
1895+
// loop over generated MC particles
1896+
std::vector<fastjet::PseudoJet> fjParticles;
19031897
for (const auto& particle : mcParticlesPerColl) {
19041898

1905-
// Select Primary Particles
1906-
double dx = particle.vx() - mccollision.posX();
1907-
double dy = particle.vy() - mccollision.posY();
1908-
double dz = particle.vz() - mccollision.posZ();
1909-
double dcaxy = std::sqrt(dx * dx + dy * dy);
1910-
double dcaz = std::fabs(dz);
1911-
if (dcaxy > 0.25)
1912-
continue;
1913-
if (dcaz > 2.0)
1899+
if (!particle.isPhysicalPrimary())
19141900
continue;
19151901
if (std::fabs(particle.eta()) > 0.8)
19161902
continue;
1917-
if (particle.pt() < 0.15)
1903+
if (particle.pt() < 0.1)
19181904
continue;
19191905

1920-
// PDG Selection
1921-
int pdg = std::fabs(particle.pdgCode());
1922-
if ((pdg != 11) && (pdg != 211) && (pdg != 321) && (pdg != 2212))
1923-
continue;
1924-
1925-
TVector3 momentum(particle.px(), particle.py(), particle.pz());
1926-
trk.push_back(momentum);
1927-
ntrk.push_back(1);
1906+
// 4-momentum representation of a particle
1907+
double energy = std::sqrt(particle.p() * particle.p() + MassPionCharged * MassPionCharged);
1908+
fastjet::PseudoJet fourMomentum(particle.px(), particle.py(), particle.pz(), energy);
1909+
fjParticles.emplace_back(fourMomentum);
19281910
}
1911+
// reject empty events
1912+
if (fjParticles.size() < 1)
1913+
continue;
1914+
1915+
// cluster particles using the anti-kt algorithm
1916+
fastjet::JetDefinition jetDef(fastjet::antikt_algorithm, rJet);
1917+
fastjet::AreaDefinition areaDef(fastjet::active_area, fastjet::GhostedAreaSpec(1.0));
1918+
fastjet::ClusterSequenceArea cs(fjParticles, jetDef, areaDef);
1919+
std::vector<fastjet::PseudoJet> jets = fastjet::sorted_by_pt(cs.inclusive_jets());
1920+
auto [rhoPerp, rhoMPerp] = backgroundSub.estimateRhoPerpCone(fjParticles, jets);
19291921

1930-
// Anti-kt Jet Finder
1931-
int nParticlesRemoved(0);
1932-
std::vector<TVector3> jet;
1922+
// jet selection
1923+
bool isAtLeastOneJetSelected = false;
1924+
std::vector<TVector3> selectedJet;
19331925
std::vector<TVector3> ue1;
19341926
std::vector<TVector3> ue2;
1935-
std::vector<int> nParticlesInjet;
1936-
1937-
do {
1938-
double dijMin(1e+06), diBmin(1e+06);
1939-
int iMin(0), jMin(0), iBmin(0);
1940-
for (int i = 0; i < static_cast<int>(trk.size()); i++) {
1941-
if (trk[i].Mag() == 0)
1942-
continue;
1943-
double diB = 1.0 / (trk[i].Pt() * trk[i].Pt());
1944-
if (diB < diBmin) {
1945-
diBmin = diB;
1946-
iBmin = i;
1947-
}
1948-
for (int j = (i + 1); j < static_cast<int>(trk.size()); j++) {
1949-
if (trk[j].Mag() == 0)
1950-
continue;
1951-
double dij = calculateDij(trk[i], trk[j], rJet);
1952-
if (dij < dijMin) {
1953-
dijMin = dij;
1954-
iMin = i;
1955-
jMin = j;
1956-
}
1957-
}
1958-
}
1959-
if (dijMin < diBmin) {
1960-
trk[iMin] = trk[iMin] + trk[jMin];
1961-
ntrk[iMin] = ntrk[iMin] + ntrk[jMin];
1962-
trk[jMin].SetXYZ(0, 0, 0);
1963-
ntrk[jMin] = 0;
1964-
nParticlesRemoved++;
1965-
}
1966-
if (dijMin > diBmin) {
1967-
jet.push_back(trk[iBmin]);
1968-
nParticlesInjet.push_back(ntrk[iBmin]);
1969-
trk[iBmin].SetXYZ(0, 0, 0);
1970-
nParticlesRemoved++;
1971-
}
1972-
} while (nParticlesRemoved < static_cast<int>(trk.size()));
19731927

1974-
// Jet Selection
1975-
std::vector<int> isSelected;
1976-
int nJetsSelected(0);
1977-
for (int i = 0; i < static_cast<int>(jet.size()); i++) {
1928+
for (auto& jet : jets) { // o2-linter: disable=[const-ref-in-for-loop]
19781929

1979-
// Initialization
1980-
isSelected.push_back(0);
1981-
1982-
// Jet fully contained inside acceptance
1983-
if ((std::fabs(jet[i].Eta()) + rJet) > (etaMax - 0.5))
1930+
// jet must be fully contained in the acceptance
1931+
if ((std::fabs(jet.eta()) + rJet) > (etaMax - deltaEtaEdge))
19841932
continue;
1985-
if (nParticlesInjet[i] < 2)
1933+
1934+
// jet pt must be larger than threshold
1935+
fastjet::PseudoJet jetMinusBkg = backgroundSub.doRhoAreaSub(jet, rhoPerp, rhoMPerp);
1936+
if (getCorrectedPt(jetMinusBkg.pt()) < minJetPt)
19861937
continue;
1938+
isAtLeastOneJetSelected = true;
19871939

1988-
// Perpendicular cones
1940+
// perpendicular cone
1941+
TVector3 jetAxis(jet.px(), jet.py(), jet.pz());
19891942
TVector3 ueAxis1(0, 0, 0);
19901943
TVector3 ueAxis2(0, 0, 0);
1991-
getPerpendicularAxis(jet[i], ueAxis1, +1);
1992-
getPerpendicularAxis(jet[i], ueAxis2, -1);
1993-
ue1.push_back(ueAxis1);
1994-
ue2.push_back(ueAxis2);
1995-
1996-
double ptJetCorr = jet[i].Pt() - 0.5;
1997-
if (ptJetCorr < minJetPt)
1998-
continue;
1999-
2000-
nJetsSelected++;
2001-
isSelected[i] = 1;
1944+
getPerpendicularAxis(jetAxis, ueAxis1, +1);
1945+
getPerpendicularAxis(jetAxis, ueAxis2, -1);
1946+
selectedJet.emplace_back(jetAxis);
1947+
ue1.emplace_back(ueAxis1);
1948+
ue2.emplace_back(ueAxis2);
20021949
}
2003-
if (nJetsSelected == 0)
1950+
if (!isAtLeastOneJetSelected)
20041951
continue;
20051952

2006-
for (int i = 0; i < static_cast<int>(jet.size()); i++) {
2007-
2008-
if (isSelected[i] == 0)
2009-
continue;
2010-
2011-
// Generated Particles
1953+
// loop over selected jets / UE
1954+
for (int i = 0; i < static_cast<int>(selectedJet.size()); i++) {
20121955
for (const auto& particle : mcParticlesPerColl) {
20131956

20141957
if (!particle.isPhysicalPrimary())
20151958
continue;
1959+
if (std::fabs(particle.eta()) > 0.8)
1960+
continue;
1961+
if (particle.pt() < 0.1)
1962+
continue;
20161963

20171964
TVector3 particleDir(particle.px(), particle.py(), particle.pz());
2018-
const double deltaEtaJet = particleDir.Eta() - jet[i].Eta();
2019-
const double deltaPhiJet = getDeltaPhi(particleDir.Phi(), jet[i].Phi());
2020-
const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet);
2021-
const double deltaEtaUe1 = particleDir.Eta() - ue1[i].Eta();
2022-
const double deltaPhiUe1 = getDeltaPhi(particleDir.Phi(), ue1[i].Phi());
2023-
const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1);
2024-
const double deltaEtaUe2 = particleDir.Eta() - ue2[i].Eta();
2025-
const double deltaPhiUe2 = getDeltaPhi(particleDir.Phi(), ue2[i].Phi());
2026-
const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2);
2027-
2028-
switch (particle.pdgCode()) {
2029-
case 211:
2030-
if (deltaRjet < rJet) {
2031-
registryMC.fill(HIST("pi_plus_eta_pt_jet"), particle.pt(), particle.eta());
2032-
}
2033-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2034-
registryMC.fill(HIST("pi_plus_eta_pt_ue"), particle.pt(), particle.eta());
2035-
}
2036-
break;
2037-
case -211:
2038-
if (deltaRjet < rJet) {
2039-
registryMC.fill(HIST("pi_minus_eta_pt_jet"), particle.pt(), particle.eta());
2040-
}
2041-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2042-
registryMC.fill(HIST("pi_minus_eta_pt_ue"), particle.pt(), particle.eta());
2043-
}
2044-
break;
2045-
case 321:
2046-
if (deltaRjet < rJet) {
1965+
float deltaEtaJet = particleDir.Eta() - selectedJet[i].Eta();
1966+
float deltaPhiJet = getDeltaPhi(particleDir.Phi(), selectedJet[i].Phi());
1967+
float deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet);
1968+
float deltaEtaUe1 = particleDir.Eta() - ue1[i].Eta();
1969+
float deltaPhiUe1 = getDeltaPhi(particleDir.Phi(), ue1[i].Phi());
1970+
float deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1);
1971+
float deltaEtaUe2 = particleDir.Eta() - ue2[i].Eta();
1972+
float deltaPhiUe2 = getDeltaPhi(particleDir.Phi(), ue2[i].Phi());
1973+
float deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2);
1974+
1975+
// In jet
1976+
if (deltaRjet < rJet) {
1977+
switch (particle.pdgCode()) {
1978+
case 211:
20471979
registryMC.fill(HIST("pi_plus_eta_pt_jet"), particle.pt(), particle.eta());
2048-
}
2049-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2050-
registryMC.fill(HIST("pi_plus_eta_pt_ue"), particle.pt(), particle.eta());
2051-
}
2052-
break;
2053-
case -321:
2054-
if (deltaRjet < rJet) {
1980+
break;
1981+
case -211:
20551982
registryMC.fill(HIST("pi_minus_eta_pt_jet"), particle.pt(), particle.eta());
2056-
}
2057-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2058-
registryMC.fill(HIST("pi_minus_eta_pt_ue"), particle.pt(), particle.eta());
2059-
}
2060-
break;
2061-
case 2212:
2062-
if (deltaRjet < rJet) {
2063-
registryMC.fill(HIST("pi_plus_eta_pt_jet"), particle.pt(), particle.eta());
2064-
}
2065-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
1983+
break;
1984+
case 310:
1985+
registryMC.fill(HIST("K0s_eta_pt_jet"), particle.pt(), particle.eta());
1986+
break;
1987+
case 3122:
1988+
registryMC.fill(HIST("Lambda_eta_pt_jet"), particle.pt(), particle.eta());
1989+
break;
1990+
case -3122:
1991+
registryMC.fill(HIST("AntiLambda_eta_pt_jet"), particle.pt(), particle.eta());
1992+
break;
1993+
case 3312:
1994+
registryMC.fill(HIST("Xi_eta_pt_jet"), particle.pt(), particle.eta());
1995+
break;
1996+
case -3312:
1997+
registryMC.fill(HIST("AntiXi_eta_pt_jet"), particle.pt(), particle.eta());
1998+
break;
1999+
case 3334:
2000+
registryMC.fill(HIST("Omega_eta_pt_jet"), particle.pt(), particle.eta());
2001+
break;
2002+
case -3334:
2003+
registryMC.fill(HIST("AntiOmega_eta_pt_jet"), particle.pt(), particle.eta());
2004+
break;
2005+
default:
2006+
continue;
2007+
}
2008+
}
2009+
2010+
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2011+
switch (particle.pdgCode()) {
2012+
case 211:
20662013
registryMC.fill(HIST("pi_plus_eta_pt_ue"), particle.pt(), particle.eta());
2067-
}
2068-
break;
2069-
case -2212:
2070-
if (deltaRjet < rJet) {
2071-
registryMC.fill(HIST("pi_minus_eta_pt_jet"), particle.pt(), particle.eta());
2072-
}
2073-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2014+
break;
2015+
case -211:
20742016
registryMC.fill(HIST("pi_minus_eta_pt_ue"), particle.pt(), particle.eta());
2075-
}
2076-
break;
2077-
case 310:
2078-
if (deltaRjet < rJet) {
2079-
registryMC.fill(HIST("K0s_eta_pt_jet"), particle.pt(), particle.eta());
2080-
}
2081-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2017+
break;
2018+
case 310:
20822019
registryMC.fill(HIST("K0s_eta_pt_ue"), particle.pt(), particle.eta());
2083-
}
2084-
break;
2085-
case 3122:
2086-
if (deltaRjet < rJet) {
2087-
registryMC.fill(HIST("Lambda_eta_pt_jet"), particle.pt(), particle.eta());
2088-
}
2089-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2020+
break;
2021+
case 3122:
20902022
registryMC.fill(HIST("Lambda_eta_pt_ue"), particle.pt(), particle.eta());
2091-
}
2092-
break;
2093-
case -3122:
2094-
if (deltaRjet < rJet) {
2095-
registryMC.fill(HIST("AntiLambda_eta_pt_jet"), particle.pt(), particle.eta());
2096-
}
2097-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2023+
break;
2024+
case -3122:
20982025
registryMC.fill(HIST("AntiLambda_eta_pt_ue"), particle.pt(), particle.eta());
2099-
}
2100-
break;
2101-
case 3312:
2102-
if (deltaRjet < rJet) {
2103-
registryMC.fill(HIST("Xi_eta_pt_jet"), particle.pt(), particle.eta());
2104-
}
2105-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2026+
break;
2027+
case 3312:
21062028
registryMC.fill(HIST("Xi_eta_pt_ue"), particle.pt(), particle.eta());
2107-
}
2108-
break;
2109-
case -3312:
2110-
if (deltaRjet < rJet) {
2111-
registryMC.fill(HIST("AntiXi_eta_pt_jet"), particle.pt(), particle.eta());
2112-
}
2113-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2029+
break;
2030+
case -3312:
21142031
registryMC.fill(HIST("AntiXi_eta_pt_ue"), particle.pt(), particle.eta());
2115-
}
2116-
break;
2117-
case 3334:
2118-
if (deltaRjet < rJet) {
2119-
registryMC.fill(HIST("Omega_eta_pt_jet"), particle.pt(), particle.eta());
2120-
}
2121-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2032+
break;
2033+
case 3334:
21222034
registryMC.fill(HIST("Omega_eta_pt_ue"), particle.pt(), particle.eta());
2123-
}
2124-
break;
2125-
case -3334:
2126-
if (deltaRjet < rJet) {
2127-
registryMC.fill(HIST("AntiOmega_eta_pt_jet"), particle.pt(), particle.eta());
2128-
}
2129-
if (deltaRue1 < rJet || deltaRue2 < rJet) {
2035+
break;
2036+
case -3334:
21302037
registryMC.fill(HIST("AntiOmega_eta_pt_ue"), particle.pt(), particle.eta());
2131-
}
2132-
break;
2038+
break;
2039+
default:
2040+
continue;
2041+
}
21332042
}
21342043
}
21352044
}
21362045
}
21372046
}
21382047
PROCESS_SWITCH(StrangenessInJets, processGen, "Process generated MC", false);
2139-
*/
21402048
};
21412049

21422050
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)