44 #include <TLorentzVector.h> 48 : HcalNoiseRBXCollectionTag_(iConfig.getParameter<
edm::
InputTag>(
"HcalNoiseRBXCollection")),
49 CaloMetCollectionTag_(iConfig.getParameter<
edm::
InputTag>(
"CaloMetCollection")),
50 CaloMetCut_(iConfig.getParameter<double>(
"CaloMetCut")),
51 severity_(iConfig.getParameter<
int>(
"severity")),
52 maxNumRBXs_(iConfig.getParameter<
int>(
"maxNumRBXs")),
53 numRBXsToConsider_(iConfig.getParameter<
int>(
"numRBXsToConsider")),
54 accept2NoiseRBXEvents_(iConfig.getParameter<
bool>(
"accept2NoiseRBXEvents")),
55 needEMFCoincidence_(iConfig.getParameter<
bool>(
"needEMFCoincidence")),
56 minRBXEnergy_(iConfig.getParameter<double>(
"minRBXEnergy")),
57 minRatio_(iConfig.getParameter<double>(
"minRatio")),
58 maxRatio_(iConfig.getParameter<double>(
"maxRatio")),
59 minHPDHits_(iConfig.getParameter<
int>(
"minHPDHits")),
60 minRBXHits_(iConfig.getParameter<
int>(
"minRBXHits")),
61 minHPDNoOtherHits_(iConfig.getParameter<
int>(
"minHPDNoOtherHits")),
62 minZeros_(iConfig.getParameter<
int>(
"minZeros")),
63 minHighEHitTime_(iConfig.getParameter<double>(
"minHighEHitTime")),
64 maxHighEHitTime_(iConfig.getParameter<double>(
"maxHighEHitTime")),
65 maxRBXEMF_(iConfig.getParameter<double>(
"maxRBXEMF")),
66 minRecHitE_(iConfig.getParameter<double>(
"minRecHitE")),
67 minLowHitE_(iConfig.getParameter<double>(
"minLowHitE")),
68 minHighHitE_(iConfig.getParameter<double>(
"minHighHitE")),
70 TS4TS5EnergyThreshold_(iConfig.getParameter<double>(
"TS4TS5EnergyThreshold")) {
71 std::vector<double> TS4TS5UpperThresholdTemp = iConfig.
getParameter<std::vector<double> >(
"TS4TS5UpperThreshold");
72 std::vector<double> TS4TS5UpperCutTemp = iConfig.
getParameter<std::vector<double> >(
"TS4TS5UpperCut");
73 std::vector<double> TS4TS5LowerThresholdTemp = iConfig.
getParameter<std::vector<double> >(
"TS4TS5LowerThreshold");
74 std::vector<double> TS4TS5LowerCutTemp = iConfig.
getParameter<std::vector<double> >(
"TS4TS5LowerCut");
76 for (
int i = 0;
i < (
int)TS4TS5UpperThresholdTemp.size() &&
i < (
int)TS4TS5UpperCutTemp.size();
i++)
77 TS4TS5UpperCut_.push_back(std::pair<double, double>(TS4TS5UpperThresholdTemp[
i], TS4TS5UpperCutTemp[
i]));
80 for (
int i = 0;
i < (
int)TS4TS5LowerThresholdTemp.size() &&
i < (
int)TS4TS5LowerCutTemp.size();
i++)
81 TS4TS5LowerCut_.push_back(std::pair<double, double>(TS4TS5LowerThresholdTemp[
i], TS4TS5LowerCutTemp[
i]));
87 if (iConfig.
existsAs<
double>(
"minR45HitE"))
90 produces<reco::CaloMETCollection>();
99 desc.add<
double>(
"CaloMetCut", 0.0);
100 desc.add<
int>(
"severity", 1);
101 desc.add<
int>(
"maxNumRBXs", 2);
102 desc.add<
int>(
"numRBXsToConsider", 2);
103 desc.add<
bool>(
"accept2NoiseRBXEvents",
true);
104 desc.add<
bool>(
"needEMFCoincidence",
true);
105 desc.add<
double>(
"minRBXEnergy", 50.0);
106 desc.add<
double>(
"minRatio", -999.);
107 desc.add<
double>(
"maxRatio", 999.);
108 desc.add<
int>(
"minHPDHits", 17);
109 desc.add<
int>(
"minRBXHits", 999);
110 desc.add<
int>(
"minHPDNoOtherHits", 10);
111 desc.add<
int>(
"minZeros", 10);
112 desc.add<
double>(
"minHighEHitTime", -9999.0);
113 desc.add<
double>(
"maxHighEHitTime", 9999.0);
114 desc.add<
double>(
"maxRBXEMF", 0.02);
115 desc.add<
double>(
"minRecHitE", 1.5);
116 desc.add<
double>(
"minLowHitE", 10.0);
117 desc.add<
double>(
"minHighHitE", 25.0);
118 desc.add<
double>(
"minR45HitE", 5.0);
119 desc.add<
double>(
"TS4TS5EnergyThreshold", 50.0);
121 double TS4TS5UpperThresholdArray[5] = {70, 90, 100, 400, 4000};
122 double TS4TS5UpperCutArray[5] = {1, 0.8, 0.75, 0.72, 0.72};
123 double TS4TS5LowerThresholdArray[7] = {100, 120, 150, 200, 300, 400, 500};
124 double TS4TS5LowerCutArray[7] = {-1, -0.7, -0.4, -0.2, -0.08, 0, 0.1};
125 std::vector<double>
TS4TS5UpperThreshold(TS4TS5UpperThresholdArray, TS4TS5UpperThresholdArray + 5);
126 std::vector<double>
TS4TS5UpperCut(TS4TS5UpperCutArray, TS4TS5UpperCutArray + 5);
127 std::vector<double>
TS4TS5LowerThreshold(TS4TS5LowerThresholdArray, TS4TS5LowerThresholdArray + 7);
128 std::vector<double>
TS4TS5LowerCut(TS4TS5LowerCutArray, TS4TS5LowerCutArray + 7);
134 descriptions.
add(
"hltHcalMETNoiseCleaner",
desc);
142 using namespace reco;
152 met_h->front().pt() < 0) {
160 CleanedMET->push_back(inCaloMet);
169 edm::LogError(
"DataNotFound") <<
"HLTHcalMETNoiseCleaner: Could not find HcalNoiseRBXCollection product named " 171 CleanedMET->push_back(inCaloMet);
178 for (
auto const& rbx : *rbxs_h) {
191 CleanedMET->push_back(inCaloMet);
201 metVec.SetPtEtaPhi(met_h->front().pt(), 0, met_h->front().phi());
203 TVector3 noiseHPDVector(0, 0, 0);
204 TVector3 secondHPDVector(0, 0, 0);
206 bool isNoise =
false;
207 bool passFilter =
true;
210 if (it->validRatio() && it->ratio() <
minRatio_)
212 else if (it->validRatio() && it->ratio() >
maxRatio_)
226 else if (!it->PassTS4TS5())
235 LogDebug(
"") <<
"HLTHcalMETNoiseCleaner debug: Found a noisy RBX: " 236 <<
"energy=" << it->energy() <<
"; " 237 <<
"ratio=" << it->ratio() <<
"; " 238 <<
"# RBX hits=" << it->numRBXHits() <<
"; " 239 <<
"# HPD hits=" << it->numHPDHits() <<
"; " 240 <<
"# Zeros=" << it->numZeros() <<
"; " 241 <<
"min time=" << it->minHighEHitTime() <<
"; " 242 <<
"max time=" << it->maxHighEHitTime() <<
"; " 243 <<
"passTS4TS5=" << it->PassTS4TS5() <<
"; " 244 <<
"RBX EMF=" << it->RBXEMF() << std::endl;
250 if (isNoise && nNoise == 1) {
254 for (noiseTowersIt = noiseTowers.
begin(); noiseTowersIt != noiseTowers.
end(); noiseTowersIt++) {
256 towerVec.SetPtEtaPhi((*noiseTowersIt)->pt(), (*noiseTowersIt)->eta(), (*noiseTowersIt)->phi());
257 noiseHPDVector += towerVec;
259 if (noiseHPDVector.Mag() > 0)
260 noiseHPDVector.SetPtEtaPhi(noiseHPDVector.Pt(), 0, noiseHPDVector.Phi());
262 noiseHPDVector.SetPtEtaPhi(0, 0, 0);
265 if (isNoise && cntr > 0) {
266 CleanedMET->push_back(inCaloMet);
271 if (!isNoise && cntr == 0) {
272 CleanedMET->push_back(inCaloMet);
277 if (!isNoise && nNoise > 0) {
280 for (noiseTowersIt = noiseTowers.
begin(); noiseTowersIt != noiseTowers.
end(); noiseTowersIt++) {
282 towerVec.SetPtEtaPhi((*noiseTowersIt)->pt(), (*noiseTowersIt)->eta(), (*noiseTowersIt)->phi());
283 secondHPDVector += towerVec;
285 if (secondHPDVector.Mag() > 0)
286 secondHPDVector.SetPtEtaPhi(secondHPDVector.Pt(), 0, secondHPDVector.Phi());
288 secondHPDVector.SetPtEtaPhi(0, 0, 0);
293 if (noiseHPDVector.Mag() == 0) {
294 CleanedMET->push_back(inCaloMet);
303 float METsumet = met_h->front().energy();
305 metVec += noiseHPDVector;
307 float ZMETsumet = METsumet - noiseHPDVector.Mag();
308 float ZMETpt = metVec.Pt();
309 float ZMETphi = metVec.Phi();
316 if (secondHPDVector.Mag() > 0.) {
317 secondHPDVector.SetPtEtaPhi(secondHPDVector.Pt(), noiseHPDVector.Eta(), noiseHPDVector.Phi());
318 metVec -= secondHPDVector;
319 SMETsumet = METsumet - noiseHPDVector.Mag();
320 SMETpt = metVec.Pt();
321 SMETphi = metVec.Phi();
324 float CorMetSumEt, CorMetPt, CorMetPhi;
325 if (ZMETpt > SMETpt) {
326 CorMetSumEt = ZMETsumet;
330 CorMetSumEt = SMETsumet;
336 CleanedMET->push_back(corMet);
370 p4TL.SetPtEtaPhiM(
pt, 0.,
phi, 0.);
T getParameter(std::string const &) const
double pt() const final
transverse momentum
~HLTHcalMETNoiseCleaner() override
std::vector< std::pair< double, double > > TS4TS5UpperCut_
edm::EDGetTokenT< reco::CaloMETCollection > m_theCaloMetToken
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
std::set< CommonHcalNoiseRBXData, noisedatacomp > noisedataset_t
Log< level::Error, false > LogError
edm::InputTag CaloMetCollectionTag_
reco::CaloMET BuildCaloMet(float sumet, float pt, float phi)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
HLTHcalMETNoiseCleaner(const edm::ParameterSet &)
math::XYZTLorentzVector LorentzVector
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::InputTag HcalNoiseRBXCollectionTag_
XYZPointD XYZPoint
point in space with cartesian internal representation
bool filter(edm::Event &, const edm::EventSetup &) override
const_iterator end() const
Termination of iteration.
edm::EDGetTokenT< reco::HcalNoiseRBXCollection > m_theHcalNoiseToken
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool accept2NoiseRBXEvents_
char data[epos_bytes_allocation]
Structure Point Contains parameters of Gaussian fits to DMRs.
const_iterator begin() const
Initialize an iterator over the RefVector.
double TS4TS5EnergyThreshold_
math::PtEtaPhiELorentzVectorF LorentzVector
std::vector< std::pair< double, double > > TS4TS5LowerCut_