File indexing completed on 2025-02-05 23:51:51
0001 #ifndef SimTracker_TrackHistory_CategoryCriteria_h
0002 #define SimTracker_TrackHistory_CategoryCriteria_h
0003
0004 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
0005 #include "DataFormats/Common/interface/Ref.h"
0006 #include "FWCore/Framework/interface/ConsumesCollector.h"
0007 #include "FWCore/Framework/interface/Event.h"
0008 #include "FWCore/Framework/interface/EventSetup.h"
0009 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011
0012
0013
0014 template <typename Collection, typename Classifier>
0015 class CategoryCriteria {
0016 public:
0017
0018 typedef Collection collection;
0019
0020
0021 typedef typename Collection::value_type type;
0022
0023
0024 typedef std::vector<const type *> container;
0025
0026
0027 typedef typename container::const_iterator const_iterator;
0028
0029
0030 CategoryCriteria(const edm::ParameterSet &config, edm::ConsumesCollector &&iC)
0031 : classifier_(config, std::move(iC)), evaluate_(config.getParameter<std::string>("cut")) {}
0032
0033 static void fillPSetDescription(edm::ParameterSetDescription &desc) {
0034 desc.add<std::string>("cut", "");
0035 Classifier::fillPSetDescription(desc);
0036 }
0037
0038
0039 void select(const edm::Handle<collection> &collectionHandler, const edm::Event &event, const edm::EventSetup &setup) {
0040 selected_.clear();
0041
0042
0043
0044 classifier_.newEvent(event, setup);
0045
0046 for (typename collection::size_type i = 0; i < collectionHandler->size(); ++i) {
0047 edm::Ref<Collection> member(collectionHandler, i);
0048
0049 classifier_.evaluate(member);
0050
0051
0052 if (evaluate_(classifier_))
0053 selected_.push_back(&(*member));
0054 }
0055 }
0056
0057
0058 const_iterator begin() const { return selected_.begin(); }
0059
0060
0061 const_iterator end() const { return selected_.end(); }
0062
0063
0064 std::size_t size() const { return selected_.size(); }
0065
0066 private:
0067 container selected_;
0068
0069 Classifier classifier_;
0070
0071 StringCutObjectSelector<typename Classifier::Categories> evaluate_;
0072 };
0073
0074 #endif