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