From 012ad2c9051805276be9cc77946174767a225504 Mon Sep 17 00:00:00 2001 From: Connor Moore Date: Wed, 7 Jun 2023 18:23:36 +0200 Subject: [PATCH 1/8] Begin adding SoftDrop --- src/_ext.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/_ext.cpp b/src/_ext.cpp index b30d4954..1092d749 100644 --- a/src/_ext.cpp +++ b/src/_ext.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include From 734c27f37df7f9d712375ee3b5c84bff1a5f14b1 Mon Sep 17 00:00:00 2001 From: Connor Moore Date: Wed, 7 Jun 2023 20:25:19 +0200 Subject: [PATCH 2/8] 6-7 checkpoint --- src/_ext.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/_ext.cpp b/src/_ext.cpp index 1092d749..01bbdf42 100644 --- a/src/_ext.cpp +++ b/src/_ext.cpp @@ -112,6 +112,21 @@ PYBIND11_MODULE(_ext, m) { py::return_value_policy::take_ownership); /// Jet algorithm definitions + py::enum_(m, "SymmetryMeasure") + .value("scalar_z", scalar_z) + .value("vector_z", vector_z) + .value("y", y) + .value("theta_E", theta_E) + .value("cos_theta_E", cos_theta_E) + .export_values(); + + py::enum_(m, "RecursionChoice") + .value("larger_pt", larger_pt) + .value("larger_mt", larger_mt) + .value("larger_m", larger_m) + .value("larger_E", larger_E) + .export_values(); + py::class_(m, "output_wrapper") .def_property("cse", &output_wrapper::getCluster,&output_wrapper::setCluster) .def("to_numpy", @@ -1582,6 +1597,17 @@ PYBIND11_MODULE(_ext, m) { Returns: pt, eta, phi, m of inclusive jets. )pbdoc") + .def("to_numpy_softdrop_pruning", + [](const output_wrapper ow, double beta = 0, double symmetry_cut = 0.1, SymmetryMeasure symmetry_measure, double R0 = 0.8, double mu_cut = std::numeric_limits::infinity(), RecursionChoice recuriosn_choice = larger_pt, const FunctionOfPseudoJet * subtractor = 0){ + auto css = ow.cse; + int64_t len = css.size(); + + fastjet::contrib::SoftDrop sd(beta, symmetry_cut, R0); + + for (unsigned int i = 0; i < css.size(); i++){ + fastjet::PseudoJet sd_jet = sd(css[i]); + } + }) .def("to_numpy_energy_correlators", [](const output_wrapper ow, const int n_jets = 1, const double beta = 1, double npoint = 0, int angles = 0, double alpha = 0, std::string func = "generalized", bool normalized = true) { auto css = ow.cse; From 7c0abffaddf860872aa43d57ebf78e3dec1038f0 Mon Sep 17 00:00:00 2001 From: Connor Moore Date: Mon, 12 Jun 2023 23:36:59 +0200 Subject: [PATCH 3/8] Cleaned unused variables, further SD work --- src/_ext.cpp | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/_ext.cpp b/src/_ext.cpp index 01bbdf42..d2dae5f3 100644 --- a/src/_ext.cpp +++ b/src/_ext.cpp @@ -112,21 +112,6 @@ PYBIND11_MODULE(_ext, m) { py::return_value_policy::take_ownership); /// Jet algorithm definitions - py::enum_(m, "SymmetryMeasure") - .value("scalar_z", scalar_z) - .value("vector_z", vector_z) - .value("y", y) - .value("theta_E", theta_E) - .value("cos_theta_E", cos_theta_E) - .export_values(); - - py::enum_(m, "RecursionChoice") - .value("larger_pt", larger_pt) - .value("larger_mt", larger_mt) - .value("larger_m", larger_m) - .value("larger_E", larger_E) - .export_values(); - py::class_(m, "output_wrapper") .def_property("cse", &output_wrapper::getCluster,&output_wrapper::setCluster) .def("to_numpy", @@ -1598,20 +1583,27 @@ PYBIND11_MODULE(_ext, m) { pt, eta, phi, m of inclusive jets. )pbdoc") .def("to_numpy_softdrop_pruning", - [](const output_wrapper ow, double beta = 0, double symmetry_cut = 0.1, SymmetryMeasure symmetry_measure, double R0 = 0.8, double mu_cut = std::numeric_limits::infinity(), RecursionChoice recuriosn_choice = larger_pt, const FunctionOfPseudoJet * subtractor = 0){ + [](const output_wrapper ow, const int n_jets = 1, fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure symmetry_measure, + double beta = 0, double symmetry_cut = 0.1, double R0 = 0.8){ + auto css = ow.cse; - int64_t len = css.size(); - fastjet::contrib::SoftDrop sd(beta, symmetry_cut, R0); + std::vector groomed; + symmetry_measure = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::scalar_z; + fastjet::contrib::SoftDrop* sd = new fastjet::contrib::SoftDrop(beta, symmetry_cut, symmetry_measure, R0); - for (unsigned int i = 0; i < css.size(); i++){ - fastjet::PseudoJet sd_jet = sd(css[i]); + for (unsigned int i = 0; i < css.size(); i++){ // iterate through events + auto jets = css[i]->exclusive_jets(n_jets); + for (unsigned int j = 0; j < jets.size(); j++){ + auto soft = sd->result(jets[j]); // + groomed.push_back(soft.pt()); + } } + return 0; }) .def("to_numpy_energy_correlators", [](const output_wrapper ow, const int n_jets = 1, const double beta = 1, double npoint = 0, int angles = 0, double alpha = 0, std::string func = "generalized", bool normalized = true) { auto css = ow.cse; - int64_t len = css.size(); std::transform(func.begin(), func.end(), func.begin(), [](unsigned char c){ return std::tolower(c); }); @@ -1659,7 +1651,6 @@ PYBIND11_MODULE(_ext, m) { for (unsigned int i = 0; i < css.size(); i++){ // iterate through events auto jets = css[i]->exclusive_jets(n_jets); - int size = css[i]->exclusive_jets(n_jets).size(); for (unsigned int j = 0; j < jets.size(); j++){ auto ecf_result = energy_correlator->result(jets[j]); // @@ -1710,14 +1701,12 @@ PYBIND11_MODULE(_ext, m) { int *ptrjetoffsets = (int *)bufjetoffsets.ptr; size_t jetidx = 0; - size_t idxh = 0; ptrjetoffsets[jetidx] = 0; jetidx++; auto eventprev = 0; for (unsigned int i = 0; i < css.size(); i++){ // iterate through events auto jets = css[i]->exclusive_jets(n_jets); - int size = css[i]->exclusive_jets(n_jets).size(); auto prev = ptrjetoffsets[jetidx-1]; for (unsigned int j = 0; j < jets.size(); j++){ From e427e21de9e3dd6deb29fe079f9a5f4d93ca3975 Mon Sep 17 00:00:00 2001 From: Connor Moore Date: Tue, 13 Jun 2023 05:58:36 +0200 Subject: [PATCH 4/8] finish adding arguments --- src/_ext.cpp | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/_ext.cpp b/src/_ext.cpp index d2dae5f3..1803c847 100644 --- a/src/_ext.cpp +++ b/src/_ext.cpp @@ -1583,14 +1583,45 @@ PYBIND11_MODULE(_ext, m) { pt, eta, phi, m of inclusive jets. )pbdoc") .def("to_numpy_softdrop_pruning", - [](const output_wrapper ow, const int n_jets = 1, fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure symmetry_measure, - double beta = 0, double symmetry_cut = 0.1, double R0 = 0.8){ + [](const output_wrapper ow, const int n_jets = 1, double beta = 0, double symmetry_cut = 0.1, + std::string symmetry_measure = "scalar_z", double R0 = 0.8, std::string recursion_choice = "larger_pt", + const FunctionOfPseudoJet * subtractor = 0, double mu_cut = std::numeric_limits::infinity()){ auto css = ow.cse; - std::vector groomed; - symmetry_measure = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::scalar_z; - fastjet::contrib::SoftDrop* sd = new fastjet::contrib::SoftDrop(beta, symmetry_cut, symmetry_measure, R0); + + fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure sym_meas; + if (symmetry_measure == "scalar_z") { + sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::scalar_z; + } + else if (symmetry_measure == "vector_z") { + sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::vector_z; + } + else if (symmetry_measure == "y") { + sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::y; + } + else if (symmetry_measure == "theta_E") { + sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::theta_E; + } + else if (symmetry_measure == "cos_theta_E") { + sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::cos_theta_E; + } + + fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice rec_choice; + if (recursion_choice == "larger_pt") { + rec_choice = fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice::larger_pt; + } + else if (recursion_choice == "larger_mt") { + rec_choice = fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice::larger_mt; + } + else if (recursion_choice == "larger_m") { + rec_choice = fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice::larger_m; + } + else if (recursion_choice == "larger_E") { + rec_choice = fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice::larger_E; + } + + fastjet::contrib::SoftDrop* sd = new fastjet::contrib::SoftDrop(beta, symmetry_cut, sym_meas, R0, mu_cut, rec_choice, subtractor); for (unsigned int i = 0; i < css.size(); i++){ // iterate through events auto jets = css[i]->exclusive_jets(n_jets); From 37c9dcad86604ef24804596b3f17dad20aefa483 Mon Sep 17 00:00:00 2001 From: Connor Moore Date: Wed, 14 Jun 2023 21:56:06 +0200 Subject: [PATCH 5/8] update-jun14 --- src/_ext.cpp | 75 ++++++++++++++++++++++++++++++------ src/fastjet/__init__.py | 25 ++++++++++++ src/fastjet/_generalevent.py | 17 ++++++++ src/fastjet/_multievent.py | 25 ++++++++++++ src/fastjet/_pyjet.py | 10 +++++ src/fastjet/_singleevent.py | 15 ++++++++ 6 files changed, 156 insertions(+), 11 deletions(-) diff --git a/src/_ext.cpp b/src/_ext.cpp index 1803c847..9dbd6798 100644 --- a/src/_ext.cpp +++ b/src/_ext.cpp @@ -22,6 +22,8 @@ #include #include +#include + namespace fj = fastjet; namespace py = pybind11; using namespace pybind11::literals; @@ -1582,15 +1584,23 @@ PYBIND11_MODULE(_ext, m) { Returns: pt, eta, phi, m of inclusive jets. )pbdoc") - .def("to_numpy_softdrop_pruning", + .def("to_numpy_softdrop_grooming", [](const output_wrapper ow, const int n_jets = 1, double beta = 0, double symmetry_cut = 0.1, std::string symmetry_measure = "scalar_z", double R0 = 0.8, std::string recursion_choice = "larger_pt", - const FunctionOfPseudoJet * subtractor = 0, double mu_cut = std::numeric_limits::infinity()){ + /*const FunctionOfPseudoJet * subtractor = 0,*/ double mu_cut = std::numeric_limits::infinity()){ auto css = ow.cse; - std::vector groomed; - - fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure sym_meas; + std::vector consts_groomed_px; + std::vector consts_groomed_py; + std::vector consts_groomed_pz; + std::vector consts_groomed_E; + std::vector nconstituents; + /*std::vector jet_groomed_pt; + std::vector jet_groomed_eta; + std::vector jet_groomed_phi; + std::vector jet_groomed_m;*/ + + fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::scalar_z; if (symmetry_measure == "scalar_z") { sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::scalar_z; } @@ -1607,7 +1617,7 @@ PYBIND11_MODULE(_ext, m) { sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::cos_theta_E; } - fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice rec_choice; + fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice rec_choice = fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice::larger_pt; if (recursion_choice == "larger_pt") { rec_choice = fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice::larger_pt; } @@ -1621,17 +1631,60 @@ PYBIND11_MODULE(_ext, m) { rec_choice = fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice::larger_E; } - fastjet::contrib::SoftDrop* sd = new fastjet::contrib::SoftDrop(beta, symmetry_cut, sym_meas, R0, mu_cut, rec_choice, subtractor); + fastjet::contrib::SoftDrop* sd = new fastjet::contrib::SoftDrop(beta, symmetry_cut, sym_meas, R0, mu_cut, rec_choice/*, subtractor*/); for (unsigned int i = 0; i < css.size(); i++){ // iterate through events auto jets = css[i]->exclusive_jets(n_jets); for (unsigned int j = 0; j < jets.size(); j++){ - auto soft = sd->result(jets[j]); // - groomed.push_back(soft.pt()); + auto soft = sd->result(jets[j]); + nconstituents.push_back(soft.constituents().size()); + /*jet_groomed_pt.push_back(soft.pt()); + jet_groomed_eta.push_back(soft.eta()); + jet_groomed_phi.push_back(soft.phi()); + jet_groomed_m.push_back(soft.m());*/ + for (unsigned int k = 0; k < soft.constituents().size(); k++){ + consts_groomed_px.push_back(soft.constituents()[k].px()); + consts_groomed_py.push_back(soft.constituents()[k].py()); + consts_groomed_pz.push_back(soft.constituents()[k].pz()); + consts_groomed_E.push_back(soft.constituents()[k].E()); + } } } - return 0; - }) + + auto consts_px = py::array(consts_groomed_px.size(), consts_groomed_px.data()); + auto consts_py = py::array(consts_groomed_py.size(), consts_groomed_py.data()); + auto consts_pz = py::array(consts_groomed_pz.size(), consts_groomed_pz.data()); + auto consts_E = py::array(consts_groomed_E.size(), consts_groomed_E.data()); + auto eventsize = py::array(nconstituents.size(), nconstituents.data()); + /*auto jet_pt = py::array(jet_groomed_pt.size(), jet_groomed_pt.data()); + auto jet_eta = py::array(jet_groomed_eta.size(), jet_groomed_eta.data()); + auto jet_phi = py::array(jet_groomed_phi.size(), jet_groomed_phi.data()); + auto jet_m = py::array(jet_groomed_m.size(), jet_groomed_m.data());*/ + + return std::make_tuple( + consts_px, + consts_py, + consts_pz, + consts_E, + eventsize + /*jet_pt, + jet_eta, + jet_phi, + jet_m*/ + ); + }, R"pbdoc( + Performs softdrop pruning on jets. + Args: + n_jets: number of exclusive subjets. + beta: softdrop beta parameter. + symmetry_cut: softdrop symmetry cut value. + symmetry_measure: Which symmetry measure to use, found in RecursiveSymmetryCutBase.hh + R0: softdrop R0 parameter. + recursion_choice: Which recursion choice to use, found in RecursiveSymmetryCutBase.hh + subtractor: an optional pointer to a pileup subtractor (ignored if zero) + Returns: + Returns an array of values from the jet after it has been groomed by softdrop. + )pbdoc") .def("to_numpy_energy_correlators", [](const output_wrapper ow, const int n_jets = 1, const double beta = 1, double npoint = 0, int angles = 0, double alpha = 0, std::string func = "generalized", bool normalized = true) { auto css = ow.cse; diff --git a/src/fastjet/__init__.py b/src/fastjet/__init__.py index 33732018..6ccb9579 100644 --- a/src/fastjet/__init__.py +++ b/src/fastjet/__init__.py @@ -354,6 +354,30 @@ def exclusive_jets_constituents(self, njets: int = 10) -> ak.Array: """ raise AssertionError() + + def exclusive_jets_softdrop_grooming( + self, + njets: int = 1, + beta: int = 0, + symmetry_cut: float = 0.1, + symmetry_measure="scalar_z", + R0: float = 0.8, + recursion_choice="larger_pt", + #subtractor: int = 0, + mu_cut: float = float('inf'), + ) -> ak.Array: + """Performs softdrop pruning on jets. + Args: + n_jets: number of exclusive subjets. + beta: softdrop beta parameter. + symmetry_cut: softdrop symmetry cut value. + symmetry_measure: Which symmetry measure to use, found in RecursiveSymmetryCutBase.hh + R0: softdrop R0 parameter. + recursion_choice: Which recursion choice to use, found in RecursiveSymmetryCutBase.hh + subtractor: an optional pointer to a pileup subtractor (ignored if zero) + Returns: + Returns an array of values from the jet after it has been groomed by softdrop.""" + raise AssertionError() def exclusive_jets_energy_correlator( self, @@ -376,6 +400,7 @@ def exclusive_jets_energy_correlator( Returns: awkward.highlevel.Array: Returns an Awkward Array of the same type as the input. """ + raise AssertionError() def exclusive_jets_lund_declusterings(self, njets: int = 10) -> ak.Array: """Returns the Lund declustering Delta and k_T parameters from exclusive n_jets. diff --git a/src/fastjet/_generalevent.py b/src/fastjet/_generalevent.py index 4c4291b7..28c8f4e7 100644 --- a/src/fastjet/_generalevent.py +++ b/src/fastjet/_generalevent.py @@ -438,6 +438,23 @@ def exclusive_jets_constituent_index(self, njets): ) res = ak.Array(self._replace_multi()) return res + + def exclusive_jets_softdrop_grooming( + self, njets=1, beta = 0.0, symmetry_cut = 0.1, symmetry_measure = "scalar_z", R0 = 0.8, recursion_choice = "larger_pt", + #subtractor = 0, + mu_cut = float('inf'), + ): + if njets <= 0: + raise ValueError("Njets cannot be <= 0") + + self._out = [] + self._input_flag = 0 + for i in range(len(self._clusterable_level)): + np_results = self._results[i].to_numpy_softdrop_grooming() + self._out.append(ak.Array(ak.contents.NumpyArray(np_results[0]))) + res = ak.Array(self._replace_multi()) + return res + def exclusive_jets_energy_correlator( self, njets=1, n_point=0, angles: int = -1, beta=1, alpha=0, func="generalized", normalized=True, diff --git a/src/fastjet/_multievent.py b/src/fastjet/_multievent.py index 7315907c..b503a1f5 100644 --- a/src/fastjet/_multievent.py +++ b/src/fastjet/_multievent.py @@ -191,6 +191,31 @@ def exclusive_jets_constituent_index(self, njets): ) out = ak.Array(ak.contents.ListOffsetArray(ak.index.Index64(off), out.layout)) return out + + def exclusive_jets_softdrop_grooming( + self, njets=1, beta = 0.0, symmetry_cut = 0.1, symmetry_measure = "scalar_z", R0 = 0.8, recursion_choice = "larger_pt", + #subtractor = 0, + mu_cut = float('inf'), + ): + if njets <= 0: + raise ValueError("Njets cannot be <= 0") + np_results = self._results.to_numpy_softdrop_grooming( + njets, beta, symmetry_cut, symmetry_measure, R0, recursion_choice, #subtractor, + mu_cut, + ) + + px = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[0])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + py = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[1])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + pz = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[2])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + E = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[3])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + #jetpt = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[5])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + #jeteta = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[6])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + #jetphi = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[7])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + #jetmass = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[8])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + + out = ak.zip({"px": px, "py": py, "pz": pz, "E": E}, depth_limit=2) + return out + def exclusive_jets_energy_correlator( self, njets=1, beta=1, npoint=0, angles=-1, alpha=0, func="generalized", normalized=True, diff --git a/src/fastjet/_pyjet.py b/src/fastjet/_pyjet.py index 624f712a..482b9ae2 100644 --- a/src/fastjet/_pyjet.py +++ b/src/fastjet/_pyjet.py @@ -142,6 +142,16 @@ def exclusive_jets_constituent_index(self, njets=10): def exclusive_jets_constituents(self, njets=10): return self._internalrep.exclusive_jets_constituents(njets) + + def exclusive_jets_softdrop_grooming( + self, njets=1, beta = 0.0, symmetry_cut = 0.1, symmetry_measure = "scalar_z", R0 = 0.8, recursion_choice = "larger_pt", + #subtractor = 0, + mu_cut = float('inf'), + ): + return self._internalrep.exclusive_jets_softdrop_grooming( + njets, beta, symmetry_cut, symmetry_measure, R0, recursion_choice, #subtractor, + mu_cut, + ) def exclusive_jets_energy_correlator( self, njets=1, beta=1, npoint=0, angles=-1, alpha=0, func="generalized", normalized=True diff --git a/src/fastjet/_singleevent.py b/src/fastjet/_singleevent.py index 0814162e..61ebf7fb 100644 --- a/src/fastjet/_singleevent.py +++ b/src/fastjet/_singleevent.py @@ -180,6 +180,21 @@ def exclusive_jets_constituent_index(self, njets): out = ak.Array(ak.contents.ListOffsetArray(ak.index.Index64(off), out.layout)) return out[0] + def exclusive_jets_softdrop_grooming( + self, njets=1, beta = 0.0, symmetry_cut = 0.1, symmetry_measure = "scalar_z", R0 = 0.8, recursion_choice = "larger_pt", + #subtractor = 0, + mu_cut = float('inf'), + ): + if njets <= 0: + raise ValueError("Njets cannot be <= 0") + + np_results = self._results.to_numpy_softdrop_grooming( + njets, beta, symmetry_cut, symmetry_measure, R0, recursion_choice, #subtractor, + mu_cut, + ) + out = ak.Array(ak.contents.NumpyArray(np_results)) + return out[0] + def exclusive_jets_energy_correlator( self, njets=1, beta=1, npoint=0, angles=-1, alpha=0, func="generalized", normalized=True, ): From a3fb86c85e68b2ab6471ded3a1a88191be9c98d2 Mon Sep 17 00:00:00 2001 From: Connor Moore Date: Thu, 15 Jun 2023 00:29:27 +0200 Subject: [PATCH 6/8] adding fatjet values --- src/_ext.cpp | 18 +++++++++--------- src/fastjet/_multievent.py | 21 +++++++++++++++------ 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/_ext.cpp b/src/_ext.cpp index 9dbd6798..750557ad 100644 --- a/src/_ext.cpp +++ b/src/_ext.cpp @@ -1595,10 +1595,10 @@ PYBIND11_MODULE(_ext, m) { std::vector consts_groomed_pz; std::vector consts_groomed_E; std::vector nconstituents; - /*std::vector jet_groomed_pt; + std::vector jet_groomed_pt; std::vector jet_groomed_eta; std::vector jet_groomed_phi; - std::vector jet_groomed_m;*/ + std::vector jet_groomed_m; fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure sym_meas = fastjet::contrib::RecursiveSymmetryCutBase::SymmetryMeasure::scalar_z; if (symmetry_measure == "scalar_z") { @@ -1638,10 +1638,10 @@ PYBIND11_MODULE(_ext, m) { for (unsigned int j = 0; j < jets.size(); j++){ auto soft = sd->result(jets[j]); nconstituents.push_back(soft.constituents().size()); - /*jet_groomed_pt.push_back(soft.pt()); + jet_groomed_pt.push_back(soft.pt()); jet_groomed_eta.push_back(soft.eta()); jet_groomed_phi.push_back(soft.phi()); - jet_groomed_m.push_back(soft.m());*/ + jet_groomed_m.push_back(soft.m()); for (unsigned int k = 0; k < soft.constituents().size(); k++){ consts_groomed_px.push_back(soft.constituents()[k].px()); consts_groomed_py.push_back(soft.constituents()[k].py()); @@ -1656,21 +1656,21 @@ PYBIND11_MODULE(_ext, m) { auto consts_pz = py::array(consts_groomed_pz.size(), consts_groomed_pz.data()); auto consts_E = py::array(consts_groomed_E.size(), consts_groomed_E.data()); auto eventsize = py::array(nconstituents.size(), nconstituents.data()); - /*auto jet_pt = py::array(jet_groomed_pt.size(), jet_groomed_pt.data()); + auto jet_pt = py::array(jet_groomed_pt.size(), jet_groomed_pt.data()); auto jet_eta = py::array(jet_groomed_eta.size(), jet_groomed_eta.data()); auto jet_phi = py::array(jet_groomed_phi.size(), jet_groomed_phi.data()); - auto jet_m = py::array(jet_groomed_m.size(), jet_groomed_m.data());*/ + auto jet_m = py::array(jet_groomed_m.size(), jet_groomed_m.data()); return std::make_tuple( consts_px, consts_py, consts_pz, consts_E, - eventsize - /*jet_pt, + eventsize, + jet_pt, jet_eta, jet_phi, - jet_m*/ + jet_m ); }, R"pbdoc( Performs softdrop pruning on jets. diff --git a/src/fastjet/_multievent.py b/src/fastjet/_multievent.py index b503a1f5..c46b13a7 100644 --- a/src/fastjet/_multievent.py +++ b/src/fastjet/_multievent.py @@ -208,15 +208,24 @@ def exclusive_jets_softdrop_grooming( py = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[1])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) pz = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[2])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) E = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[3])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) - #jetpt = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[5])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) - #jeteta = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[6])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) - #jetphi = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[7])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) - #jetmass = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[8])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + jetpt = ak.Array(ak.contents.NumpyArray(np_results[5])) + jeteta = ak.Array(ak.contents.NumpyArray(np_results[6])) + jetphi = ak.Array(ak.contents.NumpyArray(np_results[7])) + jetmass = ak.Array(ak.contents.NumpyArray(np_results[8])) + + out = ak.zip({ + "constituents": + ak.zip( + {"px": px, "py": py, "pz": pz, "E": E}, depth_limit=2), + "msoftdrop": jetmass, + "ptsoftdrop": jetpt, + "etasoftdrop": jeteta, + "phisoftdrop": jetphi,}, + depth_limit=1 + ) - out = ak.zip({"px": px, "py": py, "pz": pz, "E": E}, depth_limit=2) return out - def exclusive_jets_energy_correlator( self, njets=1, beta=1, npoint=0, angles=-1, alpha=0, func="generalized", normalized=True, ): From 9d0c5a157f7c08407fa33da9ab1a4cdb2e0ef8b8 Mon Sep 17 00:00:00 2001 From: Connor Moore Date: Fri, 16 Jun 2023 20:58:52 +0200 Subject: [PATCH 7/8] adding to single and general, dask cs --- src/fastjet/_generalevent.py | 27 +++++++++++++++++++++++++-- src/fastjet/_pyjet.py | 18 ++++++++++++++++++ src/fastjet/_singleevent.py | 21 ++++++++++++++++++++- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/fastjet/_generalevent.py b/src/fastjet/_generalevent.py index 28c8f4e7..cc79c6f4 100644 --- a/src/fastjet/_generalevent.py +++ b/src/fastjet/_generalevent.py @@ -450,8 +450,31 @@ def exclusive_jets_softdrop_grooming( self._out = [] self._input_flag = 0 for i in range(len(self._clusterable_level)): - np_results = self._results[i].to_numpy_softdrop_grooming() - self._out.append(ak.Array(ak.contents.NumpyArray(np_results[0]))) + np_results = self._results.to_numpy_softdrop_grooming( + njets, beta, symmetry_cut, symmetry_measure, R0, recursion_choice, #subtractor, + mu_cut, + ) + + px = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[0])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + py = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[1])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + pz = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[2])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + E = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[3])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + jetpt = ak.Array(ak.contents.NumpyArray(np_results[5])) + jeteta = ak.Array(ak.contents.NumpyArray(np_results[6])) + jetphi = ak.Array(ak.contents.NumpyArray(np_results[7])) + jetmass = ak.Array(ak.contents.NumpyArray(np_results[8])) + + self._out.append(ak.zip({ + "constituents": + ak.zip( + {"px": px, "py": py, "pz": pz, "E": E}, depth_limit=2), + "msoftdrop": jetmass, + "ptsoftdrop": jetpt, + "etasoftdrop": jeteta, + "phisoftdrop": jetphi,}, + depth_limit=1 + ) + ) res = ak.Array(self._replace_multi()) return res diff --git a/src/fastjet/_pyjet.py b/src/fastjet/_pyjet.py index 482b9ae2..376b2114 100644 --- a/src/fastjet/_pyjet.py +++ b/src/fastjet/_pyjet.py @@ -438,6 +438,24 @@ def exclusive_jets_constituent_index(self, njets=10): def exclusive_jets_constituents(self, njets=10): return _dak_dispatch(self, "exclusive_jets_constituents", njets=njets) + def exclusive_jets_softdrop_grooming( + self, njets=1, beta = 0.0, symmetry_cut = 0.1, symmetry_measure = "scalar_z", R0 = 0.8, recursion_choice = "larger_pt", + #subtractor = 0, + mu_cut = float('inf'), + ): + return _dak_dispatch( + self, + "exclusive_jets_softdrop_grooming", + njets=njets, + beta=beta, + symmetry_cut=symmetry_cut, + symmetry_measure=symmetry_measure, + R0=R0, + recursion_choice=recursion_choice, + #subtractor=subtractor, + mu_cut=mu_cut, + ) + def exclusive_jets_energy_correlator( self, njets=1, beta=1, npoint=0, angles=-1, alpha=0, func="generalized", normalized=False, ): diff --git a/src/fastjet/_singleevent.py b/src/fastjet/_singleevent.py index 61ebf7fb..dbe30fa8 100644 --- a/src/fastjet/_singleevent.py +++ b/src/fastjet/_singleevent.py @@ -192,7 +192,26 @@ def exclusive_jets_softdrop_grooming( njets, beta, symmetry_cut, symmetry_measure, R0, recursion_choice, #subtractor, mu_cut, ) - out = ak.Array(ak.contents.NumpyArray(np_results)) + + px = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[0])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + py = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[1])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + pz = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[2])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + E = ak.unflatten(ak.Array(ak.contents.NumpyArray(np_results[3])), ak.Array(ak.contents.NumpyArray(np_results[4])), highlevel=False) + jetpt = ak.Array(ak.contents.NumpyArray(np_results[5])) + jeteta = ak.Array(ak.contents.NumpyArray(np_results[6])) + jetphi = ak.Array(ak.contents.NumpyArray(np_results[7])) + jetmass = ak.Array(ak.contents.NumpyArray(np_results[8])) + + out = ak.zip({ + "constituents": + ak.zip( + {"px": px, "py": py, "pz": pz, "E": E}, depth_limit=2), + "msoftdrop": jetmass, + "ptsoftdrop": jetpt, + "etasoftdrop": jeteta, + "phisoftdrop": jetphi,}, + depth_limit=1 + ) return out[0] def exclusive_jets_energy_correlator( From c1165c60cfd2e1920ac1ecade9a8bcd0e01b85f2 Mon Sep 17 00:00:00 2001 From: Connor Moore Date: Fri, 16 Jun 2023 21:35:31 +0200 Subject: [PATCH 8/8] formatting --- src/_ext.cpp | 8 ++++---- src/fastjet/__init__.py | 17 ++--------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/_ext.cpp b/src/_ext.cpp index 750557ad..2fb72d04 100644 --- a/src/_ext.cpp +++ b/src/_ext.cpp @@ -13,9 +13,9 @@ #include #include #include -#include #include #include +#include #include #include @@ -1585,7 +1585,7 @@ PYBIND11_MODULE(_ext, m) { pt, eta, phi, m of inclusive jets. )pbdoc") .def("to_numpy_softdrop_grooming", - [](const output_wrapper ow, const int n_jets = 1, double beta = 0, double symmetry_cut = 0.1, + [](const output_wrapper ow, const int n_jets = 1, double beta = 0, double symmetry_cut = 0.1, std::string symmetry_measure = "scalar_z", double R0 = 0.8, std::string recursion_choice = "larger_pt", /*const FunctionOfPseudoJet * subtractor = 0,*/ double mu_cut = std::numeric_limits::infinity()){ @@ -1630,13 +1630,13 @@ PYBIND11_MODULE(_ext, m) { else if (recursion_choice == "larger_E") { rec_choice = fastjet::contrib::RecursiveSymmetryCutBase::RecursionChoice::larger_E; } - + fastjet::contrib::SoftDrop* sd = new fastjet::contrib::SoftDrop(beta, symmetry_cut, sym_meas, R0, mu_cut, rec_choice/*, subtractor*/); for (unsigned int i = 0; i < css.size(); i++){ // iterate through events auto jets = css[i]->exclusive_jets(n_jets); for (unsigned int j = 0; j < jets.size(); j++){ - auto soft = sd->result(jets[j]); + auto soft = sd->result(jets[j]); nconstituents.push_back(soft.constituents().size()); jet_groomed_pt.push_back(soft.pt()); jet_groomed_eta.push_back(soft.eta()); diff --git a/src/fastjet/__init__.py b/src/fastjet/__init__.py index a82e2415..85ced84e 100644 --- a/src/fastjet/__init__.py +++ b/src/fastjet/__init__.py @@ -371,13 +371,7 @@ def exclusive_jets_constituents(self, njets: int = 10) -> ak.Array: raise AssertionError() def exclusive_jets_softdrop_grooming( - self, - njets: int = 1, - beta: int = 0, - symmetry_cut: float = 0.1, - symmetry_measure="scalar_z", - R0: float = 0.8, - recursion_choice="larger_pt", + self, njets: int = 1, beta: int = 0, symmetry_cut: float = 0.1, symmetry_measure="scalar_z", R0: float = 0.8, recursion_choice="larger_pt", #subtractor: int = 0, mu_cut: float = float('inf'), ) -> ak.Array: @@ -395,14 +389,7 @@ def exclusive_jets_softdrop_grooming( raise AssertionError() def exclusive_jets_energy_correlator( - self, - njets: int = 1, - beta: int = 1, - npoint: int = 0, - angles: int = -1, - alpha=0, - func="generalized", - normalized=True, + self, njets: int = 1, beta: int = 1, npoint: int = 0, angles: int = -1, alpha=0, func="generalized", normalized=True, ) -> ak.Array: """Returns the energy correlator of each exclusive jet.