Skip to content

Commit

Permalink
implement % (thanks G. Petrucciani
Browse files Browse the repository at this point in the history
  • Loading branch information
swagata87 committed Aug 21, 2023
1 parent 6b4bfae commit 2321fd5
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 1 deletion.
5 changes: 5 additions & 0 deletions CommonTools/Utils/interface/ExpressionBinaryOperatorSetter.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ namespace reco {
T operator()(T lhs, T rhs) const { return pow(lhs, rhs); }
};

template <typename T>
struct int_div_remainder {
T operator()(T lhs, T rhs) const { return int(lhs) % int(rhs); }
};

template <typename Op>
struct ExpressionBinaryOperatorSetter {
ExpressionBinaryOperatorSetter(ExpressionStack& stack) : stack_(stack) {}
Expand Down
3 changes: 2 additions & 1 deletion CommonTools/Utils/interface/Grammar.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ namespace reco {
ExpressionBinaryOperatorSetter<minus<double> > minus_s(self.exprStack);
ExpressionBinaryOperatorSetter<multiplies<double> > multiplies_s(self.exprStack);
ExpressionBinaryOperatorSetter<divides<double> > divides_s(self.exprStack);
ExpressionBinaryOperatorSetter<int_div_remainder<double> > remainder_s(self.exprStack);
ExpressionBinaryOperatorSetter<power_of<double> > power_of_s(self.exprStack);
ExpressionUnaryOperatorSetter<negate<double> > negate_s(self.exprStack);
ExpressionFunctionSetter fun_s(self.exprStack, self.finalFunStack);
Expand Down Expand Up @@ -166,7 +167,7 @@ namespace reco {
nocond_expression = term >> (*(('+' >> expect(term))[plus_s] | ('-' >> expect(term))[minus_s]));
cond_expression = (ch_p('?') >> logical_expression >> ch_p('?') >> expect(expression) >> ch_p(":") >>
expect(expression))[cond_s];
term = power >> *(('*' >> expect(power))[multiplies_s] | ('/' >> expect(power))[divides_s]);
term = power >> *(('*' >> expect(power))[multiplies_s] | ('/' >> expect(power))[divides_s] | ('%' >> expect(power))[remainder_s]);
power = factor >> *(('^' >> expect(factor))[power_of_s]);
factor =
number | (function1 >> ch_p('(')[funOk_s] >> expect(expression) >> expectParenthesis(ch_p(')')))[fun_s] |
Expand Down
1 change: 1 addition & 0 deletions CommonTools/Utils/test/testExpressionParser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ void testExpressionParser::checkAll() {
checkTrack("covariance(1, 1)", trk.covariance(1, 1));
checkTrack("momentum.x", trk.momentum().x());
checkTrack("hitPattern.numberOfValidHits", trk.hitPattern().numberOfValidHits());
checkTrack("hitPattern.numberOfValidHits % 3", trk.hitPattern().numberOfValidHits() % 3);
checkTrack("extra.outerPhi", trk.extra()->outerPhi());
checkTrack("referencePoint.R", trk.referencePoint().R());
checkTrack("algo", reco::Track::pixelPairStep);
Expand Down

0 comments on commit 2321fd5

Please sign in to comment.