CMS 3D CMS Logo

HLTHcalTowerNoiseCleaner.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Class: HLTHcalTowerNoiseCleaner
4 //
12 //
13 // Original Author: Alexander Mott
14 // Created: Mon Nov 21 11:32:00 CEST 2011
15 //
16 //
17 //
18 
24 
26 
36 
40 
41 #include <iostream>
42 #include <string>
43 #include <fstream>
44 #include <TVector3.h>
45 #include <TLorentzVector.h>
46 #include <set>
47 
49 
50 //#include <Point.h>
51 
53  : HcalNoiseRBXCollectionTag_(iConfig.getParameter<edm::InputTag>("HcalNoiseRBXCollection")),
54  TowerCollectionTag_(iConfig.getParameter<edm::InputTag>("CaloTowerCollection")),
55  severity_(iConfig.getParameter<int>("severity")),
56  maxNumRBXs_(iConfig.getParameter<int>("maxNumRBXs")),
57  numRBXsToConsider_(iConfig.getParameter<int>("numRBXsToConsider")),
58  needEMFCoincidence_(iConfig.getParameter<bool>("needEMFCoincidence")),
59  minRBXEnergy_(iConfig.getParameter<double>("minRBXEnergy")),
60  minRatio_(iConfig.getParameter<double>("minRatio")),
61  maxRatio_(iConfig.getParameter<double>("maxRatio")),
62  minHPDHits_(iConfig.getParameter<int>("minHPDHits")),
63  minRBXHits_(iConfig.getParameter<int>("minRBXHits")),
64  minHPDNoOtherHits_(iConfig.getParameter<int>("minHPDNoOtherHits")),
65  minZeros_(iConfig.getParameter<int>("minZeros")),
66  minHighEHitTime_(iConfig.getParameter<double>("minHighEHitTime")),
67  maxHighEHitTime_(iConfig.getParameter<double>("maxHighEHitTime")),
68  maxRBXEMF_(iConfig.getParameter<double>("maxRBXEMF")),
69  minRecHitE_(iConfig.getParameter<double>("minRecHitE")),
70  minLowHitE_(iConfig.getParameter<double>("minLowHitE")),
71  minHighHitE_(iConfig.getParameter<double>("minHighHitE")),
72  minR45HitE_(5.0),
73  TS4TS5EnergyThreshold_(iConfig.getParameter<double>("TS4TS5EnergyThreshold")) {
74  std::vector<double> TS4TS5UpperThresholdTemp = iConfig.getParameter<std::vector<double> >("TS4TS5UpperThreshold");
75  std::vector<double> TS4TS5UpperCutTemp = iConfig.getParameter<std::vector<double> >("TS4TS5UpperCut");
76  std::vector<double> TS4TS5LowerThresholdTemp = iConfig.getParameter<std::vector<double> >("TS4TS5LowerThreshold");
77  std::vector<double> TS4TS5LowerCutTemp = iConfig.getParameter<std::vector<double> >("TS4TS5LowerCut");
78 
79  for (int i = 0; i < (int)TS4TS5UpperThresholdTemp.size() && i < (int)TS4TS5UpperCutTemp.size(); i++)
80  TS4TS5UpperCut_.push_back(std::pair<double, double>(TS4TS5UpperThresholdTemp[i], TS4TS5UpperCutTemp[i]));
81  sort(TS4TS5UpperCut_.begin(), TS4TS5UpperCut_.end());
82 
83  for (int i = 0; i < (int)TS4TS5LowerThresholdTemp.size() && i < (int)TS4TS5LowerCutTemp.size(); i++)
84  TS4TS5LowerCut_.push_back(std::pair<double, double>(TS4TS5LowerThresholdTemp[i], TS4TS5LowerCutTemp[i]));
85  sort(TS4TS5LowerCut_.begin(), TS4TS5LowerCut_.end());
86 
87  m_theHcalNoiseToken = consumes<reco::HcalNoiseRBXCollection>(HcalNoiseRBXCollectionTag_);
88  m_theCaloTowerCollectionToken = consumes<CaloTowerCollection>(TowerCollectionTag_);
89 
90  if (iConfig.existsAs<double>("minR45HitE"))
91  minR45HitE_ = iConfig.getParameter<double>("minR45HitE");
92 
93  produces<CaloTowerCollection>();
94 }
95 
97 
100  desc.add<edm::InputTag>("HcalNoiseRBXCollection", edm::InputTag("hltHcalNoiseInfoProducer"));
101  desc.add<edm::InputTag>("CaloTowerCollection", edm::InputTag("hltTowerMakerForAll"));
102  desc.add<double>("maxTowerNoiseEnergyFraction", 0.5);
103  desc.add<int>("severity", 1);
104  desc.add<int>("maxNumRBXs", 2);
105  desc.add<int>("numRBXsToConsider", 2);
106  desc.add<bool>("needEMFCoincidence", true);
107  desc.add<double>("minRBXEnergy", 50.0);
108  desc.add<double>("minRatio", -999.);
109  desc.add<double>("maxRatio", 999.);
110  desc.add<int>("minHPDHits", 17);
111  desc.add<int>("minRBXHits", 999);
112  desc.add<int>("minHPDNoOtherHits", 10);
113  desc.add<int>("minZeros", 10);
114  desc.add<double>("minHighEHitTime", -9999.0);
115  desc.add<double>("maxHighEHitTime", 9999.0);
116  desc.add<double>("maxRBXEMF", 0.02);
117  desc.add<double>("minRecHitE", 1.5);
118  desc.add<double>("minLowHitE", 10.0);
119  desc.add<double>("minHighHitE", 25.0);
120  desc.add<double>("minR45HitE", 5.0);
121  desc.add<double>("TS4TS5EnergyThreshold", 50.0);
122 
123  double TS4TS5UpperThresholdArray[5] = {70, 90, 100, 400, 4000};
124  double TS4TS5UpperCutArray[5] = {1, 0.8, 0.75, 0.72, 0.72};
125  double TS4TS5LowerThresholdArray[7] = {100, 120, 150, 200, 300, 400, 500};
126  double TS4TS5LowerCutArray[7] = {-1, -0.7, -0.4, -0.2, -0.08, 0, 0.1};
127  std::vector<double> TS4TS5UpperThreshold(TS4TS5UpperThresholdArray, TS4TS5UpperThresholdArray + 5);
128  std::vector<double> TS4TS5UpperCut(TS4TS5UpperCutArray, TS4TS5UpperCutArray + 5);
129  std::vector<double> TS4TS5LowerThreshold(TS4TS5LowerThresholdArray, TS4TS5LowerThresholdArray + 7);
130  std::vector<double> TS4TS5LowerCut(TS4TS5LowerCutArray, TS4TS5LowerCutArray + 7);
131 
132  desc.add<std::vector<double> >("TS4TS5UpperThreshold", TS4TS5UpperThreshold);
133  desc.add<std::vector<double> >("TS4TS5UpperCut", TS4TS5UpperCut);
134  desc.add<std::vector<double> >("TS4TS5LowerThreshold", TS4TS5LowerThreshold);
135  desc.add<std::vector<double> >("TS4TS5LowerCut", TS4TS5LowerCut);
136  descriptions.add("hltHcalTowerNoiseCleaner", desc);
137 }
138 
139 //
140 // member functions
141 //
142 
144  using namespace reco;
145 
146  //get the calo MET / MHT
148  iEvent.getByToken(m_theCaloTowerCollectionToken, tower_h);
149 
150  std::set<unsigned int> noisyTowers;
151 
152  if (not tower_h.isValid()) { //No towers MET, don't do anything and accept the event
153  edm::LogError("HLTHcalTowerNoiseCleaner") << "Input Tower Collection is not Valid";
154  return;
155  }
156 
157  //get the calotower topology
158  edm::ESHandle<CaloTowerTopology> caloTowerTopology;
159  iSetup.get<HcalRecNumberingRecord>().get(caloTowerTopology);
160 
161  // get the RBXs produced by RecoMET/METProducers/HcalNoiseInfoProducer
163  iEvent.getByToken(m_theHcalNoiseToken, rbxs_h);
164  if (!rbxs_h.isValid()) {
165  edm::LogWarning("HLTHcalTowerNoiseCleaner")
166  << "Could not find HcalNoiseRBXCollection product named " << HcalNoiseRBXCollectionTag_ << "." << std::endl;
167  severity_ = 0;
168  }
169 
170  // create a sorted set of the RBXs, ordered by energy
172  for (auto const& rbx : *rbxs_h) {
174  minRecHitE_,
175  minLowHitE_,
176  minHighHitE_,
180  minR45HitE_);
181  data.insert(d);
182  }
183 
184  // data is now sorted by RBX energy
185  // only consider top N=numRBXsToConsider_ energy RBXs
186  if (severity_ > 0) {
187  for (auto const& it : data) {
188  bool passFilter = true;
189  bool passEMF = true;
190  if (it.energy() > minRBXEnergy_) {
191  if (it.validRatio() && it.ratio() < minRatio_)
192  passFilter = false;
193  else if (it.validRatio() && it.ratio() > maxRatio_)
194  passFilter = false;
195  else if (it.numHPDHits() >= minHPDHits_)
196  passFilter = false;
197  else if (it.numRBXHits() >= minRBXHits_)
198  passFilter = false;
199  else if (it.numHPDNoOtherHits() >= minHPDNoOtherHits_)
200  passFilter = false;
201  else if (it.numZeros() >= minZeros_)
202  passFilter = false;
203  else if (it.minHighEHitTime() < minHighEHitTime_)
204  passFilter = false;
205  else if (it.maxHighEHitTime() > maxHighEHitTime_)
206  passFilter = false;
207  else if (!it.PassTS4TS5())
208  passFilter = false;
209 
210  if (it.RBXEMF() < maxRBXEMF_) {
211  passEMF = false;
212  }
213  }
214 
215  if ((needEMFCoincidence_ && !passEMF && !passFilter) ||
216  (!needEMFCoincidence_ && !passFilter)) { // check for noise
217  LogDebug("") << "HLTHcalTowerNoiseCleaner debug: Found a noisy RBX: "
218  << "energy=" << it.energy() << "; "
219  << "ratio=" << it.ratio() << "; "
220  << "# RBX hits=" << it.numRBXHits() << "; "
221  << "# HPD hits=" << it.numHPDHits() << "; "
222  << "# Zeros=" << it.numZeros() << "; "
223  << "min time=" << it.minHighEHitTime() << "; "
224  << "max time=" << it.maxHighEHitTime() << "; "
225  << "passTS4TS5=" << it.PassTS4TS5() << "; "
226  << "RBX EMF=" << it.RBXEMF() << std::endl;
227  // add calotowers associated with this RBX to the noise list
228  edm::RefVector<CaloTowerCollection> noiseTowers = it.rbxTowers();
230  //add these calotowers to the noisy list
231  for (noiseTowersIt = noiseTowers.begin(); noiseTowersIt != noiseTowers.end(); noiseTowersIt++) {
232  edm::Ref<edm::SortedCollection<CaloTower> > tower_ref = *noiseTowersIt;
233  CaloTowerDetId id = tower_ref->id();
234  noisyTowers.insert(caloTowerTopology->denseIndex(id));
235  }
236  }
237  } // done with noise loop
238  } //if(severity_>0)
239 
240  //output collection
241  std::unique_ptr<CaloTowerCollection> OutputTowers(new CaloTowerCollection());
242 
244 
245  for (inTowersIt = tower_h->begin(); inTowersIt != tower_h->end(); inTowersIt++) {
246  const CaloTower& tower = (*inTowersIt);
247  CaloTowerDetId id = tower.id();
248  if (noisyTowers.find(caloTowerTopology->denseIndex(id)) == noisyTowers.end()) { // the tower is not noisy
249  OutputTowers->push_back(*inTowersIt);
250  }
251  }
252  iEvent.put(std::move(OutputTowers));
253 }
ConfigurationDescriptions.h
Handle.h
CaloJet.h
electrons_cff.bool
bool
Definition: electrons_cff.py:393
mps_fire.i
i
Definition: mps_fire.py:428
edm::SortedCollection< CaloTower >::const_iterator
std::vector< CaloTower >::const_iterator const_iterator
Definition: SortedCollection.h:80
MessageLogger.h
HLTHcalTowerNoiseCleaner::TowerCollectionTag_
edm::InputTag TowerCollectionTag_
Definition: HLTHcalTowerNoiseCleaner.h:35
HLTHcalTowerNoiseCleaner::minRatio_
double minRatio_
Definition: HLTHcalTowerNoiseCleaner.h:41
ESHandle.h
HLTHcalTowerNoiseCleaner::HLTHcalTowerNoiseCleaner
HLTHcalTowerNoiseCleaner(const edm::ParameterSet &)
Definition: HLTHcalTowerNoiseCleaner.cc:52
edm
HLT enums.
Definition: AlignableModifier.h:19
HLTHcalTowerNoiseCleaner::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: HLTHcalTowerNoiseCleaner.cc:143
edm::RefVector::begin
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:223
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
hgcalTowerProducer_cfi.tower
tower
Definition: hgcalTowerProducer_cfi.py:4
HLTHcalTowerNoiseCleaner::maxRBXEMF_
double maxRBXEMF_
Definition: HLTHcalTowerNoiseCleaner.h:49
HcalRecNumberingRecord.h
Jet.h
edm::RefVector
Definition: EDProductfwd.h:27
edm::ParameterSet::existsAs
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:171
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
edm::Handle
Definition: AssociativeIterator.h:50
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
HLTHcalTowerNoiseCleaner::minHPDHits_
int minHPDHits_
Definition: HLTHcalTowerNoiseCleaner.h:43
edm::Ref
Definition: AssociativeIterator.h:58
HLTHcalTowerNoiseCleaner::m_theCaloTowerCollectionToken
edm::EDGetTokenT< CaloTowerCollection > m_theCaloTowerCollectionToken
Definition: HLTHcalTowerNoiseCleaner.h:32
HLTHcalTowerNoiseCleaner::severity_
int severity_
Definition: HLTHcalTowerNoiseCleaner.h:36
CommonHcalNoiseRBXData
Definition: HcalNoiseAlgo.h:11
edm::RefVector::end
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:228
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
HLTHcalTowerNoiseCleaner::TS4TS5UpperCut_
std::vector< std::pair< double, double > > TS4TS5UpperCut_
Definition: HLTHcalTowerNoiseCleaner.h:55
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
edm::SortedCollection::begin
const_iterator begin() const
Definition: SortedCollection.h:262
CaloTowerCollection
edm::SortedCollection< CaloTower > CaloTowerCollection
Definition: CaloTowerDefs.h:16
HLT_FULL_cff.TS4TS5LowerThreshold
TS4TS5LowerThreshold
Definition: HLT_FULL_cff.py:8354
edm::ESHandle
Definition: DTSurvey.h:22
ParameterSetDescription.h
HLTHcalTowerNoiseCleaner::minRBXEnergy_
double minRBXEnergy_
Definition: HLTHcalTowerNoiseCleaner.h:40
CaloTowerTopology.h
HLT_FULL_cff.TS4TS5UpperThreshold
TS4TS5UpperThreshold
Definition: HLT_FULL_cff.py:8357
HcalRecNumberingRecord
Definition: HcalRecNumberingRecord.h:23
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
HLTHcalTowerNoiseCleaner::maxRatio_
double maxRatio_
Definition: HLTHcalTowerNoiseCleaner.h:42
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
edm::ParameterSet
Definition: ParameterSet.h:47
HLTHcalTowerNoiseCleaner::TS4TS5EnergyThreshold_
double TS4TS5EnergyThreshold_
Definition: HLTHcalTowerNoiseCleaner.h:54
Event.h
HLTHcalTowerNoiseCleaner::minRBXHits_
int minRBXHits_
Definition: HLTHcalTowerNoiseCleaner.h:44
HLTHcalTowerNoiseCleaner::maxHighEHitTime_
double maxHighEHitTime_
Definition: HLTHcalTowerNoiseCleaner.h:48
edm::SortedCollection::end
const_iterator end() const
Definition: SortedCollection.h:267
LorentzVector.h
HLTHcalTowerNoiseCleaner::minZeros_
int minZeros_
Definition: HLTHcalTowerNoiseCleaner.h:46
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
HLTHcalTowerNoiseCleaner::noisedataset_t
std::set< CommonHcalNoiseRBXData, noisedatacomp > noisedataset_t
Definition: HLTHcalTowerNoiseCleaner.h:64
CaloTower
Definition: CaloTower.h:26
HLTHcalTowerNoiseCleaner::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: HLTHcalTowerNoiseCleaner.cc:98
CaloTowerDetId.h
edm::EventSetup
Definition: EventSetup.h:57
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
get
#define get
InputTag.h
CaloTowerCollection.h
HLTHcalTowerNoiseCleaner::minHighHitE_
double minHighHitE_
Definition: HLTHcalTowerNoiseCleaner.h:52
edm::Ref::id
ProductID id() const
Accessor for product ID.
Definition: Ref.h:244
HLTHcalTowerNoiseCleaner::needEMFCoincidence_
bool needEMFCoincidence_
Definition: HLTHcalTowerNoiseCleaner.h:39
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
HLTHcalTowerNoiseCleaner::minHPDNoOtherHits_
int minHPDNoOtherHits_
Definition: HLTHcalTowerNoiseCleaner.h:45
HLTHcalTowerNoiseCleaner::HcalNoiseRBXCollectionTag_
edm::InputTag HcalNoiseRBXCollectionTag_
Definition: HLTHcalTowerNoiseCleaner.h:34
edm::RefVectorIterator
Definition: EDProductfwd.h:33
HLTHcalTowerNoiseCleaner::minR45HitE_
double minR45HitE_
Definition: HLTHcalTowerNoiseCleaner.h:52
HLT_FULL_cff.TS4TS5UpperCut
TS4TS5UpperCut
Definition: HLT_FULL_cff.py:8376
Point3D.h
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
ztail.d
d
Definition: ztail.py:151
Candidate.h
HLTHcalTowerNoiseCleaner::minRecHitE_
double minRecHitE_
Definition: HLTHcalTowerNoiseCleaner.h:52
ParameterSet.h
HLTHcalTowerNoiseCleaner::minHighEHitTime_
double minHighEHitTime_
Definition: HLTHcalTowerNoiseCleaner.h:47
HLTHcalTowerNoiseCleaner::~HLTHcalTowerNoiseCleaner
~HLTHcalTowerNoiseCleaner() override
HLTHcalTowerNoiseCleaner.h
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
HLTHcalTowerNoiseCleaner::minLowHitE_
double minLowHitE_
Definition: HLTHcalTowerNoiseCleaner.h:52
edm::Event
Definition: Event.h:73
HLTHcalTowerNoiseCleaner::m_theHcalNoiseToken
edm::EDGetTokenT< reco::HcalNoiseRBXCollection > m_theHcalNoiseToken
Definition: HLTHcalTowerNoiseCleaner.h:31
HLT_FULL_cff.TS4TS5LowerCut
TS4TS5LowerCut
Definition: HLT_FULL_cff.py:8360
HLTHcalTowerNoiseCleaner::TS4TS5LowerCut_
std::vector< std::pair< double, double > > TS4TS5LowerCut_
Definition: HLTHcalTowerNoiseCleaner.h:56
edm::InputTag
Definition: InputTag.h:15
CaloTowerTopology::denseIndex
uint32_t denseIndex(const DetId &id) const
Definition: CaloTowerTopology.cc:235
CaloTowerDetId
Definition: CaloTowerDetId.h:12