00001 00002 #include "FWCore/Common/interface/TriggerResultsByName.h" 00003 #include "FWCore/Utilities/interface/EDMException.h" 00004 #include "DataFormats/Common/interface/TriggerResults.h" 00005 #include "FWCore/Common/interface/TriggerNames.h" 00006 00007 namespace edm { 00008 00009 TriggerResultsByName:: 00010 TriggerResultsByName(TriggerResults const* triggerResults, 00011 TriggerNames const* triggerNames) : 00012 triggerResults_(triggerResults), 00013 triggerNames_(triggerNames) { 00014 00015 // If either of these is true the object is in an invalid state 00016 if (triggerResults_ == 0 || triggerNames_ == 0) { 00017 return; 00018 } 00019 00020 if (triggerResults_->parameterSetID() != triggerNames_->parameterSetID()) { 00021 throw edm::Exception(edm::errors::Unknown) 00022 << "TriggerResultsByName::TriggerResultsByName, Trigger names vector and TriggerResults\n" 00023 "have different ParameterSetID's. This should be impossible when the object is obtained\n" 00024 "from the function named triggerResultsByName in the Event class, which is the way\n" 00025 "TriggerResultsByName should always be created. If this is the case, please send\n" 00026 "information to reproduce this problem to the edm developers. Otherwise, you are\n" 00027 "using this class incorrectly and in a way that is not supported.\n"; 00028 } 00029 00030 if (triggerResults_->size() != triggerNames_->size()) { 00031 throw edm::Exception(edm::errors::Unknown) 00032 << "TriggerResultsByName::TriggerResultsByName, Trigger names vector\n" 00033 "and TriggerResults have different sizes. This should be impossible,\n" 00034 "please send information to reproduce this problem to the edm developers.\n"; 00035 } 00036 } 00037 00038 bool 00039 TriggerResultsByName:: 00040 isValid() const { 00041 if (triggerResults_ == 0 || triggerNames_ == 0) return false; 00042 return true; 00043 } 00044 00045 ParameterSetID const& 00046 TriggerResultsByName:: 00047 parameterSetID() const { 00048 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00049 return triggerResults_->parameterSetID(); 00050 } 00051 00052 bool 00053 TriggerResultsByName:: 00054 wasrun() const { 00055 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00056 return triggerResults_->wasrun(); 00057 } 00058 00059 bool 00060 TriggerResultsByName:: 00061 accept() const { 00062 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00063 return triggerResults_->accept(); 00064 } 00065 00066 bool 00067 TriggerResultsByName:: 00068 error() const { 00069 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00070 return triggerResults_->error(); 00071 } 00072 00073 HLTPathStatus const& 00074 TriggerResultsByName:: 00075 at(std::string const& pathName) const { 00076 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00077 unsigned i = getAndCheckIndex(pathName); 00078 return triggerResults_->at(i); 00079 } 00080 00081 HLTPathStatus const& 00082 TriggerResultsByName:: 00083 at(unsigned i) const { 00084 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00085 return triggerResults_->at(i); 00086 } 00087 00088 HLTPathStatus const& 00089 TriggerResultsByName:: 00090 operator[](std::string const& pathName) const { 00091 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00092 unsigned i = getAndCheckIndex(pathName); 00093 return triggerResults_->at(i); 00094 } 00095 00096 HLTPathStatus const& 00097 TriggerResultsByName:: 00098 operator[](unsigned i) const { 00099 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00100 return triggerResults_->at(i); 00101 } 00102 00103 bool 00104 TriggerResultsByName:: 00105 wasrun(std::string const& pathName) const { 00106 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00107 unsigned i = getAndCheckIndex(pathName); 00108 return triggerResults_->wasrun(i); 00109 } 00110 00111 bool 00112 TriggerResultsByName:: 00113 wasrun(unsigned i) const { 00114 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00115 return triggerResults_->wasrun(i); 00116 } 00117 00118 bool 00119 TriggerResultsByName:: 00120 accept(std::string const& pathName) const { 00121 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00122 unsigned i = getAndCheckIndex(pathName); 00123 return triggerResults_->accept(i); 00124 } 00125 00126 bool 00127 TriggerResultsByName:: 00128 accept(unsigned i) const { 00129 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00130 return triggerResults_->accept(i); 00131 } 00132 00133 bool 00134 TriggerResultsByName:: 00135 error(std::string const& pathName) const { 00136 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00137 unsigned i = getAndCheckIndex(pathName); 00138 return triggerResults_->error(i); 00139 } 00140 00141 bool 00142 TriggerResultsByName:: 00143 error(unsigned i) const { 00144 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00145 return triggerResults_->error(i); 00146 } 00147 00148 hlt::HLTState 00149 TriggerResultsByName:: 00150 state(std::string const& pathName) const { 00151 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00152 unsigned i = getAndCheckIndex(pathName); 00153 return triggerResults_->state(i); 00154 } 00155 00156 hlt::HLTState 00157 TriggerResultsByName:: 00158 state(unsigned i) const { 00159 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00160 return triggerResults_->state(i); 00161 } 00162 00163 unsigned 00164 TriggerResultsByName:: 00165 index(std::string const& pathName) const { 00166 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00167 unsigned i = getAndCheckIndex(pathName); 00168 return triggerResults_->index(i); 00169 } 00170 00171 unsigned 00172 TriggerResultsByName:: 00173 index(unsigned i) const { 00174 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00175 return triggerResults_->index(i); 00176 } 00177 00178 std::vector<std::string> const& 00179 TriggerResultsByName:: 00180 triggerNames() const { 00181 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00182 if (triggerNames_ == 0) throwTriggerNamesMissing(); 00183 return triggerNames_->triggerNames(); 00184 } 00185 00186 std::string const& 00187 TriggerResultsByName:: 00188 triggerName(unsigned i) const { 00189 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00190 if (triggerNames_ == 0) throwTriggerNamesMissing(); 00191 return triggerNames_->triggerName(i); 00192 } 00193 00194 unsigned 00195 TriggerResultsByName:: 00196 triggerIndex(std::string const& pathName) const { 00197 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00198 if (triggerNames_ == 0) throwTriggerNamesMissing(); 00199 return triggerNames_->triggerIndex(pathName); 00200 } 00201 00202 std::vector<std::string>::size_type 00203 TriggerResultsByName:: 00204 size() const { 00205 if (triggerResults_ == 0) throwTriggerResultsMissing(); 00206 return triggerResults_->size(); 00207 } 00208 00209 unsigned 00210 TriggerResultsByName:: 00211 getAndCheckIndex(std::string const& pathName) const { 00212 if (triggerNames_ == 0) throwTriggerNamesMissing(); 00213 unsigned i = triggerNames_->triggerIndex(pathName); 00214 if (i == triggerNames_->size()) { 00215 throw edm::Exception(edm::errors::LogicError) 00216 << "TriggerResultsByName::getAndCheckIndex\n" 00217 << "Requested trigger name \"" 00218 << pathName << "\" does not match any known trigger.\n"; 00219 } 00220 return i; 00221 } 00222 00223 void 00224 TriggerResultsByName:: 00225 throwTriggerResultsMissing() const { 00226 throw edm::Exception(edm::errors::ProductNotFound) 00227 << "TriggerResultsByName has a null pointer to TriggerResults.\n" 00228 << "This probably means TriggerResults was not found in the Event\n" 00229 << "because the product was dropped or never created. It could also\n" 00230 << "mean it was requested for a process that does not exist or was\n" 00231 << "misspelled\n"; 00232 } 00233 00234 void 00235 TriggerResultsByName:: 00236 throwTriggerNamesMissing() const { 00237 throw edm::Exception(edm::errors::LogicError) 00238 << "TriggerResultsByName has a null pointer to TriggerNames.\n" 00239 << "This should never happen. It could indicate the ParameterSet\n" 00240 << "containing the names is missing from the ParameterSet registry.\n" 00241 << "Please report this to the edm developers along with instructions\n" 00242 << "to reproduce the problem\n"; 00243 } 00244 }