Пример #1
0
from ROOT.VecOps import RVec, Take, Combinations

# RVec can be sorted in Python with the inbuilt sorting function because
# PyROOT implements a Python iterator
v1 = RVec("double")(3)
v1[0], v1[1], v1[2] = 1, 2, 3
v2 = RVec("double")(2)
v2[0], v2[1] = -4, -5

# To get the indices, which result in all combinations, you can call the
# following helper.
# Note that you can also pass the size of the vectors directly.
idx = Combinations(v1, v2)

# Next, the respective elements can be taken via the computed indices.
c1 = Take(v1, idx[0])
c2 = Take(v2, idx[1])

# Finally, you can perform any set of operations conveniently.
v3 = c1 * c2

print("Combinations of {} and {}:".format(v1, v2))
for i in range(len(v3)):
    print("{} * {} = {}".format(c1[i], c2[i], v3[i]))
print

# However, if you want to compute operations on unique combinations of a
# single RVec, you can perform this as follows.

# Get the indices of unique triples for the given vector.
v4 = RVec("double")(4)
Пример #2
0
# an RVec ...
v2 = Sort(v1)
print("Sort vector {}: {}".format(v1, v2))

# ... or a reversed copy of an RVec.
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.
v2 = Argsort(v1)
print("Indices that sort the vector {}: {}".format(v1, v2))

v3 = RVec("double")(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.
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.
v2 = Reverse(Take(Sort(v1), -2))
print(
    "Sort the vector {}, take the two last elements and reverse the selection: {}"
    .format(v1, v2))