45 REQUIRE(specs[1].
left == (
DatumSpec{std::string{
"eta"}, 3, atype::FLOAT}));
53 REQUIRE(specs[3].
left == (
DatumSpec{std::string{
"phi"}, 2, atype::FLOAT}));
57 REQUIRE(specs[4].
left == (
DatumSpec{std::string{
"phi"}, 2, atype::FLOAT}));
71 REQUIRE(gspecs[2].
left == (
DatumSpec{std::string{
"phi"}, 2, atype::FLOAT}));
79 REQUIRE(gspecs[4].
left == (
DatumSpec{std::string{
"eta"}, 3, atype::FLOAT}));
90 REQUIRE(hspecs[1].
left == (
DatumSpec{std::string{
"phi"}, 2, atype::FLOAT}));
94 REQUIRE(hspecs[2].
left == (
DatumSpec{std::string{
"phi"}, 2, atype::FLOAT}));
112 REQUIRE(uspecs[3].
left == (
DatumSpec{std::string{
"phi"}, 2, atype::FLOAT}));
120 REQUIRE(uspecs[5].
left == (
DatumSpec{std::string{
"eta"}, 3, atype::FLOAT}));
125 Filter ptfilter = o2::aod::track::pt > pTCut;
126 REQUIRE(ptfilter.
node->self.index() == 2);
127 REQUIRE(ptfilter.
node->left->self.index() == 1);
128 REQUIRE(ptfilter.
node->right->self.index() == 3);
130 REQUIRE(ptfilterspecs[0].
left == (
DatumSpec{std::string{
"fPt"},
typeid(o2::aod::track::Pt).hash_code(), atype::FLOAT}));
135 std::string prefix =
"prefix";
138 Filter ptfilter2 = o2::aod::track::pt >
group.pTCut;
139 group.pTCut.name.insert(0, 1,
'.');
141 REQUIRE(ptfilter2.
node->self.index() == 2);
142 REQUIRE(ptfilter2.
node->left->self.index() == 1);
143 REQUIRE(ptfilter2.
node->right->self.index() == 3);
144 REQUIRE(std::get<PlaceholderNode>(ptfilter2.
node->right->self).name ==
"prefix.pTCut");
146 REQUIRE(ptfilterspecs2[0].
left == (
DatumSpec{std::string{
"fPt"},
typeid(o2::aod::track::Pt).hash_code(), atype::FLOAT}));
151 Filter testFilter = o2::aod::track::tpcNClsShared < as<uint8_t>(cvalue);
152 REQUIRE(testFilter.
node->self.index() == 2);
153 REQUIRE(testFilter.
node->left->self.index() == 1);
154 REQUIRE(testFilter.
node->right->self.index() == 3);
155 REQUIRE(std::get<PlaceholderNode>(testFilter.
node->right->self).name ==
"cvalue");
162 Projector pze = o2::aod::track::Pze::Projector();
164 REQUIRE(pzspecs[0].
left == (
DatumSpec{std::string{
"fTgl"},
typeid(o2::aod::track::Tgl).hash_code(), atype::FLOAT}));
169 REQUIRE(pzspecs[1].
right == (
DatumSpec{std::string{
"fSigned1Pt"},
typeid(o2::aod::track::Signed1Pt).hash_code(), atype::FLOAT}));
171 auto infield1 = o2::aod::track::Signed1Pt::asArrowField();
172 auto infield2 = o2::aod::track::Tgl::asArrowField();
173 auto resfield = o2::aod::track::Pze::asArrowField();
174 auto schema = std::make_shared<arrow::Schema>(std::vector{infield1, infield2, resfield});
178 REQUIRE(std::string(gandiva_expression->ToString()) == std::string(
"float multiply((float) fTgl, float divide((const float) 1 raw(3f800000), (float) fSigned1Pt))"));
181 Projector pte = o2::aod::track::Pt::Projector();
184 auto infield3 = o2::aod::track::Signed1Pt::asArrowField();
185 auto resfield2 = o2::aod::track::Pt::asArrowField();
186 auto schema2 = std::make_shared<arrow::Schema>(std::vector{infield3, resfield2});
189 auto gandiva_expression2 =
makeExpression(gandiva_tree2, resfield2);
190 REQUIRE(gandiva_expression2->ToString() ==
"if (bool less_than_or_equal_to(float absf((float) fSigned1Pt), (const float) 1.17549e-38 raw(800000))) { (const float) 8.50706e+37 raw(7e800000) } else { float absf(float divide((const float) 1 raw(3f800000), (float) fSigned1Pt)) }");
194 auto schema_p = std::make_shared<arrow::Schema>(fields);
203 REQUIRE(bwf[1].
left == (
DatumSpec{std::string{
"fFlags"},
typeid(o2::aod::track::Flags).hash_code(), atype::UINT32}));
207 auto infield4 = o2::aod::track::Flags::asArrowField();
208 auto resfield3 = std::make_shared<arrow::Field>(
"out", arrow::boolean());
209 auto schema_b = std::make_shared<arrow::Schema>(std::vector{infield4, resfield3});
211 REQUIRE(gandiva_tree3->ToString() ==
"bool not_equal(uint32 bitwise_and((uint32) fFlags, (const uint32) 2), (const uint32) 0)");
213 std::shared_ptr<gandiva::Filter> flt;
214 auto s = gandiva::Filter::Make(schema_b, condition, &flt);
217 Filter rounding = nround(o2::aod::track::pt) > 0.1f;
223 REQUIRE(rf[1].
left == (
DatumSpec{std::string{
"fPt"},
typeid(o2::aod::track::Pt).hash_code(), atype::FLOAT}));
227 auto infield5 = o2::aod::track::Pt::asArrowField();
228 auto resfield4 = std::make_shared<arrow::Field>(
"out", arrow::boolean());
229 auto schema_c = std::make_shared<arrow::Schema>(std::vector{infield5, resfield4});
231 REQUIRE(gandiva_tree4->ToString() ==
"bool greater_than(float round((float) fPt), (const float) 0.1 raw(3dcccccd))");
233 std::shared_ptr<gandiva::Filter> flt2;
234 auto s2 = gandiva::Filter::Make(schema_c, condition2, &flt2);
241 Filter cf = nabs(o2::aod::track::eta) < 1.0f &&
ifnode((o2::aod::track::pt < 1.0f), (o2::aod::track::phi > (
float)(M_PI / 2.)), (o2::aod::track::phi < (
float)(M_PI / 2.)));
249 REQUIRE(cfspecs[1].condition == (
DatumSpec{5u, atype::BOOL}));
252 REQUIRE(cfspecs[2].
left == (
DatumSpec{std::string{
"fPt"},
typeid(o2::aod::track::Pt).hash_code(), atype::FLOAT}));
256 REQUIRE(cfspecs[3].
left == (
DatumSpec{std::string{
"fPhi"},
typeid(o2::aod::track::Phi).hash_code(), atype::FLOAT}));
260 REQUIRE(cfspecs[4].
left == (
DatumSpec{std::string{
"fPhi"},
typeid(o2::aod::track::Phi).hash_code(), atype::FLOAT}));
268 REQUIRE(cfspecs[6].
left == (
DatumSpec{std::string{
"fEta"},
typeid(o2::aod::track::Eta).hash_code(), atype::FLOAT}));
272 auto infield1 = o2::aod::track::Pt::asArrowField();
273 auto infield2 = o2::aod::track::Eta::asArrowField();
274 auto infield3 = o2::aod::track::Phi::asArrowField();
275 auto schema = std::make_shared<arrow::Schema>(std::vector{infield1, infield2, infield3});
278 auto gandiva_filter =
createFilter(schema, gandiva_condition);
280 REQUIRE(gandiva_tree->ToString() ==
"bool less_than(float absf((float) fEta), (const float) 1 raw(3f800000)) && if (bool less_than((float) fPt, (const float) 1 raw(3f800000))) { bool greater_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb)) } else { bool less_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb)) }");
283 Filter cfn = o2::aod::track::signed1Pt > 0.f &&
ifnode(std::move(*cf.
node), nabs(o2::aod::track::x) > 1.0f, nabs(o2::aod::track::y) > 1.0f);
285 auto infield4 = o2::aod::track::Signed1Pt::asArrowField();
286 auto infield5 = o2::aod::track::X::asArrowField();
287 auto infield6 = o2::aod::track::Y::asArrowField();
288 auto schema2 = std::make_shared<arrow::Schema>(std::vector{infield1, infield2, infield3, infield4, infield5, infield6});
291 auto gandiva_filter2 =
createFilter(schema2, gandiva_condition2);
292 REQUIRE(gandiva_tree2->ToString() ==
"bool greater_than((float) fSigned1Pt, (const float) 0 raw(0)) && if (bool less_than(float absf((float) fEta), (const float) 1 raw(3f800000)) && if (bool less_than((float) fPt, (const float) 1 raw(3f800000))) { bool greater_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb)) } else { bool less_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb)) }) { bool greater_than(float absf((float) fX), (const float) 1 raw(3f800000)) } else { bool greater_than(float absf((float) fY), (const float) 1 raw(3f800000)) }");
297 auto schemaclp = std::make_shared<arrow::Schema>(std::vector{o2::aod::track::Pt::asArrowField()});
299 REQUIRE(gandiva_tree_clp->ToString() ==
"if (bool less_than((float) fPt, (const float) 1 raw(3f800000))) { (const float) 1 raw(3f800000) } else { if (bool greater_than((float) fPt, (const float) 10 raw(41200000))) { (const float) 10 raw(41200000) } else { (float) fPt } }");
304 std::vector<float>
bins{0.5, 1.5, 2.5, 3.5, 4.5};
305 std::vector<float>
params{1.0, 1.1, 1.2, 1.3, 2.0, 2.1, 2.2, 2.3, 3.0, 3.1, 3.2, 3.3, 4.0, 4.1, 4.2, 4.3};
308 auto schema = std::make_shared<arrow::Schema>(std::vector{o2::aod::track::Pt::asArrowField(), o2::aod::track::X::asArrowField(), o2::aod::track::Y::asArrowField(), o2::aod::track::Z::asArrowField(), o2::aod::track::Phi::asArrowField()});
310 REQUIRE(
tree->ToString() ==
"if (bool less_than((float) fPt, (const float) 0.5 raw(3f000000))) { (const float) 0 raw(0) } else { if (bool less_than((float) fPt, (const float) 1.5 raw(3fc00000))) { float add(float add(float add(float multiply((const float) 1 raw(3f800000), (float) fX), float multiply((const float) 2 raw(40000000), (float) fY)), float multiply((const float) 3 raw(40400000), (float) fZ)), float multiply((const float) 4 raw(40800000), (float) fPhi)) } else { if (bool less_than((float) fPt, (const float) 2.5 raw(40200000))) { float add(float add(float add(float multiply((const float) 1.1 raw(3f8ccccd), (float) fX), float multiply((const float) 2.1 raw(40066666), (float) fY)), float multiply((const float) 3.1 raw(40466666), (float) fZ)), float multiply((const float) 4.1 raw(40833333), (float) fPhi)) } else { if (bool less_than((float) fPt, (const float) 3.5 raw(40600000))) { float add(float add(float add(float multiply((const float) 1.2 raw(3f99999a), (float) fX), float multiply((const float) 2.2 raw(400ccccd), (float) fY)), float multiply((const float) 3.2 raw(404ccccd), (float) fZ)), float multiply((const float) 4.2 raw(40866666), (float) fPhi)) } else { if (bool less_than((float) fPt, (const float) 4.5 raw(40900000))) { float add(float add(float add(float multiply((const float) 1.3 raw(3fa66666), (float) fX), float multiply((const float) 2.3 raw(40133333), (float) fY)), float multiply((const float) 3.3 raw(40533333), (float) fZ)), float multiply((const float) 4.3 raw(4089999a), (float) fPhi)) } else { (const float) 0 raw(0) } } } } }");
313 std::vector<float> parameters{1.0, 1.1, 1.2, 1.3,
319 (std::vector<float>)parameters,
320 o2::aod::track::phi,
par(0) * o2::aod::track::x * o2::aod::track::x +
par(1) * o2::aod::track::y * o2::aod::track::y +
par(2) * o2::aod::track::z * o2::aod::track::z,
323 auto schema2 = std::make_shared<arrow::Schema>(std::vector{o2::aod::track::Phi::asArrowField(), o2::aod::track::X::asArrowField(), o2::aod::track::Y::asArrowField(), o2::aod::track::Z::asArrowField()});
325 REQUIRE(tree2->ToString() ==
"if (bool less_than((float) fPhi, (const float) 0 raw(0))) { (const float) -1 raw(bf800000) } else { if (bool less_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb))) { float add(float add(float multiply(float multiply((const float) 1 raw(3f800000), (float) fX), (float) fX), float multiply(float multiply((const float) 2 raw(40000000), (float) fY), (float) fY)), float multiply(float multiply((const float) 3 raw(40400000), (float) fZ), (float) fZ)) } else { if (bool less_than((float) fPhi, (const float) 3.14159 raw(40490fdb))) { float add(float add(float multiply(float multiply((const float) 1.1 raw(3f8ccccd), (float) fX), (float) fX), float multiply(float multiply((const float) 2.1 raw(40066666), (float) fY), (float) fY)), float multiply(float multiply((const float) 3.1 raw(40466666), (float) fZ), (float) fZ)) } else { if (bool less_than((float) fPhi, (const float) 4.71239 raw(4096cbe4))) { float add(float add(float multiply(float multiply((const float) 1.2 raw(3f99999a), (float) fX), (float) fX), float multiply(float multiply((const float) 2.2 raw(400ccccd), (float) fY), (float) fY)), float multiply(float multiply((const float) 3.2 raw(404ccccd), (float) fZ), (float) fZ)) } else { if (bool less_than((float) fPhi, (const float) 6.28319 raw(40c90fdb))) { float add(float add(float multiply(float multiply((const float) 1.3 raw(3fa66666), (float) fX), (float) fX), float multiply(float multiply((const float) 2.3 raw(40133333), (float) fY), (float) fY)), float multiply(float multiply((const float) 3.3 raw(40533333), (float) fZ), (float) fZ)) } else { (const float) -1 raw(bf800000) } } } } }");