Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
vo005_Combinations.C
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 built.
5///
6/// \macro_code
7/// \macro_output
8///
9/// \date August 2018
10/// \author Stefan Wunsch
11
13{
14 // The starting point are two collections and we want to calculate the result
15 // of combinations of the elements.
16 ROOT::RVecD v1{1., 2., 3.};
17 ROOT::RVecD v2{-4., -5.};
18
19 // To get the indices, which result in all combinations, you can call the
20 // following helper.
21 // Note that you can also pass the size of the vectors directly.
22 auto idx = Combinations(v1, v2);
23
24 // Next, the respective elements can be taken via the computed indices.
25 auto c1 = Take(v1, idx[0]);
26 auto c2 = Take(v2, idx[1]);
27
28 // Finally, you can perform any set of operations conveniently.
29 auto v3 = c1 * c2;
30
31 std::cout << "Combinations of " << v1 << " and " << v2 << ":" << std::endl;
32 for(size_t i=0; i<v3.size(); i++) {
33 std::cout << c1[i] << " * " << c2[i] << " = " << v3[i] << std::endl;
34 }
35 std::cout << std::endl;
36
37 // However, if you want to compute operations on unique combinations of a
38 // single RVec, you can perform this as follows.
39
40 // Get the indices of unique triples for the given vector.
41 ROOT::RVecD v4{1., 2., 3., 4.};
42 auto idx2 = Combinations(v4, 3);
43
44 // Take the elements and compute any operation on the returned collections.
45 auto c3 = Take(v4, idx2[0]);
46 auto c4 = Take(v4, idx2[1]);
47 auto c5 = Take(v4, idx2[2]);
48
49 auto v5 = c3 * c4 * c5;
50
51 std::cout << "Unique triples of " << v4 << ":" << std::endl;
52 for(size_t i=0; i<v4.size(); i++) {
53 std::cout << c3[i] << " * " << c4[i] << " * " << c5[i] << " = " << v5[i] << std::endl;
54 }
55 std::cout << std::endl;
56}
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:2339
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:2606
return c1
Definition legend1.C:41
return c2
Definition legend2.C:14
return c3
Definition legend3.C:15