Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
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 
13 import ROOT
14 from 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
18 v1 = RVec("double")(3)
19 v1[0], v1[1], v1[2] = 6, 4, 5
20 v2 = sorted(v1)
21 print("Sort vector {}: {}".format(v1, v2))
22 
23 # For convenience, ROOT implements helpers, e.g., to get a sorted copy of
24 # an RVec ...
25 v2 = Sort(v1);
26 print("Sort vector {}: {}".format(v1, v2))
27 
28 # ... or a reversed copy of an RVec.
29 v2 = Reverse(v1);
30 print("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.
34 v2 = Argsort(v1)
35 print("Indices that sort the vector {}: {}".format(v1, v2))
36 
37 v3 = RVec("double")(3)
38 v3[0], v3[1], v3[2] = 9, 7, 8
39 v4 = Take(v3, v2)
40 print("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.
43 v2 = Take(v1, 2)
44 v3 = Take(v1, -2)
45 print("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.
49 v2 = Reverse(Take(Sort(v1), -2))
50 print("Sort the vector {}, take the two last elements and reverse the selection: {}".format(v1, v2))