Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-01 06:11:40

0001 #ifndef DataFormats_BTauReco_DeepBoostedJetFeatures_h
0002 #define DataFormats_BTauReco_DeepBoostedJetFeatures_h
0003 
0004 #include <string>
0005 #include <vector>
0006 #include <unordered_map>
0007 #include "FWCore/Utilities/interface/Exception.h"
0008 #include "DataFormats/BTauReco/interface/RefMacros.h"
0009 
0010 namespace btagbtvdeep {
0011 
0012   class DeepBoostedJetFeatures {
0013   public:
0014     bool empty() const { return is_empty_; }
0015 
0016     void add(const std::string& name) { feature_map_[name]; }
0017 
0018     void reserve(const std::string& name, unsigned capacity) { feature_map_[name].reserve(capacity); }
0019 
0020     void fill(const std::string& name, float value) {
0021       auto item = feature_map_.find(name);
0022       if (item != feature_map_.end()) {
0023         item->second.push_back(value);
0024         is_empty_ = false;
0025       } else {
0026         throw cms::Exception("InvalidArgument")
0027             << "[DeepBoostedJetFeatures::fill()] Feature " << name << " has not been registered";
0028       }
0029     }
0030 
0031     void set(const std::string& name, const std::vector<float>& vec) { feature_map_[name] = vec; }
0032 
0033     void check_consistency(const std::vector<std::string>& names) const {
0034       if (names.empty())
0035         return;
0036       const auto ref_len = get(names.front()).size();
0037       for (unsigned i = 1; i < names.size(); ++i) {
0038         if (get(names[i]).size() != ref_len) {
0039           throw cms::Exception("InvalidArgument")
0040               << "[DeepBoostedJetFeatures::check_consistency()] Inconsistent variable length " << get(names[i]).size()
0041               << " for " << names[i] << ", should be " << ref_len;
0042         }
0043       }
0044     }
0045 
0046     const std::vector<float>& get(const std::string& name) const {
0047       auto item = feature_map_.find(name);
0048       if (item != feature_map_.end()) {
0049         return item->second;
0050       } else {
0051         throw cms::Exception("InvalidArgument")
0052             << "[DeepBoostedJetFeatures::get()] Feature " << name << " does not exist!";
0053       }
0054     }
0055 
0056   private:
0057     bool is_empty_ = true;
0058     std::unordered_map<std::string, std::vector<float>> feature_map_;
0059   };
0060 
0061   DECLARE_EDM_REFS(DeepBoostedJetFeatures)
0062 
0063 }  // namespace btagbtvdeep
0064 
0065 #endif  // DataFormats_BTauReco_DeepBoostedJetFeatures_h