ROOT   Reference Guide
vo004_SortAndSelect.py
Go to the documentation of this file.
1## \file
2## \ingroup tutorial_vecops
3## \notebook -nodraw
4## In this tutorial we learn how elements of an RVec can be easily sorted and
5## selected.
6##
7## \macro_code
8## \macro_output
9##
10## \date August 2018
11## \author Stefan Wunsch
12
13import ROOT
14from ROOT.VecOps import RVec, Argsort, Take, Sort, Reverse
15
16# RVec can be sorted in Python with the inbuilt sorting function because
17# PyROOT implements a Python iterator
18v1 = RVec("double")(3)
19v1[0], v1[1], v1[2] = 6, 4, 5
20v2 = sorted(v1)
21print("Sort vector {}: {}".format(v1, v2))
22
23# For convenience, ROOT implements helpers, e.g., to get a sorted copy of
24# an RVec ...
25v2 = Sort(v1);
26print("Sort vector {}: {}".format(v1, v2))
27
28# ... or a reversed copy of an RVec.
29v2 = Reverse(v1);
30print("Reverse vector {}: {}".format(v1, v2))
31
32# Helpers are provided to get the indices that sort the vector and to
33# select these indices from an RVec.
34v2 = Argsort(v1)
35print("Indices that sort the vector {}: {}".format(v1, v2))
36
37v3 = RVec("double")(3)
38v3[0], v3[1], v3[2] = 9, 7, 8
39v4 = Take(v3, v2)
40print("Sort vector {} respective to the previously determined indices: {}".format(v3, v4))
41
42# Take can also be used to get the first or last elements of an RVec.
43v2 = Take(v1, 2)
44v3 = Take(v1, -2)
45print("Take the two first and last elements of vector {}: {}, {}".format(v1, v2, v3))
46
47# Because the VecOps helpers return a copy of the input, you can chain the operations
48# conveniently.
49v2 = Reverse(Take(Sort(v1), -2))
50print("Sort the vector {}, take the two last elements and reverse the selection: {}".format(v1, v2))
ROOT::VecOps::RVec< T > RVec
Definition: RVec.hxx:84
RVec< T > Reverse(const RVec< T > &v)
Return copy of reversed vector.
Definition: RVec.hxx:1116
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:1058
RVec< typename RVec< T >::size_type > Argsort(const RVec< T > &v)
Return an RVec of indices that sort the input RVec.
Definition: RVec.hxx:1038
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)
Definition: TMathBase.h:362