ROOT::RVecF muon_pt = {20.0, 30.0, 10.0, 25.0}; ROOT::RVecF muon_eta = {1.0, -2.0, 0.5, 2.5}; for (size_t i = 0; i < muon_pt.size(); i++) { std::cout << "Muon " << i + 1 << " (pt, eta): " << muon_pt[i] << ", " << muon_eta[i] << std::endl; } auto idx_select = Nonzero(muon_pt > 15 && abs(muon_eta) < 2.5); auto idx_sort = Reverse(Argsort(muon_pt)); auto idx = Intersect(idx_sort, idx_select); auto good_muon_pt = Take(muon_pt, idx); auto good_muon_eta = Take(muon_eta, idx); for (size_t i = 0; i < idx.size(); i++) { std::cout << "Selected muon " << i + 1 << " (pt, eta): " << good_muon_pt[i] << ", " << good_muon_eta[i] << std::endl; }