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 28, 2023 at 10:03 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 0x7fcab6865a28 <input_line_52:1:1, line:4:1> line:1:6 __cling_Un1Qu320 'void (void *)' |-ParmVarDecl 0x7fcab6865970 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7fcab6df8f38 <col:43, line:4:1> | |-DeclStmt 0x7fcab6df8f18 <line:2:2, col:64> | | `-VarDecl 0x7fcab6865b30 <col:2, col:63> col:7 idx_select 'auto' cinit | | `-ExprWithCleanups 0x7fcab6df8f00 <col:20, col:63> '<dependent type>' | | `-CallExpr 0x7fcab6df8ed8 <col:20, col:63> '<dependent type>' | | |-DeclRefExpr 0x7fcab6865d60 <col:20> '<dependent type>' lvalue Var 0x7fcab6865c98 'Nonzero' '<dependent type>' | | `-CXXBindTemporaryExpr 0x7fcab6df8eb8 <col:28, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7fcab6df8eb8) | | `-CXXOperatorCallExpr 0x7fcab6df87f0 <col:28, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' '&&' adl | | |-ImplicitCastExpr 0x7fcab6df87d8 <col:41> 'auto (*)(const RVec<int> &, const RVec<int> &) -> RVec<int>' <FunctionToPointerDecay> | | | `-DeclRefExpr 0x7fcab6df8760 <col:41> 'auto (const RVec<int> &, const RVec<int> &) -> RVec<int>' lvalue Function 0x7fcab6df81b8 'operator&&' 'auto (const RVec<int> &, const RVec<int> &) -> RVec<int>' | | |-MaterializeTemporaryExpr 0x7fcab6df8718 <col:28, col:38> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' lvalue | | | `-ImplicitCastExpr 0x7fcab6df8700 <col:28, col:38> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' <NoOp> | | | `-CXXBindTemporaryExpr 0x7fcab688fc38 <col:28, col:38> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7fcab688fc38) | | | `-CXXOperatorCallExpr 0x7fcab688ec40 <col:28, col:38> 'RVec<int>':'ROOT::VecOps::RVec<int>' '>' adl | | | |-ImplicitCastExpr 0x7fcab688ec28 <col:36> 'auto (*)(const RVec<float> &, const int &) -> RVec<int>' <FunctionToPointerDecay> | | | | `-DeclRefExpr 0x7fcab688eb88 <col:36> 'auto (const RVec<float> &, const int &) -> RVec<int>' lvalue Function 0x7fcab688b3c0 'operator>' 'auto (const RVec<float> &, const int &) -> RVec<int>' | | | |-ImplicitCastExpr 0x7fcab688eb40 <col:28> 'const RVec<float>':'const ROOT::VecOps::RVec<float>' lvalue <NoOp> | | | | `-DeclRefExpr 0x7fcab6865da0 <col:28> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0xb38ad10 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | | `-MaterializeTemporaryExpr 0x7fcab688eb70 <col:38> 'const int' lvalue | | | `-ImplicitCastExpr 0x7fcab688eb58 <col:38> 'const int' <NoOp> | | | `-IntegerLiteral 0x7fcab6865dc0 <col:38> 'int' 15 | | `-MaterializeTemporaryExpr 0x7fcab6df8748 <col:44, col:60> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' lvalue | | `-ImplicitCastExpr 0x7fcab6df8730 <col:44, col:60> 'const RVec<int>':'const ROOT::VecOps::RVec<int>' <NoOp> | | `-CXXBindTemporaryExpr 0x7fcab6df41b0 <col:44, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' (CXXTemporary 0x7fcab6df41b0) | | `-CXXOperatorCallExpr 0x7fcab6df4170 <col:44, col:60> 'RVec<int>':'ROOT::VecOps::RVec<int>' '<' adl | | |-ImplicitCastExpr 0x7fcab6df4158 <col:58> 'auto (*)(const RVec<float> &, const double &) -> RVec<int>' <FunctionToPointerDecay> | | | `-DeclRefExpr 0x7fcab6df40c0 <col:58> 'auto (const RVec<float> &, const double &) -> RVec<int>' lvalue Function 0x7fcab6df08e0 'operator<' 'auto (const RVec<float> &, const double &) -> RVec<int>' | | |-MaterializeTemporaryExpr 0x7fcab6df4078 <col:44, col:56> 'const RVec<PromoteType<float> >':'const ROOT::VecOps::RVec<float>' lvalue | | | `-ImplicitCastExpr 0x7fcab6df4060 <col:44, col:56> 'const RVec<PromoteType<float> >':'const ROOT::VecOps::RVec<float>' <NoOp> | | | `-CXXBindTemporaryExpr 0x7fcab6891798 <col:44, col:56> 'RVec<PromoteType<float> >':'ROOT::VecOps::RVec<float>' (CXXTemporary 0x7fcab6891798) | | | `-CallExpr 0x7fcab6891750 <col:44, col:56> 'RVec<PromoteType<float> >':'ROOT::VecOps::RVec<float>' adl | | | |-ImplicitCastExpr 0x7fcab6891738 <col:44> 'RVec<PromoteType<float> > (*)(const RVec<float> &)' <FunctionToPointerDecay> | | | | `-DeclRefExpr 0x7fcab68916b0 <col:44> 'RVec<PromoteType<float> > (const RVec<float> &)' lvalue Function 0x7fcab6890ef0 'abs' 'RVec<PromoteType<float> > (const RVec<float> &)' (FunctionTemplate 0x7fcab688ffd8 'abs') | | | `-ImplicitCastExpr 0x7fcab6891778 <col:48> 'const RVec<float>':'const ROOT::VecOps::RVec<float>' lvalue <NoOp> | | | `-DeclRefExpr 0x7fcab688fce0 <col:48> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0xb397758 'muon_eta' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-MaterializeTemporaryExpr 0x7fcab6df40a8 <col:60> 'const double' lvalue | | `-ImplicitCastExpr 0x7fcab6df4090 <col:60> 'const double' <NoOp> | | `-FloatingLiteral 0x7fcab68917b8 <col:60> 'double' 2.500000e+00 | `-NullStmt 0x7fcab6df8f30 <line:3:1> |-AnnotateAttr 0x7fcab6865c08 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7fcab6865d00 <<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 0x7fcab7d9b5e8 <input_line_53:1:1, line:4:1> line:1:6 __cling_Un1Qu321 'void (void *)' |-ParmVarDecl 0x7fcab7d9b530 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7fcab7d9bbd0 <col:43, line:4:1> | |-DeclStmt 0x7fcab7d9bbb0 <line:2:2, col:43> | | `-VarDecl 0x7fcab7d9b6f0 <col:2, col:42> col:7 idx_sort 'auto' cinit | | `-CallExpr 0x7fcab7d9bb88 <col:18, col:42> '<dependent type>' | | |-DeclRefExpr 0x7fcab7d9b920 <col:18> '<dependent type>' lvalue Var 0x7fcab7d9b858 'Reverse' '<dependent type>' | | `-CallExpr 0x7fcab7d9bb60 <col:26, col:41> '<dependent type>' | | |-DeclRefExpr 0x7fcab7d9bb00 <col:26> '<dependent type>' lvalue Var 0x7fcab7d9ba38 'Argsort' '<dependent type>' | | `-DeclRefExpr 0x7fcab7d9bb40 <col:34> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0xb38ad10 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | `-NullStmt 0x7fcab7d9bbc8 <line:3:1> |-AnnotateAttr 0x7fcab7d9b7c8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9b8c0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9b9d0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7fcab7d9baa0 <<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 0x7fcab7d9bd18 <input_line_54:1:1, line:4:1> line:1:6 __cling_Un1Qu322 'void (void *)' |-ParmVarDecl 0x7fcab7d9bc60 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7fcab7d9c300 <col:43, line:4:1> | |-DeclStmt 0x7fcab7d9c2e0 <line:2:2, col:44> | | `-VarDecl 0x7fcab7d9be20 <col:2, col:43> col:7 idx 'auto' cinit | | `-CallExpr 0x7fcab7d9c2b0 <col:13, col:43> '<dependent type>' | | |-DeclRefExpr 0x7fcab7d9c050 <col:13> '<dependent type>' lvalue Var 0x7fcab7d9bf88 'Intersect' '<dependent type>' | | |-DeclRefExpr 0x7fcab7d9c160 <col:23> '<dependent type>' lvalue Var 0x7fcab7d9c098 'idx_sort' '<dependent type>' | | `-DeclRefExpr 0x7fcab7d9c270 <col:33> '<dependent type>' lvalue Var 0x7fcab7d9c1a8 'idx_select' '<dependent type>' | `-NullStmt 0x7fcab7d9c2f8 <line:3:1> |-AnnotateAttr 0x7fcab7d9bef8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9bff0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9c100 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7fcab7d9c210 <<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 0x7fcab7d9c448 <input_line_55:1:1, line:10:1> line:1:6 __cling_Un1Qu323 'void (void *)' |-ParmVarDecl 0x7fcab7d9c390 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7fcab7da2858 <col:43, line:10:1> | |-DeclStmt 0x7fcab7d9c920 <line:2:2, col:40> | | `-VarDecl 0x7fcab7d9c550 <col:2, col:39> col:7 used good_muon_pt 'auto' cinit | | `-CallExpr 0x7fcab7d9c8f0 <col:22, col:39> '<dependent type>' | | |-DeclRefExpr 0x7fcab7d9c780 <col:22> '<dependent type>' lvalue Var 0x7fcab7d9c6b8 'Take' '<dependent type>' | | |-DeclRefExpr 0x7fcab7d9c7c0 <col:27> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0xb38ad10 'muon_pt' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-DeclRefExpr 0x7fcab7d9c8b0 <col:36> '<dependent type>' lvalue Var 0x7fcab7d9c7e8 'idx' '<dependent type>' | |-DeclStmt 0x7fcab7d9cd20 <line:3:1, col:41> | | `-VarDecl 0x7fcab7d9c978 <col:1, col:40> col:6 used good_muon_eta 'auto' cinit | | `-CallExpr 0x7fcab7d9ccf0 <col:22, col:40> '<dependent type>' | | |-DeclRefExpr 0x7fcab7d9cb80 <col:22> '<dependent type>' lvalue Var 0x7fcab7d9cab8 'Take' '<dependent type>' | | |-DeclRefExpr 0x7fcab7d9cbc0 <col:27> 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' lvalue Var 0xb397758 'muon_eta' 'ROOT::RVecF':'ROOT::VecOps::RVec<float>' | | `-DeclRefExpr 0x7fcab7d9ccb0 <col:37> '<dependent type>' lvalue Var 0x7fcab7d9cbe8 'idx' '<dependent type>' | |-ForStmt 0x7fcab7da2818 <line:5:1, line:8:1> | | |-DeclStmt 0x7fcab7d9ce10 <line:5:6, col:18> | | | `-VarDecl 0x7fcab7d9cd50 <col:6, col:17> col:13 used i 'size_t':'unsigned long' cinit | | | `-ImplicitCastExpr 0x7fcab7d9cdd8 <col:17> 'size_t':'unsigned long' <IntegralCast> | | | `-IntegerLiteral 0x7fcab7d9cdb8 <col:17> 'int' 0 | | |-<<<NULL>>> | | |-CXXOperatorCallExpr 0x7fcab7d9d220 <col:20, col:33> '<dependent type>' '<' | | | |-UnresolvedLookupExpr 0x7fcab7d9cfb8 <col:22> '<overloaded function type>' lvalue (ADL) = 'operator<' 0x39b9cd8 0x39ba478 0x39bac78 0x39e9280 0x3a0d3e0 0x3a15490 0x52ba170 0x52ba698 0x52babd8 0x4cc2f48 0x38fb328 0x39a4330 0x39a56a8 0x3280b48 0x32810b0 0x3d44320 0x3d44888 0x3d44f90 0x3d57670 0x3d57d20 0x3d58300 0x3da43d0 0x3e50df0 0x3f5f4f0 0x3f67518 0x3f67d18 0x3f6bb78 0x3f6d098 0x3b74508 0x421b2c0 0x421bdc0 0x4321b40 0x4322760 0x43231a0 0x4368658 0x4368d00 0x4369228 0x43ad9f0 0x43adfb8 0x43ae458 0x43c7338 0x43c79f0 0x43e8c38 0x4409638 0x4455418 0x44c2940 0x3f5fa48 0x453b230 0x4569ff0 0x3f60930 0x49471f8 0x4948538 0x495ebb8 0x4960938 0x4961eb8 0x4963438 0x49649b8 0x465e618 0x4670438 0x477f8f0 0x4780490 0x4780e50 0x4781810 0x4782230 0x481a168 0x481aaa8 0x481b418 0x4838158 0x4838668 | | | |-DeclRefExpr 0x7fcab7d9ce28 <col:20> 'size_t':'unsigned long' lvalue Var 0x7fcab7d9cd50 'i' 'size_t':'unsigned long' | | | `-CallExpr 0x7fcab7d9cf98 <col:24, col:33> '<dependent type>' | | | `-CXXDependentScopeMemberExpr 0x7fcab7d9cf50 <col:24, col:28> '<dependent type>' lvalue .size | | | `-DeclRefExpr 0x7fcab7d9cf10 <col:24> '<dependent type>' lvalue Var 0x7fcab7d9ce50 'idx' '<dependent type>' | | |-UnaryOperator 0x7fcab7d9d278 <col:36, col:37> 'size_t':'unsigned long' postfix '++' | | | `-DeclRefExpr 0x7fcab7d9d258 <col:36> 'size_t':'unsigned long' lvalue Var 0x7fcab7d9cd50 'i' 'size_t':'unsigned long' | | `-CompoundStmt 0x7fcab7da2800 <col:41, line:8:1> | | `-CXXOperatorCallExpr 0x7fcab7da27c8 <line:6:4, line:7:50> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7fcab7da2480 <col:42> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x39e7470 0x4ac8a18 0x4ac8440 0x39e4c60 0x39e4ed0 0x39e5140 0x39e53b0 0x39e5620 0x39e5890 0x39e5b00 0x39e5d70 0x39e5fe0 0x39e6250 0x39e64c0 0x39e6730 0x39e69a0 0x39e6c10 0x39e6eb0 0x39ea6a0 0x39ecb20 0x39f39e8 0x39f4718 0x3a14490 0x3a147a0 0x3a1df98 0x3a1eef8 0x3a20088 0x3a212a8 0x3a22438 0x3a235c8 0x3a25490 0x4d57ed8 0x4d5ace8 0x34723d0 0x34728d8 0x3d490e0 0x3d66ae0 0x417fd40 0x421b4c0 0x426a858 0x426ae98 0x426b4d8 0x426bb10 0x426c0b8 0x426c668 0x4273390 0x426d320 0x426d8c8 0x426dea8 0x4272060 0x42b2688 0x43a99d0 0x43bc938 0x4456398 0x44aea08 0x44b3498 0x44b43e8 0x44b5818 0x44b67c8 0x44b7718 0x44b94b8 0x44ba488 0x4588538 0x45b94f8 0x45946e8 0x45955e0 0x45964e0 0x4598a30 0x45e1330 0x4599110 0x45f6b80 0x459a010 0x459af10 0x459be10 0x45a29f0 0x45c3f08 0x45c64c0 0x45c8ac8 0x45d7c30 0x45da7b0 0x45dde40 0x45eaca0 0x45ed760 0x45f18d0 0x45f41c0 0x4603bb0 0x4608770 0x460d260 0x4965f38 0x4772b90 0x4773730 0x47740f0 0x4774ab0 0x47754d0 0x4813028 0x48139c8 0x4814338 | | |-CXXOperatorCallExpr 0x7fcab7da23e0 <line:6:4, line:7:40> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7fcab7da2098 <col:22> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x39e7470 0x4ac8a18 0x4ac8440 0x39e4c60 0x39e4ed0 0x39e5140 0x39e53b0 0x39e5620 0x39e5890 0x39e5b00 0x39e5d70 0x39e5fe0 0x39e6250 0x39e64c0 0x39e6730 0x39e69a0 0x39e6c10 0x39e6eb0 0x39ea6a0 0x39ecb20 0x39f39e8 0x39f4718 0x3a14490 0x3a147a0 0x3a1df98 0x3a1eef8 0x3a20088 0x3a212a8 0x3a22438 0x3a235c8 0x3a25490 0x4d57ed8 0x4d5ace8 0x34723d0 0x34728d8 0x3d490e0 0x3d66ae0 0x417fd40 0x421b4c0 0x426a858 0x426ae98 0x426b4d8 0x426bb10 0x426c0b8 0x426c668 0x4273390 0x426d320 0x426d8c8 0x426dea8 0x4272060 0x42b2688 0x43a99d0 0x43bc938 0x4456398 0x44aea08 0x44b3498 0x44b43e8 0x44b5818 0x44b67c8 0x44b7718 0x44b94b8 0x44ba488 0x4588538 0x45b94f8 0x45946e8 0x45955e0 0x45964e0 0x4598a30 0x45e1330 0x4599110 0x45f6b80 0x459a010 0x459af10 0x459be10 0x45a29f0 0x45c3f08 0x45c64c0 0x45c8ac8 0x45d7c30 0x45da7b0 0x45dde40 0x45eaca0 0x45ed760 0x45f18d0 0x45f41c0 0x4603bb0 0x4608770 0x460d260 0x4965f38 0x4772b90 0x4773730 0x47740f0 0x4774ab0 0x47754d0 0x4813028 0x48139c8 0x4814338 | | | |-CXXOperatorCallExpr 0x7fcab7da1fe0 <line:6:4, line:7:17> '<dependent type>' '<<' | | | | |-UnresolvedLookupExpr 0x7fcab7da1c98 <col:14> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x39e7470 0x4ac8a18 0x4ac8440 0x39e4c60 0x39e4ed0 0x39e5140 0x39e53b0 0x39e5620 0x39e5890 0x39e5b00 0x39e5d70 0x39e5fe0 0x39e6250 0x39e64c0 0x39e6730 0x39e69a0 0x39e6c10 0x39e6eb0 0x39ea6a0 0x39ecb20 0x39f39e8 0x39f4718 0x3a14490 0x3a147a0 0x3a1df98 0x3a1eef8 0x3a20088 0x3a212a8 0x3a22438 0x3a235c8 0x3a25490 0x4d57ed8 0x4d5ace8 0x34723d0 0x34728d8 0x3d490e0 0x3d66ae0 0x417fd40 0x421b4c0 0x426a858 0x426ae98 0x426b4d8 0x426bb10 0x426c0b8 0x426c668 0x4273390 0x426d320 0x426d8c8 0x426dea8 0x4272060 0x42b2688 0x43a99d0 0x43bc938 0x4456398 0x44aea08 0x44b3498 0x44b43e8 0x44b5818 0x44b67c8 0x44b7718 0x44b94b8 0x44ba488 0x4588538 0x45b94f8 0x45946e8 0x45955e0 0x45964e0 0x4598a30 0x45e1330 0x4599110 0x45f6b80 0x459a010 0x459af10 0x459be10 0x45a29f0 0x45c3f08 0x45c64c0 0x45c8ac8 0x45d7c30 0x45da7b0 0x45dde40 0x45eaca0 0x45ed760 0x45f18d0 0x45f41c0 0x4603bb0 0x4608770 0x460d260 0x4965f38 0x4772b90 0x4773730 0x47740f0 0x4774ab0 0x47754d0 0x4813028 0x48139c8 0x4814338 | | | | |-CXXOperatorCallExpr 0x7fcab7da1c40 <line:6:4, col:78> '<dependent type>' '<<' | | | | | |-UnresolvedLookupExpr 0x7fcab7da18f8 <col:61> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x39e7470 0x4ac8a18 0x4ac8440 0x39e4c60 0x39e4ed0 0x39e5140 0x39e53b0 0x39e5620 0x39e5890 0x39e5b00 0x39e5d70 0x39e5fe0 0x39e6250 0x39e64c0 0x39e6730 0x39e69a0 0x39e6c10 0x39e6eb0 0x39ea6a0 0x39ecb20 0x39f39e8 0x39f4718 0x3a14490 0x3a147a0 0x3a1df98 0x3a1eef8 0x3a20088 0x3a212a8 0x3a22438 0x3a235c8 0x3a25490 0x4d57ed8 0x4d5ace8 0x34723d0 0x34728d8 0x3d490e0 0x3d66ae0 0x417fd40 0x421b4c0 0x426a858 0x426ae98 0x426b4d8 0x426bb10 0x426c0b8 0x426c668 0x4273390 0x426d320 0x426d8c8 0x426dea8 0x4272060 0x42b2688 0x43a99d0 0x43bc938 0x4456398 0x44aea08 0x44b3498 0x44b43e8 0x44b5818 0x44b67c8 0x44b7718 0x44b94b8 0x44ba488 0x4588538 0x45b94f8 0x45946e8 0x45955e0 0x45964e0 0x4598a30 0x45e1330 0x4599110 0x45f6b80 0x459a010 0x459af10 0x459be10 0x45a29f0 0x45c3f08 0x45c64c0 0x45c8ac8 0x45d7c30 0x45da7b0 0x45dde40 0x45eaca0 0x45ed760 0x45f18d0 0x45f41c0 0x4603bb0 0x4608770 0x460d260 0x4965f38 0x4772b90 0x4773730 0x47740f0 0x4774ab0 0x47754d0 0x4813028 0x48139c8 0x4814338 | | | | | |-CXXOperatorCallExpr 0x7fcab7da1840 <col:4, col:46> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | |-ImplicitCastExpr 0x7fcab7da1828 <col:43> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7fcab7da1808 <col:43> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' lvalue Function 0x7fcab4068b30 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' | | | | | | |-CXXOperatorCallExpr 0x7fcab7da02b8 <col:4, col:41> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type':'std::basic_ostream<char>' lvalue '<<' | | | | | | | |-ImplicitCastExpr 0x7fcab7da02a0 <col:34> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(*)(unsigned long)' <FunctionToPointerDecay> | | | | | | | | `-DeclRefExpr 0x7fcab7da0280 <col:34> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(unsigned long)' lvalue CXXMethod 0xaf71200 'operator<<' 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(unsigned long)' | | | | | | | |-CXXOperatorCallExpr 0x7fcab7d9eca0 <col:4, col:17> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | | | |-ImplicitCastExpr 0x7fcab7d9ec88 <col:14> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | | | `-DeclRefExpr 0x7fcab7d9ec68 <col:14> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' lvalue Function 0x7fcab4068b30 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' | | | | | | | | |-DeclRefExpr 0x7fcab7d9d2e0 <col:4, col:9> 'std::ostream':'std::basic_ostream<char>' lvalue Var 0x44c0550 'cout' 'std::ostream':'std::basic_ostream<char>' | | | | | | | | `-ImplicitCastExpr 0x7fcab7d9ec50 <col:17> 'const char *' <ArrayToPointerDecay> | | | | | | | | `-StringLiteral 0x7fcab7d9d310 <col:17> 'const char [15]' lvalue "Selected muon " | | | | | | | `-BinaryOperator 0x7fcab7d9ed48 <col:37, col:41> 'unsigned long' '+' | | | | | | | |-ImplicitCastExpr 0x7fcab7d9ed18 <col:37> 'size_t':'unsigned long' <LValueToRValue> | | | | | | | | `-DeclRefExpr 0x7fcab7d9ecd8 <col:37> 'size_t':'unsigned long' lvalue Var 0x7fcab7d9cd50 'i' 'size_t':'unsigned long' | | | | | | | `-ImplicitCastExpr 0x7fcab7d9ed30 <col:41> 'unsigned long' <IntegralCast> | | | | | | | `-IntegerLiteral 0x7fcab7d9ecf8 <col:41> 'int' 1 | | | | | | `-ImplicitCastExpr 0x7fcab7da17f0 <col:46> 'const char *' <ArrayToPointerDecay> | | | | | | `-StringLiteral 0x7fcab7da02f0 <col:46> 'const char [13]' lvalue " (pt, eta): " | | | | | `-ArraySubscriptExpr 0x7fcab7da18d8 <col:64, col:78> '<dependent type>' lvalue | | | | | |-DeclRefExpr 0x7fcab7da1878 <col:64> 'auto' lvalue Var 0x7fcab7d9c550 'good_muon_pt' 'auto' | | | | | `-DeclRefExpr 0x7fcab7da18b8 <col:77> 'size_t':'unsigned long' lvalue Var 0x7fcab7d9cd50 'i' 'size_t':'unsigned long' | | | | `-StringLiteral 0x7fcab7da1c78 <line:7:17> 'const char [3]' lvalue ", " | | | `-ArraySubscriptExpr 0x7fcab7da2078 <col:25, col:40> '<dependent type>' lvalue | | | |-DeclRefExpr 0x7fcab7da2018 <col:25> 'auto' lvalue Var 0x7fcab7d9c978 'good_muon_eta' 'auto' | | | `-DeclRefExpr 0x7fcab7da2058 <col:39> 'size_t':'unsigned long' lvalue Var 0x7fcab7d9cd50 'i' 'size_t':'unsigned long' | | `-UnresolvedLookupExpr 0x7fcab7da2438 <col:45, col:50> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x426e488 | `-NullStmt 0x7fcab7da2850 <line:9:1> |-AnnotateAttr 0x7fcab7d9c628 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9c720 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9c850 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9ca50 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9cb20 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7fcab7d9cc50 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7fcab7d9ceb8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>