diff --git a/Collections/interface/DisappearingTrack.h b/Collections/interface/DisappearingTrack.h index d1d71fe2..aa766acf 100644 --- a/Collections/interface/DisappearingTrack.h +++ b/Collections/interface/DisappearingTrack.h @@ -35,36 +35,39 @@ namespace osu { DisappearingTrack(const TYPE(tracks) &, const edm::Handle > &, const edm::ParameterSet &); - DisappearingTrack(const TYPE(tracks) &, - const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &); - DisappearingTrack(const TYPE(tracks) &, - const edm::Handle > &, - const edm::Handle > &, + DisappearingTrack(const TYPE(tracks) &, + const edm::Handle > &, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double); + DisappearingTrack(const TYPE(tracks) &, + const edm::Handle > &, + const edm::Handle > &, const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &, - const map > * const, - const map > * const, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double, + const map > * const, + const map > * const, const bool); // the DisappTrks constructor - DisappearingTrack(const TYPE(tracks) &, - const edm::Handle > &, + DisappearingTrack(const TYPE(tracks) &, + const edm::Handle > &, const edm::Handle > &, const edm::Handle > &, const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &, - const map > * const, - const map > * const, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double, + const map > * const, + const map > * const, const bool, #if DATA_FORMAT_FROM_MINIAOD && DATA_FORMAT_IS_2017 const edm::Handle > &, @@ -478,35 +481,38 @@ namespace osu { SecondaryDisappearingTrack(const TYPE(tracks) &, const edm::Handle > &, const edm::ParameterSet &); - SecondaryDisappearingTrack(const TYPE(tracks) &, - const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &); - SecondaryDisappearingTrack(const TYPE(tracks) &, - const edm::Handle > &, - const edm::Handle > &, + SecondaryDisappearingTrack(const TYPE(tracks) &, + const edm::Handle > &, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double); + SecondaryDisappearingTrack(const TYPE(tracks) &, + const edm::Handle > &, + const edm::Handle > &, const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &, - const map > * const, - const map > * const, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double, + const map > * const, + const map > * const, const bool); // the DisappTrks constructor - SecondaryDisappearingTrack(const TYPE(tracks) &, + SecondaryDisappearingTrack(const TYPE(tracks) &, const edm::Handle > &, const edm::Handle > &, const edm::Handle > &, const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &, - const map > * const, - const map > * const, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double, + const map > * const, + const map > * const, const bool, #if DATA_FORMAT_FROM_MINIAOD && DATA_FORMAT_IS_2017 const edm::Handle > &, diff --git a/Collections/interface/TrackBase.h b/Collections/interface/TrackBase.h index 8ee78301..9ef442cf 100644 --- a/Collections/interface/TrackBase.h +++ b/Collections/interface/TrackBase.h @@ -4,6 +4,8 @@ #include #include +#include "TH2D.h" + #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" #include "DataFormats/PatCandidates/interface/PackedCandidate.h" @@ -17,28 +19,6 @@ #define M_PI_2 1.57079632679489661923 #endif -struct EtaPhi { - double eta; - double phi; - double sigma; - - EtaPhi(const double a, const double b, const double sigma = -1.0) : - eta(a), - phi(b), - sigma(sigma) - { - } -}; - -struct EtaPhiList : public vector { - double minDeltaR; - - EtaPhiList() : - minDeltaR(0.0) - { - } -}; - #if IS_VALID(tracks) namespace osu @@ -52,22 +32,24 @@ namespace osu TrackBase(const TYPE(tracks) &, const edm::Handle > &, const edm::ParameterSet &); - TrackBase(const TYPE(tracks) &, - const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &); - TrackBase(const TYPE(tracks) &, - const edm::Handle > &, - const edm::Handle > &, + TrackBase(const TYPE(tracks) &, + const edm::Handle > &, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double); + TrackBase(const TYPE(tracks) &, + const edm::Handle > &, + const edm::Handle > &, const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &, - const map > * const, - const map > * const, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double, + const map > * const, + const map > * const, const bool); ~TrackBase(); @@ -281,7 +263,7 @@ namespace osu float deltaRToClosestPFMuon_; float deltaRToClosestPFChHad_; - const bool isFiducialTrack(const EtaPhiList &, const double, double &) const; + const bool isFiducialTrack(const TH2D *sigmaMap, const double minDeltaR, const double thresholdForVeto, double &maxSigma) const; const edm::Ref > &findMatchedGsfTrack(const edm::Handle > &, edm::Ref > &, double &) const; const bool isBadGsfTrack(const reco::GsfTrack &) const; int isCloseToBadEcalChannel(const double &); @@ -307,22 +289,24 @@ namespace osu SecondaryTrackBase(const TYPE(tracks) &, const edm::Handle > &, const edm::ParameterSet &); - SecondaryTrackBase(const TYPE(tracks) &, - const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &); - SecondaryTrackBase(const TYPE(tracks) &, - const edm::Handle > &, - const edm::Handle > &, + SecondaryTrackBase(const TYPE(tracks) &, + const edm::Handle > &, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double); + SecondaryTrackBase(const TYPE(tracks) &, + const edm::Handle > &, + const edm::Handle > &, const edm::Handle > &, - const edm::ParameterSet &, - const edm::Handle > &, - const EtaPhiList &, - const EtaPhiList &, - const map > * const, - const map > * const, + const edm::ParameterSet &, + const edm::Handle > &, + const TH2D *, + const TH2D *, + const double, + const map > * const, + const map > * const, const bool); ~SecondaryTrackBase(); diff --git a/Collections/plugins/OSUGenericTrackProducer.cc b/Collections/plugins/OSUGenericTrackProducer.cc index 0d4a5f78..0a4fdb18 100644 --- a/Collections/plugins/OSUGenericTrackProducer.cc +++ b/Collections/plugins/OSUGenericTrackProducer.cc @@ -118,58 +118,45 @@ OSUGenericTrackProducer::OSUGenericTrackProducer (const edm::ParameterSet &cf sessionDS_ = tensorflow::createSession(cacheData->graphDefDS, opts); #if DATA_FORMAT_FROM_MINIAOD + electronFiducialSigmaMap_ = nullptr; + muonFiducialSigmaMap_ = nullptr; + stringstream ss; for (const auto &electronFiducialMap : electronFiducialMaps) - { - const edm::FileInPath &histFile = electronFiducialMap.getParameter ("histFile"); + { + const edm::FileInPath &histFile = electronFiducialMap.getParameter("histFile"); ss << "================================================================================" << endl; - ss << "calculating electron veto regions in (eta, phi)..." << endl; - ss << "extracting histograms from \"" << histFile.relativePath () << "\"..." << endl; + ss << "calculating electron sigma map in (eta, phi)..." << endl; + ss << "extracting histograms from \"" << histFile.relativePath() << "\"..." << endl; ss << "--------------------------------------------------------------------------------" << endl; - extractFiducialMap (electronFiducialMap, electronVetoList_, ss); - + extractFiducialMap(electronFiducialMap, electronFiducialSigmaMap_, thresholdForFiducialVeto_, ss); ss << "================================================================================" << endl; - } + } for (const auto &muonFiducialMap : muonFiducialMaps) - { - const edm::FileInPath &histFile = muonFiducialMap.getParameter ("histFile"); + { + const edm::FileInPath &histFile = muonFiducialMap.getParameter("histFile"); ss << "================================================================================" << endl; - ss << "calculating muon veto regions in (eta, phi)..." << endl; - ss << "extracting histograms from \"" << histFile.relativePath () << "\"..." << endl; + ss << "calculating muon sigma map in (eta, phi)..." << endl; + ss << "extracting histograms from \"" << histFile.relativePath() << "\"..." << endl; ss << "--------------------------------------------------------------------------------" << endl; - extractFiducialMap (muonFiducialMap, muonVetoList_, ss); - + extractFiducialMap(muonFiducialMap, muonFiducialSigmaMap_, thresholdForFiducialVeto_, ss); ss << "================================================================================" << endl; - } + } - sort (electronVetoList_.begin (), electronVetoList_.end (), [] (EtaPhi a, EtaPhi b) -> bool { return (a.eta < b.eta && a.phi < b.phi); }); - sort (muonVetoList_.begin (), muonVetoList_.end (), [] (EtaPhi a, EtaPhi b) -> bool { return (a.eta < b.eta && a.phi < b.phi); }); - - ss << "================================================================================" << endl; - ss << "electron veto regions in (eta, phi)" << endl; - ss << "--------------------------------------------------------------------------------" << endl; - for (const auto &etaPhi : electronVetoList_) - ss << "(" << setw (10) << etaPhi.eta << "," << setw (10) << etaPhi.phi << ")" << endl; - ss << "================================================================================" << endl; - - ss << "================================================================================" << endl; - ss << "muon veto regions in (eta, phi)" << endl; - ss << "--------------------------------------------------------------------------------" << endl; - for (const auto &etaPhi : muonVetoList_) - ss << "(" << setw (10) << etaPhi.eta << "," << setw (10) << etaPhi.phi << ")" << endl; - ss << "================================================================================"; - edm::LogInfo ("OSUGenericTrackProducer") << ss.str (); + edm::LogInfo("OSUGenericTrackProducer") << ss.str(); #endif // DATA_FORMAT_FROM_MINIAOD } template OSUGenericTrackProducer::~OSUGenericTrackProducer () { + delete electronFiducialSigmaMap_; + delete muonFiducialSigmaMap_; } template std::unique_ptr @@ -324,8 +311,9 @@ OSUGenericTrackProducer::produce (edm::Event &event, const edm::EventSetup &s jets, cfg_, gsfTracks, - electronVetoList_, - muonVetoList_, + electronFiducialSigmaMap_, + muonFiducialSigmaMap_, + thresholdForFiducialVeto_, &EcalAllDeadChannelsValMap_, &EcalAllDeadChannelsBitMap_, !event.isRealData (), @@ -338,16 +326,17 @@ OSUGenericTrackProducer::produce (edm::Event &event, const edm::EventSetup &s candidateTracks); #endif #elif DATA_FORMAT_FROM_MINIAOD - pl_->emplace_back (object, - particles, - pfCandidates, - jets, - cfg_, - gsfTracks, - electronVetoList_, - muonVetoList_, - &EcalAllDeadChannelsValMap_, - &EcalAllDeadChannelsBitMap_, + pl_->emplace_back (object, + particles, + pfCandidates, + jets, + cfg_, + gsfTracks, + electronFiducialSigmaMap_, + muonFiducialSigmaMap_, + thresholdForFiducialVeto_, + &EcalAllDeadChannelsValMap_, + &EcalAllDeadChannelsBitMap_, !event.isRealData ()); #else pl_->emplace_back (object); @@ -754,13 +743,13 @@ OSUGenericTrackProducer::getPosition( const DetId& id) const } template void -OSUGenericTrackProducer::extractFiducialMap (const edm::ParameterSet &cfg, EtaPhiList &vetoList, stringstream &ss) const +OSUGenericTrackProducer::extractFiducialMap (const edm::ParameterSet &cfg, TH2D *&sigmaMap, double &thresholdForVeto, stringstream &ss) const { const edm::FileInPath &histFile = cfg.getParameter ("histFile"); const string &era = cfg.getParameter ("era"); const string &beforeVetoHistName = useEraByEraFiducialMaps_ ? cfg.getParameter ("beforeVetoHistName") + era : cfg.getParameter ("beforeVetoHistName"); const string &afterVetoHistName = useEraByEraFiducialMaps_ ? cfg.getParameter ("afterVetoHistName") + era : cfg.getParameter ("afterVetoHistName"); - const double &thresholdForVeto = cfg.getParameter ("thresholdForVeto"); + thresholdForVeto = cfg.getParameter ("thresholdForFiducialVeto"); edm::LogInfo ("OSUGenericTrackProducer") << "Attempting to extract \"" << beforeVetoHistName << "\" and \"" << afterVetoHistName << "\" from \"" << histFile.fullPath () << "\"..."; TFile *fin = TFile::Open (histFile.fullPath ().c_str ()); @@ -796,9 +785,6 @@ OSUGenericTrackProducer::extractFiducialMap (const edm::ParameterSet &cfg, Et { for (int j = 1; j <= beforeVetoHist->GetYaxis ()->GetNbins (); j++) { - double binRadius = hypot (0.5 * beforeVetoHist->GetXaxis ()->GetBinWidth (i), 0.5 * beforeVetoHist->GetYaxis ()->GetBinWidth (j)); - (vetoList.minDeltaR < binRadius) && (vetoList.minDeltaR = binRadius); - double contentBeforeVeto = beforeVetoHist->GetBinContent (i, j); if (!contentBeforeVeto) // skip bins that are empty in the before-veto histogram @@ -837,26 +823,34 @@ OSUGenericTrackProducer::extractFiducialMap (const edm::ParameterSet &cfg, Et } ////////////////////////////////////////////////////////////////////////////// - // Then find the bins which are greater than the mean by more than - // thresholdForVeto sigma. Add the coordinates for these bins to the veto - // list. + // Build the sigma map: for each non-empty bin store its sigma value. + // Empty bins (no tags before veto) are marked NaN so isFiducialTrack can + // skip them. Hot spots (sigma > thresholdForVeto) are logged. ////////////////////////////////////////////////////////////////////////////// + if (!sigmaMap) + sigmaMap = new TH2D(*afterVetoHist); // clone binning; contents will be overwritten + for (int i = 1; i <= afterVetoHist->GetXaxis ()->GetNbins (); i++) { for (int j = 1; j <= afterVetoHist->GetYaxis ()->GetNbins (); j++) { - double content = afterVetoHist->GetBinContent (i, j), - //error = afterVetoHist->GetBinError (i, j), - eta = afterVetoHist->GetXaxis ()->GetBinCenter (i), - phi = afterVetoHist->GetYaxis ()->GetBinCenter (j); - - content && ss << "(" << setw (10) << eta << ", " << setw (10) << phi << "): " << setw (10) << (content - meanInefficiency) / stdDevInefficiency << " sigma above mean of " << setw (10) << meanInefficiency; - if ((content - meanInefficiency) > thresholdForVeto * stdDevInefficiency) + if (beforeVetoHist->GetBinContent (i, j) == 0) { - vetoList.emplace_back (eta, phi, (content - meanInefficiency) / stdDevInefficiency); - ss << " * HOT SPOT *"; + sigmaMap->SetBinContent (i, j, std::numeric_limits::quiet_NaN()); + continue; } - content && ss << endl; + + double content = afterVetoHist->GetBinContent (i, j); + double sigma = (content - meanInefficiency) / stdDevInefficiency; + double eta = afterVetoHist->GetXaxis ()->GetBinCenter (i); + double phi = afterVetoHist->GetYaxis ()->GetBinCenter (j); + + sigmaMap->SetBinContent (i, j, sigma); + + ss << "(" << setw (10) << eta << ", " << setw (10) << phi << "): " << setw (10) << sigma << " sigma above mean of " << setw (10) << meanInefficiency; + if (sigma > thresholdForVeto) + ss << " * HOT SPOT *"; + ss << endl; } } ////////////////////////////////////////////////////////////////////////////// diff --git a/Collections/plugins/OSUGenericTrackProducer.h b/Collections/plugins/OSUGenericTrackProducer.h index 5e93b5be..ffaa26ea 100644 --- a/Collections/plugins/OSUGenericTrackProducer.h +++ b/Collections/plugins/OSUGenericTrackProducer.h @@ -154,13 +154,14 @@ template bool useEraByEraFiducialMaps_; - EtaPhiList electronVetoList_; - EtaPhiList muonVetoList_; + TH2D *electronFiducialSigmaMap_; + TH2D *muonFiducialSigmaMap_; + double thresholdForFiducialVeto_; // Payload for this EDFilter. unique_ptr > pl_; - void extractFiducialMap (const edm::ParameterSet &, EtaPhiList &, stringstream &) const; + void extractFiducialMap (const edm::ParameterSet &cfg, TH2D *&sigmaMap, double &thresholdForVeto, stringstream &ss) const; void envSet (const edm::EventSetup &); int getChannelStatusMaps (); diff --git a/Collections/src/DisappearingTrack.cc b/Collections/src/DisappearingTrack.cc index aead74f8..4a7131fa 100644 --- a/Collections/src/DisappearingTrack.cc +++ b/Collections/src/DisappearingTrack.cc @@ -256,13 +256,14 @@ osu::DisappearingTrack::DisappearingTrack(const TYPE(tracks) &track, { } -osu::DisappearingTrack::DisappearingTrack(const TYPE(tracks) &track, - const edm::Handle > &particles, - const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList) : - TrackBase(track, particles, cfg, gsfTracks, electronVetoList, muonVetoList), +osu::DisappearingTrack::DisappearingTrack(const TYPE(tracks) &track, + const edm::Handle > &particles, + const edm::ParameterSet &cfg, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto) : + TrackBase(track, particles, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto), deltaRToClosestElectron_ (INVALID_VALUE), deltaRToClosestVetoElectron_ (INVALID_VALUE), deltaRToClosestLooseElectron_ (INVALID_VALUE), @@ -326,16 +327,17 @@ osu::DisappearingTrack::DisappearingTrack(const TYPE(tracks) &track, osu::DisappearingTrack::DisappearingTrack(const TYPE(tracks) &track, const edm::Handle > &particles, - const edm::Handle > &pfCandidates, + const edm::Handle > &pfCandidates, const edm::Handle > &jets, - const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList, - const map > * const EcalAllDeadChannelsValMap, - const map > * const EcalAllDeadChannelsBitMap, + const edm::ParameterSet &cfg, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto, + const map > * const EcalAllDeadChannelsValMap, + const map > * const EcalAllDeadChannelsBitMap, const bool dropHits) : - TrackBase(track, particles, pfCandidates, jets, cfg, gsfTracks, electronVetoList, muonVetoList, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits), + TrackBase(track, particles, pfCandidates, jets, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits), deltaRToClosestElectron_ (INVALID_VALUE), deltaRToClosestVetoElectron_ (INVALID_VALUE), deltaRToClosestLooseElectron_ (INVALID_VALUE), @@ -405,8 +407,9 @@ osu::DisappearingTrack::DisappearingTrack (const TYPE(tracks) &track, const edm::Handle > &jets, const edm::ParameterSet &cfg, const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto, const map > * const EcalAllDeadChannelsValMap, const map > * const EcalAllDeadChannelsBitMap, const bool dropHits, @@ -418,7 +421,7 @@ osu::DisappearingTrack::DisappearingTrack (const TYPE(tracks) &track, #else const edm::Handle > &candidateTracks) : #endif - TrackBase(track, particles, pfCandidates, jets, cfg, gsfTracks, electronVetoList, muonVetoList, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits), + TrackBase(track, particles, pfCandidates, jets, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits), deltaRToClosestElectron_ (INVALID_VALUE), deltaRToClosestVetoElectron_ (INVALID_VALUE), deltaRToClosestLooseElectron_ (INVALID_VALUE), @@ -1020,26 +1023,28 @@ osu::SecondaryDisappearingTrack::SecondaryDisappearingTrack(const TYPE(tracks) & const edm::ParameterSet &cfg) : osu::DisappearingTrack(secondaryTrack, particles, cfg) {} -osu::SecondaryDisappearingTrack::SecondaryDisappearingTrack(const TYPE(secondaryTracks) &secondaryTrack, - const edm::Handle > &particles, - const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList) : - osu::DisappearingTrack(secondaryTrack, particles, cfg, gsfTracks, electronVetoList, muonVetoList) {} - -osu::SecondaryDisappearingTrack::SecondaryDisappearingTrack(const TYPE(tracks) &secondaryTrack, - const edm::Handle > &particles, +osu::SecondaryDisappearingTrack::SecondaryDisappearingTrack(const TYPE(secondaryTracks) &secondaryTrack, + const edm::Handle > &particles, + const edm::ParameterSet &cfg, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto) : + osu::DisappearingTrack(secondaryTrack, particles, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto) {} + +osu::SecondaryDisappearingTrack::SecondaryDisappearingTrack(const TYPE(tracks) &secondaryTrack, + const edm::Handle > &particles, const edm::Handle > &pfCandidates, const edm::Handle > &jets, - const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList, - const map > * const EcalAllDeadChannelsValMap, - const map > * const EcalAllDeadChannelsBitMap, + const edm::ParameterSet &cfg, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto, + const map > * const EcalAllDeadChannelsValMap, + const map > * const EcalAllDeadChannelsBitMap, const bool dropHits) : - osu::DisappearingTrack(secondaryTrack, particles, pfCandidates, jets, cfg, gsfTracks, electronVetoList, muonVetoList, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits) {} + osu::DisappearingTrack(secondaryTrack, particles, pfCandidates, jets, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits) {} // the DisappTrks constructor osu::SecondaryDisappearingTrack::SecondaryDisappearingTrack (const TYPE(tracks) &track, @@ -1048,22 +1053,23 @@ osu::SecondaryDisappearingTrack::SecondaryDisappearingTrack (const TYPE(tracks) const edm::Handle > &lostTracks, const edm::Handle > &jets, const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList, - const map > * const EcalAllDeadChannelsValMap, - const map > * const EcalAllDeadChannelsBitMap, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto, + const map > * const EcalAllDeadChannelsValMap, + const map > * const EcalAllDeadChannelsBitMap, const bool dropHits, #if DATA_FORMAT_FROM_MINIAOD && DATA_FORMAT_IS_2017 const edm::Handle > &candidateTracks, const edm::Handle > &isolatedTracks) : - osu::DisappearingTrack(track, particles, pfCandidates, lostTracks, jets, cfg, gsfTracks, electronVetoList, muonVetoList, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits, candidateTracks, isolatedTracks) {} + osu::DisappearingTrack(track, particles, pfCandidates, lostTracks, jets, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits, candidateTracks, isolatedTracks) {} #elif DATA_FORMAT_FROM_MINIAOD && DATA_FORMAT_IS_2022 const edm::Handle > &isolatedTracks) : - osu::DisappearingTrack(track, particles, pfCandidates, lostTracks, jets, cfg, gsfTracks, electronVetoList, muonVetoList, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits, isolatedTracks) {} + osu::DisappearingTrack(track, particles, pfCandidates, lostTracks, jets, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits, isolatedTracks) {} #else const edm::Handle > &candidateTracks) : - osu::DisappearingTrack(track, particles, pfCandidates, lostTracks, jets, cfg, gsfTracks, electronVetoList, muonVetoList, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits, candidateTracks) {} + osu::DisappearingTrack(track, particles, pfCandidates, lostTracks, jets, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits, candidateTracks) {} #endif osu::SecondaryDisappearingTrack::~SecondaryDisappearingTrack () diff --git a/Collections/src/TrackBase.cc b/Collections/src/TrackBase.cc index 90c3489a..1d4eeaa4 100644 --- a/Collections/src/TrackBase.cc +++ b/Collections/src/TrackBase.cc @@ -97,17 +97,18 @@ osu::TrackBase::TrackBase (const TYPE(tracks) &track, { } -osu::TrackBase::TrackBase (const TYPE(tracks) &track, - const edm::Handle > &particles, - const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList) : +osu::TrackBase::TrackBase (const TYPE(tracks) &track, + const edm::Handle > &particles, + const edm::ParameterSet &cfg, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto) : GenMatchable (track, particles, cfg), dRMinJet_ (INVALID_VALUE), minDeltaRForFiducialTrack_ (cfg.getParameter ("minDeltaRForFiducialTrack")), - isFiducialElectronTrack_ (isFiducialTrack (electronVetoList, minDeltaRForFiducialTrack_, maxSigmaForFiducialElectronTrack_)), - isFiducialMuonTrack_ (isFiducialTrack (muonVetoList, minDeltaRForFiducialTrack_, maxSigmaForFiducialMuonTrack_)), + isFiducialElectronTrack_ (isFiducialTrack(electronFiducialSigmaMap, minDeltaRForFiducialTrack_, thresholdForFiducialVeto, maxSigmaForFiducialElectronTrack_)), + isFiducialMuonTrack_ (isFiducialTrack(muonFiducialSigmaMap, minDeltaRForFiducialTrack_, thresholdForFiducialVeto, maxSigmaForFiducialMuonTrack_)), isDeepSetsElectronTrack_ (true), EcalAllDeadChannelsValMap_ (NULL), EcalAllDeadChannelsBitMap_ (NULL), @@ -127,22 +128,23 @@ osu::TrackBase::TrackBase (const TYPE(tracks) &track, } -osu::TrackBase::TrackBase (const TYPE(tracks) &track, +osu::TrackBase::TrackBase (const TYPE(tracks) &track, const edm::Handle > &particles, - const edm::Handle > &pfCandidates, + const edm::Handle > &pfCandidates, const edm::Handle > &jets, - const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList, - const map > * const EcalAllDeadChannelsValMap, - const map > * const EcalAllDeadChannelsBitMap, + const edm::ParameterSet &cfg, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto, + const map > * const EcalAllDeadChannelsValMap, + const map > * const EcalAllDeadChannelsBitMap, const bool dropHits) : GenMatchable (track, particles, cfg), dRMinJet_ (INVALID_VALUE), minDeltaRForFiducialTrack_ (cfg.getParameter ("minDeltaRForFiducialTrack")), - isFiducialElectronTrack_ (isFiducialTrack (electronVetoList, minDeltaRForFiducialTrack_, maxSigmaForFiducialElectronTrack_)), - isFiducialMuonTrack_ (isFiducialTrack (muonVetoList, minDeltaRForFiducialTrack_, maxSigmaForFiducialMuonTrack_)), + isFiducialElectronTrack_ (isFiducialTrack(electronFiducialSigmaMap, minDeltaRForFiducialTrack_, thresholdForFiducialVeto, maxSigmaForFiducialElectronTrack_)), + isFiducialMuonTrack_ (isFiducialTrack(muonFiducialSigmaMap, minDeltaRForFiducialTrack_, thresholdForFiducialVeto, maxSigmaForFiducialMuonTrack_)), isDeepSetsElectronTrack_ (true), EcalAllDeadChannelsValMap_ (EcalAllDeadChannelsValMap), EcalAllDeadChannelsBitMap_ (EcalAllDeadChannelsBitMap), @@ -231,21 +233,52 @@ osu::TrackBase::~TrackBase () } const bool -osu::TrackBase::isFiducialTrack (const EtaPhiList &vetoList, const double minDeltaR, double &maxSigma) const +osu::TrackBase::isFiducialTrack(const TH2D *sigmaMap, const double minDeltaR, const double thresholdForVeto, double &maxSigma) const { - const double minDR = max (minDeltaR, vetoList.minDeltaR); // use the given parameter unless the bin size from which the veto list is calculated is larger - bool isFiducial = true; - maxSigma = 0.0; - for (const auto &etaPhi : vetoList) + if (!sigmaMap) return true; + + maxSigma = -10000.0; + + const TAxis *xAxis = sigmaMap->GetXaxis(); + const TAxis *yAxis = sigmaMap->GetYaxis(); + + const double binWidthEta = xAxis->GetBinWidth(1); + const double binWidthPhi = yAxis->GetBinWidth(1); + const double binRadius = hypot(0.5 * binWidthEta, 0.5 * binWidthPhi); + const double minDR = max(minDeltaR, binRadius); + + bool isFiducial = true; + + const int centralEtaBinIdx = xAxis->FindBin(this->eta()); + const int centralPhiBinIdx = yAxis->FindBin(this->phi()); + const int nEtaBins = (int)ceil(minDR / binWidthEta) + 1; + const int nPhiBins = (int)ceil(minDR / binWidthPhi) + 1; + + for (int etaBinIdx = centralEtaBinIdx - nEtaBins; etaBinIdx <= centralEtaBinIdx + nEtaBins; ++etaBinIdx) { - if (deltaR (this->eta (), this->phi (), etaPhi.eta, etaPhi.phi) < minDR) + if (etaBinIdx < 1 || etaBinIdx > xAxis->GetNbins()) continue; + + for (int phiBinIdx = centralPhiBinIdx - nPhiBins; phiBinIdx <= centralPhiBinIdx + nPhiBins; ++phiBinIdx) { - isFiducial = false; - if (etaPhi.sigma > maxSigma) - maxSigma = etaPhi.sigma; + int wrappedPhiBinIdx = phiBinIdx; + if (wrappedPhiBinIdx < 1) wrappedPhiBinIdx += yAxis->GetNbins(); + if (wrappedPhiBinIdx > yAxis->GetNbins()) wrappedPhiBinIdx -= yAxis->GetNbins(); + + double sigma = sigmaMap->GetBinContent(etaBinIdx, wrappedPhiBinIdx); + if (std::isnan(sigma)) continue; + + double binEta = xAxis->GetBinCenter(etaBinIdx); + double binPhi = yAxis->GetBinCenter(wrappedPhiBinIdx); + + if (deltaR(this->eta(), this->phi(), binEta, binPhi) < minDR) + { + if (sigma > maxSigma) maxSigma = sigma; + if (sigma > thresholdForVeto) isFiducial = false; + } } } - return isFiducial; + + return isFiducial; } const edm::Ref > & @@ -1325,26 +1358,28 @@ osu::SecondaryTrackBase::SecondaryTrackBase(const TYPE(tracks) &secondaryTrack, const edm::ParameterSet &cfg) : osu::TrackBase(secondaryTrack, particles, cfg) {} -osu::SecondaryTrackBase::SecondaryTrackBase(const TYPE(secondaryTracks) &secondaryTrack, - const edm::Handle > &particles, - const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList) : - osu::TrackBase(secondaryTrack, particles, cfg, gsfTracks, electronVetoList, muonVetoList) {} - -osu::SecondaryTrackBase::SecondaryTrackBase(const TYPE(tracks) &secondaryTrack, - const edm::Handle > &particles, +osu::SecondaryTrackBase::SecondaryTrackBase(const TYPE(secondaryTracks) &secondaryTrack, + const edm::Handle > &particles, + const edm::ParameterSet &cfg, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto) : + osu::TrackBase(secondaryTrack, particles, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto) {} + +osu::SecondaryTrackBase::SecondaryTrackBase(const TYPE(tracks) &secondaryTrack, + const edm::Handle > &particles, const edm::Handle > &pfCandidates, const edm::Handle > &jets, - const edm::ParameterSet &cfg, - const edm::Handle > &gsfTracks, - const EtaPhiList &electronVetoList, - const EtaPhiList &muonVetoList, - const map > * const EcalAllDeadChannelsValMap, - const map > * const EcalAllDeadChannelsBitMap, + const edm::ParameterSet &cfg, + const edm::Handle > &gsfTracks, + const TH2D *electronFiducialSigmaMap, + const TH2D *muonFiducialSigmaMap, + const double thresholdForFiducialVeto, + const map > * const EcalAllDeadChannelsValMap, + const map > * const EcalAllDeadChannelsBitMap, const bool dropHits) : - osu::TrackBase(secondaryTrack, particles, pfCandidates, jets, cfg, gsfTracks, electronVetoList, muonVetoList, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits) {} + osu::TrackBase(secondaryTrack, particles, pfCandidates, jets, cfg, gsfTracks, electronFiducialSigmaMap, muonFiducialSigmaMap, thresholdForFiducialVeto, EcalAllDeadChannelsValMap, EcalAllDeadChannelsBitMap, dropHits) {} osu::SecondaryTrackBase::~SecondaryTrackBase() {} #endif // IS_VALID(secondaryTracks) diff --git a/Configuration/python/CollectionProducer_cff.py b/Configuration/python/CollectionProducer_cff.py index 6c84038c..16eb8c43 100644 --- a/Configuration/python/CollectionProducer_cff.py +++ b/Configuration/python/CollectionProducer_cff.py @@ -297,7 +297,7 @@ class CollectionProducer: #histFile = cms.FileInPath ("OSUT3Analysis/Configuration/data/electronFiducialMap_mc.root"), beforeVetoHistName = cms.string ("beforeVeto"), # must be eta on x-axis, phi on y-axis afterVetoHistName = cms.string ("afterVeto"), # must be eta on x-axis, phi on y-axis - thresholdForVeto = cms.double (0.0), # in sigma + thresholdForFiducialVeto = cms.double (0.0), # in sigma era = cms.string (''), ), ), @@ -306,7 +306,7 @@ class CollectionProducer: #histFile = cms.FileInPath ("OSUT3Analysis/Configuration/data/muonFiducialMap_mc.root"), beforeVetoHistName = cms.string ("beforeVeto"), # must be eta on x-axis, phi on y-axis afterVetoHistName = cms.string ("afterVeto"), # must be eta on x-axis, phi on y-axis - thresholdForVeto = cms.double (0.0), # in sigma + thresholdForFiducialVeto = cms.double (0.0), # in sigma era = cms.string (''), ), )