In this tutorial we demonstrate RVec helpers for index manipulation.
Author: Stefan Wunsch
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Wednesday, April 17, 2024 at 11:24 AM.
We assume that we have multiple linked collections, the elements of which represent different objects.
ROOT::RVecF muon_pt = {20.0, 30.0, 10.0, 25.0};
ROOT::RVecF muon_eta = {1.0, -2.0, 0.5, 2.5};
for (size_t i = 0; i < muon_pt.size(); i++) {
std::cout << "Muon " << i + 1 << " (pt, eta): " << muon_pt[i] << ", "
<< muon_eta[i] << std::endl;
}
Muon 1 (pt, eta): 20, 1 Muon 2 (pt, eta): 30, -2 Muon 3 (pt, eta): 10, 0.5 Muon 4 (pt, eta): 25, 2.5
First, let's make a selection and write out all indices, which pass.
auto idx_select = Nonzero(muon_pt > 15 && abs(muon_eta) < 2.5);
input_line_52:2:2: error: Syntax error auto idx_select = Nonzero(muon_pt > 15 && abs(muon_eta) < 2.5); ^ FunctionDecl 0x7f249101be48 <input_line_52:1:1, line:4:1> line:1:6 __cling_Un1Qu320 'void (void *)' |-ParmVarDecl 0x7f249101bd90 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f24910358f8 <col:43, line:4:1> | |-DeclStmt 0x7f24910358d8 <line:2:2, col:64> | | `-VarDecl 0x7f249101bf60 <col:2, col:63> col:7 idx_select 'auto' cinit | | `-ExprWithCleanups 0x7f24910358c0 <col:20, col:63> '<dependent type>' | | `-CallExpr 0x7f2491035898 <col:20, col:63> '<dependent type>' | | |-DeclRefExpr 0x7f249101c1b0 <col:20> '<dependent type>' lvalue Var 0x7f249101c0d8 'Nonzero' '<dependent type>' | | `-CXXBindTemporaryExpr 0x7f2491035878 <col:28, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7f2491035878) | | `-CXXOperatorCallExpr 0x7f24910351b0 <col:28, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' '&&' adl | | |-ImplicitCastExpr 0x7f2491035198 <col:41> 'auto (*)(const RVec<int> &, const RVec<int> &) -> RVec<int>' <FunctionToPointerDecay> | | | `-DeclRefExpr 0x7f2491035120 <col:41> 'auto (const RVec<int> &, const RVec<int> &) -> RVec<int>' lvalue Function 0x7f2491034ae0 'operator&&' 'auto (const RVec<int> &, const RVec<int> &) -> RVec<int>' | | |-MaterializeTemporaryExpr 0x7f24910350d8 <col:28, col:38> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' lvalue | | | `-ImplicitCastExpr 0x7f24910350c0 <col:28, col:38> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' <NoOp> | | | `-CXXBindTemporaryExpr 0x7f24910258c0 <col:28, col:38> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7f24910258c0) | | | `-CXXOperatorCallExpr 0x7f2491024940 <col:28, col:38> 'RVec<int>':'ROOT::VecOps::RVec<int>' '>' adl | | | |-ImplicitCastExpr 0x7f2491024928 <col:36> 'auto (*)(const RVec<float> &, const int &) -> RVec<int>' <FunctionToPointerDecay> | | | | `-DeclRefExpr 0x7f2491024890 <col:36> 'auto (const RVec<float> &, const int &) -> RVec<int>' lvalue Function 0x7f24910210c0 'operator>' 'auto (const RVec<float> &, const int &) -> RVec<int>' | | | |-ImplicitCastExpr 0x7f2491024848 <col:28> 'const RVec<float>':'const ROOT::VecOps::RVec<float>' lvalue <NoOp> | | | | `-DeclRefExpr 0x7f249101c1f0 <col:28> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x87d15c0 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | | `-MaterializeTemporaryExpr 0x7f2491024878 <col:38> 'const int' lvalue | | | `-ImplicitCastExpr 0x7f2491024860 <col:38> 'const int' <NoOp> | | | `-IntegerLiteral 0x7f249101c210 <col:38> 'int' 15 | | `-MaterializeTemporaryExpr 0x7f2491035108 <col:44, col:60> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' lvalue | | `-ImplicitCastExpr 0x7f24910350f0 <col:44, col:60> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' <NoOp> | | `-CXXBindTemporaryExpr 0x7f24910302a0 <col:44, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7f24910302a0) | | `-CXXOperatorCallExpr 0x7f2491030260 <col:44, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' '<' adl | | |-ImplicitCastExpr 0x7f2491030248 <col:58> 'auto (*)(const RVec<float> &, const double &) -> RVec<int>' <FunctionToPointerDecay> | | | `-DeclRefExpr 0x7f24910301a8 <col:58> 'auto (const RVec<float> &, const double &) -> RVec<int>' lvalue Function 0x7f249102c9c0 'operator<' 'auto (const RVec<float> &, const double &) -> RVec<int>' | | |-MaterializeTemporaryExpr 0x7f2491030160 <col:44, col:56> 'const RVec<PromoteType<float> >':'const ROOT::VecOps::RVec<float>' lvalue | | | `-ImplicitCastExpr 0x7f2491030148 <col:44, col:56> 'const RVec<PromoteType<float> >':'const ROOT::VecOps::RVec<float>' <NoOp> | | | `-CXXBindTemporaryExpr 0x7f2491027558 <col:44, col:56> 'RVec<PromoteType<float> >':'ROOT::VecOps::RVec<float>' (CXXTemporary 0x7f2491027558) | | | `-CallExpr 0x7f2491027510 <col:44, col:56> 'RVec<PromoteType<float> >':'ROOT::VecOps::RVec<float>' adl | | | |-ImplicitCastExpr 0x7f24910274f8 <col:44> 'RVec<PromoteType<float> > (*)(const RVec<float> &)' <FunctionToPointerDecay> | | | | `-DeclRefExpr 0x7f2491027478 <col:44> 'RVec<PromoteType<float> > (const RVec<float> &)' lvalue Function 0x7f2491026c20 'abs' 'RVec<PromoteType<float> > (const RVec<float> &)' (FunctionTemplate 0x7f2491025c60 'abs') | | | `-ImplicitCastExpr 0x7f2491027538 <col:48> 'const RVec<float>':'const ROOT::VecOps::RVec<float>' lvalue <NoOp> | | | `-DeclRefExpr 0x7f2491025968 <col:48> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x87de0d8 'muon_eta' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-MaterializeTemporaryExpr 0x7f2491030190 <col:60> 'const double' lvalue | | `-ImplicitCastExpr 0x7f2491030178 <col:60> 'const double' <NoOp> | | `-FloatingLiteral 0x7f2491027578 <col:60> 'double' 2.500000e+00 | `-NullStmt 0x7f24910358f0 <line:3:1> |-AnnotateAttr 0x7f249101c038 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f249101c140 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>
Second, get indices that sort one of the collections in descending order.
auto idx_sort = Reverse(Argsort(muon_pt));
input_line_53:2:2: error: Syntax error auto idx_sort = Reverse(Argsort(muon_pt)); ^ FunctionDecl 0x7f2492543988 <input_line_53:1:1, line:4:1> line:1:6 __cling_Un1Qu321 'void (void *)' |-ParmVarDecl 0x7f24925438d0 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f2492543fc0 <col:43, line:4:1> | |-DeclStmt 0x7f2492543fa0 <line:2:2, col:43> | | `-VarDecl 0x7f2492543aa0 <col:2, col:42> col:7 idx_sort 'auto' cinit | | `-CallExpr 0x7f2492543f78 <col:18, col:42> '<dependent type>' | | |-DeclRefExpr 0x7f2492543cf0 <col:18> '<dependent type>' lvalue Var 0x7f2492543c18 'Reverse' '<dependent type>' | | `-CallExpr 0x7f2492543f50 <col:26, col:41> '<dependent type>' | | |-DeclRefExpr 0x7f2492543ef0 <col:26> '<dependent type>' lvalue Var 0x7f2492543e18 'Argsort' '<dependent type>' | | `-DeclRefExpr 0x7f2492543f30 <col:34> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x87d15c0 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | `-NullStmt 0x7f2492543fb8 <line:3:1> |-AnnotateAttr 0x7f2492543b78 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f2492543c80 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f2492543da0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f2492543e80 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>
Finally, we find all indices present in both collections of indices retrieved from sorting and selecting. Note, that the order of the first list passed to the Intersect helper is contained.
auto idx = Intersect(idx_sort, idx_select);
input_line_54:2:2: error: Syntax error auto idx = Intersect(idx_sort, idx_select); ^ FunctionDecl 0x7f2492544108 <input_line_54:1:1, line:4:1> line:1:6 __cling_Un1Qu322 'void (void *)' |-ParmVarDecl 0x7f2492544050 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f2492544740 <col:43, line:4:1> | |-DeclStmt 0x7f2492544720 <line:2:2, col:44> | | `-VarDecl 0x7f2492544220 <col:2, col:43> col:7 idx 'auto' cinit | | `-CallExpr 0x7f24925446f0 <col:13, col:43> '<dependent type>' | | |-DeclRefExpr 0x7f2492544470 <col:13> '<dependent type>' lvalue Var 0x7f2492544398 'Intersect' '<dependent type>' | | |-DeclRefExpr 0x7f2492544590 <col:23> '<dependent type>' lvalue Var 0x7f24925444b8 'idx_sort' '<dependent type>' | | `-DeclRefExpr 0x7f24925446b0 <col:33> '<dependent type>' lvalue Var 0x7f24925445d8 'idx_select' '<dependent type>' | `-NullStmt 0x7f2492544738 <line:3:1> |-AnnotateAttr 0x7f24925442f8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f2492544400 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f2492544520 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f2492544640 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>
Take from all lists the elements of the passing objects.
auto good_muon_pt = Take(muon_pt, idx);
auto good_muon_eta = Take(muon_eta, idx);
for (size_t i = 0; i < idx.size(); i++) {
std::cout << "Selected muon " << i + 1 << " (pt, eta): " << good_muon_pt[i]
<< ", " << good_muon_eta[i] << std::endl;
}
input_line_55:2:2: error: Syntax error auto good_muon_pt = Take(muon_pt, idx); ^ FunctionDecl 0x7f2492544888 <input_line_55:1:1, line:10:1> line:1:6 __cling_Un1Qu323 'void (void *)' |-ParmVarDecl 0x7f24925447d0 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f249254c100 <col:43, line:10:1> | |-DeclStmt 0x7f2492544da0 <line:2:2, col:40> | | `-VarDecl 0x7f24925449a0 <col:2, col:39> col:7 used good_muon_pt 'auto' cinit | | `-CallExpr 0x7f2492544d70 <col:22, col:39> '<dependent type>' | | |-DeclRefExpr 0x7f2492544bf0 <col:22> '<dependent type>' lvalue Var 0x7f2492544b18 'Take' '<dependent type>' | | |-DeclRefExpr 0x7f2492544c30 <col:27> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x87d15c0 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-DeclRefExpr 0x7f2492544d30 <col:36> '<dependent type>' lvalue Var 0x7f2492544c58 'idx' '<dependent type>' | |-DeclStmt 0x7f24925451d0 <line:3:1, col:41> | | `-VarDecl 0x7f2492544e00 <col:1, col:40> col:6 used good_muon_eta 'auto' cinit | | `-CallExpr 0x7f24925451a0 <col:22, col:40> '<dependent type>' | | |-DeclRefExpr 0x7f2492545020 <col:22> '<dependent type>' lvalue Var 0x7f2492544f48 'Take' '<dependent type>' | | |-DeclRefExpr 0x7f2492545060 <col:27> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x87de0d8 'muon_eta' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-DeclRefExpr 0x7f2492545160 <col:37> '<dependent type>' lvalue Var 0x7f2492545088 'idx' '<dependent type>' | |-ForStmt 0x7f249254c0c0 <line:5:1, line:8:1> | | |-DeclStmt 0x7f24925452c0 <line:5:6, col:18> | | | `-VarDecl 0x7f2492545200 <col:6, col:17> col:13 used i 'size_t':'unsigned long' cinit | | | `-ImplicitCastExpr 0x7f2492545288 <col:17> 'size_t':'unsigned long' <IntegralCast> | | | `-IntegerLiteral 0x7f2492545268 <col:17> 'int' 0 | | |-<<<NULL>>> | | |-CXXOperatorCallExpr 0x7f24925456e0 <col:20, col:33> '<dependent type>' '<' | | | |-UnresolvedLookupExpr 0x7f2492545478 <col:22> '<overloaded function type>' lvalue (ADL) = 'operator<' 0x47edd28 0x47ee528 0x47eed68 0x5d35d20 0x5d47af0 0x5d500b0 0x6501288 0x6501840 0x6501e10 0x5e585d0 0x4916f38 0x4a55fe8 0x4a574e0 0x4a5f6c8 0x4a5fc90 0x4d19790 0x4d19d68 0x4d1a500 0x4d381c8 0x4d388d8 0x4d38ee8 0x4d88be0 0x4e25080 0x4eff100 0x4f03440 0x4f038c0 0x4f058d0 0x4f06458 0x509a1e0 0x5218568 0x5219138 0x53393d0 0x533a080 0x533ab20 0x58f2f28 0x58f3628 0x58f3b68 0x4f62450 0x4f629f8 0x4f62e50 0x53e80f8 0x53e8808 0x53ff100 0x54297c0 0x54807f8 0x54ff180 0x55761c0 0x55861a0 0x55b8c78 0x5672fc8 0x5a98e68 0x5a9a320 0x5a9c2e0 0x5a9e2a0 0x5a9f8e0 0x5aa0f20 0x5aa2560 0x56a12d0 0x56bb980 0x57eff28 0x57f0b90 0x57f15f8 0x57f2058 0x57f2b48 0x5897330 0x5897d30 0x5898730 0x58ac178 0x58ac6e0 | | | |-DeclRefExpr 0x7f24925452d8 <col:20> 'size_t':'unsigned long' lvalue Var 0x7f2492545200 'i' 'size_t':'unsigned long' | | | `-CallExpr 0x7f2492545458 <col:24, col:33> '<dependent type>' | | | `-CXXDependentScopeMemberExpr 0x7f2492545410 <col:24, col:28> '<dependent type>' lvalue .size | | | `-DeclRefExpr 0x7f24925453d0 <col:24> '<dependent type>' lvalue Var 0x7f2492545300 'idx' '<dependent type>' | | |-UnaryOperator 0x7f2492545738 <col:36, col:37> 'size_t':'unsigned long' postfix '++' | | | `-DeclRefExpr 0x7f2492545718 <col:36> 'size_t':'unsigned long' lvalue Var 0x7f2492545200 'i' 'size_t':'unsigned long' | | `-CompoundStmt 0x7f249254c0a8 <col:41, line:8:1> | | `-CXXOperatorCallExpr 0x7f249254c070 <line:6:4, line:7:50> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7f249254bd30 <col:42> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x5d33d98 0x47cdfd8 0x47cd938 0x5d31358 0x5d315e0 0x5d31870 0x5d31b00 0x5d31d90 0x5d32020 0x5d322b0 0x5d32540 0x5d327d0 0x5d32a60 0x5d32cf0 0x5d32f80 0x5d33210 0x5d334a0 0x5d33768 0x5d37288 0x5d398f8 0x5d40b98 0x5d41a88 0x5d4ef48 0x5d4f268 0x5d596b8 0x5d5a7b8 0x5d5baf8 0x5d5cec8 0x5d5e208 0x5d5f548 0x5d615f0 0x5fa8c48 0x5faa628 0x61850e8 0x4d25690 0x4d3eb98 0x516e9c8 0x5218780 0x52623d8 0x5262a78 0x5263118 0x52637a8 0x5263db0 0x52643c0 0x526b630 0x5265140 0x5265750 0x5265d90 0x526a218 0x52b90b0 0x4f60a00 0x53dd778 0x5481798 0x54dc178 0x54dd218 0x54de298 0x54df808 0x54e0918 0x54e1998 0x54e38b0 0x54e4990 0x55d8678 0x560dcb8 0x55e4d08 0x55e5c68 0x55e6bc8 0x55e7d48 0x5631128 0x55e8438 0x5646e88 0x55e9398 0x55ea2f8 0x55eb258 0x55f24c8 0x5617b38 0x561a160 0x561c838 0x5627628 0x562a2f8 0x562dae8 0x563ab88 0x563d6e0 0x5641a08 0x56443c8 0x5653ed8 0x5658c48 0x565d8e8 0x5aa3ba0 0x57daca8 0x57db940 0x57dc3a8 0x57dce08 0x57dd8f8 0x588fa70 0x58904d0 0x5890ed0 | | |-CXXOperatorCallExpr 0x7f249254bc90 <line:6:4, line:7:40> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7f249254b950 <col:22> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x5d33d98 0x47cdfd8 0x47cd938 0x5d31358 0x5d315e0 0x5d31870 0x5d31b00 0x5d31d90 0x5d32020 0x5d322b0 0x5d32540 0x5d327d0 0x5d32a60 0x5d32cf0 0x5d32f80 0x5d33210 0x5d334a0 0x5d33768 0x5d37288 0x5d398f8 0x5d40b98 0x5d41a88 0x5d4ef48 0x5d4f268 0x5d596b8 0x5d5a7b8 0x5d5baf8 0x5d5cec8 0x5d5e208 0x5d5f548 0x5d615f0 0x5fa8c48 0x5faa628 0x61850e8 0x4d25690 0x4d3eb98 0x516e9c8 0x5218780 0x52623d8 0x5262a78 0x5263118 0x52637a8 0x5263db0 0x52643c0 0x526b630 0x5265140 0x5265750 0x5265d90 0x526a218 0x52b90b0 0x4f60a00 0x53dd778 0x5481798 0x54dc178 0x54dd218 0x54de298 0x54df808 0x54e0918 0x54e1998 0x54e38b0 0x54e4990 0x55d8678 0x560dcb8 0x55e4d08 0x55e5c68 0x55e6bc8 0x55e7d48 0x5631128 0x55e8438 0x5646e88 0x55e9398 0x55ea2f8 0x55eb258 0x55f24c8 0x5617b38 0x561a160 0x561c838 0x5627628 0x562a2f8 0x562dae8 0x563ab88 0x563d6e0 0x5641a08 0x56443c8 0x5653ed8 0x5658c48 0x565d8e8 0x5aa3ba0 0x57daca8 0x57db940 0x57dc3a8 0x57dce08 0x57dd8f8 0x588fa70 0x58904d0 0x5890ed0 | | | |-CXXOperatorCallExpr 0x7f249254b898 <line:6:4, line:7:17> '<dependent type>' '<<' | | | | |-UnresolvedLookupExpr 0x7f249254b558 <col:14> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x5d33d98 0x47cdfd8 0x47cd938 0x5d31358 0x5d315e0 0x5d31870 0x5d31b00 0x5d31d90 0x5d32020 0x5d322b0 0x5d32540 0x5d327d0 0x5d32a60 0x5d32cf0 0x5d32f80 0x5d33210 0x5d334a0 0x5d33768 0x5d37288 0x5d398f8 0x5d40b98 0x5d41a88 0x5d4ef48 0x5d4f268 0x5d596b8 0x5d5a7b8 0x5d5baf8 0x5d5cec8 0x5d5e208 0x5d5f548 0x5d615f0 0x5fa8c48 0x5faa628 0x61850e8 0x4d25690 0x4d3eb98 0x516e9c8 0x5218780 0x52623d8 0x5262a78 0x5263118 0x52637a8 0x5263db0 0x52643c0 0x526b630 0x5265140 0x5265750 0x5265d90 0x526a218 0x52b90b0 0x4f60a00 0x53dd778 0x5481798 0x54dc178 0x54dd218 0x54de298 0x54df808 0x54e0918 0x54e1998 0x54e38b0 0x54e4990 0x55d8678 0x560dcb8 0x55e4d08 0x55e5c68 0x55e6bc8 0x55e7d48 0x5631128 0x55e8438 0x5646e88 0x55e9398 0x55ea2f8 0x55eb258 0x55f24c8 0x5617b38 0x561a160 0x561c838 0x5627628 0x562a2f8 0x562dae8 0x563ab88 0x563d6e0 0x5641a08 0x56443c8 0x5653ed8 0x5658c48 0x565d8e8 0x5aa3ba0 0x57daca8 0x57db940 0x57dc3a8 0x57dce08 0x57dd8f8 0x588fa70 0x58904d0 0x5890ed0 | | | | |-CXXOperatorCallExpr 0x7f249254b500 <line:6:4, col:78> '<dependent type>' '<<' | | | | | |-UnresolvedLookupExpr 0x7f249254b1c0 <col:61> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x5d33d98 0x47cdfd8 0x47cd938 0x5d31358 0x5d315e0 0x5d31870 0x5d31b00 0x5d31d90 0x5d32020 0x5d322b0 0x5d32540 0x5d327d0 0x5d32a60 0x5d32cf0 0x5d32f80 0x5d33210 0x5d334a0 0x5d33768 0x5d37288 0x5d398f8 0x5d40b98 0x5d41a88 0x5d4ef48 0x5d4f268 0x5d596b8 0x5d5a7b8 0x5d5baf8 0x5d5cec8 0x5d5e208 0x5d5f548 0x5d615f0 0x5fa8c48 0x5faa628 0x61850e8 0x4d25690 0x4d3eb98 0x516e9c8 0x5218780 0x52623d8 0x5262a78 0x5263118 0x52637a8 0x5263db0 0x52643c0 0x526b630 0x5265140 0x5265750 0x5265d90 0x526a218 0x52b90b0 0x4f60a00 0x53dd778 0x5481798 0x54dc178 0x54dd218 0x54de298 0x54df808 0x54e0918 0x54e1998 0x54e38b0 0x54e4990 0x55d8678 0x560dcb8 0x55e4d08 0x55e5c68 0x55e6bc8 0x55e7d48 0x5631128 0x55e8438 0x5646e88 0x55e9398 0x55ea2f8 0x55eb258 0x55f24c8 0x5617b38 0x561a160 0x561c838 0x5627628 0x562a2f8 0x562dae8 0x563ab88 0x563d6e0 0x5641a08 0x56443c8 0x5653ed8 0x5658c48 0x565d8e8 0x5aa3ba0 0x57daca8 0x57db940 0x57dc3a8 0x57dce08 0x57dd8f8 0x588fa70 0x58904d0 0x5890ed0 | | | | | |-CXXOperatorCallExpr 0x7f249254b108 <col:4, col:46> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | |-ImplicitCastExpr 0x7f249254b0f0 <col:43> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7f249254b0d0 <col:43> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x87e4cb8 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | |-CXXOperatorCallExpr 0x7f24925498c0 <col:4, col:41> '__ostream_type':'std::basic_ostream<char>' lvalue '<<' | | | | | | | |-ImplicitCastExpr 0x7f24925498a8 <col:34> '__ostream_type &(*)(unsigned long)' <FunctionToPointerDecay> | | | | | | | | `-DeclRefExpr 0x7f2492549888 <col:34> '__ostream_type &(unsigned long)' lvalue CXXMethod 0x8511488 'operator<<' '__ostream_type &(unsigned long)' | | | | | | | |-CXXOperatorCallExpr 0x7f2492547fe8 <col:4, col:17> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | | | |-ImplicitCastExpr 0x7f2492547fd0 <col:14> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | | | `-DeclRefExpr 0x7f2492547fb0 <col:14> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x87e4cb8 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | | | |-DeclRefExpr 0x7f24925457a0 <col:4, col:9> 'ostream':'std::basic_ostream<char>' lvalue Var 0x54fcf38 'cout' 'ostream':'std::basic_ostream<char>' | | | | | | | | `-ImplicitCastExpr 0x7f2492547f98 <col:17> 'const char *' <ArrayToPointerDecay> | | | | | | | | `-StringLiteral 0x7f24925457d0 <col:17> 'const char[15]' lvalue "Selected muon " | | | | | | | `-BinaryOperator 0x7f2492548090 <col:37, col:41> 'size_t':'unsigned long' '+' | | | | | | | |-ImplicitCastExpr 0x7f2492548060 <col:37> 'size_t':'unsigned long' <LValueToRValue> | | | | | | | | `-DeclRefExpr 0x7f2492548020 <col:37> 'size_t':'unsigned long' lvalue Var 0x7f2492545200 'i' 'size_t':'unsigned long' | | | | | | | `-ImplicitCastExpr 0x7f2492548078 <col:41> 'size_t':'unsigned long' <IntegralCast> | | | | | | | `-IntegerLiteral 0x7f2492548040 <col:41> 'int' 1 | | | | | | `-ImplicitCastExpr 0x7f249254b0b8 <col:46> 'const char *' <ArrayToPointerDecay> | | | | | | `-StringLiteral 0x7f24925498f8 <col:46> 'const char[13]' lvalue " (pt, eta): " | | | | | `-ArraySubscriptExpr 0x7f249254b1a0 <col:64, col:78> '<dependent type>' lvalue | | | | | |-DeclRefExpr 0x7f249254b140 <col:64> 'auto' lvalue Var 0x7f24925449a0 'good_muon_pt' 'auto' | | | | | `-DeclRefExpr 0x7f249254b180 <col:77> 'size_t':'unsigned long' lvalue Var 0x7f2492545200 'i' 'size_t':'unsigned long' | | | | `-StringLiteral 0x7f249254b538 <line:7:17> 'const char[3]' lvalue ", " | | | `-ArraySubscriptExpr 0x7f249254b930 <col:25, col:40> '<dependent type>' lvalue | | | |-DeclRefExpr 0x7f249254b8d0 <col:25> 'auto' lvalue Var 0x7f2492544e00 'good_muon_eta' 'auto' | | | `-DeclRefExpr 0x7f249254b910 <col:39> 'size_t':'unsigned long' lvalue Var 0x7f2492545200 'i' 'size_t':'unsigned long' | | `-UnresolvedLookupExpr 0x7f249254bce8 <col:45, col:50> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x52663d0 | `-NullStmt 0x7f249254c0f8 <line:9:1> |-AnnotateAttr 0x7f2492544a78 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f2492544b80 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f2492544cc0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f2492544ed8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f2492544fb0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f24925450f0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f2492545368 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>