ROOT
v6-32
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
12
void
vo005_Combinations
()
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
}
ROOT::VecOps::RVec< double >
ROOT::VecOps::Take
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
ROOT::VecOps::Combinations
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
c1
return c1
Definition
legend1.C:41
c2
return c2
Definition
legend2.C:14
c3
return c3
Definition
legend3.C:15
vo005_Combinations
Definition
vo005_Combinations.py:1
v2
@ v2
Definition
rootcling_impl.cxx:3690
v4
@ v4
Definition
rootcling_impl.cxx:3692
v3
@ v3
Definition
rootcling_impl.cxx:3691
v1
@ v1
Definition
rootcling_impl.cxx:3689
tutorials
vecops
vo005_Combinations.C
ROOT v6-32 - Reference Guide Generated on Thu Dec 12 2024 15:06:30 (GVA Time) using Doxygen 1.9.8