File indexing completed on 2024-04-06 12:06:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021 #include <string>
0022
0023
0024 #include "FWCore/Framework/interface/Frameworkfwd.h"
0025 #include "FWCore/Framework/interface/stream/EDFilter.h"
0026
0027 #include "FWCore/Framework/interface/Event.h"
0028 #include "FWCore/Framework/interface/MakerMacros.h"
0029
0030 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0031
0032 #include "FWCore/Utilities/interface/InputTag.h"
0033
0034 #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
0035 #include "DataFormats/SiStripCluster/interface/SiStripCluster.h"
0036 #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
0037
0038 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
0039
0040 #include "MultiplicityAlgorithms.h"
0041
0042
0043
0044
0045
0046 template <class T>
0047 class ByMultiplicityEventFilter : public edm::stream::EDFilter<> {
0048 public:
0049 explicit ByMultiplicityEventFilter(const edm::ParameterSet&);
0050 ~ByMultiplicityEventFilter() override;
0051
0052 private:
0053 bool filter(edm::Event&, const edm::EventSetup&) override;
0054
0055
0056
0057 T m_multiplicities;
0058 StringCutObjectSelector<typename T::value_t> m_selector;
0059 bool m_taggedMode, m_forcedValue;
0060 };
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073 template <class T>
0074 ByMultiplicityEventFilter<T>::ByMultiplicityEventFilter(const edm::ParameterSet& iConfig)
0075 : m_multiplicities(iConfig.getParameter<edm::ParameterSet>("multiplicityConfig"), consumesCollector()),
0076 m_selector(iConfig.getParameter<std::string>("cut")),
0077 m_taggedMode(iConfig.getUntrackedParameter<bool>("taggedMode", false)),
0078 m_forcedValue(iConfig.getUntrackedParameter<bool>("forcedValue", true))
0079
0080 {
0081
0082 produces<bool>();
0083 }
0084
0085 template <class T>
0086 ByMultiplicityEventFilter<T>::~ByMultiplicityEventFilter() {
0087
0088
0089 }
0090
0091
0092
0093
0094
0095
0096 template <class T>
0097 bool ByMultiplicityEventFilter<T>::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0098 using namespace edm;
0099
0100 auto mult = m_multiplicities.getEvent(iEvent, iSetup);
0101
0102 bool value = m_selector(mult);
0103 iEvent.put(std::make_unique<bool>(value));
0104
0105 if (m_taggedMode)
0106 return m_forcedValue;
0107 return value;
0108 }
0109
0110
0111
0112
0113
0114
0115
0116
0117 using namespace sistriptools::algorithm;
0118 typedef ByMultiplicityEventFilter<SingleSiStripDigiMultiplicity> BySiStripDigiMultiplicityEventFilter;
0119 typedef ByMultiplicityEventFilter<SingleSiStripClusterMultiplicity> BySiStripClusterMultiplicityEventFilter;
0120 typedef ByMultiplicityEventFilter<SingleSiPixelClusterMultiplicity> BySiPixelClusterMultiplicityEventFilter;
0121 typedef ByMultiplicityEventFilter<SiPixelClusterSiStripClusterMultiplicityPair>
0122 BySiPixelClusterVsSiStripClusterMultiplicityEventFilter;
0123 typedef ByMultiplicityEventFilter<ClusterSummarySingleMultiplicity> ByClusterSummarySingleMultiplicityEventFilter;
0124 typedef ByMultiplicityEventFilter<ClusterSummaryMultiplicityPair> ByClusterSummaryMultiplicityPairEventFilter;
0125
0126 DEFINE_FWK_MODULE(BySiStripDigiMultiplicityEventFilter);
0127 DEFINE_FWK_MODULE(BySiStripClusterMultiplicityEventFilter);
0128 DEFINE_FWK_MODULE(BySiPixelClusterMultiplicityEventFilter);
0129 DEFINE_FWK_MODULE(BySiPixelClusterVsSiStripClusterMultiplicityEventFilter);
0130 DEFINE_FWK_MODULE(ByClusterSummarySingleMultiplicityEventFilter);
0131 DEFINE_FWK_MODULE(ByClusterSummaryMultiplicityPairEventFilter);