CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HBHENoiseFilterResultProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: HBHENoiseFilterResultProducer
4 // Class: HBHENoiseFilterResultProducer
5 //
13 //
14 // Original Author: John Paul Chou (Brown)
15 //
16 //
17 
18 #include <iostream>
19 
20 // system include files
21 #include <memory>
22 #include <map>
23 
24 // user include files
27 
31 
33 
36 
37 //
38 // class declaration
39 //
40 
42  public:
45 
46  private:
47  virtual void produce(edm::Event&, const edm::EventSetup&) override;
48 
49  // ----------member data ---------------------------
50 
51  // parameters
55  int minZeros_;
56 
59 
63 
66 
67  // other members
68  std::map<std::string, bool> decisionMap_;
69 };
70 
71 
72 //
73 // constructors and destructor
74 //
75 
77 {
78  //now do what ever initialization is needed
79  noisetoken_ = consumes<HcalNoiseSummary>(iConfig.getParameter<edm::InputTag>("noiselabel"));
80  minHPDHits_ = iConfig.getParameter<int>("minHPDHits");
81  minHPDNoOtherHits_ = iConfig.getParameter<int>("minHPDNoOtherHits");
82  minZeros_ = iConfig.getParameter<int>("minZeros");
83  IgnoreTS4TS5ifJetInLowBVRegion_ = iConfig.getParameter<bool>("IgnoreTS4TS5ifJetInLowBVRegion");
84  defaultDecision_ = iConfig.getParameter<std::string>("defaultDecision");
85 
86  // parameters related to isolation filter
87  minNumIsolatedNoiseChannels_ = iConfig.getParameter<int>("minNumIsolatedNoiseChannels");
88  minIsolatedNoiseSumE_ = iConfig.getParameter<double>("minIsolatedNoiseSumE");
89  minIsolatedNoiseSumEt_ = iConfig.getParameter<double>("minIsolatedNoiseSumEt");
90 
91  // parameters needed for bunch-spacing check
92  bunchSpacing_ = consumes<unsigned int>(edm::InputTag("bunchSpacingProducer"));
93  useBunchSpacingProducer_ = iConfig.getParameter<bool>("useBunchSpacingProducer");
94 
95  produces<bool>("HBHENoiseFilterResult");
96  produces<bool>("HBHENoiseFilterResultRun1");
97  produces<bool>("HBHENoiseFilterResultRun2Loose");
98  produces<bool>("HBHENoiseFilterResultRun2Tight");
99  produces<bool>("HBHEIsoNoiseFilterResult");
100 }
101 
102 
104 {
105 
106 }
107 
108 
109 //
110 // member functions
111 //
112 
113 // ------------ method called on each new Event ------------
114 void
116 {
117  using namespace edm;
118 
119  // get the Noise summary object
121  iEvent.getByToken(noisetoken_, summary_h);
122  if(!summary_h.isValid()) {
123  throw edm::Exception(edm::errors::ProductNotFound) << " could not find HcalNoiseSummary.\n";
124  return;
125  }
126  const HcalNoiseSummary& summary(*summary_h);
127 
128  bool goodJetFoundInLowBVRegion = false;
130  goodJetFoundInLowBVRegion = summary.goodJetFoundInLowBVRegion();
131 
132  const bool failCommon = summary.maxHPDHits() >= minHPDHits_ ||
133  summary.maxHPDNoOtherHits() >= minHPDNoOtherHits_ ||
134  summary.maxZeros() >= minZeros_;
135 
136  const bool failRun1 = failCommon || (summary.HasBadRBXTS4TS5() &&
137  !goodJetFoundInLowBVRegion);
138  decisionMap_["HBHENoiseFilterResultRun1"] = failRun1;
139 
140  const bool failRun2Loose = failCommon || (summary.HasBadRBXRechitR45Loose() &&
141  !goodJetFoundInLowBVRegion);
142  decisionMap_["HBHENoiseFilterResultRun2Loose"] = failRun2Loose;
143 
144  const bool failRun2Tight = failCommon || (summary.HasBadRBXRechitR45Tight() &&
145  !goodJetFoundInLowBVRegion);
146  decisionMap_["HBHENoiseFilterResultRun2Tight"] = failRun2Tight;
147 
148  // Write out the standard flags
149  std::auto_ptr<bool> pOut;
150  for (std::map<std::string, bool>::const_iterator it = decisionMap_.begin();
151  it != decisionMap_.end(); ++it)
152  {
153  pOut = std::auto_ptr<bool>(new bool(!it->second));
154  iEvent.put(pOut, it->first);
155  }
156 
157  // Overwrite defaultDecision_ dynamically based on bunchSpacingProducer
159  edm::Handle<unsigned int> bunchSpacingH;
160  iEvent.getByToken(bunchSpacing_,bunchSpacingH);
161  unsigned int bunchspacing = 0;
162  if( bunchSpacingH.isValid() ){
163  bunchspacing = *bunchSpacingH;
164  if( bunchspacing == 50 ){
165  defaultDecision_ = "HBHENoiseFilterResultRun1";
166  } else{
167  defaultDecision_ = "HBHENoiseFilterResultRun2Loose";
168  }
169  }
170  }
171 
172  // Write out the default flag
173  std::map<std::string, bool>::const_iterator it = decisionMap_.find(defaultDecision_);
174  if (it == decisionMap_.end())
175  throw cms::Exception("Invalid HBHENoiseFilterResultProducer parameter \"defaultDecision\"");
176  pOut = std::auto_ptr<bool>(new bool(!it->second));
177  iEvent.put(pOut, "HBHENoiseFilterResult");
178 
179  // Check isolation requirements
180  const bool failIsolation = summary.numIsolatedNoiseChannels() >= minNumIsolatedNoiseChannels_ ||
183  pOut = std::auto_ptr<bool>(new bool(!failIsolation));
184  iEvent.put(pOut, "HBHEIsoNoiseFilterResult");
185 
186  return;
187 }
188 
189 //define this as a plug-in
T getParameter(std::string const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
int numIsolatedNoiseChannels(void) const
std::map< std::string, bool > decisionMap_
float isolatedNoiseSumEt(void) const
int iEvent
Definition: GenABIO.cc:230
edm::EDGetTokenT< unsigned int > bunchSpacing_
bool goodJetFoundInLowBVRegion(void) const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:120
bool HasBadRBXTS4TS5(void) const
bool HasBadRBXRechitR45Loose(void) const
bool isValid() const
Definition: HandleBase.h:75
edm::EDGetTokenT< HcalNoiseSummary > noisetoken_
int maxZeros(void) const
virtual void produce(edm::Event &, const edm::EventSetup &) override
float isolatedNoiseSumE(void) const
bool HasBadRBXRechitR45Tight(void) const
HBHENoiseFilterResultProducer(const edm::ParameterSet &)
int maxHPDNoOtherHits(void) const
int maxHPDHits(void) const