@@ -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
21422050WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments