diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/Evaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/Evaluator.h index 6578a1dbca68051d49578b2c2ae79c55cc722564..a1b75a8f109c9e34532541e79c91b40a0a2e16d1 100755 --- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/Evaluator.h +++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/Evaluator.h @@ -6,24 +6,11 @@ #define HEP_EVALUATOR_H #include <string> + #include "ExpressionEvaluator/IEvaluator.h" -// namespace HepTool { +namespace GeoModelTools { -/** - * Evaluator of arithmetic expressions with an extendable dictionary. - * Example: - * @code - * #include "CLHEP/Evaluator/Evaluator.h" - * HepTool::Evaluator eval; - * eval.setStdMath(); - * double res = eval.evaluate("sin(30*degree)"); - * if (eval.status() != HepTool::Evaluator::OK) eval.print_error(); - * @endcode - * - * @author Evgeni Chernyaev <Evgueni.Tcherniaev@cern.ch> - * @ingroup evaluator - */ class Evaluator: public IEvaluator { public: @@ -260,6 +247,6 @@ private: // Evaluator & operator=(const Evaluator &); // assignment is not allowed }; -// } // namespace HepTool +} #endif /* HEP_EVALUATOR_H */ diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExpressionEvaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExpressionEvaluator.h index 00cef79deebcda85bb3a6bccdde086644e4fb550..f57dea50b702c9e08cf9d00959011eba47404e21 100644 --- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExpressionEvaluator.h +++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExpressionEvaluator.h @@ -7,12 +7,14 @@ #ifndef EXPRESSION_EVALUATOR_H #define EXPRESSION_EVALUATOR_H 1 -#include "ExpressionEvaluator/ExprtkEvaluator.h" - #include <string> #include <vector> #include <map> +#include "ExpressionEvaluator/ExprtkEvaluator.h" + +namespace GeoModelTools { + class ExpressionEvaluator { public: @@ -39,4 +41,6 @@ private: void replace_substring(std::string& , const std::string , const std::string ); }; +} + #endif // GDML_EXPRESSION_EVALUATOR_H diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExprtkEvaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExprtkEvaluator.h index cfb5980835301c3751f905a3ea319af74eecab73..709ab972dbae594d64770d1049c6c91e3de53b66 100755 --- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExprtkEvaluator.h +++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExprtkEvaluator.h @@ -21,6 +21,9 @@ typedef exprtk::parser<T> parser_t; typedef std::map<std::string,std::vector<double> > vectorMap; typedef std::map<std::string,double> variableMap; + +namespace GeoModelTools { + /* Evaluator based on exprtk (see https://www.partow.net/programming/exprtk/index.html) */ @@ -41,7 +44,7 @@ public: double evaluate(const char * expression); - int status() const; +int status() const; int error_position() const; @@ -100,5 +103,6 @@ private: }; +} #endif diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h index 82ed3b78a2a66682dc9b9c715f92638add19c718..4c2a867694561c4089ac0496e2572609d0aaa10d 100755 --- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h +++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h @@ -7,6 +7,7 @@ #include <string> +namespace GeoModelTools { /** * IEvaluator: base class for Evaluator @@ -14,6 +15,11 @@ class IEvaluator { public: + enum { + OK, /**< Everything OK */ + ERROR + }; + IEvaluator() {;} /** @@ -75,4 +81,6 @@ private: // IEvaluator & operator=(const IEvaluator &); // assignment is not allowed }; +} + #endif /* HEP_EVALUATOR_H */ diff --git a/GeoModelTools/ExpressionEvaluator/src/Evaluator.cxx b/GeoModelTools/ExpressionEvaluator/src/Evaluator.cxx index 9e3145d161b343578d495e102a3559c1e058a163..e27a0418e31bab263feb22ae0e44e112c4661e39 100755 --- a/GeoModelTools/ExpressionEvaluator/src/Evaluator.cxx +++ b/GeoModelTools/ExpressionEvaluator/src/Evaluator.cxx @@ -16,6 +16,8 @@ #include <errno.h> #include <stdlib.h> // for strtod() +using namespace GeoModelTools; + //--------------------------------------------------------------------------- // Fix non ISO C++ compliant cast from pointer to function // to void*, which is a pointer to an object diff --git a/GeoModelTools/ExpressionEvaluator/src/ExpressionEvaluator.cxx b/GeoModelTools/ExpressionEvaluator/src/ExpressionEvaluator.cxx index 2ad4a65167858827880f39cf56565e6c1e721e85..63c4489f1115568c0cffe14bc518155b5e2db4f3 100644 --- a/GeoModelTools/ExpressionEvaluator/src/ExpressionEvaluator.cxx +++ b/GeoModelTools/ExpressionEvaluator/src/ExpressionEvaluator.cxx @@ -10,6 +10,8 @@ #include <vector> #include <iostream> +using namespace GeoModelTools; + ExpressionEvaluator::ExpressionEvaluator() { m_calc.clear(); diff --git a/GeoModelTools/ExpressionEvaluator/src/ExprtkEvaluator.cxx b/GeoModelTools/ExpressionEvaluator/src/ExprtkEvaluator.cxx index c28044b6224cba3007bbf6e38ffba70409c99adb..324dd3373aca156b0fea5839fa81b3fb02854577 100755 --- a/GeoModelTools/ExpressionEvaluator/src/ExprtkEvaluator.cxx +++ b/GeoModelTools/ExpressionEvaluator/src/ExprtkEvaluator.cxx @@ -4,6 +4,8 @@ #include <iostream> +using namespace GeoModelTools; + ExprtkEvaluator::ExprtkEvaluator() { // std::cout<<" ########### new ExprtkEvaluator being created "<<std::endl; diff --git a/GeoModelTools/ExpressionEvaluator/src/setStdMath.cxx b/GeoModelTools/ExpressionEvaluator/src/setStdMath.cxx index 79d1a6655d272492e25bd6f3b42c2928d8b9a6b4..7726eb408ff43f1067696ea57efef38aa92395e1 100755 --- a/GeoModelTools/ExpressionEvaluator/src/setStdMath.cxx +++ b/GeoModelTools/ExpressionEvaluator/src/setStdMath.cxx @@ -28,7 +28,7 @@ static double eval_log10(double a) { return std::log10(a); } //namespace HepTool { -void Evaluator::setStdMath() { +void GeoModelTools::Evaluator::setStdMath() { // S E T S T A N D A R D C O N S T A N T S diff --git a/GeoModelTools/ExpressionEvaluator/src/setSystemOfUnits.cxx b/GeoModelTools/ExpressionEvaluator/src/setSystemOfUnits.cxx index adc7e33e40e05b4ede00ca9301168230305d37c3..8b25e8b75395b7210d7b47f93df1b11a3653f235 100644 --- a/GeoModelTools/ExpressionEvaluator/src/setSystemOfUnits.cxx +++ b/GeoModelTools/ExpressionEvaluator/src/setSystemOfUnits.cxx @@ -7,7 +7,7 @@ // namespace HepTool { -void IEvaluator::setSystemOfUnits(double meter, +void GeoModelTools::IEvaluator::setSystemOfUnits(double meter, double kilogram, double second, double ampere, diff --git a/GeoModelTools/GDMLtoGM/GDMLInterface/GDMLController.h b/GeoModelTools/GDMLtoGM/GDMLInterface/GDMLController.h index 4d3d265775a02e63ff50141027b6735f13e95645..e2a707e59f67d688fadb495963d925932455ab75 100644 --- a/GeoModelTools/GDMLtoGM/GDMLInterface/GDMLController.h +++ b/GeoModelTools/GDMLtoGM/GDMLInterface/GDMLController.h @@ -34,7 +34,7 @@ typedef std::map<std::string, GeoElement*, std::less<std::string> > elementStore class GDMLController { public: GDMLController(std::string); - ExpressionEvaluator* Evaluator(); + GeoModelTools::ExpressionEvaluator* Evaluator(); GeoModelTools::XMLHandlerStore* XMLStore(); void saveIsotope(std::string, isotope); @@ -71,7 +71,7 @@ protected: void setConstant(const char*, double); std::string controllerName; - ExpressionEvaluator* theEvaluator; + GeoModelTools::ExpressionEvaluator* theEvaluator; GeoModelTools::XMLHandlerStore* theXMLStore; isotopeStore theIsotopes; diff --git a/GeoModelTools/GDMLtoGM/src/GDMLController.cxx b/GeoModelTools/GDMLtoGM/src/GDMLController.cxx index 92b9bfe3e642e49ca76e94815da1d4ac7d17ba7c..914cb4ab8257c86981259ccd1a739c899f7c7cac 100644 --- a/GeoModelTools/GDMLtoGM/src/GDMLController.cxx +++ b/GeoModelTools/GDMLtoGM/src/GDMLController.cxx @@ -24,12 +24,12 @@ std::string stripPointer(const std::string str) GDMLController::GDMLController(std::string name): controllerName(name) { theXMLStore=GeoModelTools::XMLHandlerStore::GetHandlerStore(); - theEvaluator=ExpressionEvaluator::GetEvaluator(); + theEvaluator=GeoModelTools::ExpressionEvaluator::GetEvaluator(); registerHandlers(); } -ExpressionEvaluator* GDMLController::Evaluator() +GeoModelTools::ExpressionEvaluator* GDMLController::Evaluator() { return theEvaluator; } diff --git a/GeoModelTools/GDMLtoGM/src/constantHandler.cxx b/GeoModelTools/GDMLtoGM/src/constantHandler.cxx index 24eca07545a8ee736a2bd7b4c8d2729685540f17..1a69afd6bddfcfbb423baa3eaf39d7f9e2102041 100644 --- a/GeoModelTools/GDMLtoGM/src/constantHandler.cxx +++ b/GeoModelTools/GDMLtoGM/src/constantHandler.cxx @@ -22,5 +22,5 @@ void constantHandler::ElementHandle() std::cout<<" Warning, <quantity /> tag requires an unit attribute to be defined!!!!"<<std::endl; std::string type=getAttributeAsString("type","density"); } - ExpressionEvaluator::GetEvaluator()->RegisterConstant(name,value*lunit); + GeoModelTools::ExpressionEvaluator::GetEvaluator()->RegisterConstant(name,value*lunit); } diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h index 2ea56c3318b0356a2dff1e9fd9de20a3b31ed83d..02a66de20dfa5cabf34980102dc8c77484775bf8 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h +++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h @@ -52,7 +52,7 @@ XERCES_CPP_NAMESPACE_BEGIN class DOMNode; XERCES_CPP_NAMESPACE_END -class Evaluator; +class IEvaluator; #define processorList std::map<std::string,ElementProcessor*> @@ -64,7 +64,7 @@ private: Gmx2Geo(const Gmx2Geo &right); Gmx2Geo & operator=(const Gmx2Geo &right); - int doDefines(xercesc::DOMDocument *doc, Evaluator &eval); + int doDefines(xercesc::DOMDocument *doc, GeoModelTools::IEvaluator &eval); int doPositionIndex(xercesc::DOMDocument *doc, GmxUtil &gmxUtil); int doReadoutGeometry(xercesc::DOMDocument *doc, GmxUtil &gmxUtil); void addParam(xercesc::DOMNode *node, std::map<std::string, std::string> ¶ms); diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h index a82983d4c7726f5dd2c368212cfa51c8bbb55b6f..b27cc1619d7e54c576dbba6e6e73b935e9d3b9c0 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h +++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h @@ -66,7 +66,7 @@ public: GmxInterface *gmxInterface(); double evaluate(char const *expression); std::string debracket(std::string expression); - Evaluator eval; + GeoModelTools::Evaluator eval; PositionIndex positionIndex; MaterialManager* matManager=0; ProcessorRegistry processorRegistry; diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/PositionIndex.h b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/PositionIndex.h index 31a722b30cc44dfbe4ff55bd13ff113f6687851c..e6fcf4e028ff8ec000ee458abbff7eb123678fad 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/PositionIndex.h +++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/PositionIndex.h @@ -20,7 +20,7 @@ #include <map> #include <string> -class Evaluator; +class IEvaluator; class PositionIndex { public: @@ -39,7 +39,7 @@ public: std::string formula(const std::string& name); void setFormula(const std::string& name, const std::string& formula); - void indices(std::map<std::string, int> &index, Evaluator &eval); + void indices(std::map<std::string, int> &index, GeoModelTools::IEvaluator &eval); private: int m_level; diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx index b7e5c7fcbb8101badf1e44ae12a313decbc6bb70..a674ffc52c78fcded174ba1c4f2e7fde9c2da4de 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx +++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx @@ -17,7 +17,7 @@ #include "GeoModelKernel/GeoPhysVol.h" -#include "ExpressionEvaluator/Evaluator.h" +#include "ExpressionEvaluator/IEvaluator.h" #include "xercesc/util/XMLString.hpp" #include "GeoModelXml/GeoNodeList.h" @@ -111,7 +111,7 @@ Gmx2Geo::Gmx2Geo(const string& xmlFile, GeoPhysVol *addHere, GmxInterface &gmxIn XMLPlatformUtils::Terminate(); } -int Gmx2Geo::doDefines(DOMDocument *doc, Evaluator &eval) { +int Gmx2Geo::doDefines(DOMDocument *doc, GeoModelTools::IEvaluator &eval) { // // Add all defines to the CLHEP::Evaluator // @@ -214,7 +214,7 @@ const DOMElement *element; char *name = XMLString::transcode(var->getAttribute(name_tmp)); char *val = XMLString::transcode(var->getAttribute(value_tmp)); double evaluated = eval.evaluate(val); - if (eval.status() != Evaluator::OK) { + if (eval.status() != GeoModelTools::IEvaluator::OK) { msglog << MSG::FATAL << "GeoModelXml Error processing CLHEP Evaluator expression. Error name " << eval.error_name() << endl << "Message: "; eval.print_error(); diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx index 6b9b86a757af5df3e91c88cf08220d1cf414d448..6ca7f8a6bb39028608701d1eba33525746c8c95c 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx +++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx @@ -105,7 +105,7 @@ double GmxUtil::evaluate(char const *expression) { // And evaluate the result // double result = eval.evaluate(noBrackets.c_str()); - if (eval.status() != Evaluator::OK) { + if (eval.status() != GeoModelTools::Evaluator::OK) { throw runtime_error(string("evaluate: invalid expression. Last good expression was <" + lastGoodExpression + ">")); } lastGoodExpression = strExpression; diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx index c1833bb35b9e79483b7afb85d230540c829ed1f2..486a8322d56d92fe109111e9c4306ec5a2ec5aa0 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx +++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx @@ -6,7 +6,7 @@ #include "OutputDirector.h" #include <vector> #include <string> -#include "ExpressionEvaluator/Evaluator.h" +#include "ExpressionEvaluator/IEvaluator.h" #include "GeoModelXml/PositionIndex.h" using namespace std; @@ -68,7 +68,7 @@ void PositionIndex::setFormula(const std::string& name, const std::string& formu m_formula[name] = formula; } -void PositionIndex::indices(map<string, int> &index, Evaluator &eval) { +void PositionIndex::indices(map<string, int> &index, GeoModelTools::IEvaluator &eval) { index.clear(); // In case caller uses it many times // // Set Copy Number of each Level (CNL_i) up to current level @@ -97,7 +97,7 @@ void PositionIndex::indices(map<string, int> &index, Evaluator &eval) { for (vector <string>::iterator n = m_name.begin(); n < m_name.end(); ++n) { string name = *n; index[name] = (int) eval.evaluate(m_formula[name].c_str()); - if (eval.status() != Evaluator::OK) { + if (eval.status() != GeoModelTools::IEvaluator::OK) { msglog << MSG::FATAL << "GeoModelXml Error processing Evaluator expression for PositionIndex. Error name " << eval.error_name() << endl << "Message: ";