diff --git a/RecoMuon/MuonIdentification/python/displacedMuons_cfi.py b/RecoMuon/MuonIdentification/python/displacedMuons_cfi.py
index 9c782574757e3..8f2cac0ebeba0 100644
--- a/RecoMuon/MuonIdentification/python/displacedMuons_cfi.py
+++ b/RecoMuon/MuonIdentification/python/displacedMuons_cfi.py
@@ -11,8 +11,8 @@
FillDetectorBasedIsolation = cms.bool(True),
EcalIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorHitsDisplaced","ecal"),
- HcalIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorHitsDisplaced","hcal"),
- HoIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorHitsDisplaced","ho"),
+ HcalIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorTowersDisplaced","hcal"),
+ HoIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorTowersDisplaced","ho"),
TrackIsoDeposits = cms.InputTag("muIsoDepositTkDisplaced"),
JetIsoDeposits = cms.InputTag("muIsoDepositJetsDisplaced"),
diff --git a/RecoMuon/MuonIdentification/python/isolation_cff.py b/RecoMuon/MuonIdentification/python/isolation_cff.py
index 657699536b24e..3c03ff1091612 100644
--- a/RecoMuon/MuonIdentification/python/isolation_cff.py
+++ b/RecoMuon/MuonIdentification/python/isolation_cff.py
@@ -5,7 +5,7 @@
from RecoMuon.MuonIsolationProducers.jetExtractorBlock_cff import *
MIdIsoExtractorPSetBlock = cms.PSet(
CaloExtractorPSet = cms.PSet(
- MIsoCaloExtractorByAssociatorHitsBlock
+ MIsoCaloExtractorByAssociatorMixedBlock
),
TrackExtractorPSet = cms.PSet(
MIsoTrackExtractorBlock
diff --git a/RecoMuon/MuonIdentification/python/muons_cfi.py b/RecoMuon/MuonIdentification/python/muons_cfi.py
index 793d41db40f7f..ba6460f64c793 100644
--- a/RecoMuon/MuonIdentification/python/muons_cfi.py
+++ b/RecoMuon/MuonIdentification/python/muons_cfi.py
@@ -14,8 +14,8 @@
FillDetectorBasedIsolation = cms.bool(True),
EcalIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorHits","ecal"),
- HcalIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorHits","hcal"),
- HoIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorHits","ho"),
+ HcalIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorTowers","hcal"),
+ HoIsoDeposits = cms.InputTag("muIsoDepositCalByAssociatorTowers","ho"),
TrackIsoDeposits = cms.InputTag("muIsoDepositTk"),
JetIsoDeposits = cms.InputTag("muIsoDepositJets"),
diff --git a/RecoMuon/MuonIsolation/plugins/BuildFile.xml b/RecoMuon/MuonIsolation/plugins/BuildFile.xml
index 6f675a84554af..3af4f12cc38d6 100644
--- a/RecoMuon/MuonIsolation/plugins/BuildFile.xml
+++ b/RecoMuon/MuonIsolation/plugins/BuildFile.xml
@@ -15,6 +15,7 @@
+
@@ -24,5 +25,10 @@
+
+
+
+
+
diff --git a/RecoMuon/MuonIsolation/plugins/CaloExtractorByAssociator.cc b/RecoMuon/MuonIsolation/plugins/CaloExtractorByAssociator.cc
index 8fbf37a61b254..9ede80672dfd1 100644
--- a/RecoMuon/MuonIsolation/plugins/CaloExtractorByAssociator.cc
+++ b/RecoMuon/MuonIsolation/plugins/CaloExtractorByAssociator.cc
@@ -18,6 +18,15 @@
#include "DataFormats/Math/interface/deltaR.h"
+#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h"
+#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h"
+#include "CondFormats/DataRecord/interface/HcalPFCutsRcd.h"
+#include "CondTools/Hcal/interface/HcalPFCutsHandler.h"
+#include "RecoLocalCalo/HcalRecAlgos/interface/HcalSeverityLevelComputer.h"
+#include "RecoLocalCalo/HcalRecAlgos/interface/HcalSeverityLevelComputerRcd.h"
+#include "CondFormats/HcalObjects/interface/HcalChannelQuality.h"
+#include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h"
+
using namespace edm;
using namespace std;
using namespace reco;
@@ -29,13 +38,17 @@ namespace {
}
CaloExtractorByAssociator::CaloExtractorByAssociator(const ParameterSet& par, edm::ConsumesCollector&& iC)
- : theUseRecHitsFlag(par.getParameter("UseRecHitsFlag")),
+ : theUseEcalRecHitsFlag(par.getParameter("UseEcalRecHitsFlag")),
+ theUseHcalRecHitsFlag(par.getParameter("UseHcalRecHitsFlag")),
+ theUseHORecHitsFlag(par.getParameter("UseHORecHitsFlag")),
theDepositLabel(par.getUntrackedParameter("DepositLabel")),
theDepositInstanceLabels(par.getParameter >("DepositInstanceLabels")),
thePropagatorName(par.getParameter("PropagatorName")),
theThreshold_E(par.getParameter("Threshold_E")),
theThreshold_H(par.getParameter("Threshold_H")),
theThreshold_HO(par.getParameter("Threshold_HO")),
+ theMaxSeverityHB(par.getParameter("MaxSeverityHB")),
+ theMaxSeverityHE(par.getParameter("MaxSeverityHE")),
theDR_Veto_E(par.getParameter("DR_Veto_E")),
theDR_Veto_H(par.getParameter("DR_Veto_H")),
theDR_Veto_HO(par.getParameter("DR_Veto_HO")),
@@ -60,9 +73,15 @@ CaloExtractorByAssociator::CaloExtractorByAssociator(const ParameterSet& par, ed
theAssociatorParameters->loadParameters(par.getParameter("TrackAssociatorParameters"), iC);
theAssociator = new TrackDetectorAssociator();
- if (theUseRecHitsFlag) {
- caloGeomToken_ = iC.esConsumes();
- }
+ ecalRecHitThresh_ = par.getParameter("EcalRecHitThresh");
+ hcalCutsFromDB_ = par.getParameter("HcalCutsFromDB");
+
+ caloGeomToken_ = iC.esConsumes();
+ ecalPFRechitThresholdsToken_ = iC.esConsumes();
+ hcalCutsToken_ = iC.esConsumes();
+ hcalTopologyToken_ = iC.esConsumes();
+ hcalChannelQualityToken_ = iC.esConsumes(edm::ESInputTag("", "withTopo"));
+ hcalSevLvlComputerToken_ = iC.esConsumes();
}
CaloExtractorByAssociator::~CaloExtractorByAssociator() {
@@ -102,6 +121,12 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
theService->update(eventSetup);
theAssociator->setPropagator(&*(theService->propagator(thePropagatorName)));
+ const EcalPFRecHitThresholds* ecalThresholds = &eventSetup.getData(ecalPFRechitThresholdsToken_);
+ const HcalPFCuts* hcalCuts = &eventSetup.getData(hcalCutsToken_);
+ const HcalTopology* hcalTopology_ = &eventSetup.getData(hcalTopologyToken_);
+ const HcalChannelQuality* hcalChStatus_ = &eventSetup.getData(hcalChannelQualityToken_);
+ const HcalSeverityLevelComputer* hcalSevLvlComputer_ = &eventSetup.getData(hcalSevLvlComputerToken_);
+
//! check configuration consistency
//! could've been made at construction stage (fix later?)
if (theDepositInstanceLabels.size() != 3) {
@@ -155,29 +180,33 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
depHOcal.setVeto(Veto(dirTmp, dRtmp));
}
- if (theUseRecHitsFlag) {
- //! do things based on rec-hits here
- //! too much copy-pasting now (refactor later?)
- auto const& caloGeom = eventSetup.getData(caloGeomToken_);
-
+ if (theUseEcalRecHitsFlag) {
//Ecal
+ auto const& caloGeom = eventSetup.getData(caloGeomToken_);
std::vector::const_iterator eHitCI = mInfo.ecalRecHits.begin();
for (; eHitCI != mInfo.ecalRecHits.end(); ++eHitCI) {
const EcalRecHit* eHitCPtr = *eHitCI;
GlobalPoint eHitPos = caloGeom.getPosition(eHitCPtr->detid());
- double deltar0 = reco::deltaR(muon, eHitPos);
+ double deltaR2 = reco::deltaR2(muon, eHitPos);
double cosTheta = 1. / cosh(eHitPos.eta());
double energy = eHitCPtr->energy();
double et = energy * cosTheta;
- if (deltar0 > std::max(dRMax_CandDep, theDR_Max) ||
- !(et > theThreshold_E && energy > 3 * noiseRecHit(eHitCPtr->detid())))
+ if (deltaR2 > std::max(dRMax_CandDep * dRMax_CandDep, theDR_Max * theDR_Max))
continue;
+ if (ecalThresholds != nullptr) { // use thresholds from rechit
+ float rhThres = (ecalThresholds != nullptr) ? (*ecalThresholds)[eHitCPtr->detid()] : 0.f;
+ if (energy <= rhThres)
+ continue;
+ } else { // use thresholds from config
+ if (et <= theThreshold_E || energy <= 3 * noiseRecHit(eHitCPtr->detid()))
+ continue;
+ }
+
bool vetoHit = false;
- double deltar = reco::deltaR(mInfo.trkGlobPosAtEcal, eHitPos);
//! first check if the hit is inside the veto cone by dR-alone
- if (deltar < theDR_Veto_E) {
- LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto ECAL hit: Calo deltaR= " << deltar;
+ if (deltaR2 < std::pow(theDR_Veto_E, 2)) {
+ LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto ECAL hit: Calo deltaR2= " << deltaR2;
LogDebug("RecoMuon|CaloExtractorByAssociator")
<< " >>> Calo eta phi ethcal: " << eHitPos.eta() << " " << eHitPos.phi() << " " << et;
vetoHit = true;
@@ -191,7 +220,7 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
}
//check theDR_Max only here to keep vetoHits being added to the veto energy
- if (deltar0 > theDR_Max && !vetoHit)
+ if (deltaR2 > std::pow(theDR_Max, 2) && !vetoHit)
continue;
if (vetoHit) {
@@ -200,25 +229,48 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
depEcal.addDeposit(reco::isodeposit::Direction(eHitPos.eta(), eHitPos.phi()), et);
}
}
+ }
+ if (theUseHcalRecHitsFlag) {
//Hcal
+ auto const& caloGeom = eventSetup.getData(caloGeomToken_);
std::vector::const_iterator hHitCI = mInfo.hcalRecHits.begin();
for (; hHitCI != mInfo.hcalRecHits.end(); ++hHitCI) {
const HBHERecHit* hHitCPtr = *hHitCI;
GlobalPoint hHitPos = caloGeom.getPosition(hHitCPtr->detid());
- double deltar0 = reco::deltaR(muon, hHitPos);
+ double deltaR2 = reco::deltaR2(muon, hHitPos);
double cosTheta = 1. / cosh(hHitPos.eta());
double energy = hHitCPtr->energy();
double et = energy * cosTheta;
- if (deltar0 > std::max(dRMax_CandDep, theDR_Max) ||
- !(et > theThreshold_H && energy > 3 * noiseRecHit(hHitCPtr->detid())))
+ if (deltaR2 > std::max(dRMax_CandDep * dRMax_CandDep, theDR_Max * theDR_Max))
+ continue;
+
+ // check Hcal Cuts from DB
+ if (hcalCuts != nullptr) {
+ const HcalPFCut* item = hcalCuts->getValues(hHitCPtr->id().rawId());
+ if (energy <= item->noiseThreshold())
+ continue;
+ } else {
+ if (et <= theThreshold_H || energy <= 3 * noiseRecHit(hHitCPtr->detid()))
+ continue;
+ }
+
+ const HcalDetId hid(hHitCPtr->detid());
+ DetId did = hcalTopology_->idFront(hid);
+ const uint32_t flag = hHitCPtr->flags();
+ const uint32_t dbflag = hcalChStatus_->getValues(did)->getValue();
+ bool recovered = hcalSevLvlComputer_->recoveredRecHit(did, flag);
+ int severity = hcalSevLvlComputer_->getSeverityLevel(did, flag, dbflag);
+
+ const bool goodHB = hid.subdet() == HcalBarrel and (severity <= theMaxSeverityHB or recovered);
+ const bool goodHE = hid.subdet() == HcalEndcap and (severity <= theMaxSeverityHE or recovered);
+ if (!goodHB and !goodHE)
continue;
bool vetoHit = false;
- double deltar = reco::deltaR(mInfo.trkGlobPosAtHcal, hHitPos);
//! first check if the hit is inside the veto cone by dR-alone
- if (deltar < theDR_Veto_H) {
- LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto HBHE hit: Calo deltaR= " << deltar;
+ if (deltaR2 < std::pow(theDR_Veto_H, 2)) {
+ LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto HBHE hit: Calo deltaR2= " << deltaR2;
LogDebug("RecoMuon|CaloExtractorByAssociator")
<< " >>> Calo eta phi ethcal: " << hHitPos.eta() << " " << hHitPos.phi() << " " << et;
vetoHit = true;
@@ -232,7 +284,7 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
}
//check theDR_Max only here to keep vetoHits being added to the veto energy
- if (deltar0 > theDR_Max && !vetoHit)
+ if (deltaR2 > std::pow(theDR_Max, 2) && !vetoHit)
continue;
if (vetoHit) {
@@ -241,25 +293,27 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
depHcal.addDeposit(reco::isodeposit::Direction(hHitPos.eta(), hHitPos.phi()), et);
}
}
+ }
+ if (theUseHORecHitsFlag) {
//HOcal
+ auto const& caloGeom = eventSetup.getData(caloGeomToken_);
std::vector::const_iterator hoHitCI = mInfo.hoRecHits.begin();
for (; hoHitCI != mInfo.hoRecHits.end(); ++hoHitCI) {
const HORecHit* hoHitCPtr = *hoHitCI;
GlobalPoint hoHitPos = caloGeom.getPosition(hoHitCPtr->detid());
- double deltar0 = reco::deltaR(muon, hoHitPos);
+ double deltaR2 = reco::deltaR2(muon, hoHitPos);
double cosTheta = 1. / cosh(hoHitPos.eta());
double energy = hoHitCPtr->energy();
double et = energy * cosTheta;
- if (deltar0 > std::max(dRMax_CandDep, theDR_Max) ||
+ if (deltaR2 > std::max(dRMax_CandDep * dRMax_CandDep, theDR_Max * theDR_Max) ||
!(et > theThreshold_HO && energy > 3 * noiseRecHit(hoHitCPtr->detid())))
continue;
bool vetoHit = false;
- double deltar = reco::deltaR(mInfo.trkGlobPosAtHO, hoHitPos);
//! first check if the hit is inside the veto cone by dR-alone
- if (deltar < theDR_Veto_HO) {
- LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto HO hit: Calo deltaR= " << deltar;
+ if (deltaR2 < std::pow(theDR_Veto_HO, 2)) {
+ LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto HO hit: Calo deltaR2= " << deltaR2;
LogDebug("RecoMuon|CaloExtractorByAssociator")
<< " >>> Calo eta phi ethcal: " << hoHitPos.eta() << " " << hoHitPos.phi() << " " << et;
vetoHit = true;
@@ -273,7 +327,7 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
}
//check theDR_Max only here to keep vetoHits being added to the veto energy
- if (deltar0 > theDR_Max && !vetoHit)
+ if (deltaR2 > std::pow(theDR_Max, 2) && !vetoHit)
continue;
if (vetoHit) {
@@ -282,14 +336,15 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
depHOcal.addDeposit(reco::isodeposit::Direction(hoHitPos.eta(), hoHitPos.phi()), et);
}
}
+ }
- } else {
+ if (!theUseEcalRecHitsFlag or !theUseHcalRecHitsFlag or !theUseHORecHitsFlag) {
//! use calo towers
std::vector::const_iterator calCI = mInfo.towers.begin();
for (; calCI != mInfo.towers.end(); ++calCI) {
const CaloTower* calCPtr = *calCI;
- double deltar0 = reco::deltaR(muon, *calCPtr);
- if (deltar0 > std::max(dRMax_CandDep, theDR_Max))
+ double deltaR2 = reco::deltaR2(muon, *calCPtr);
+ if (deltaR2 > std::max(dRMax_CandDep * dRMax_CandDep, theDR_Max * theDR_Max))
continue;
//even more copy-pasting .. need to refactor
@@ -306,28 +361,28 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
continue;
bool vetoTowerEcal = false;
- double deltarEcal = reco::deltaR(mInfo.trkGlobPosAtEcal, *calCPtr);
+ double deltar2Ecal = reco::deltaR2(mInfo.trkGlobPosAtEcal, *calCPtr);
//! first check if the tower is inside the veto cone by dR-alone
- if (deltarEcal < theDR_Veto_E) {
- LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto ecal tower: Calo deltaR= " << deltarEcal;
+ if (deltar2Ecal < std::pow(theDR_Veto_E, 2)) {
+ LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto ecal tower: Calo deltaR= " << deltar2Ecal;
LogDebug("RecoMuon|CaloExtractorByAssociator")
<< " >>> Calo eta phi ethcal: " << calCPtr->eta() << " " << calCPtr->phi() << " " << ethcal;
vetoTowerEcal = true;
}
bool vetoTowerHcal = false;
- double deltarHcal = reco::deltaR(mInfo.trkGlobPosAtHcal, *calCPtr);
+ double deltar2Hcal = reco::deltaR2(mInfo.trkGlobPosAtHcal, *calCPtr);
//! first check if the tower is inside the veto cone by dR-alone
- if (deltarHcal < theDR_Veto_H) {
- LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto hcal tower: Calo deltaR= " << deltarHcal;
+ if (deltar2Hcal < std::pow(theDR_Veto_H, 2)) {
+ LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto hcal tower: Calo deltaR= " << deltar2Hcal;
LogDebug("RecoMuon|CaloExtractorByAssociator")
<< " >>> Calo eta phi ethcal: " << calCPtr->eta() << " " << calCPtr->phi() << " " << ethcal;
vetoTowerHcal = true;
}
bool vetoTowerHOCal = false;
- double deltarHOcal = reco::deltaR(mInfo.trkGlobPosAtHO, *calCPtr);
+ double deltar2HOcal = reco::deltaR2(mInfo.trkGlobPosAtHO, *calCPtr);
//! first check if the tower is inside the veto cone by dR-alone
- if (deltarHOcal < theDR_Veto_HO) {
- LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto HO tower: Calo deltaR= " << deltarHOcal;
+ if (deltar2HOcal < std::pow(theDR_Veto_HO, 2)) {
+ LogDebug("RecoMuon|CaloExtractorByAssociator") << " >>> Veto HO tower: Calo deltaR= " << deltar2HOcal;
LogDebug("RecoMuon|CaloExtractorByAssociator")
<< " >>> Calo eta phi ethcal: " << calCPtr->eta() << " " << calCPtr->phi() << " " << ethcal;
vetoTowerHOCal = true;
@@ -345,27 +400,27 @@ std::vector CaloExtractorByAssociator::deposits(const Event& event,
}
}
- if (deltar0 > theDR_Max && !(vetoTowerEcal || vetoTowerHcal || vetoTowerHOCal))
+ if (deltaR2 > std::pow(theDR_Max, 2) && !(vetoTowerEcal || vetoTowerHcal || vetoTowerHOCal))
continue;
reco::isodeposit::Direction towerDir(calCPtr->eta(), calCPtr->phi());
//! add the Et of the tower to deposits if it's not a vetoed; put into muonEnergy otherwise
- if (doEcal) {
+ if (doEcal and !theUseEcalRecHitsFlag) {
if (vetoTowerEcal)
depEcal.addCandEnergy(etecal);
- else if (deltar0 <= theDR_Max)
+ else if (deltaR2 <= std::pow(theDR_Max, 2))
depEcal.addDeposit(towerDir, etecal);
}
- if (doHcal) {
+ if (doHcal and !theUseHcalRecHitsFlag) {
if (vetoTowerHcal)
depHcal.addCandEnergy(ethcal);
- else if (deltar0 <= theDR_Max)
+ else if (deltaR2 <= std::pow(theDR_Max, 2))
depHcal.addDeposit(towerDir, ethcal);
}
- if (doHOcal) {
+ if (doHOcal and !theUseHORecHitsFlag) {
if (vetoTowerHOCal)
depHOcal.addCandEnergy(ethocal);
- else if (deltar0 <= theDR_Max)
+ else if (deltaR2 <= std::pow(theDR_Max, 2))
depHOcal.addDeposit(towerDir, ethocal);
}
}
diff --git a/RecoMuon/MuonIsolation/plugins/CaloExtractorByAssociator.h b/RecoMuon/MuonIsolation/plugins/CaloExtractorByAssociator.h
index bffbddd717d7e..dba8d08091316 100644
--- a/RecoMuon/MuonIsolation/plugins/CaloExtractorByAssociator.h
+++ b/RecoMuon/MuonIsolation/plugins/CaloExtractorByAssociator.h
@@ -25,10 +25,20 @@
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
+#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h"
+#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h"
+#include "CondFormats/DataRecord/interface/HcalPFCutsRcd.h"
+#include "CondFormats/HcalObjects/interface/HcalChannelQuality.h"
+#include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h"
+#include "CondTools/Hcal/interface/HcalPFCutsHandler.h"
+
#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
+#include "Geometry/CaloTopology/interface/HcalTopology.h"
#include "Geometry/Records/interface/CaloGeometryRecord.h"
#include "MagneticField/Engine/interface/MagneticField.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
+#include "RecoLocalCalo/HcalRecAlgos/interface/HcalSeverityLevelComputer.h"
+#include "RecoLocalCalo/HcalRecAlgos/interface/HcalSeverityLevelComputerRcd.h"
class TrackAssociatorParameters;
class TrackDetectorAssociator;
@@ -58,7 +68,9 @@ namespace muonisolation {
private:
//! use towers or rec hits
- bool theUseRecHitsFlag;
+ bool theUseEcalRecHitsFlag;
+ bool theUseHcalRecHitsFlag;
+ bool theUseHORecHitsFlag;
//! Label of deposit -- suggest to set to "" (all info is in collection name anyways)
std::string theDepositLabel;
@@ -74,6 +86,8 @@ namespace muonisolation {
double theThreshold_E;
double theThreshold_H;
double theThreshold_HO;
+ int theMaxSeverityHB;
+ int theMaxSeverityHE;
//! cone sizes inside which the Et (towers) are not counted
double theDR_Veto_E;
@@ -108,6 +122,23 @@ namespace muonisolation {
edm::ESGetToken bFieldToken_;
edm::ESGetToken caloGeomToken_;
+ // Ecal noise thresholds
+ edm::ESGetToken ecalPFRechitThresholdsToken_;
+ bool ecalRecHitThresh_;
+ EcalPFRecHitThresholds* ecalThresholds = nullptr;
+
+ // following are needed to grab HCal thresholds from GT
+ edm::ESGetToken hcalCutsToken_;
+ bool hcalCutsFromDB_;
+ HcalPFCuts* hcalCuts = nullptr;
+
+ edm::ESGetToken hcalTopologyToken_;
+ edm::ESGetToken hcalChannelQualityToken_;
+ edm::ESGetToken hcalSevLvlComputerToken_;
+ HcalTopology* hcalTopology_;
+ HcalChannelQuality* hcalChStatus_;
+ HcalSeverityLevelComputer* hcalSevLvlComputer_;
+
//! flag to turn on/off printing of a time report
bool thePrintTimeReport;
diff --git a/RecoMuon/MuonIsolationProducers/python/caloExtractorByAssociatorBlocks_cff.py b/RecoMuon/MuonIsolationProducers/python/caloExtractorByAssociatorBlocks_cff.py
index c02b213ef4c46..2d6ada5279dff 100644
--- a/RecoMuon/MuonIsolationProducers/python/caloExtractorByAssociatorBlocks_cff.py
+++ b/RecoMuon/MuonIsolationProducers/python/caloExtractorByAssociatorBlocks_cff.py
@@ -7,7 +7,11 @@
Noise_HE = cms.double(0.2),
DR_Veto_H = cms.double(0.1),
Noise_EE = cms.double(0.1),
- UseRecHitsFlag = cms.bool(False),
+ UseEcalRecHitsFlag = cms.bool(False),
+ UseHcalRecHitsFlag = cms.bool(False),
+ UseHORecHitsFlag = cms.bool(False),
+ EcalRecHitThresh = cms.bool(False),
+ HcalCutsFromDB = cms.bool(False),
NoiseTow_EE = cms.double(0.15),
Threshold_HO = cms.double(0.5),
Noise_EB = cms.double(0.025),
@@ -25,6 +29,8 @@
PrintTimeReport = cms.untracked.bool(False),
NoiseTow_EB = cms.double(0.04),
Threshold_H = cms.double(0.5),
+ MaxSeverityHB = cms.int32(9),
+ MaxSeverityHE = cms.int32(9),
DR_Veto_E = cms.double(0.07),
DepositLabel = cms.untracked.string('Cal'),
ComponentName = cms.string('CaloExtractorByAssociator'),
@@ -38,9 +44,13 @@
Noise_HE = cms.double(0.2),
DR_Veto_H = cms.double(0.1),
Noise_EE = cms.double(0.1),
- UseRecHitsFlag = cms.bool(True),
+ UseEcalRecHitsFlag = cms.bool(True),
+ UseHcalRecHitsFlag = cms.bool(True),
+ UseHORecHitsFlag = cms.bool(True),
+ EcalRecHitThresh = cms.bool(True),
+ HcalCutsFromDB = cms.bool(True),
NoiseTow_EE = cms.double(0.15),
- Threshold_HO = cms.double(0.1),
+ Threshold_HO = cms.double(0.5),
Noise_EB = cms.double(0.025),
Noise_HO = cms.double(0.2),
CenterConeOnCalIntersection = cms.bool(False),
@@ -56,6 +66,45 @@
NoiseTow_EB = cms.double(0.04),
PrintTimeReport = cms.untracked.bool(False),
Threshold_H = cms.double(0.1),
+ MaxSeverityHB = cms.int32(9),
+ MaxSeverityHE = cms.int32(9),
+ DR_Veto_E = cms.double(0.07),
+ DepositLabel = cms.untracked.string('Cal'),
+ ComponentName = cms.string('CaloExtractorByAssociator'),
+ DR_Veto_HO = cms.double(0.1),
+ DepositInstanceLabels = cms.vstring('ecal',
+ 'hcal',
+ 'ho')
+)
+MIsoCaloExtractorByAssociatorMixedBlock = cms.PSet(
+ MIsoTrackAssociatorMixed,
+ Noise_HE = cms.double(0.2),
+ DR_Veto_H = cms.double(0.1),
+ Noise_EE = cms.double(0.1),
+ UseEcalRecHitsFlag = cms.bool(True),
+ UseHcalRecHitsFlag = cms.bool(False),
+ UseHORecHitsFlag = cms.bool(False),
+ EcalRecHitThresh = cms.bool(True),
+ HcalCutsFromDB = cms.bool(False),
+ NoiseTow_EE = cms.double(0.15),
+ Threshold_HO = cms.double(0.5),
+ Noise_EB = cms.double(0.025),
+ Noise_HO = cms.double(0.2),
+ CenterConeOnCalIntersection = cms.bool(False),
+ DR_Max = cms.double(0.5),
+ PropagatorName = cms.string('SteppingHelixPropagatorAny'),
+ ServiceParameters = cms.PSet(
+ Propagators = cms.untracked.vstring( 'SteppingHelixPropagatorAny' ),
+ RPCLayers = cms.bool( False ),
+ UseMuonNavigation = cms.untracked.bool( False )
+ ),
+ Threshold_E = cms.double(0.025),
+ Noise_HB = cms.double(0.2),
+ PrintTimeReport = cms.untracked.bool(False),
+ NoiseTow_EB = cms.double(0.04),
+ Threshold_H = cms.double(0.5),
+ MaxSeverityHB = cms.int32(9),
+ MaxSeverityHE = cms.int32(9),
DR_Veto_E = cms.double(0.07),
DepositLabel = cms.untracked.string('Cal'),
ComponentName = cms.string('CaloExtractorByAssociator'),
@@ -64,5 +113,3 @@
'hcal',
'ho')
)
-
-
diff --git a/RecoMuon/MuonIsolationProducers/python/muIsoDepositCalByAssociatorMixed_cfi.py b/RecoMuon/MuonIsolationProducers/python/muIsoDepositCalByAssociatorMixed_cfi.py
new file mode 100644
index 0000000000000..5767c8b1c39e0
--- /dev/null
+++ b/RecoMuon/MuonIsolationProducers/python/muIsoDepositCalByAssociatorMixed_cfi.py
@@ -0,0 +1,16 @@
+import FWCore.ParameterSet.Config as cms
+
+# -*-TCL-*-
+from RecoMuon.MuonIsolationProducers.isoDepositProducerIOBlocks_cff import *
+from RecoMuon.MuonIsolationProducers.caloExtractorByAssociatorBlocks_cff import *
+muIsoDepositCalByAssociatorMixed = cms.EDProducer("MuIsoDepositProducer",
+ IOPSet = cms.PSet(
+ MIsoDepositViewMultiIOBlock
+ ),
+ ExtractorPSet = cms.PSet(
+ MIsoCaloExtractorByAssociatorMixedBlock
+ )
+)
+
+
+
diff --git a/RecoMuon/MuonIsolationProducers/python/muIsoDeposits_cff.py.1muIsoDeposits_cff.py b/RecoMuon/MuonIsolationProducers/python/muIsoDeposits_cff.py.1muIsoDeposits_cff.py
new file mode 100644
index 0000000000000..e3e5ad6e540dd
--- /dev/null
+++ b/RecoMuon/MuonIsolationProducers/python/muIsoDeposits_cff.py.1muIsoDeposits_cff.py
@@ -0,0 +1,86 @@
+# The following comments couldn't be translated into the new config version:
+
+#the same but for FastSim muons
+
+#for bw compat (kill later)
+
+import FWCore.ParameterSet.Config as cms
+
+# -*-TCL-*-
+#the default set of includes
+from RecoMuon.MuonIsolationProducers.muIsoDeposits_setup_cff import *
+#the default set of modules first
+from RecoMuon.MuonIsolationProducers.muIsoDepositCopies_cfi import *
+import RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi
+import RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorTowers_cfi
+import RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorHits_cfi
+import RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorMixed_cfi
+import RecoMuon.MuonIsolationProducers.muIsoDepositJets_cfi
+import RecoMuon.MuonIsolationProducers.muIsoDepositCal_cfi
+
+muParamGlobalIsoDepositCtfTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone()
+muParamGlobalIsoDepositJets = RecoMuon.MuonIsolationProducers.muIsoDepositJets_cfi.muIsoDepositJets.clone()
+muParamGlobalIsoDepositGsTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone()
+muParamGlobalIsoDepositTk = RecoMuon.MuonIsolationProducers.muIsoDepositTk_cfi.muIsoDepositTk.clone()
+muParamGlobalIsoDepositCalEcal = RecoMuon.MuonIsolationProducers.muIsoDepositCal_cfi.muIsoDepositCal.clone()
+muParamGlobalIsoDepositCalHcal = RecoMuon.MuonIsolationProducers.muIsoDepositCal_cfi.muIsoDepositCal.clone()
+muParamGlobalIsoDepositCalByAssociatorTowers = RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorTowers_cfi.muIsoDepositCalByAssociatorTowers.clone()
+muParamGlobalIsoDepositCalByAssociatorHits = RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorHits_cfi.muIsoDepositCalByAssociatorHits.clone()
+muParamGlobalIsoDepositCalByAssociatorMixed = RecoMuon.MuonIsolationProducers.muIsoDepositCalByAssociatorMixed_cfi.muIsoDepositCalByAssociatorMixed.clone()
+#
+# and now sequences of the above
+#
+#------------------------------
+# "standard sequences"
+muIsoDeposits_muonsTask = cms.Task(muIsoDepositTk,muIsoDepositCalByAssociatorHits,muIsoDepositCalByAssociatorTowers,muIsoDepositJets)
+muIsoDeposits_muons = cms.Sequence(muIsoDeposits_muonsTask)
+# "displaced sequences"
+muIsoDeposits_displacedMuonsTask = cms.Task(muIsoDepositTkDisplaced,muIsoDepositCalByAssociatorHitsDisplaced,muIsoDepositCalByAssociatorTowersDisplaced,muIsoDepositJetsDisplaced)
+muIsoDeposits_displacedMuons = cms.Sequence(muIsoDeposits_displacedMuonsTask)
+#old one, using a reduced config set
+muIsoDeposits_ParamGlobalMuonsOldTask = cms.Task(muParamGlobalIsoDepositGsTk,muParamGlobalIsoDepositCalEcal,muParamGlobalIsoDepositCalHcal)
+muIsoDeposits_ParamGlobalMuonsOld = cms.Sequence(muIsoDeposits_ParamGlobalMuonsOldTask)
+muIsoDeposits_ParamGlobalMuonsTask = cms.Task(muParamGlobalIsoDepositTk,muParamGlobalIsoDepositCalByAssociatorMixed,muParamGlobalIsoDepositJets)
+muIsoDeposits_ParamGlobalMuons = cms.Sequence(muIsoDeposits_ParamGlobalMuonsTask)
+muParamGlobalIsoDepositCtfTk.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalViewIOBlock
+)
+muParamGlobalIsoDepositCtfTk.ExtractorPSet = cms.PSet(
+ MIsoTrackExtractorGsBlock
+)
+muParamGlobalIsoDepositCalByAssociatorTowers.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalViewMultiIOBlock
+)
+muParamGlobalIsoDepositCalByAssociatorHits.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalViewMultiIOBlock
+)
+muParamGlobalIsoDepositCalByAssociatorMixed.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalViewMultiIOBlock
+)
+muParamGlobalIsoDepositJets.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalViewIOBlock
+)
+muParamGlobalIsoDepositGsTk.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalIOBlock
+)
+muParamGlobalIsoDepositGsTk.ExtractorPSet = cms.PSet(
+ MIsoTrackExtractorGsBlock
+)
+muParamGlobalIsoDepositTk.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalIOBlock
+)
+muParamGlobalIsoDepositTk.ExtractorPSet = cms.PSet(
+ MIsoTrackExtractorBlock
+)
+muParamGlobalIsoDepositCalEcal.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalIOBlock
+)
+muParamGlobalIsoDepositCalEcal.ExtractorPSet = cms.PSet(
+ MIsoCaloExtractorEcalBlock
+)
+muParamGlobalIsoDepositCalHcal.IOPSet = cms.PSet(
+ MIsoDepositParamGlobalIOBlock
+)
+muParamGlobalIsoDepositCalHcal.ExtractorPSet = cms.PSet(
+ MIsoCaloExtractorHcalBlock
+)
diff --git a/RecoMuon/MuonIsolationProducers/python/muIsoResultM2C_cfi.py b/RecoMuon/MuonIsolationProducers/python/muIsoResultM2C_cfi.py
index 5faf28f335826..266cd037137a5 100644
--- a/RecoMuon/MuonIsolationProducers/python/muIsoResultM2C_cfi.py
+++ b/RecoMuon/MuonIsolationProducers/python/muIsoResultM2C_cfi.py
@@ -17,7 +17,7 @@
UnweightedInputHitEcalDeps
),
cms.PSet(
- UnweightedInputHitHcalDeps
+ UnweightedInputTowHcalDeps
)),
BeamlineOption = cms.string('BeamSpotFromEvent')
)
diff --git a/RecoMuon/MuonIsolationProducers/python/muIsoResultM2T_cfi.py b/RecoMuon/MuonIsolationProducers/python/muIsoResultM2T_cfi.py
index 50c585c118fca..54b1f5ddaf58e 100644
--- a/RecoMuon/MuonIsolationProducers/python/muIsoResultM2T_cfi.py
+++ b/RecoMuon/MuonIsolationProducers/python/muIsoResultM2T_cfi.py
@@ -16,7 +16,7 @@
UnweightedInputHitEcalDeps
),
cms.PSet(
- UnweightedInputHitHcalDeps
+ UnweightedInputTowHcalDeps
))
)
diff --git a/RecoMuon/MuonIsolationProducers/python/trackAssociatorBlocks_cff.py b/RecoMuon/MuonIsolationProducers/python/trackAssociatorBlocks_cff.py
index 82c72109d1a97..2f7a1f3b524d1 100644
--- a/RecoMuon/MuonIsolationProducers/python/trackAssociatorBlocks_cff.py
+++ b/RecoMuon/MuonIsolationProducers/python/trackAssociatorBlocks_cff.py
@@ -15,6 +15,10 @@
TrackAssociatorParameterBlock
)
+MIsoTrackAssociatorMixed = cms.PSet(
+ TrackAssociatorParameterBlock
+)
+
MIsoTrackAssociatorJets = cms.PSet(
TrackAssociatorParameterBlock
)
@@ -52,6 +56,17 @@
MIsoTrackAssociatorHits.TrackAssociatorParameters.dREcal = 1.0
MIsoTrackAssociatorHits.TrackAssociatorParameters.dRHcal = 1.0
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.useEcal = True ## RecoHits
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.useHcal = False ## RecoHits
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.useHO = False ## RecoHits
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.useCalo = True ## CaloTowers
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.useMuon = False ## RecoHits
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.usePreshower = False
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.dREcalPreselection = 1.0
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.dRHcalPreselection = 1.0
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.dREcal = 1.0
+MIsoTrackAssociatorMixed.TrackAssociatorParameters.dRHcal = 1.0
+
MIsoTrackAssociatorJets.TrackAssociatorParameters.useEcal = False ## RecoHits
MIsoTrackAssociatorJets.TrackAssociatorParameters.useHcal = False ## RecoHits
MIsoTrackAssociatorJets.TrackAssociatorParameters.useHO = False ## RecoHits