#!/usr/bin/env python # coding: utf-8 # # vo004_SortAndSelect # In this tutorial we learn how elements of an RVec can be easily sorted and # selected. # # # # # **Author:** Stefan Wunsch # This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Wednesday, April 17, 2024 at 11:24 AM. # In[1]: import ROOT from ROOT.VecOps import Argsort, Take, Sort, Reverse # RVec can be sorted in Python with the inbuilt sorting function because # PyROOT implements a Python iterator # In[2]: v1 = ROOT.RVecD(3) v1[0], v1[1], v1[2] = 6, 4, 5 v2 = sorted(v1) print("Sort vector {}: {}".format(v1, v2)) # For convenience, ROOT implements helpers, e.g., to get a sorted copy of # an RVec ... # In[3]: v2 = Sort(v1); print("Sort vector {}: {}".format(v1, v2)) # ... or a reversed copy of an RVec. # In[4]: v2 = Reverse(v1); print("Reverse vector {}: {}".format(v1, v2)) # Helpers are provided to get the indices that sort the vector and to # select these indices from an RVec. # In[5]: v2 = Argsort(v1) print("Indices that sort the vector {}: {}".format(v1, v2)) v3 = ROOT.RVecD(3) v3[0], v3[1], v3[2] = 9, 7, 8 v4 = Take(v3, v2) print("Sort vector {} respective to the previously determined indices: {}".format(v3, v4)) # Take can also be used to get the first or last elements of an RVec. # In[6]: v2 = Take(v1, 2) v3 = Take(v1, -2) print("Take the two first and last elements of vector {}: {}, {}".format(v1, v2, v3)) # Because the VecOps helpers return a copy of the input, you can chain the operations # conveniently. # In[7]: v2 = Reverse(Take(Sort(v1), -2)) print("Sort the vector {}, take the two last elements and reverse the selection: {}".format(v1, v2))