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 Tuesday, March 19, 2024 at 07:22 PM.
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 0x7f8111029458 <input_line_52:1:1, line:4:1> line:1:6 __cling_Un1Qu320 'void (void *)' |-ParmVarDecl 0x7f81110293a0 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f8111042f08 <col:43, line:4:1> | |-DeclStmt 0x7f8111042ee8 <line:2:2, col:64> | | `-VarDecl 0x7f8111029570 <col:2, col:63> col:7 idx_select 'auto' cinit | | `-ExprWithCleanups 0x7f8111042ed0 <col:20, col:63> '<dependent type>' | | `-CallExpr 0x7f8111042ea8 <col:20, col:63> '<dependent type>' | | |-DeclRefExpr 0x7f81110297c0 <col:20> '<dependent type>' lvalue Var 0x7f81110296e8 'Nonzero' '<dependent type>' | | `-CXXBindTemporaryExpr 0x7f8111042e88 <col:28, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7f8111042e88) | | `-CXXOperatorCallExpr 0x7f81110427c0 <col:28, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' '&&' adl | | |-ImplicitCastExpr 0x7f81110427a8 <col:41> 'auto (*)(const RVec<int> &, const RVec<int> &) -> RVec<int>' <FunctionToPointerDecay> | | | `-DeclRefExpr 0x7f8111042730 <col:41> 'auto (const RVec<int> &, const RVec<int> &) -> RVec<int>' lvalue Function 0x7f81110420f0 'operator&&' 'auto (const RVec<int> &, const RVec<int> &) -> RVec<int>' | | |-MaterializeTemporaryExpr 0x7f81110426e8 <col:28, col:38> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' lvalue | | | `-ImplicitCastExpr 0x7f81110426d0 <col:28, col:38> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' <NoOp> | | | `-CXXBindTemporaryExpr 0x7f8111032ed0 <col:28, col:38> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7f8111032ed0) | | | `-CXXOperatorCallExpr 0x7f8111031f50 <col:28, col:38> 'RVec<int>':'ROOT::VecOps::RVec<int>' '>' adl | | | |-ImplicitCastExpr 0x7f8111031f38 <col:36> 'auto (*)(const RVec<float> &, const int &) -> RVec<int>' <FunctionToPointerDecay> | | | | `-DeclRefExpr 0x7f8111031ea0 <col:36> 'auto (const RVec<float> &, const int &) -> RVec<int>' lvalue Function 0x7f811102e6d0 'operator>' 'auto (const RVec<float> &, const int &) -> RVec<int>' | | | |-ImplicitCastExpr 0x7f8111031e58 <col:28> 'const RVec<float>':'const ROOT::VecOps::RVec<float>' lvalue <NoOp> | | | | `-DeclRefExpr 0x7f8111029800 <col:28> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x862e320 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | | `-MaterializeTemporaryExpr 0x7f8111031e88 <col:38> 'const int' lvalue | | | `-ImplicitCastExpr 0x7f8111031e70 <col:38> 'const int' <NoOp> | | | `-IntegerLiteral 0x7f8111029820 <col:38> 'int' 15 | | `-MaterializeTemporaryExpr 0x7f8111042718 <col:44, col:60> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' lvalue | | `-ImplicitCastExpr 0x7f8111042700 <col:44, col:60> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' <NoOp> | | `-CXXBindTemporaryExpr 0x7f811103d8b0 <col:44, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7f811103d8b0) | | `-CXXOperatorCallExpr 0x7f811103d870 <col:44, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' '<' adl | | |-ImplicitCastExpr 0x7f811103d858 <col:58> 'auto (*)(const RVec<float> &, const double &) -> RVec<int>' <FunctionToPointerDecay> | | | `-DeclRefExpr 0x7f811103d7b8 <col:58> 'auto (const RVec<float> &, const double &) -> RVec<int>' lvalue Function 0x7f8111039fd0 'operator<' 'auto (const RVec<float> &, const double &) -> RVec<int>' | | |-MaterializeTemporaryExpr 0x7f811103d770 <col:44, col:56> 'const RVec<PromoteType<float> >':'const ROOT::VecOps::RVec<float>' lvalue | | | `-ImplicitCastExpr 0x7f811103d758 <col:44, col:56> 'const RVec<PromoteType<float> >':'const ROOT::VecOps::RVec<float>' <NoOp> | | | `-CXXBindTemporaryExpr 0x7f8111034b68 <col:44, col:56> 'RVec<PromoteType<float> >':'ROOT::VecOps::RVec<float>' (CXXTemporary 0x7f8111034b68) | | | `-CallExpr 0x7f8111034b20 <col:44, col:56> 'RVec<PromoteType<float> >':'ROOT::VecOps::RVec<float>' adl | | | |-ImplicitCastExpr 0x7f8111034b08 <col:44> 'RVec<PromoteType<float> > (*)(const RVec<float> &)' <FunctionToPointerDecay> | | | | `-DeclRefExpr 0x7f8111034a88 <col:44> 'RVec<PromoteType<float> > (const RVec<float> &)' lvalue Function 0x7f8111034230 'abs' 'RVec<PromoteType<float> > (const RVec<float> &)' (FunctionTemplate 0x7f8111033270 'abs') | | | `-ImplicitCastExpr 0x7f8111034b48 <col:48> 'const RVec<float>':'const ROOT::VecOps::RVec<float>' lvalue <NoOp> | | | `-DeclRefExpr 0x7f8111032f78 <col:48> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x863ae38 'muon_eta' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-MaterializeTemporaryExpr 0x7f811103d7a0 <col:60> 'const double' lvalue | | `-ImplicitCastExpr 0x7f811103d788 <col:60> 'const double' <NoOp> | | `-FloatingLiteral 0x7f8111034b88 <col:60> 'double' 2.500000e+00 | `-NullStmt 0x7f8111042f00 <line:3:1> |-AnnotateAttr 0x7f8111029648 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f8111029750 <<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 0x7f8112547b58 <input_line_53:1:1, line:4:1> line:1:6 __cling_Un1Qu321 'void (void *)' |-ParmVarDecl 0x7f8112547aa0 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f8112548190 <col:43, line:4:1> | |-DeclStmt 0x7f8112548170 <line:2:2, col:43> | | `-VarDecl 0x7f8112547c70 <col:2, col:42> col:7 idx_sort 'auto' cinit | | `-CallExpr 0x7f8112548148 <col:18, col:42> '<dependent type>' | | |-DeclRefExpr 0x7f8112547ec0 <col:18> '<dependent type>' lvalue Var 0x7f8112547de8 'Reverse' '<dependent type>' | | `-CallExpr 0x7f8112548120 <col:26, col:41> '<dependent type>' | | |-DeclRefExpr 0x7f81125480c0 <col:26> '<dependent type>' lvalue Var 0x7f8112547fe8 'Argsort' '<dependent type>' | | `-DeclRefExpr 0x7f8112548100 <col:34> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x862e320 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | `-NullStmt 0x7f8112548188 <line:3:1> |-AnnotateAttr 0x7f8112547d48 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f8112547e50 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f8112547f70 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f8112548050 <<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 0x7f81125482d8 <input_line_54:1:1, line:4:1> line:1:6 __cling_Un1Qu322 'void (void *)' |-ParmVarDecl 0x7f8112548220 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f8112548910 <col:43, line:4:1> | |-DeclStmt 0x7f81125488f0 <line:2:2, col:44> | | `-VarDecl 0x7f81125483f0 <col:2, col:43> col:7 idx 'auto' cinit | | `-CallExpr 0x7f81125488c0 <col:13, col:43> '<dependent type>' | | |-DeclRefExpr 0x7f8112548640 <col:13> '<dependent type>' lvalue Var 0x7f8112548568 'Intersect' '<dependent type>' | | |-DeclRefExpr 0x7f8112548760 <col:23> '<dependent type>' lvalue Var 0x7f8112548688 'idx_sort' '<dependent type>' | | `-DeclRefExpr 0x7f8112548880 <col:33> '<dependent type>' lvalue Var 0x7f81125487a8 'idx_select' '<dependent type>' | `-NullStmt 0x7f8112548908 <line:3:1> |-AnnotateAttr 0x7f81125484c8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f81125485d0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f81125486f0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f8112548810 <<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 0x7f8112548a58 <input_line_55:1:1, line:10:1> line:1:6 __cling_Un1Qu323 'void (void *)' |-ParmVarDecl 0x7f81125489a0 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f81125502d0 <col:43, line:10:1> | |-DeclStmt 0x7f8112548f70 <line:2:2, col:40> | | `-VarDecl 0x7f8112548b70 <col:2, col:39> col:7 used good_muon_pt 'auto' cinit | | `-CallExpr 0x7f8112548f40 <col:22, col:39> '<dependent type>' | | |-DeclRefExpr 0x7f8112548dc0 <col:22> '<dependent type>' lvalue Var 0x7f8112548ce8 'Take' '<dependent type>' | | |-DeclRefExpr 0x7f8112548e00 <col:27> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x862e320 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-DeclRefExpr 0x7f8112548f00 <col:36> '<dependent type>' lvalue Var 0x7f8112548e28 'idx' '<dependent type>' | |-DeclStmt 0x7f81125493a0 <line:3:1, col:41> | | `-VarDecl 0x7f8112548fd0 <col:1, col:40> col:6 used good_muon_eta 'auto' cinit | | `-CallExpr 0x7f8112549370 <col:22, col:40> '<dependent type>' | | |-DeclRefExpr 0x7f81125491f0 <col:22> '<dependent type>' lvalue Var 0x7f8112549118 'Take' '<dependent type>' | | |-DeclRefExpr 0x7f8112549230 <col:27> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0x863ae38 'muon_eta' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-DeclRefExpr 0x7f8112549330 <col:37> '<dependent type>' lvalue Var 0x7f8112549258 'idx' '<dependent type>' | |-ForStmt 0x7f8112550290 <line:5:1, line:8:1> | | |-DeclStmt 0x7f8112549490 <line:5:6, col:18> | | | `-VarDecl 0x7f81125493d0 <col:6, col:17> col:13 used i 'size_t':'unsigned long' cinit | | | `-ImplicitCastExpr 0x7f8112549458 <col:17> 'size_t':'unsigned long' <IntegralCast> | | | `-IntegerLiteral 0x7f8112549438 <col:17> 'int' 0 | | |-<<<NULL>>> | | |-CXXOperatorCallExpr 0x7f81125498b0 <col:20, col:33> '<dependent type>' '<' | | | |-UnresolvedLookupExpr 0x7f8112549648 <col:22> '<overloaded function type>' lvalue (ADL) = 'operator<' 0x46058b8 0x46060b8 0x46068f8 0x4636350 0x5b32a40 0x5b3b000 0x62f7728 0x62f7ce0 0x62f82b0 0x5c41600 0x3fb84a8 0x484eb48 0x4850040 0x4858218 0x48587e0 0x4b12640 0x4b12c18 0x4b133b0 0x4b30468 0x4b30b78 0x4b31188 0x4b86130 0x4c25240 0x4cfba30 0x4cffd70 0x4d001f0 0x4d02170 0x4d02cf8 0x4e92f50 0x50113c8 0x5011f98 0x5136430 0x51370e0 0x5137b80 0x4d5f6c8 0x4d5fdc8 0x4d60308 0x4d6c640 0x4d6cbe8 0x4d6d040 0x51e4c58 0x51e5368 0x51f8500 0x52225d0 0x52758e8 0x52f7d20 0x536eb70 0x537eb80 0x53b1828 0x54739c8 0x58a1438 0x58a28f0 0x58a48b0 0x58a6870 0x58a7eb0 0x58a94f0 0x58aab30 0x54a23e0 0x54b4680 0x55e9bf8 0x55ea860 0x55eb2c8 0x55ebd28 0x55ec818 0x5687fb0 0x56889b0 0x56893b0 0x56a59e8 0x56a5f50 | | | |-DeclRefExpr 0x7f81125494a8 <col:20> 'size_t':'unsigned long' lvalue Var 0x7f81125493d0 'i' 'size_t':'unsigned long' | | | `-CallExpr 0x7f8112549628 <col:24, col:33> '<dependent type>' | | | `-CXXDependentScopeMemberExpr 0x7f81125495e0 <col:24, col:28> '<dependent type>' lvalue .size | | | `-DeclRefExpr 0x7f81125495a0 <col:24> '<dependent type>' lvalue Var 0x7f81125494d0 'idx' '<dependent type>' | | |-UnaryOperator 0x7f8112549908 <col:36, col:37> 'size_t':'unsigned long' postfix '++' | | | `-DeclRefExpr 0x7f81125498e8 <col:36> 'size_t':'unsigned long' lvalue Var 0x7f81125493d0 'i' 'size_t':'unsigned long' | | `-CompoundStmt 0x7f8112550278 <col:41, line:8:1> | | `-CXXOperatorCallExpr 0x7f8112550240 <line:6:4, line:7:50> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7f811254ff00 <col:42> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x46343c8 0x45e4e08 0x45e4768 0x4631988 0x4631c10 0x4631ea0 0x4632130 0x46323c0 0x4632650 0x46328e0 0x4632b70 0x4632e00 0x4633090 0x4633320 0x46335b0 0x4633840 0x4633ad0 0x4633d98 0x5b22218 0x5b24888 0x5b2bb28 0x5b2ca18 0x5b39e98 0x5b3a1b8 0x5b4c648 0x5b4d748 0x5b4ea88 0x5b4fe58 0x5b51198 0x5b524d8 0x5b54580 0x5dadaa8 0x5daf488 0x5f92298 0x4b17a80 0x4b36e38 0x4f67948 0x50115e0 0x5060148 0x50607e8 0x5060e88 0x5061518 0x5061b20 0x5062130 0x50693a0 0x5062eb0 0x50634c0 0x5063b00 0x5067f88 0x50b2040 0x4d6abf0 0x51da348 0x527e3e8 0x52d4d58 0x52d5df8 0x52d6e78 0x52d83e8 0x52d94f8 0x52da578 0x52dc490 0x52dd570 0x53d12b8 0x540a8c8 0x53dd948 0x53de8a8 0x53df808 0x53e0988 0x542db08 0x53e1078 0x5443968 0x53e1fd8 0x53e2f38 0x53e3e98 0x53eb108 0x5414548 0x5416b70 0x5419248 0x5424008 0x5426cd8 0x542a4c8 0x5437668 0x543a1c0 0x543e4e8 0x5440ea8 0x5450a98 0x5455808 0x545a4a8 0x58ac170 0x55dbf78 0x55dcc10 0x55dd678 0x55de0d8 0x55debc8 0x56806f0 0x5681150 0x5681b50 | | |-CXXOperatorCallExpr 0x7f811254fe60 <line:6:4, line:7:40> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7f811254fb20 <col:22> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x46343c8 0x45e4e08 0x45e4768 0x4631988 0x4631c10 0x4631ea0 0x4632130 0x46323c0 0x4632650 0x46328e0 0x4632b70 0x4632e00 0x4633090 0x4633320 0x46335b0 0x4633840 0x4633ad0 0x4633d98 0x5b22218 0x5b24888 0x5b2bb28 0x5b2ca18 0x5b39e98 0x5b3a1b8 0x5b4c648 0x5b4d748 0x5b4ea88 0x5b4fe58 0x5b51198 0x5b524d8 0x5b54580 0x5dadaa8 0x5daf488 0x5f92298 0x4b17a80 0x4b36e38 0x4f67948 0x50115e0 0x5060148 0x50607e8 0x5060e88 0x5061518 0x5061b20 0x5062130 0x50693a0 0x5062eb0 0x50634c0 0x5063b00 0x5067f88 0x50b2040 0x4d6abf0 0x51da348 0x527e3e8 0x52d4d58 0x52d5df8 0x52d6e78 0x52d83e8 0x52d94f8 0x52da578 0x52dc490 0x52dd570 0x53d12b8 0x540a8c8 0x53dd948 0x53de8a8 0x53df808 0x53e0988 0x542db08 0x53e1078 0x5443968 0x53e1fd8 0x53e2f38 0x53e3e98 0x53eb108 0x5414548 0x5416b70 0x5419248 0x5424008 0x5426cd8 0x542a4c8 0x5437668 0x543a1c0 0x543e4e8 0x5440ea8 0x5450a98 0x5455808 0x545a4a8 0x58ac170 0x55dbf78 0x55dcc10 0x55dd678 0x55de0d8 0x55debc8 0x56806f0 0x5681150 0x5681b50 | | | |-CXXOperatorCallExpr 0x7f811254fa68 <line:6:4, line:7:17> '<dependent type>' '<<' | | | | |-UnresolvedLookupExpr 0x7f811254f728 <col:14> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x46343c8 0x45e4e08 0x45e4768 0x4631988 0x4631c10 0x4631ea0 0x4632130 0x46323c0 0x4632650 0x46328e0 0x4632b70 0x4632e00 0x4633090 0x4633320 0x46335b0 0x4633840 0x4633ad0 0x4633d98 0x5b22218 0x5b24888 0x5b2bb28 0x5b2ca18 0x5b39e98 0x5b3a1b8 0x5b4c648 0x5b4d748 0x5b4ea88 0x5b4fe58 0x5b51198 0x5b524d8 0x5b54580 0x5dadaa8 0x5daf488 0x5f92298 0x4b17a80 0x4b36e38 0x4f67948 0x50115e0 0x5060148 0x50607e8 0x5060e88 0x5061518 0x5061b20 0x5062130 0x50693a0 0x5062eb0 0x50634c0 0x5063b00 0x5067f88 0x50b2040 0x4d6abf0 0x51da348 0x527e3e8 0x52d4d58 0x52d5df8 0x52d6e78 0x52d83e8 0x52d94f8 0x52da578 0x52dc490 0x52dd570 0x53d12b8 0x540a8c8 0x53dd948 0x53de8a8 0x53df808 0x53e0988 0x542db08 0x53e1078 0x5443968 0x53e1fd8 0x53e2f38 0x53e3e98 0x53eb108 0x5414548 0x5416b70 0x5419248 0x5424008 0x5426cd8 0x542a4c8 0x5437668 0x543a1c0 0x543e4e8 0x5440ea8 0x5450a98 0x5455808 0x545a4a8 0x58ac170 0x55dbf78 0x55dcc10 0x55dd678 0x55de0d8 0x55debc8 0x56806f0 0x5681150 0x5681b50 | | | | |-CXXOperatorCallExpr 0x7f811254f6d0 <line:6:4, col:78> '<dependent type>' '<<' | | | | | |-UnresolvedLookupExpr 0x7f811254f390 <col:61> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x46343c8 0x45e4e08 0x45e4768 0x4631988 0x4631c10 0x4631ea0 0x4632130 0x46323c0 0x4632650 0x46328e0 0x4632b70 0x4632e00 0x4633090 0x4633320 0x46335b0 0x4633840 0x4633ad0 0x4633d98 0x5b22218 0x5b24888 0x5b2bb28 0x5b2ca18 0x5b39e98 0x5b3a1b8 0x5b4c648 0x5b4d748 0x5b4ea88 0x5b4fe58 0x5b51198 0x5b524d8 0x5b54580 0x5dadaa8 0x5daf488 0x5f92298 0x4b17a80 0x4b36e38 0x4f67948 0x50115e0 0x5060148 0x50607e8 0x5060e88 0x5061518 0x5061b20 0x5062130 0x50693a0 0x5062eb0 0x50634c0 0x5063b00 0x5067f88 0x50b2040 0x4d6abf0 0x51da348 0x527e3e8 0x52d4d58 0x52d5df8 0x52d6e78 0x52d83e8 0x52d94f8 0x52da578 0x52dc490 0x52dd570 0x53d12b8 0x540a8c8 0x53dd948 0x53de8a8 0x53df808 0x53e0988 0x542db08 0x53e1078 0x5443968 0x53e1fd8 0x53e2f38 0x53e3e98 0x53eb108 0x5414548 0x5416b70 0x5419248 0x5424008 0x5426cd8 0x542a4c8 0x5437668 0x543a1c0 0x543e4e8 0x5440ea8 0x5450a98 0x5455808 0x545a4a8 0x58ac170 0x55dbf78 0x55dcc10 0x55dd678 0x55de0d8 0x55debc8 0x56806f0 0x5681150 0x5681b50 | | | | | |-CXXOperatorCallExpr 0x7f811254f2d8 <col:4, col:46> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | |-ImplicitCastExpr 0x7f811254f2c0 <col:43> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7f811254f2a0 <col:43> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x8641a18 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | |-CXXOperatorCallExpr 0x7f811254da90 <col:4, col:41> '__ostream_type':'std::basic_ostream<char>' lvalue '<<' | | | | | | | |-ImplicitCastExpr 0x7f811254da78 <col:34> '__ostream_type &(*)(unsigned long)' <FunctionToPointerDecay> | | | | | | | | `-DeclRefExpr 0x7f811254da58 <col:34> '__ostream_type &(unsigned long)' lvalue CXXMethod 0x83700f8 'operator<<' '__ostream_type &(unsigned long)' | | | | | | | |-CXXOperatorCallExpr 0x7f811254c1b8 <col:4, col:17> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | | | |-ImplicitCastExpr 0x7f811254c1a0 <col:14> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | | | `-DeclRefExpr 0x7f811254c180 <col:14> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x8641a18 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | | | |-DeclRefExpr 0x7f8112549970 <col:4, col:9> 'ostream':'std::basic_ostream<char>' lvalue Var 0x52f5ad8 'cout' 'ostream':'std::basic_ostream<char>' | | | | | | | | `-ImplicitCastExpr 0x7f811254c168 <col:17> 'const char *' <ArrayToPointerDecay> | | | | | | | | `-StringLiteral 0x7f81125499a0 <col:17> 'const char[15]' lvalue "Selected muon " | | | | | | | `-BinaryOperator 0x7f811254c260 <col:37, col:41> 'size_t':'unsigned long' '+' | | | | | | | |-ImplicitCastExpr 0x7f811254c230 <col:37> 'size_t':'unsigned long' <LValueToRValue> | | | | | | | | `-DeclRefExpr 0x7f811254c1f0 <col:37> 'size_t':'unsigned long' lvalue Var 0x7f81125493d0 'i' 'size_t':'unsigned long' | | | | | | | `-ImplicitCastExpr 0x7f811254c248 <col:41> 'size_t':'unsigned long' <IntegralCast> | | | | | | | `-IntegerLiteral 0x7f811254c210 <col:41> 'int' 1 | | | | | | `-ImplicitCastExpr 0x7f811254f288 <col:46> 'const char *' <ArrayToPointerDecay> | | | | | | `-StringLiteral 0x7f811254dac8 <col:46> 'const char[13]' lvalue " (pt, eta): " | | | | | `-ArraySubscriptExpr 0x7f811254f370 <col:64, col:78> '<dependent type>' lvalue | | | | | |-DeclRefExpr 0x7f811254f310 <col:64> 'auto' lvalue Var 0x7f8112548b70 'good_muon_pt' 'auto' | | | | | `-DeclRefExpr 0x7f811254f350 <col:77> 'size_t':'unsigned long' lvalue Var 0x7f81125493d0 'i' 'size_t':'unsigned long' | | | | `-StringLiteral 0x7f811254f708 <line:7:17> 'const char[3]' lvalue ", " | | | `-ArraySubscriptExpr 0x7f811254fb00 <col:25, col:40> '<dependent type>' lvalue | | | |-DeclRefExpr 0x7f811254faa0 <col:25> 'auto' lvalue Var 0x7f8112548fd0 'good_muon_eta' 'auto' | | | `-DeclRefExpr 0x7f811254fae0 <col:39> 'size_t':'unsigned long' lvalue Var 0x7f81125493d0 'i' 'size_t':'unsigned long' | | `-UnresolvedLookupExpr 0x7f811254feb8 <col:45, col:50> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x5064140 | `-NullStmt 0x7f81125502c8 <line:9:1> |-AnnotateAttr 0x7f8112548c48 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f8112548d50 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f8112548e90 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f81125490a8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f8112549180 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f81125492c0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f8112549538 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>