 ROOT   Reference Guide vo005_Combinations.C File Reference

## Detailed Description  In this tutorial we learn how combinations of RVecs can be build.

using namespace ROOT::VecOps;
{
// The starting point are two collections and we want to calculate the result
// of combinations of the elements.
RVec<double> v1{1., 2., 3.};
RVec<double> v2{-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.
auto idx = Combinations(v1, v2);
// Next, the respective elements can be taken via the computed indices.
auto c1 = Take(v1, idx);
auto c2 = Take(v2, idx);
// Finally, you can perform any set of operations conveniently.
auto v3 = c1 * c2;
std::cout << "Combinations of " << v1 << " and " << v2 << ":" << std::endl;
for(size_t i=0; i<v3.size(); i++) {
std::cout << c1[i] << " * " << c2[i] << " = " << v3[i] << std::endl;
}
std::cout << std::endl;
// 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.
RVec<double> v4{1., 2., 3., 4.};
auto idx2 = Combinations(v4, 3);
// Take the elements and compute any operation on the returned collections.
auto c3 = Take(v4, idx2);
auto c4 = Take(v4, idx2);
auto c5 = Take(v4, idx2);
auto v5 = c3 * c4 * c5;
std::cout << "Unique triples of " << v4 << ":" << std::endl;
for(size_t i=0; i<v4.size(); i++) {
std::cout << c3[i] << " * " << c4[i] << " * " << c5[i] << " = " << v5[i] << std::endl;
}
std::cout << std::endl;
}
return c1
Definition: legend1.C:41
return c2
Definition: legend2.C:14
return c3
Definition: legend3.C:15
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< RVec< std::size_t > > Combinations(const std::size_t size1, const std::size_t size2)
Return the indices that represent all combinations of the elements of two RVecs.
Definition: RVec.hxx:1181
Combinations of { 1, 2, 3 } and { -4, -5 }:
1 * -4 = -4
1 * -5 = -5
2 * -4 = -8
2 * -5 = -10
3 * -4 = -12
3 * -5 = -15
Unique triples of { 1, 2, 3, 4 }:
1 * 2 * 3 = 6
1 * 2 * 4 = 8
1 * 3 * 4 = 12
2 * 3 * 4 = 24
Date
August 2018

Definition in file vo005_Combinations.C.