Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
vo006_IndexManipulation.C File Reference

Detailed Description

View in nbviewer Open in SWAN
In this tutorial we demonstrate RVec helpers for index manipulation.

void vo006_IndexManipulation()
{
// We assume that we have multiple linked collections, the elements of which
// represent different objects.
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;
}
// First, let's make a selection and write out all indices, which pass.
auto idx_select = Nonzero(muon_pt > 15 && abs(muon_eta) < 2.5);
// Second, get indices that sort one of the collections in descending order.
auto idx_sort = Reverse(Argsort(muon_pt));
// Finally, we find all indices present in both collections of indices retrieved
// from sorting and selecting.
// Note, that the order of the first list passed to the Intersect helper is
// contained.
auto idx = Intersect(idx_sort, idx_select);
// Take from all lists the elements of the passing objects.
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;
}
}
RVec< T > Reverse(const RVec< T > &v)
Return copy of reversed vector.
Definition RVec.hxx:2481
RVec< T > Intersect(const RVec< T > &v1, const RVec< T > &v2, bool v2_is_sorted=false)
Return the intersection of elements of two RVecs.
Definition RVec.hxx:2758
RVec< typename RVec< T >::size_type > Nonzero(const RVec< T > &v)
Return the indices of the elements which are not zero.
Definition RVec.hxx:2727
RVec< PromoteType< T > > abs(const RVec< T > &v)
Definition RVec.hxx:1832
RVec< T > Take(const RVec< T > &v, const RVec< typename RVec< T >::size_type > &i)
Return elements of a vector at given indices.
Definition RVec.hxx:2339
RVec< typename RVec< T >::size_type > Argsort(const RVec< T > &v)
Return an RVec of indices that sort the input RVec.
Definition RVec.hxx:2250
Muon 1 (pt, eta): 20, 1
Muon 2 (pt, eta): 30, -2
Muon 3 (pt, eta): 10, 0.5
Muon 4 (pt, eta): 25, 2.5
Selected muon 1 (pt, eta): 30, -2
Selected muon 2 (pt, eta): 20, 1
Date
September 2018
Author
Stefan Wunsch

Definition in file vo006_IndexManipulation.C.