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}));
153 Projector pze = o2::aod::track::Pze::Projector();
155 REQUIRE(pzspecs[0].
left == (
DatumSpec{std::string{
"fTgl"},
typeid(o2::aod::track::Tgl).hash_code(), atype::FLOAT}));
160 REQUIRE(pzspecs[1].
right == (
DatumSpec{std::string{
"fSigned1Pt"},
typeid(o2::aod::track::Signed1Pt).hash_code(), atype::FLOAT}));
162 auto infield1 = o2::aod::track::Signed1Pt::asArrowField();
163 auto infield2 = o2::aod::track::Tgl::asArrowField();
164 auto resfield = o2::aod::track::Pze::asArrowField();
165 auto schema = std::make_shared<arrow::Schema>(std::vector{infield1, infield2, resfield});
169 REQUIRE(std::string(gandiva_expression->ToString()) == std::string(
"float multiply((float) fTgl, float divide((const float) 1 raw(3f800000), (float) fSigned1Pt))"));
172 Projector pte = o2::aod::track::Pt::Projector();
175 auto infield3 = o2::aod::track::Signed1Pt::asArrowField();
176 auto resfield2 = o2::aod::track::Pt::asArrowField();
177 auto schema2 = std::make_shared<arrow::Schema>(std::vector{infield3, resfield2});
180 auto gandiva_expression2 =
makeExpression(gandiva_tree2, resfield2);
181 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)) }");
185 auto schema_p = std::make_shared<arrow::Schema>(fields);
194 REQUIRE(bwf[1].
left == (
DatumSpec{std::string{
"fFlags"},
typeid(o2::aod::track::Flags).hash_code(), atype::UINT32}));
198 auto infield4 = o2::aod::track::Flags::asArrowField();
199 auto resfield3 = std::make_shared<arrow::Field>(
"out", arrow::boolean());
200 auto schema_b = std::make_shared<arrow::Schema>(std::vector{infield4, resfield3});
202 REQUIRE(gandiva_tree3->ToString() ==
"bool not_equal(uint32 bitwise_and((uint32) fFlags, (const uint32) 2), (const uint32) 0)");
204 std::shared_ptr<gandiva::Filter> flt;
205 auto s = gandiva::Filter::Make(schema_b, condition, &flt);
208 Filter rounding = nround(o2::aod::track::pt) > 0.1f;
214 REQUIRE(rf[1].
left == (
DatumSpec{std::string{
"fPt"},
typeid(o2::aod::track::Pt).hash_code(), atype::FLOAT}));
218 auto infield5 = o2::aod::track::Pt::asArrowField();
219 auto resfield4 = std::make_shared<arrow::Field>(
"out", arrow::boolean());
220 auto schema_c = std::make_shared<arrow::Schema>(std::vector{infield5, resfield4});
222 REQUIRE(gandiva_tree4->ToString() ==
"bool greater_than(float round((float) fPt), (const float) 0.1 raw(3dcccccd))");
224 std::shared_ptr<gandiva::Filter> flt2;
225 auto s2 = gandiva::Filter::Make(schema_c, condition2, &flt2);
232 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.)));
240 REQUIRE(cfspecs[1].condition == (
DatumSpec{5u, atype::BOOL}));
243 REQUIRE(cfspecs[2].
left == (
DatumSpec{std::string{
"fPt"},
typeid(o2::aod::track::Pt).hash_code(), atype::FLOAT}));
247 REQUIRE(cfspecs[3].
left == (
DatumSpec{std::string{
"fPhi"},
typeid(o2::aod::track::Phi).hash_code(), atype::FLOAT}));
251 REQUIRE(cfspecs[4].
left == (
DatumSpec{std::string{
"fPhi"},
typeid(o2::aod::track::Phi).hash_code(), atype::FLOAT}));
259 REQUIRE(cfspecs[6].
left == (
DatumSpec{std::string{
"fEta"},
typeid(o2::aod::track::Eta).hash_code(), atype::FLOAT}));
263 auto infield1 = o2::aod::track::Pt::asArrowField();
264 auto infield2 = o2::aod::track::Eta::asArrowField();
265 auto infield3 = o2::aod::track::Phi::asArrowField();
266 auto schema = std::make_shared<arrow::Schema>(std::vector{infield1, infield2, infield3});
269 auto gandiva_filter =
createFilter(schema, gandiva_condition);
271 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)) }");
274 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);
276 auto infield4 = o2::aod::track::Signed1Pt::asArrowField();
277 auto infield5 = o2::aod::track::X::asArrowField();
278 auto infield6 = o2::aod::track::Y::asArrowField();
279 auto schema2 = std::make_shared<arrow::Schema>(std::vector{infield1, infield2, infield3, infield4, infield5, infield6});
282 auto gandiva_filter2 =
createFilter(schema2, gandiva_condition2);
283 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)) }");
288 std::vector<float>
bins{0.5, 1.5, 2.5, 3.5, 4.5};
289 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};
292 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()});
294 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) } } } } }");
297 std::vector<float> parameters{1.0, 1.1, 1.2, 1.3,
303 (std::vector<float>)parameters,
304 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,
307 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()});
309 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) } } } } }");