Go to the documentation of this file.00001 #ifndef GlobalTrigger_L1GtConditionEvaluation_h
00002 #define GlobalTrigger_L1GtConditionEvaluation_h
00003
00020
00021 #include <iostream>
00022
00023 #include <string>
00024 #include <vector>
00025
00026 #include <boost/cstdint.hpp>
00027
00028
00029
00030
00031
00032
00033 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMapFwd.h"
00034 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00035
00036
00037
00038
00039 class L1GtConditionEvaluation
00040 {
00041
00042 public:
00043
00045 L1GtConditionEvaluation() :
00046 m_condMaxNumberObjects(0),
00047 m_condLastResult(false),
00048 m_verbosity(0) {}
00049
00050
00052 virtual ~L1GtConditionEvaluation(){}
00053
00054 public:
00055
00058 inline int condMaxNumberObjects() const {
00059 return m_condMaxNumberObjects;
00060 }
00061
00062 inline void setCondMaxNumberObjects(int condMaxNumberObjectsValue) {
00063 m_condMaxNumberObjects = condMaxNumberObjectsValue;
00064 }
00065
00067 inline bool condLastResult() const {
00068 return m_condLastResult;
00069 }
00070
00072 inline void evaluateConditionStoreResult() {
00073 m_condLastResult = evaluateCondition();
00074 }
00075
00077 virtual const bool evaluateCondition() const = 0;
00078
00080 virtual std::string getNumericExpression() const {
00081 if (m_condLastResult) {
00082 return "1";
00083 }
00084 else {
00085 return "0";
00086 }
00087 }
00088
00090 inline CombinationsInCond const & getCombinationsInCond() const {
00091 return m_combinationsInCond;
00092 }
00093
00094
00096 virtual void print(std::ostream& myCout) const;
00097
00098 inline void setVerbosity(const int verbosity) {
00099 m_verbosity = verbosity;
00100 }
00101
00102 protected:
00103
00105 inline CombinationsInCond& combinationsInCond() const {
00106 return m_combinationsInCond;
00107 }
00108
00111 template<class Type1, class Type2> const bool checkThreshold(const Type1& threshold,
00112 const Type2& value, const bool condGEqValue) const;
00113
00115 template<class Type1> const bool checkBit(const Type1& mask, const unsigned int bitNumber) const;
00116
00117 protected:
00118
00121 int m_condMaxNumberObjects;
00122
00124 bool m_condLastResult;
00125
00127 mutable CombinationsInCond m_combinationsInCond;
00128
00130 int m_verbosity;
00131
00132 };
00133
00134
00135
00136
00137
00138 template<class Type1, class Type2> const bool L1GtConditionEvaluation::checkThreshold(
00139 const Type1& threshold, const Type2& value, const bool condGEqValue) const {
00140
00141
00142
00143
00144
00145
00146
00147
00148 if (condGEqValue) {
00149 if (value >= threshold) {
00150
00151
00152
00153
00154 return true;
00155 }
00156
00157 return false;
00158
00159 }
00160 else {
00161
00162 if (value == threshold) {
00163
00164
00165
00166
00167 return true;
00168 }
00169
00170 return false;
00171 }
00172 }
00173
00174
00175 template<class Type1> const bool L1GtConditionEvaluation::checkBit(const Type1& mask,
00176 const unsigned int bitNumber) const {
00177
00178 boost::uint64_t oneBit = 1ULL;
00179
00180 if (bitNumber >= (sizeof(oneBit)*8)) {
00181
00182 if (m_verbosity) {
00183
00184 LogTrace("L1GlobalTrigger")
00185 << " checkBit " << "\n Bit number = "
00186 << bitNumber << " larger than maximum allowed " << sizeof ( oneBit ) * 8
00187 << std::endl;
00188 }
00189
00190 return false;
00191 }
00192
00193 oneBit <<= bitNumber;
00194
00195
00196
00197
00198
00199
00200
00201 return (mask & oneBit);
00202 }
00203
00204 #endif