CMS 3D CMS Logo

PATCleaner.h
Go to the documentation of this file.
1 #ifndef PhysicsTools_PatAlgos_plugins_PATCleaner_h
2 #define PhysicsTools_PatAlgos_plugins_PATCleaner_h
3 //
4 //
5 
20 
23 
32 
34 #include <vector>
35 #include <memory>
36 
37 namespace pat {
38 
39  template <class PATObjType>
41  public:
42  explicit PATCleaner(const edm::ParameterSet& iConfig);
43  ~PATCleaner() override {}
44 
45  void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) final;
46 
47  private:
49 
54 
56  std::vector<std::unique_ptr<OverlapTest>> overlapTests_;
57  };
58 
59 } // namespace pat
60 
61 template <class PATObjType>
63  : src_(iConfig.getParameter<edm::InputTag>("src")),
64  srcToken_(consumes<edm::View<PATObjType>>(src_)),
65  preselectionCut_(iConfig.getParameter<std::string>("preselection")),
66  finalCut_(iConfig.getParameter<std::string>("finalCut")) {
67  // pick parameter set for overlaps
68  edm::ParameterSet overlapPSet = iConfig.getParameter<edm::ParameterSet>("checkOverlaps");
69  // get all the names of the tests (all nested PSets in this PSet)
70  std::vector<std::string> overlapNames = overlapPSet.getParameterNamesForType<edm::ParameterSet>();
71  // loop on them
72  for (std::vector<std::string>::const_iterator itn = overlapNames.begin(); itn != overlapNames.end(); ++itn) {
73  // retrieve configuration
75  // skip empty parameter sets
76  if (cfg.empty())
77  continue;
78  // get the name of the algorithm to use
79  std::string algorithm = cfg.getParameter<std::string>("algorithm");
80  // create the appropriate OverlapTest
81  if (algorithm == "byDeltaR") {
82  overlapTests_.emplace_back(new pat::helper::BasicOverlapTest(*itn, cfg, consumesCollector()));
83  } else if (algorithm == "bySuperClusterSeed") {
84  overlapTests_.emplace_back(new pat::helper::OverlapBySuperClusterSeed(*itn, cfg, consumesCollector()));
85  } else {
86  throw cms::Exception("Configuration")
87  << "PATCleaner for " << src_ << ": unsupported algorithm '" << algorithm << "'\n";
88  }
89  }
90 
91  produces<std::vector<PATObjType>>();
92 }
93 
94 template <class PATObjType>
96  // Read the input. We use edm::View<> in case the input happes to be something different than a std::vector<>
98  iEvent.getByToken(srcToken_, candidates);
99 
100  // Prepare a collection for the output
101  auto output = std::make_unique<std::vector<PATObjType>>();
102 
103  // initialize the overlap tests
104  for (auto& itov : overlapTests_) {
105  itov->readInput(iEvent, iSetup);
106  }
107 
108  for (typename edm::View<PATObjType>::const_iterator it = candidates->begin(), ed = candidates->end(); it != ed;
109  ++it) {
110  // Apply a preselection to the inputs and copy them in the output
111  if (!preselectionCut_(*it))
112  continue;
113 
114  // Add it to the list and take a reference to it, so it can be modified (e.g. to set the overlaps)
115  // If at some point I'll decide to drop this item, I'll use pop_back to remove it
116  output->push_back(*it);
117  PATObjType& obj = output->back();
118 
119  // Look for overlaps
120  bool badForOverlap = false;
121  for (auto& itov : overlapTests_) {
123  bool hasOverlap = itov->fillOverlapsForItem(obj, overlaps);
124  if (hasOverlap && itov->requireNoOverlaps()) {
125  badForOverlap = true; // mark for discarding
126  break; // no point in checking the others, as this item will be discarded
127  }
128  obj.setOverlaps(itov->name(), overlaps);
129  }
130  if (badForOverlap) {
131  output->pop_back();
132  continue;
133  }
134 
135  // Apply one final selection cut
136  if (!finalCut_(obj))
137  output->pop_back();
138  }
139 
140  iEvent.put(std::move(output));
141 }
142 
143 #endif
pat::PATCleaner::Selector
StringCutObjectSelector< PATObjType > Selector
Definition: PATCleaner.h:48
pat::PATCleaner::PATCleaner
PATCleaner(const edm::ParameterSet &iConfig)
Definition: PATCleaner.h:62
sistrip::View
View
Definition: ConstantsForView.h:26
pat::helper::OverlapTest
Definition: OverlapTest.h:19
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:32
edm::EDGetTokenT
Definition: EDGetToken.h:33
edm
HLT enums.
Definition: AlignableModifier.h:19
Muon.h
Photon.h
GenericParticle.h
EDProducer.h
edm::Handle
Definition: AssociativeIterator.h:50
Tau.h
pat::PATCleaner::produce
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) final
Definition: PATCleaner.h:95
OverlapTest.h
edm::PtrVector< Candidate >
pat::PATCleaner::overlapTests_
std::vector< std::unique_ptr< OverlapTest > > overlapTests_
Definition: PATCleaner.h:56
pat::PATCleaner
PAT Cleaner module for PAT Objects.
Definition: PATCleaner.h:40
pat::PATCleaner::preselectionCut_
const Selector preselectionCut_
Definition: PATCleaner.h:52
getGTfromDQMFile.obj
obj
Definition: getGTfromDQMFile.py:32
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
analyzePatCleaning_cfg.overlaps
overlaps
Definition: analyzePatCleaning_cfg.py:9
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
Event.h
qcdUeDQM_cfi.algorithm
algorithm
Definition: qcdUeDQM_cfi.py:32
edm::ParameterSet::getParameterNamesForType
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:168
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::stream::EDProducer
Definition: EDProducer.h:38
pat::PATCleaner::src_
const edm::InputTag src_
Definition: PATCleaner.h:50
edm::EventSetup
Definition: EventSetup.h:57
pat
Definition: HeavyIon.h:7
PFParticle.h
MET.h
Jet.h
InputTag.h
looper.cfg
cfg
Definition: looper.py:297
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
pat::helper::OverlapBySuperClusterSeed
Definition: OverlapTest.h:77
StringCutObjectSelector.h
pat::PATCleaner::OverlapTest
pat::helper::OverlapTest OverlapTest
Definition: PATCleaner.h:55
HLT_2018_cff.candidates
candidates
Definition: HLT_2018_cff.py:53513
StringCutObjectSelector
Definition: StringCutObjectSelector.h:16
Exception
Definition: hltDiff.cc:246
Electron.h
edm::View::const_iterator
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
ParameterSet.h
pat::helper::BasicOverlapTest
Definition: OverlapTest.h:46
pat::PATCleaner::finalCut_
const Selector finalCut_
Definition: PATCleaner.h:53
pat::PATCleaner::srcToken_
const edm::EDGetTokenT< edm::View< PATObjType > > srcToken_
Definition: PATCleaner.h:51
edm::Event
Definition: Event.h:73
pat::PATCleaner::~PATCleaner
~PATCleaner() override
Definition: PATCleaner.h:43
StringObjectFunction.h
edm::InputTag
Definition: InputTag.h:15