Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
vo005_Combinations.py
Go to the documentation of this file.
1 ## \file
2 ## \ingroup tutorial_vecops
3 ## \notebook -nodraw
4 ## In this tutorial we learn how combinations of RVecs can be build.
5 ##
6 ## \macro_code
7 ## \macro_output
8 ##
9 ## \date August 2018
10 ## \author Stefan Wunsch
11 
12 import ROOT
13 from ROOT.VecOps import RVec, Take, Combinations
14 
15 # RVec can be sorted in Python with the inbuilt sorting function because
16 # PyROOT implements a Python iterator
17 v1 = RVec("double")(3)
18 v1[0], v1[1], v1[2] = 1, 2, 3
19 v2 = RVec("double")(2)
20 v2[0], v2[1] = -4, -5
21 
22 # To get the indices, which result in all combinations, you can call the
23 # following helper.
24 # Note that you can also pass the size of the vectors directly.
25 idx = Combinations(v1, v2)
26 
27 # Next, the respective elements can be taken via the computed indices.
28 c1 = Take(v1, idx[0])
29 c2 = Take(v2, idx[1])
30 
31 # Finally, you can perform any set of operations conveniently.
32 v3 = c1 * c2
33 
34 print("Combinations of {} and {}:".format(v1, v2))
35 for i in range(len(v3)):
36  print("{} * {} = {}".format(c1[i], c2[i], v3[i]))
37 print
38 
39 # However, if you want to compute operations on unique combinations of a
40 # single RVec, you can perform this as follows.
41 
42 # Get the indices of unique triples for the given vector.
43 v4 = RVec("double")(4)
44 v4[0], v4[1], v4[2], v4[3] = 1, 2, 3, 4
45 idx2 = Combinations(v4, 3)
46 
47 # Take the elements and compute any operation on the returned collections.
48 c3 = Take(v4, idx2[0])
49 c4 = Take(v4, idx2[1])
50 c5 = Take(v4, idx2[2])
51 
52 v5 = c3 * c4 * c5
53 
54 print("Unique triples of {}:".format(v4))
55 for i in range(len(v5)):
56  print("{} * {} * {} = {}".format(c3[i], c4[i], c5[i], v5[i]))