12void vo006_IndexManipulation()
 
   19   for (
size_t i = 0; i < muon_pt.
size(); i++) {
 
   20      std::cout << 
"Muon " << i + 1 << 
" (pt, eta): " << muon_pt[i] << 
", " 
   21                << muon_eta[i] << std::endl;
 
   25   auto idx_select = 
Nonzero(muon_pt > 15 && 
abs(muon_eta) < 2.5);
 
   34   auto idx = 
Intersect(idx_sort, idx_select);
 
   37   auto good_muon_pt = 
Take(muon_pt, idx);
 
   38   auto good_muon_eta = 
Take(muon_eta, idx);
 
   40   for (
size_t i = 0; i < idx.size(); i++) {
 
   41      std::cout << 
"Selected muon " << i + 1 << 
" (pt, eta): " << good_muon_pt[i]
 
   42                << 
", " << good_muon_eta[i] << std::endl;
 
RVec< T > Reverse(const RVec< T > &v)
Return copy of reversed vector.
 
RVec< T > Intersect(const RVec< T > &v1, const RVec< T > &v2, bool v2_is_sorted=false)
Return the intersection of elements of two RVecs.
 
RVec< typename RVec< T >::size_type > Nonzero(const RVec< T > &v)
Return the indices of the elements which are not zero.
 
RVec< PromoteType< T > > abs(const RVec< T > &v)
 
RVec< T > Take(const RVec< T > &v, const RVec< typename RVec< T >::size_type > &i)
Return elements of a vector at given indices.
 
RVec< typename RVec< T >::size_type > Argsort(const RVec< T > &v)
Return an RVec of indices that sort the input RVec.