In this tutorial we learn how the RVec class can be used to express logical operations.
void vo003_LogicalOperations()
{
std::cout <<
v1 <<
" > " <<
v2 <<
" = " << v1_gr_v2 << std::endl;
auto v1_noteq_v2 =
v1 !=
v2;
std::cout <<
v1 <<
" != " <<
v2 <<
" = " << v1_noteq_v2 << std::endl;
auto all_true =
v1 > .5 *
v2;
std::cout << std::boolalpha;
std::cout <<
"All( " <<
v1 <<
" > .5 * " <<
v2 <<
" ) = " <<
All(all_true) << std::endl;
std::cout <<
"Any( " <<
v1 <<
" > " <<
v2 <<
" ) = " <<
Any(v1_noteq_v2) << std::endl;
auto v_filtered =
v[
v > 3.];
std::cout <<
"v = " <<
v <<
". v[ v > 3. ] = " << v_filtered << std::endl;
auto good_mu_pt = mu_pt[mu_pt > 10 && abs(mu_eta) < 2.1];
std::cout << "mu_pt = " << mu_pt << " mu_pt[ mu_pt > 10 && abs(mu_eta) < 2.1] = " << good_mu_pt << std::endl;
auto masked_mu_pt =
Where(abs(mu_eta) < 2., mu_pt, -999.);
std::cout << "mu_pt if abs(mu_eta) < 2 else -999 = " << masked_mu_pt << std::endl;
}
auto All(const RVec< T > &v) -> decltype(v[0]==false)
Return true if all of the elements equate to true, return false otherwise.
RVec< T > Where(const RVec< int > &c, const RVec< T > &v1, const RVec< T > &v2)
Return the elements of v1 if the condition c is true and v2 if the condition c is false.
auto Any(const RVec< T > &v) -> decltype(v[0]==true)
Return true if any of the elements equates to true, return false otherwise.
{ 1, 2, 3 } > { 3, 2, 1 } = { 0, 0, 1 }
{ 1, 2, 3 } != { 3, 2, 1 } = { 1, 0, 1 }
All( { 1, 2, 3 } > .5 * { 3, 2, 1 } ) = false
Any( { 1, 2, 3 } > { 3, 2, 1 } ) = true
v = { 1, 2, 3, 4, 5 }. v[ v > 3. ] = { 4, 5 }
mu_pt = { 15, 12, 10.6, 2.3, 4, 3 } mu_pt[ mu_pt > 10 && abs(mu_eta) < 2.1] = { 15, 12 }
mu_pt if abs(mu_eta) < 2 else -999 = { 15, 12, -999, -999, 4, -999 }
- Date
- May 2018
- Author
- Danilo Piparo
Definition in file vo003_LogicalOperations.C.