00001 #ifndef HLTReco_TriggerEvent_h 00002 #define HLTReco_TriggerEvent_h 00003 00016 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" 00017 #include "DataFormats/HLTReco/interface/TriggerObject.h" 00018 #include "FWCore/Utilities/interface/InputTag.h" 00019 #include <string> 00020 #include <vector> 00021 00022 namespace trigger 00023 { 00024 00026 class TriggerEvent { 00027 00028 public: 00029 00031 class TriggerFilterObject { 00032 public: 00034 std::string filterTag_; 00036 Vids filterIds_; 00038 Keys filterKeys_; 00040 TriggerFilterObject(): filterTag_(), filterIds_(), filterKeys_() { 00041 filterTag_=edm::InputTag().encode(); 00042 } 00043 TriggerFilterObject(const edm::InputTag& filterTag): filterTag_(filterTag.encode()), filterIds_(), filterKeys_() { } 00044 TriggerFilterObject(const edm::InputTag& filterTag, const Vids& filterIds, const Keys& filterKeys): filterTag_(filterTag.encode()), filterIds_(filterIds), filterKeys_(filterKeys) { } 00045 }; 00046 00048 private: 00050 std::string usedProcessName_; 00052 std::vector<std::string> collectionTags_; 00054 Keys collectionKeys_; 00056 TriggerObjectCollection triggerObjects_; 00058 std::vector<TriggerFilterObject> triggerFilters_; 00059 00061 public: 00063 TriggerEvent(): usedProcessName_(), collectionTags_(), collectionKeys_(), triggerObjects_(), triggerFilters_() { } 00064 TriggerEvent(const std::string& usedProcessName, size_type nc, size_type no, size_type nf): 00065 usedProcessName_(usedProcessName), 00066 collectionTags_(), 00067 collectionKeys_(), 00068 triggerObjects_(), 00069 triggerFilters_() 00070 { 00071 collectionTags_.reserve(nc); collectionKeys_.reserve(nc); 00072 triggerObjects_.reserve(no); triggerFilters_.reserve(nf); 00073 } 00074 00076 void addObjects(const TriggerObjectCollection& triggerObjects) {triggerObjects_.insert(triggerObjects_.end(), triggerObjects.begin(), triggerObjects.end());} 00077 void addCollections(const std::vector<edm::InputTag>& collectionTags, const Keys& collectionKeys) { 00078 assert(collectionTags.size()==collectionKeys.size()); 00079 const size_type n(collectionTags.size()); 00080 for (size_type i=0; i!=n; ++i) { 00081 collectionTags_.push_back(collectionTags[i].encode()); 00082 } 00083 collectionKeys_.insert(collectionKeys_.end(), collectionKeys.begin(), collectionKeys.end()); 00084 } 00085 00086 void addFilter(const edm::InputTag& filterTag, const Vids& filterIds, const Keys& filterKeys) {triggerFilters_.push_back(TriggerFilterObject(filterTag, filterIds, filterKeys));} 00087 00089 const std::string& usedProcessName() const {return usedProcessName_;} 00090 const std::vector<std::string>& collectionTags() const {return collectionTags_;} 00091 const Keys& collectionKeys() const {return collectionKeys_;} 00092 const TriggerObjectCollection& getObjects() const {return triggerObjects_;} 00093 00094 const edm::InputTag collectionTag(size_type index) const {return edm::InputTag(collectionTags_.at(index));} 00095 size_type collectionKey(size_type index) const {return collectionKeys_.at(index);} 00096 const edm::InputTag filterTag(size_type index) const {return edm::InputTag(triggerFilters_.at(index).filterTag_);} 00097 const Vids& filterIds(size_type index) const {return triggerFilters_.at(index).filterIds_;} 00098 const Keys& filterKeys(size_type index) const {return triggerFilters_.at(index).filterKeys_;} 00099 00101 size_type collectionIndex(const edm::InputTag& collectionTag) const { 00102 const std::string encodedCollectionTag(collectionTag.encode()); 00103 const size_type n(collectionTags_.size()); 00104 for (size_type i=0; i!=n; ++i) { 00105 if (encodedCollectionTag==collectionTags_[i]) {return i;} 00106 } 00107 return n; 00108 } 00110 size_type filterIndex(const edm::InputTag& filterTag) const { 00111 const std::string encodedFilterTag(filterTag.encode()); 00112 const size_type n(triggerFilters_.size()); 00113 for (size_type i=0; i!=n; ++i) { 00114 if (encodedFilterTag==triggerFilters_[i].filterTag_) {return i;} 00115 } 00116 return n; 00117 } 00118 00120 size_type sizeCollections() const {return collectionTags_.size();} 00121 size_type sizeObjects() const {return triggerObjects_.size();} 00122 size_type sizeFilters() const {return triggerFilters_.size();} 00123 00124 }; 00125 00126 } 00127 00128 #endif