Go to the documentation of this file.00001 #ifndef DataFormats_L1GlobalTrigger_L1GlobalTriggerObjectMaps_h
00002 #define DataFormats_L1GlobalTrigger_L1GlobalTriggerObjectMaps_h
00003
00021 #include <vector>
00022
00023 #include "DataFormats/L1GlobalTrigger/interface/L1GtLogicParser.h"
00024 #include "DataFormats/Provenance/interface/ParameterSetID.h"
00025
00026 class L1GlobalTriggerObjectMaps
00027 {
00028
00029 public:
00030
00031 L1GlobalTriggerObjectMaps() {}
00032
00033 ~L1GlobalTriggerObjectMaps() {}
00034
00035 void swap(L1GlobalTriggerObjectMaps& rh);
00036
00038 bool algorithmExists(int algorithmBitNumber) const;
00039
00041 bool algorithmResult(int algorithmBitNumber) const;
00042
00044 void updateOperandTokenVector(int algorithmBitNumber,
00045 std::vector<L1GtLogicParser::OperandToken>& operandTokenVector) const;
00046
00048 void getAlgorithmBitNumbers(std::vector<int>& algorithmBitNumbers) const;
00049
00051 unsigned getNumberOfConditions(int algorithmBitNumber) const;
00052
00053 class ConditionsInAlgorithm;
00054 class CombinationsInCondition;
00055
00058 ConditionsInAlgorithm getConditionsInAlgorithm(int algorithmBitNumber) const;
00059
00065 CombinationsInCondition getCombinationsInCondition(int algorithmBitNumber,
00066 unsigned conditionNumber) const;
00067
00070 edm::ParameterSetID const& namesParameterSetID() const { return m_namesParameterSetID; }
00071
00072
00073
00074
00075
00076
00077
00078
00079 void reserveForAlgorithms(unsigned n);
00080 void pushBackAlgorithm(unsigned startIndexOfConditions,
00081 int algorithmBitNumber,
00082 bool algorithmResult);
00083
00084
00085
00086 void consistencyCheck() const;
00087
00088 void reserveForConditions(unsigned n);
00089 void pushBackCondition(unsigned startIndexOfCombinations,
00090 unsigned short nObjectsPerCombination,
00091 bool conditionResult);
00092
00093 void reserveForObjectIndexes(unsigned n);
00094 void pushBackObjectIndex(unsigned char objectIndex);
00095
00096 void setNamesParameterSetID(edm::ParameterSetID const& psetID);
00097
00098 class AlgorithmResult {
00099 public:
00100 AlgorithmResult();
00101 AlgorithmResult(unsigned startIndexOfConditions,
00102 int algorithmBitNumber,
00103 bool algorithmResult);
00104 unsigned startIndexOfConditions() const { return m_startIndexOfConditions; }
00105 short algorithmBitNumber() const { return m_algorithmBitNumber; }
00106 bool algorithmResult() const { return m_algorithmResult; }
00107
00108 bool operator<(AlgorithmResult const& right) const {
00109 return m_algorithmBitNumber < right.algorithmBitNumber();
00110 }
00111 private:
00112 unsigned m_startIndexOfConditions;
00113 short m_algorithmBitNumber;
00114 bool m_algorithmResult;
00115 };
00116
00117 class ConditionResult {
00118 public:
00119 ConditionResult();
00120 ConditionResult(unsigned startIndexOfCombinations,
00121 unsigned short nObjectsPerCombination,
00122 bool conditionResult);
00123 unsigned startIndexOfCombinations() const { return m_startIndexOfCombinations; }
00124 unsigned short nObjectsPerCombination() const { return m_nObjectsPerCombination; }
00125 bool conditionResult() const { return m_conditionResult; }
00126 private:
00127 unsigned m_startIndexOfCombinations;
00128 unsigned short m_nObjectsPerCombination;
00129 bool m_conditionResult;
00130 };
00131
00132 class ConditionsInAlgorithm {
00133 public:
00134 ConditionsInAlgorithm(ConditionResult const* conditionResults,
00135 unsigned nConditions);
00136 unsigned nConditions() const { return m_nConditions; }
00137 bool getConditionResult(unsigned condition) const;
00138
00139 private:
00140 ConditionResult const* m_conditionResults;
00141 unsigned m_nConditions;
00142 };
00143
00144 class CombinationsInCondition {
00145 public:
00146 CombinationsInCondition(unsigned char const* startOfObjectIndexes,
00147 unsigned nCombinations,
00148 unsigned short nObjectsPerCombination);
00149
00150 unsigned nCombinations() const { return m_nCombinations; }
00151 unsigned short nObjectsPerCombination() const { return m_nObjectsPerCombination; }
00152 unsigned char getObjectIndex(unsigned combination,
00153 unsigned object) const;
00154 private:
00155 unsigned char const* m_startOfObjectIndexes;
00156 unsigned m_nCombinations;
00157 unsigned short m_nObjectsPerCombination;
00158 };
00159
00160 private:
00161
00162 void getStartEndIndex(int algorithmBitNumber, unsigned& startIndex, unsigned& endIndex) const;
00163
00164
00165
00166
00167
00168
00169
00170
00171 std::vector<AlgorithmResult> m_algorithmResults;
00172 std::vector<ConditionResult> m_conditionResults;
00173 std::vector<unsigned char> m_combinations;
00174 edm::ParameterSetID m_namesParameterSetID;
00175 };
00176
00177 inline void swap(L1GlobalTriggerObjectMaps& lh, L1GlobalTriggerObjectMaps& rh) {
00178 lh.swap(rh);
00179 }
00180
00181 #endif