Skip to content

Commit

Permalink
Merge pull request #11516 from Dr15Jones/formulaEvaluator_7_6
Browse files Browse the repository at this point in the history
Added a formula evaluator to replace TFormula calls
  • Loading branch information
davidlange6 committed Sep 30, 2015
2 parents 2a871dd + 61a724b commit 4140f59
Show file tree
Hide file tree
Showing 16 changed files with 1,560 additions and 1 deletion.
81 changes: 81 additions & 0 deletions CommonTools/Utils/interface/FormulaEvaluator.h
@@ -0,0 +1,81 @@
#ifndef CommonTools_Utils_FormulaEvaluator_h
#define CommonTools_Utils_FormulaEvaluator_h
// -*- C++ -*-
//
// Package: CommonTools/Utils
// Class : FormulaEvaluator
//
/**\class FormulaEvaluator FormulaEvaluator.h "CommonTools/Utils/interface/FormulaEvaluator.h"
Description: [one line class summary]
Usage:
<usage>
*/
//
// Original Author: Christopher Jones
// Created: Wed, 23 Sep 2015 21:12:11 GMT
//

// system include files
#include <array>
#include <vector>
#include <memory>

// user include files

// forward declarations
namespace reco {
namespace formula {
class EvaluatorBase;
inline double const* startingAddress(std::vector<double> const& iV) {
if(iV.empty()) {
return nullptr;
}
return &iV[0];
}

template<size_t t>
inline double const* startingAddress(std::array<double,t> const& iV) {
if(iV.empty()) {
return nullptr;
}
return &iV[0];
}

}

class FormulaEvaluator
{

public:
explicit FormulaEvaluator(std::string const& iFormula);

template<typename V, typename P>
double evaluate( V const& iVariables, P const& iParameters) const {
if (m_nVariables > iVariables.size()) {
throwWrongNumberOfVariables(iVariables.size());
}
if (m_nParameters > iParameters.size()) {
throwWrongNumberOfParameters(iParameters.size());
}
return evaluate( formula::startingAddress(iVariables),
formula::startingAddress(iParameters));
}
// ---------- const member functions ---------------------

private:
double evaluate(double const* iVariables, double const* iParameters) const;

void throwWrongNumberOfVariables(size_t) const ;
void throwWrongNumberOfParameters(size_t) const;

std::shared_ptr<formula::EvaluatorBase const> m_evaluator;
unsigned int m_nVariables = 0;
unsigned int m_nParameters = 0;

};
}

#endif

0 comments on commit 4140f59

Please sign in to comment.