CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes
L1TMuonDQMOffline Class Reference

#include <L1TMuonDQMOffline.h>

Inheritance diagram for L1TMuonDQMOffline:
DQMEDAnalyzer edm::one::EDProducer< edm::Accumulator, edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

enum  Control {
  kCtrlTagPt, kCtrlTagEta, kCtrlTagPhi, kCtrlProbePt,
  kCtrlProbeEta, kCtrlProbePhi, kCtrlTagProbeDr, kCtrlTagHltDr,
  kCtrlMuonGmtDeltaR, kCtrlNTightVsAll, kCtrlNProbesVsTight
}
 
enum  EffType { kEffPt, kEffPhi, kEffEta, kEffVtx }
 
enum  EtaRegion {
  kEtaRegionAll, kEtaRegionBmtf, kEtaRegionOmtf, kEtaRegionEmtf,
  kEtaRegionOut
}
 
enum  QualLevel { kQualAll, kQualOpen, kQualDouble, kQualSingle }
 
enum  ResType {
  kResPt, kRes1OverPt, kResQOverPt, kResPhi,
  kResEta, kResCh
}
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 L1TMuonDQMOffline (const edm::ParameterSet &ps)
 
 ~L1TMuonDQMOffline () override
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &ev, edm::EventSetup const &es) final
 
virtual void analyze (edm::Event const &, edm::EventSetup const &)
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) override
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual void bookHistograms (DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &)=0
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
 DQMEDAnalyzer (DQMEDAnalyzer const &)=delete
 
 DQMEDAnalyzer (DQMEDAnalyzer &&)=delete
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
void endLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &run, edm::EventSetup const &setup) override
 
void endRunProduce (edm::Run &run, edm::EventSetup const &setup) override
 
 ~DQMEDAnalyzer () override=default
 
- Public Member Functions inherited from edm::one::EDProducer< edm::Accumulator, edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c) override
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumiBlock, edm::EventSetup const &c) override
 
virtual void bookControlHistos (DQMStore::IBooker &)
 
virtual void bookEfficiencyHistos (DQMStore::IBooker &ibooker)
 
void bookHistograms (DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &iSetup) override
 
virtual void bookResolutionHistos (DQMStore::IBooker &ibooker)
 
void dqmBeginRun (const edm::Run &run, const edm::EventSetup &iSetup) override
 
virtual void dqmEndLuminosityBlock (edm::LuminosityBlock const &lumiBlock, edm::EventSetup const &c)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Private Types

typedef std::tuple< EffType, int, EtaRegionm_histoKeyEffDenVarType
 
typedef std::pair< int, QualLevelm_histoKeyEffNumEtaType
 
typedef std::tuple< EffType, int, EtaRegion, QualLevelm_histoKeyEffNumVarType
 
typedef std::tuple< ResType, EtaRegion, QualLevelm_histoKeyResType
 

Private Member Functions

std::vector< float > getHistBinsEff (EffType eff)
 
std::tuple< int, double, double > getHistBinsRes (ResType res)
 
void getMuonGmtPairs (edm::Handle< l1t::MuonBxCollection > &gmtCands)
 
const unsigned int getNVertices (edm::Handle< reco::VertexCollection > &vertex)
 
const reco::Vertex getPrimaryVertex (edm::Handle< reco::VertexCollection > &vertex, edm::Handle< reco::BeamSpot > &beamSpot)
 
void getProbeMuons (edm::Handle< edm::TriggerResults > &trigResults, edm::Handle< trigger::TriggerEvent > &trigEvent)
 
void getTightMuons (edm::Handle< reco::MuonCollection > &muons, const reco::Vertex &vertex)
 
double matchHlt (edm::Handle< trigger::TriggerEvent > &triggerEvent, const reco::Muon *mu)
 

Private Attributes

edm::ESHandle< MagneticFieldm_BField
 
edm::EDGetTokenT< reco::BeamSpotm_BsInputTag
 
std::map< Control, MonitorElement * > m_ControlHistos
 
std::vector< std::pair< int, QualLevel > > m_cuts
 
std::vector< edm::ParameterSetm_cutsVPSet
 
std::map< int, MonitorElement * > m_EfficiencyDenEtaHistos
 
std::map< EtaRegion, MonitorElement * > m_EfficiencyDenPtHistos
 
std::map< std::tuple< EffType, int, EtaRegion >, MonitorElement * > m_EfficiencyDenVarHistos
 
std::map< std::pair< int, QualLevel >, MonitorElement * > m_EfficiencyNumEtaHistos
 
std::map< std::tuple< EffType, int, EtaRegion, QualLevel >, MonitorElement * > m_EfficiencyNumVarHistos
 
std::map< EffType, std::string > m_effLabelStrings
 
std::map< EffType, std::string > m_effStrings
 
const std::vector< EffTypem_effTypes
 
std::vector< double > m_effVsEtaBins
 
std::vector< double > m_effVsPhiBins
 
std::vector< double > m_effVsPtBins
 
std::vector< double > m_effVsVtxBins
 
const std::vector< EtaRegionm_etaRegions
 
std::map< EtaRegion, std::string > m_etaStrings
 
edm::EDGetTokenT< l1t::MuonBxCollectionm_GmtInputTag
 
std::string m_HistFolder
 
HLTConfigProvider m_hltConfig
 
BXVector< l1t::Muonm_L1tL1tMuons
 
std::vector< l1t::MuonBxCollectionm_L1tMuons
 
float m_maxGmtMuonDR
 
float m_maxHltMuonDR
 
float m_minTagProbeDR
 
std::vector< MuonGmtPairm_MuonGmtPairs
 
edm::EDGetTokenT< reco::MuonCollectionm_MuonInputTag
 
std::vector< const reco::Muon * > m_ProbeMuons
 
edm::ESHandle< Propagatorm_propagatorAlong
 
edm::ESHandle< Propagatorm_propagatorOpposite
 
const std::vector< QualLevelm_qualLevelsRes
 
std::map< QualLevel, std::string > m_qualStrings
 
std::vector< reco::MuonCollectionm_RecoMuons
 
std::vector< reco::Muonm_RecoRecoMuons
 
double m_recoToL1PtCutFactor
 
std::map< ResType, std::string > m_resLabelStrings
 
std::map< std::tuple< ResType, EtaRegion, QualLevel >, MonitorElement * > m_ResolutionHistos
 
std::map< ResType, std::string > m_resStrings
 
const std::vector< ResTypem_resTypes
 
double m_TagPtCut
 
std::vector< const reco::Muon * > m_TightMuons
 
std::vector< int > m_trigIndices
 
edm::EDGetTokenT< trigger::TriggerEventm_trigInputTag
 
std::vector< std::string > m_trigNames
 
std::string m_trigProcess
 
edm::EDGetTokenT< edm::TriggerResultsm_trigProcess_token
 
bool m_useAtVtxCoord
 
bool m_verbose
 
edm::EDGetTokenT< reco::VertexCollectionm_VtxInputTag
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Definition at line 64 of file L1TMuonDQMOffline.h.

Member Typedef Documentation

Definition at line 109 of file L1TMuonDQMOffline.h.

typedef std::pair<int, QualLevel> L1TMuonDQMOffline::m_histoKeyEffNumEtaType
private

Definition at line 108 of file L1TMuonDQMOffline.h.

Definition at line 107 of file L1TMuonDQMOffline.h.

Definition at line 106 of file L1TMuonDQMOffline.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

L1TMuonDQMOffline::L1TMuonDQMOffline ( const edm::ParameterSet ps)

Definition at line 148 of file L1TMuonDQMOffline.cc.

References gather_cfg::cout, kEffEta, kEffPhi, kEffPt, kEffVtx, kEtaRegionAll, kEtaRegionBmtf, kEtaRegionEmtf, kEtaRegionOmtf, kQualAll, kQualDouble, kQualOpen, kQualSingle, kRes1OverPt, kResCh, kResEta, kResPhi, kResPt, kResQOverPt, m_BsInputTag, m_cuts, m_cutsVPSet, m_effLabelStrings, m_effStrings, m_effVsEtaBins, m_effVsPhiBins, m_effVsPtBins, m_effVsVtxBins, m_etaRegions, m_etaStrings, m_GmtInputTag, m_HistFolder, m_maxGmtMuonDR, m_maxHltMuonDR, m_minTagProbeDR, m_MuonInputTag, m_qualLevelsRes, m_qualStrings, m_recoToL1PtCutFactor, m_resLabelStrings, m_resStrings, m_resTypes, m_TagPtCut, m_trigInputTag, m_trigNames, m_trigProcess, m_trigProcess_token, m_useAtVtxCoord, m_verbose, and m_VtxInputTag.

148  :
153  m_effStrings({ {kEffPt, "pt"}, {kEffPhi, "phi"}, {kEffEta, "eta"}, {kEffVtx, "vtx"} }),
154  m_effLabelStrings({ {kEffPt, "p_{T} (GeV)"}, {kEffPhi, "#phi"}, {kEffEta, "#eta"}, {kEffVtx, "# vertices"} }),
155  m_resStrings({ {kResPt, "pt"}, {kRes1OverPt, "1overpt"}, {kResQOverPt, "qoverpt"}, {kResPhi, "phi"}, {kResEta, "eta"}, {kResCh, "charge"} }),
156  m_resLabelStrings({ {kResPt, "(p_{T}^{L1} - p_{T}^{reco})/p_{T}^{reco}"}, {kRes1OverPt, "(p_{T}^{reco} - p_{T}^{L1})/p_{T}^{L1}"}, {kResQOverPt, "(q^{L1}*q^{reco}*p_{T}^{reco} - p_{T}^{L1})/p_{T}^{L1}"}, {kResPhi, "#phi_{L1} - #phi_{reco}"}, {kResEta, "#eta_{L1} - #eta_{reco}"}, {kResCh, "charge^{L1} - charge^{reco}"} }),
157  m_etaStrings({ {kEtaRegionAll, "etaMin0_etaMax2p4"}, {kEtaRegionBmtf, "etaMin0_etaMax0p83"}, {kEtaRegionOmtf, "etaMin0p83_etaMax1p24"}, {kEtaRegionEmtf, "etaMin1p24_etaMax2p4"} }),
158  m_qualStrings({ {kQualAll, "qualAll"}, {kQualOpen, "qualOpen"}, {kQualDouble, "qualDouble"}, {kQualSingle, "qualSingle"} }),
159  m_verbose(ps.getUntrackedParameter<bool>("verbose")),
160  m_HistFolder(ps.getUntrackedParameter<string>("histFolder")),
161  m_TagPtCut(ps.getUntrackedParameter<double>("tagPtCut")),
162  m_recoToL1PtCutFactor(ps.getUntrackedParameter<double>("recoToL1PtCutFactor")),
163  m_cutsVPSet(ps.getUntrackedParameter<std::vector<edm::ParameterSet>>("cuts")),
164  m_MuonInputTag(consumes<reco::MuonCollection>(ps.getUntrackedParameter<InputTag>("muonInputTag"))),
165  m_GmtInputTag(consumes<l1t::MuonBxCollection>(ps.getUntrackedParameter<InputTag>("gmtInputTag"))),
166  m_VtxInputTag(consumes<VertexCollection>(ps.getUntrackedParameter<InputTag>("vtxInputTag"))),
167  m_BsInputTag(consumes<BeamSpot>(ps.getUntrackedParameter<InputTag>("bsInputTag"))),
168  m_trigInputTag(consumes<trigger::TriggerEvent>(ps.getUntrackedParameter<InputTag>("trigInputTag"))),
169  m_trigProcess(ps.getUntrackedParameter<string>("trigProcess")),
170  m_trigProcess_token(consumes<edm::TriggerResults>(ps.getUntrackedParameter<InputTag>("trigProcess_token"))),
171  m_trigNames(ps.getUntrackedParameter<vector<string> >("triggerNames")),
172  m_effVsPtBins(ps.getUntrackedParameter<std::vector<double>>("efficiencyVsPtBins")),
173  m_effVsPhiBins(ps.getUntrackedParameter<std::vector<double>>("efficiencyVsPhiBins")),
174  m_effVsEtaBins(ps.getUntrackedParameter<std::vector<double>>("efficiencyVsEtaBins")),
175  m_effVsVtxBins(ps.getUntrackedParameter<std::vector<double>>("efficiencyVsVtxBins")),
176  m_useAtVtxCoord(ps.getUntrackedParameter<bool>("useL1AtVtxCoord")),
177  m_maxGmtMuonDR(0.3),
178  m_minTagProbeDR(0.5),
179  m_maxHltMuonDR(0.1)
180 {
181  if (m_verbose) cout << "[L1TMuonDQMOffline:] ____________ Storage initialization ____________ " << endl;
182 
183  for (const auto cutsPSet : m_cutsVPSet) {
184  const auto qCut = cutsPSet.getUntrackedParameter<int>("qualCut");
185  QualLevel qLevel = kQualAll;
186  if (qCut > 11) {
187  qLevel = kQualSingle;
188  } else if (qCut > 7) {
189  qLevel = kQualDouble;
190  } else if (qCut > 3) {
191  qLevel = kQualOpen;
192  }
193  m_cuts.emplace_back(std::make_pair(cutsPSet.getUntrackedParameter<int>("ptCut"), qLevel));
194  }
195 }
std::map< EffType, std::string > m_effStrings
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< reco::BeamSpot > m_BsInputTag
edm::EDGetTokenT< reco::MuonCollection > m_MuonInputTag
std::vector< double > m_effVsVtxBins
std::map< ResType, std::string > m_resLabelStrings
std::map< EtaRegion, std::string > m_etaStrings
edm::EDGetTokenT< edm::TriggerResults > m_trigProcess_token
const std::vector< EtaRegion > m_etaRegions
std::vector< double > m_effVsPhiBins
std::string m_HistFolder
std::vector< std::string > m_trigNames
std::map< QualLevel, std::string > m_qualStrings
std::string m_trigProcess
std::vector< edm::ParameterSet > m_cutsVPSet
std::map< EffType, std::string > m_effLabelStrings
edm::EDGetTokenT< l1t::MuonBxCollection > m_GmtInputTag
std::vector< double > m_effVsPtBins
std::vector< std::pair< int, QualLevel > > m_cuts
const std::vector< EffType > m_effTypes
const std::vector< QualLevel > m_qualLevelsRes
std::map< ResType, std::string > m_resStrings
std::vector< double > m_effVsEtaBins
const std::vector< ResType > m_resTypes
edm::EDGetTokenT< reco::VertexCollection > m_VtxInputTag
edm::EDGetTokenT< trigger::TriggerEvent > m_trigInputTag
L1TMuonDQMOffline::~L1TMuonDQMOffline ( )
override

Definition at line 198 of file L1TMuonDQMOffline.cc.

198 { }

Member Function Documentation

void L1TMuonDQMOffline::analyze ( const edm::Event e,
const edm::EventSetup c 
)
overrideprotected

Definition at line 243 of file L1TMuonDQMOffline.cc.

References ecalDrivenElectronSeedsParameters_cff::beamSpot, gather_cfg::cout, TkAlMuonSelectors_cfi::cut, edm::EventSetup::get(), edm::Event::getByToken(), getMuonGmtPairs(), getNVertices(), getPrimaryVertex(), getProbeMuons(), getTightMuons(), kEffEta, kEffPt, kEffVtx, kEtaRegionAll, kEtaRegionOut, kQualAll, kResPt, m_BField, m_BsInputTag, m_cuts, m_EfficiencyDenEtaHistos, m_EfficiencyDenPtHistos, m_EfficiencyDenVarHistos, m_EfficiencyNumEtaHistos, m_EfficiencyNumVarHistos, m_effTypes, m_GmtInputTag, m_MuonGmtPairs, m_MuonInputTag, m_propagatorAlong, m_propagatorOpposite, m_qualLevelsRes, m_recoToL1PtCutFactor, m_ResolutionHistos, m_resTypes, m_trigInputTag, m_trigProcess_token, m_verbose, m_VtxInputTag, extraflags_cff::muons, impactParameterTagInfos_cfi::primaryVertex, and JetChargeProducer_cfi::var.

243  {
244 
246  iEvent.getByToken(m_MuonInputTag, muons);
248  iEvent.getByToken(m_BsInputTag, beamSpot);
250  iEvent.getByToken(m_VtxInputTag, vertex);
252  iEvent.getByToken(m_GmtInputTag,gmtCands);
253  Handle<edm::TriggerResults> trigResults;
254  iEvent.getByToken(m_trigProcess_token,trigResults);
256  iEvent.getByToken(m_trigInputTag,trigEvent);
257 
258  eventSetup.get<IdealMagneticFieldRecord>().get(m_BField);
259  eventSetup.get<TrackingComponentsRecord>().get("PropagatorWithMaterial",m_propagatorAlong);
260  eventSetup.get<TrackingComponentsRecord>().get("PropagatorWithMaterialOpposite",m_propagatorOpposite);
261 
262  const auto nVtx = getNVertices(vertex);
263  const Vertex primaryVertex = getPrimaryVertex(vertex,beamSpot);
264 
265  getTightMuons(muons,primaryVertex);
266  getProbeMuons(trigResults,trigEvent); // CB add flag to run on orthogonal datasets (no T&P)
267 
268  getMuonGmtPairs(gmtCands);
269 
270  if (m_verbose) cout << "[L1TMuonDQMOffline:] Computing efficiencies" << endl;
271 
272  vector<MuonGmtPair>::const_iterator muonGmtPairsIt = m_MuonGmtPairs.begin();
273  vector<MuonGmtPair>::const_iterator muonGmtPairsEnd = m_MuonGmtPairs.end();
274 
275  // To fill once for global eta and once for TF eta region of the L1T muon.
276  // The second entry is a placeholder and will be replaced by the TF eta region of the L1T muon.
277  std::array<EtaRegion, 2> regsToFill { {kEtaRegionAll, kEtaRegionAll} };
278 
279  for(; muonGmtPairsIt!=muonGmtPairsEnd; ++muonGmtPairsIt) {
280  // Fill the resolution histograms
281  if( (muonGmtPairsIt->etaRegion() != kEtaRegionOut) && (muonGmtPairsIt->gmtPt() > 0) ){
282  regsToFill[1] = muonGmtPairsIt->etaRegion();
284  for (const auto var : m_resTypes) {
285  const auto varToFill = muonGmtPairsIt->getDeltaVar(var);
286  std::get<0>(histoKeyRes) = var;
287  // Fill for the global eta and for TF eta region that the probe muon is in
288  for (const auto regToFill : regsToFill) {
289  std::get<1>(histoKeyRes) = regToFill;
290  for (const auto qualLevel : m_qualLevelsRes) {
291  // This assumes that the qualLevel enum has increasing qualities
292  // HW quality levels can be 0, 4, 8, or 12
293  int qualCut = qualLevel * 4;
294  if (muonGmtPairsIt->gmtQual() >= qualCut) {
295  std::get<2>(histoKeyRes) = qualLevel;
296  m_ResolutionHistos[histoKeyRes]->Fill(varToFill);
297  }
298  }
299  }
300  }
301  }
302 
303  // Fill the efficiency numerator and denominator histograms
304  if (muonGmtPairsIt->etaRegion() != kEtaRegionOut) {
305  unsigned int cutsCounter = 0;
306  for (const auto cut : m_cuts) {
307  const auto gmtPtCut = cut.first;
308  const auto qualLevel = cut.second;
309  const bool gmtAboveCut = (muonGmtPairsIt->gmtPt() > gmtPtCut);
310 
311  // default keys
312  m_histoKeyEffDenVarType histoKeyEffDenVar = {kEffPt, gmtPtCut, kEtaRegionAll};
313  m_histoKeyEffNumVarType histoKeyEffNumVar = {kEffPt, gmtPtCut, kEtaRegionAll, qualLevel};
314 
315  regsToFill[1] = muonGmtPairsIt->etaRegion();
316  for(const auto var : m_effTypes) {
317  if(var != kEffPt){
318  if (muonGmtPairsIt->pt() < m_recoToL1PtCutFactor * gmtPtCut) break; // efficiency at plateau
319  }
320  double varToFill;
321  if (var == kEffVtx) {
322  varToFill = static_cast<double>(nVtx);
323  } else {
324  varToFill = muonGmtPairsIt->getVar(var);
325  }
326  // Fill denominators
327  if (var == kEffEta) {
328  m_EfficiencyDenEtaHistos[gmtPtCut]->Fill(varToFill);
329  } else {
330  std::get<0>(histoKeyEffDenVar) = var;
331  // Fill for the global eta and for TF eta region that the probe muon is in
332  for (const auto regToFill : regsToFill) {
333  if (var == kEffPt) {
334  if (cutsCounter == 0) {
335  m_EfficiencyDenPtHistos[regToFill]->Fill(varToFill);
336  }
337  } else {
338  std::get<2>(histoKeyEffDenVar) = regToFill;
339  m_EfficiencyDenVarHistos[histoKeyEffDenVar]->Fill(varToFill);
340  }
341  }
342  }
343  // Fill numerators
344  std::get<0>(histoKeyEffNumVar) = var;
345  // This assumes that the qualLevel enum has increasing qualities
346  if (gmtAboveCut && muonGmtPairsIt->gmtQual() >= qualLevel * 4) {
347  if (var == kEffEta) {
348  m_histoKeyEffNumEtaType histoKeyEffNumEta = {gmtPtCut, qualLevel};
349  m_EfficiencyNumEtaHistos[histoKeyEffNumEta]->Fill(varToFill);
350  } else {
351  std::get<3>(histoKeyEffNumVar) = qualLevel;
352  // Fill for the global eta and for TF eta region that the probe muon is in
353  for (const auto regToFill : regsToFill) {
354  std::get<2>(histoKeyEffNumVar) = regToFill;
355  m_EfficiencyNumVarHistos[histoKeyEffNumVar]->Fill(varToFill);
356  }
357  }
358  }
359  }
360  ++cutsCounter;
361  }
362  }
363  }
364 
365  if (m_verbose) cout << "[L1TMuonDQMOffline:] Computation finished" << endl;
366 }
edm::ESHandle< Propagator > m_propagatorOpposite
edm::EDGetTokenT< reco::BeamSpot > m_BsInputTag
edm::EDGetTokenT< reco::MuonCollection > m_MuonInputTag
edm::EDGetTokenT< edm::TriggerResults > m_trigProcess_token
std::map< std::tuple< ResType, EtaRegion, QualLevel >, MonitorElement * > m_ResolutionHistos
std::map< EtaRegion, MonitorElement * > m_EfficiencyDenPtHistos
std::tuple< EffType, int, EtaRegion, QualLevel > m_histoKeyEffNumVarType
std::pair< int, QualLevel > m_histoKeyEffNumEtaType
std::tuple< ResType, EtaRegion, QualLevel > m_histoKeyResType
void getProbeMuons(edm::Handle< edm::TriggerResults > &trigResults, edm::Handle< trigger::TriggerEvent > &trigEvent)
const unsigned int getNVertices(edm::Handle< reco::VertexCollection > &vertex)
int iEvent
Definition: GenABIO.cc:230
edm::EDGetTokenT< l1t::MuonBxCollection > m_GmtInputTag
std::tuple< EffType, int, EtaRegion > m_histoKeyEffDenVarType
std::map< std::pair< int, QualLevel >, MonitorElement * > m_EfficiencyNumEtaHistos
std::map< int, MonitorElement * > m_EfficiencyDenEtaHistos
std::vector< std::pair< int, QualLevel > > m_cuts
const std::vector< EffType > m_effTypes
const std::vector< QualLevel > m_qualLevelsRes
std::vector< MuonGmtPair > m_MuonGmtPairs
std::map< std::tuple< EffType, int, EtaRegion >, MonitorElement * > m_EfficiencyDenVarHistos
edm::ESHandle< MagneticField > m_BField
edm::ESHandle< Propagator > m_propagatorAlong
void getMuonGmtPairs(edm::Handle< l1t::MuonBxCollection > &gmtCands)
const reco::Vertex getPrimaryVertex(edm::Handle< reco::VertexCollection > &vertex, edm::Handle< reco::BeamSpot > &beamSpot)
const std::vector< ResType > m_resTypes
edm::EDGetTokenT< reco::VertexCollection > m_VtxInputTag
edm::EDGetTokenT< trigger::TriggerEvent > m_trigInputTag
std::map< std::tuple< EffType, int, EtaRegion, QualLevel >, MonitorElement * > m_EfficiencyNumVarHistos
void getTightMuons(edm::Handle< reco::MuonCollection > &muons, const reco::Vertex &vertex)
void L1TMuonDQMOffline::beginLuminosityBlock ( edm::LuminosityBlock const &  lumiBlock,
edm::EventSetup const &  c 
)
overrideprotected

Definition at line 233 of file L1TMuonDQMOffline.cc.

References gather_cfg::cout, edm::LuminosityBlockBase::id(), edm::LuminosityBlockID::luminosityBlock(), and m_verbose.

233  {
234  if(m_verbose) cout << "[L1TMuonDQMOffline:] Called beginLuminosityBlock at LS=" << lumiBlock.id().luminosityBlock() << endl;
235 }
void L1TMuonDQMOffline::bookControlHistos ( DQMStore::IBooker ibooker)
protectedvirtual

Definition at line 369 of file L1TMuonDQMOffline.cc.

References DQMStore::IBooker::book1D(), DQMStore::IBooker::book2D(), gather_cfg::cout, kCtrlMuonGmtDeltaR, kCtrlNProbesVsTight, kCtrlNTightVsAll, kCtrlProbeEta, kCtrlProbePhi, kCtrlProbePt, kCtrlTagEta, kCtrlTagHltDr, kCtrlTagPhi, kCtrlTagProbeDr, kCtrlTagPt, m_ControlHistos, m_HistFolder, m_verbose, and DQMStore::IBooker::setCurrentFolder().

Referenced by bookHistograms().

369  {
370  if(m_verbose) cout << "[L1TMuonDQMOffline:] Booking Control Plot Histos" << endl;
371 
372  ibooker.setCurrentFolder(m_HistFolder+"/control_variables");
373 
374  m_ControlHistos[kCtrlMuonGmtDeltaR] = ibooker.book1D("MuonGmtDeltaR", "MuonGmtDeltaR; #DeltaR", 50, 0., 0.5);
375  m_ControlHistos[kCtrlNTightVsAll] = ibooker.book2D("NTightVsAll", "NTightVsAll; # muons; # tight muons", 20, -0.5, 19.5, 16, -0.5, 15.5);
376  m_ControlHistos[kCtrlNProbesVsTight] = ibooker.book2D("NProbesVsTight", "NProbesVsTight; # tight muons; # probe muons", 8, -0.5, 7.5, 8, -0.5, 7.5);
377 
378  m_ControlHistos[kCtrlTagPt] = ibooker.book1D("TagMuonPt", "TagMuonPt; p_{T}", 50, 0., 100.);
379  m_ControlHistos[kCtrlTagPhi] = ibooker.book1D("TagMuonPhi", "TagMuonPhi; #phi", 66, -3.3, 3.3);
380  m_ControlHistos[kCtrlTagEta] = ibooker.book1D("TagMuonEta", "TagMuonEta; #eta", 50, -2.5, 2.5);
381 
382  m_ControlHistos[kCtrlProbePt] = ibooker.book1D("ProbeMuonPt", "ProbeMuonPt; p_{T}", 50, 0., 100.);
383  m_ControlHistos[kCtrlProbePhi] = ibooker.book1D("ProbeMuonPhi", "ProbeMuonPhi; #phi", 66, -3.3, 3.3);
384  m_ControlHistos[kCtrlProbeEta] = ibooker.book1D("ProbeMuonEta", "ProbeMuonEta; #eta", 50, -2.5, 2.5);
385 
386  m_ControlHistos[kCtrlTagProbeDr] = ibooker.book1D("TagMuonProbeMuonDeltaR", "TagMuonProbeMuonDeltaR; #DeltaR", 50, 0.,5.0);
387  m_ControlHistos[kCtrlTagHltDr] = ibooker.book1D("TagMuonHltDeltaR", "TagMuonHltDeltaR;#DeltaR", 55, 0., 0.11);
388 }
std::string m_HistFolder
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:136
std::map< Control, MonitorElement * > m_ControlHistos
void L1TMuonDQMOffline::bookEfficiencyHistos ( DQMStore::IBooker ibooker)
protectedvirtual

Definition at line 391 of file L1TMuonDQMOffline.cc.

References DQMStore::IBooker::book1D(), TkAlMuonSelectors_cfi::cut, getHistBinsEff(), kEffEta, kEffPt, m_cuts, m_EfficiencyDenEtaHistos, m_EfficiencyDenPtHistos, m_EfficiencyDenVarHistos, m_EfficiencyNumEtaHistos, m_EfficiencyNumVarHistos, m_effLabelStrings, m_effStrings, m_effTypes, m_etaRegions, m_etaStrings, m_HistFolder, m_qualStrings, dataset::name, DQMStore::IBooker::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, and JetChargeProducer_cfi::var.

Referenced by bookHistograms().

391  {
392  ibooker.setCurrentFolder(m_HistFolder+"/numerators_and_denominators");
393 
394  for(const auto var : m_effTypes) {
395  auto histBins = getHistBinsEff(var);
396  // histograms for eta variable get a special treatment
397  if (var == kEffEta) {
398  for (const auto cut : m_cuts) {
399  const auto gmtPtCut = cut.first;
400  const auto qualLevel = cut.second;
401  std::string name = "effDen_"+m_effStrings[var]+"_"+std::to_string(gmtPtCut);
402  m_EfficiencyDenEtaHistos[gmtPtCut] = ibooker.book1D(name, name+";"+m_effLabelStrings[var], histBins.size()-1, &histBins[0]);
403  name = "effNum_"+m_effStrings[var]+"_"+std::to_string(gmtPtCut)+"_"+m_qualStrings[qualLevel];
404  m_histoKeyEffNumEtaType histoKeyEffNumEta = {gmtPtCut, qualLevel};
405  m_EfficiencyNumEtaHistos[histoKeyEffNumEta] = ibooker.book1D(name, name+";"+m_effLabelStrings[var], histBins.size()-1, &histBins[0]);
406  }
407  } else {
408  for (const auto etaReg : m_etaRegions) {
409  // denominator histograms for pt variable get a special treatment
410  if (var == kEffPt) {
411  std::string name = "effDen_"+m_effStrings[var]+"_"+m_etaStrings[etaReg];
412  m_EfficiencyDenPtHistos[etaReg] = ibooker.book1D(name, name+";"+m_effLabelStrings[var], histBins.size()-1, &histBins[0]);
413  } else {
414  for (const auto cut : m_cuts) {
415  const int gmtPtCut = cut.first;
416  std::string name = "effDen_"+m_effStrings[var]+"_"+std::to_string(gmtPtCut)+"_"+m_etaStrings[etaReg];
417  m_histoKeyEffDenVarType histoKeyEffDenVar = {var, gmtPtCut, etaReg};
418  m_EfficiencyDenVarHistos[histoKeyEffDenVar] = ibooker.book1D(name, name+";"+m_effLabelStrings[var], histBins.size()-1, &histBins[0]);
419  }
420  }
421  for (const auto cut : m_cuts) {
422  const auto gmtPtCut = cut.first;
423  const auto qualLevel = cut.second;
424  std::string name = "effNum_"+m_effStrings[var]+"_"+std::to_string(gmtPtCut)+"_"+m_etaStrings[etaReg]+"_"+m_qualStrings[qualLevel];
425  m_histoKeyEffNumVarType histoKeyEffNum = {var, gmtPtCut, etaReg, qualLevel};
426  m_EfficiencyNumVarHistos[histoKeyEffNum] = ibooker.book1D(name, name+";"+m_effLabelStrings[var], histBins.size()-1, &histBins[0]);
427  }
428  }
429  }
430  }
431 }
std::map< EffType, std::string > m_effStrings
std::map< EtaRegion, std::string > m_etaStrings
const std::vector< EtaRegion > m_etaRegions
std::map< EtaRegion, MonitorElement * > m_EfficiencyDenPtHistos
std::tuple< EffType, int, EtaRegion, QualLevel > m_histoKeyEffNumVarType
std::string m_HistFolder
std::pair< int, QualLevel > m_histoKeyEffNumEtaType
std::vector< float > getHistBinsEff(EffType eff)
std::map< QualLevel, std::string > m_qualStrings
std::map< EffType, std::string > m_effLabelStrings
std::tuple< EffType, int, EtaRegion > m_histoKeyEffDenVarType
std::map< std::pair< int, QualLevel >, MonitorElement * > m_EfficiencyNumEtaHistos
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
std::map< int, MonitorElement * > m_EfficiencyDenEtaHistos
std::vector< std::pair< int, QualLevel > > m_cuts
const std::vector< EffType > m_effTypes
std::map< std::tuple< EffType, int, EtaRegion >, MonitorElement * > m_EfficiencyDenVarHistos
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
std::map< std::tuple< EffType, int, EtaRegion, QualLevel >, MonitorElement * > m_EfficiencyNumVarHistos
void L1TMuonDQMOffline::bookHistograms ( DQMStore::IBooker ibooker,
const edm::Run run,
const edm::EventSetup iSetup 
)
overrideprotected

Definition at line 207 of file L1TMuonDQMOffline.cc.

References bookControlHistos(), bookEfficiencyHistos(), bookResolutionHistos(), gather_cfg::cout, createfilelist::int, m_hltConfig, m_trigIndices, m_trigNames, m_verbose, HLTConfigProvider::size(), and HLTConfigProvider::triggerName().

207  {
208  //book histos
209  bookControlHistos(ibooker);
210  bookEfficiencyHistos(ibooker);
211  bookResolutionHistos(ibooker);
212 
213  vector<string>::const_iterator trigNamesIt = m_trigNames.begin();
214  vector<string>::const_iterator trigNamesEnd = m_trigNames.end();
215 
216  for (; trigNamesIt!=trigNamesEnd; ++trigNamesIt) {
217  TString tNameTmp = TString(*trigNamesIt); // use TString as it handles regex
218  TRegexp tNamePattern = TRegexp(tNameTmp,true);
219  int tIndex = -1;
220 
221  for (unsigned ipath = 0; ipath < m_hltConfig.size(); ++ipath) {
222  TString tmpName = TString(m_hltConfig.triggerName(ipath));
223  if (tmpName.Contains(tNamePattern)) {
224  tIndex = int(ipath);
225  m_trigIndices.push_back(tIndex);
226  }
227  }
228  if (tIndex < 0 && m_verbose) cout << "[L1TMuonDQMOffline:] Warning: Could not find trigger " << (*trigNamesIt) << endl;
229  }
230 }
unsigned int size() const
number of trigger paths in trigger table
const std::string & triggerName(unsigned int triggerIndex) const
std::vector< std::string > m_trigNames
virtual void bookControlHistos(DQMStore::IBooker &)
virtual void bookResolutionHistos(DQMStore::IBooker &ibooker)
HLTConfigProvider m_hltConfig
std::vector< int > m_trigIndices
virtual void bookEfficiencyHistos(DQMStore::IBooker &ibooker)
void L1TMuonDQMOffline::bookResolutionHistos ( DQMStore::IBooker ibooker)
protectedvirtual

Definition at line 433 of file L1TMuonDQMOffline.cc.

References DQMStore::IBooker::book1D(), gather_cfg::cout, getHistBinsRes(), m_etaRegions, m_etaStrings, m_HistFolder, m_qualLevelsRes, m_qualStrings, m_resLabelStrings, m_ResolutionHistos, m_resStrings, m_resTypes, m_verbose, dataset::name, pileupCalc::nbins, DQMStore::IBooker::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, JetChargeProducer_cfi::var, TrackerOfflineValidation_Dqm_cff::xmax, and TrackerOfflineValidation_Dqm_cff::xmin.

Referenced by bookHistograms().

433  {
434  if(m_verbose) cout << "[L1TMuonOffline:] Booking Resolution Plot Histos" << endl;
435  ibooker.setCurrentFolder(m_HistFolder+"/resolution");
436 
437  for (const auto var : m_resTypes) {
438  auto nbins = std::get<0>(getHistBinsRes(var));
439  auto xmin = std::get<1>(getHistBinsRes(var));
440  auto xmax = std::get<2>(getHistBinsRes(var));
441  for (const auto etaReg : m_etaRegions) {
442  for (const auto qualLevel : m_qualLevelsRes) {
443  m_histoKeyResType histoKeyRes = {var, etaReg, qualLevel};
444  std::string name = "resolution_"+m_resStrings[var]+"_"+m_etaStrings[etaReg]+"_"+m_qualStrings[qualLevel];
445  m_ResolutionHistos[histoKeyRes] = ibooker.book1D(name, name+";"+m_resLabelStrings[var], nbins, xmin, xmax);
446  }
447  }
448  }
449 }
std::map< ResType, std::string > m_resLabelStrings
std::map< EtaRegion, std::string > m_etaStrings
std::map< std::tuple< ResType, EtaRegion, QualLevel >, MonitorElement * > m_ResolutionHistos
const std::vector< EtaRegion > m_etaRegions
std::string m_HistFolder
std::tuple< ResType, EtaRegion, QualLevel > m_histoKeyResType
std::map< QualLevel, std::string > m_qualStrings
std::tuple< int, double, double > getHistBinsRes(ResType res)
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
const std::vector< QualLevel > m_qualLevelsRes
std::map< ResType, std::string > m_resStrings
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
const std::vector< ResType > m_resTypes
void L1TMuonDQMOffline::dqmBeginRun ( const edm::Run run,
const edm::EventSetup iSetup 
)
overrideprotected

Definition at line 200 of file L1TMuonDQMOffline.cc.

References gather_cfg::cout, HLTConfigProvider::init(), m_hltConfig, m_trigProcess, and m_verbose.

200  {
201  if (m_verbose) cout << "[L1TMuonDQMOffline:] Called beginRun." << endl;
202  bool changed = true;
203  m_hltConfig.init(run,iSetup,m_trigProcess,changed);
204 }
std::string m_trigProcess
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
HLTConfigProvider m_hltConfig
void L1TMuonDQMOffline::dqmEndLuminosityBlock ( edm::LuminosityBlock const &  lumiBlock,
edm::EventSetup const &  c 
)
protectedvirtual

Definition at line 238 of file L1TMuonDQMOffline.cc.

References gather_cfg::cout, edm::LuminosityBlockBase::id(), edm::LuminosityBlockID::luminosityBlock(), and m_verbose.

238  {
239  if(m_verbose) cout << "[L1TMuonDQMOffline:] Called endLuminosityBlock at LS=" << lumiBlock.id().luminosityBlock() << endl;
240 }
std::vector< float > L1TMuonDQMOffline::getHistBinsEff ( EffType  eff)
private

Definition at line 633 of file L1TMuonDQMOffline.cc.

References kEffEta, kEffPhi, kEffPt, kEffVtx, m_effVsEtaBins, m_effVsPhiBins, m_effVsPtBins, and m_effVsVtxBins.

Referenced by bookEfficiencyHistos().

633  {
634  if (eff == kEffPt) {
635  std::vector<float> effVsPtBins(m_effVsPtBins.begin(), m_effVsPtBins.end());
636  return effVsPtBins;
637  }
638  if (eff == kEffPhi) {
639  std::vector<float> effVsPhiBins(m_effVsPhiBins.begin(), m_effVsPhiBins.end());
640  return effVsPhiBins;
641  }
642  if (eff == kEffEta) {
643  std::vector<float> effVsEtaBins(m_effVsEtaBins.begin(), m_effVsEtaBins.end());
644  return effVsEtaBins;
645  }
646  if (eff == kEffVtx) {
647  std::vector<float> effVsVtxBins(m_effVsVtxBins.begin(), m_effVsVtxBins.end());
648  return effVsVtxBins;
649  }
650  return {0., 1.};
651 }
std::vector< double > m_effVsVtxBins
std::vector< double > m_effVsPhiBins
std::vector< double > m_effVsPtBins
std::vector< double > m_effVsEtaBins
std::tuple< int, double, double > L1TMuonDQMOffline::getHistBinsRes ( ResType  res)
private

Definition at line 653 of file L1TMuonDQMOffline.cc.

References DEFINE_FWK_MODULE, kRes1OverPt, kResCh, kResEta, kResPhi, kResPt, and kResQOverPt.

Referenced by bookResolutionHistos().

653  {
654  if (res == kResPt) return {50, -2., 2.};
655  if (res == kRes1OverPt) return {50, -2., 2.};
656  if (res == kResQOverPt) return {50, -2., 2.};
657  if (res == kResPhi) return {96, -0.2, 0.2};
658  if (res == kResEta) return {100, -0.1, 0.1};
659  if (res == kResCh) return {5, -2, 3};
660  return {1, 0, 1};
661 }
Definition: Electron.h:6
void L1TMuonDQMOffline::getMuonGmtPairs ( edm::Handle< l1t::MuonBxCollection > &  gmtCands)
private

Definition at line 570 of file L1TMuonDQMOffline.cc.

References BXVector< T >::begin(), gather_cfg::cout, MuonGmtPair::dR(), BXVector< T >::end(), kCtrlMuonGmtDeltaR, kCtrlProbeEta, kCtrlProbePhi, kCtrlProbePt, m_ControlHistos, m_maxGmtMuonDR, m_MuonGmtPairs, m_ProbeMuons, m_useAtVtxCoord, and m_verbose.

Referenced by analyze().

570  {
571 
572  m_MuonGmtPairs.clear();
573  if (m_verbose) cout << "[L1TMuonDQMOffline:] Getting muon GMT pairs" << endl;
574 
575  vector<const reco::Muon*>::const_iterator probeMuIt = m_ProbeMuons.begin();
576  vector<const reco::Muon*>::const_iterator probeMuEnd = m_ProbeMuons.end();
577 
579  l1t::MuonBxCollection::const_iterator gmtEnd = gmtCands->end(0);
580 
581  for (; probeMuIt!=probeMuEnd; ++probeMuIt) {
582  m_ControlHistos[kCtrlProbeEta]->Fill((*probeMuIt)->eta());
583  m_ControlHistos[kCtrlProbePhi]->Fill((*probeMuIt)->phi());
584  m_ControlHistos[kCtrlProbePt]->Fill((*probeMuIt)->pt());
585 
586  MuonGmtPair pairBestCand((*probeMuIt), nullptr, m_useAtVtxCoord);
587 // pairBestCand.propagate(m_BField,m_propagatorAlong,m_propagatorOpposite);
588  gmtIt = gmtCands->begin(0); // use only on L1T muons from BX 0
589 
590  for(; gmtIt!=gmtEnd; ++gmtIt) {
591  MuonGmtPair pairTmpCand((*probeMuIt),&(*gmtIt), m_useAtVtxCoord);
592 // pairTmpCand.propagate(m_BField,m_propagatorAlong,m_propagatorOpposite);
593 
594  if ( (pairTmpCand.dR() < m_maxGmtMuonDR) && (pairTmpCand.dR() < pairBestCand.dR() ) ) {
595  pairBestCand = pairTmpCand;
596  }
597 
598  }
599  m_MuonGmtPairs.push_back(pairBestCand);
600  m_ControlHistos[kCtrlMuonGmtDeltaR]->Fill(pairBestCand.dR());
601  }
602 }
const_iterator end(int bx) const
std::vector< const reco::Muon * > m_ProbeMuons
std::vector< MuonGmtPair > m_MuonGmtPairs
const_iterator begin(int bx) const
std::map< Control, MonitorElement * > m_ControlHistos
std::vector< Muon >::const_iterator const_iterator
Definition: BXVector.h:20
const unsigned int L1TMuonDQMOffline::getNVertices ( edm::Handle< reco::VertexCollection > &  vertex)
private

Definition at line 452 of file L1TMuonDQMOffline.cc.

References edm::HandleBase::isValid().

Referenced by analyze().

452  {
453  unsigned int nVtx = 0;
454 
455  if (vertex.isValid()) {
456  for (const auto vertexIt : *vertex) {
457  if (vertexIt.isValid() && !vertexIt.isFake()) {
458  ++nVtx;
459  }
460  }
461  }
462  return nVtx;
463 }
bool isValid() const
Definition: HandleBase.h:74
const reco::Vertex L1TMuonDQMOffline::getPrimaryVertex ( edm::Handle< reco::VertexCollection > &  vertex,
edm::Handle< reco::BeamSpot > &  beamSpot 
)
private

Definition at line 466 of file L1TMuonDQMOffline.cc.

References reco::BeamSpot::BeamWidthX(), reco::BeamSpot::BeamWidthY(), edm::HandleBase::isValid(), reco::BeamSpot::position(), impactParameterTagInfos_cfi::primaryVertex, and reco::BeamSpot::sigmaZ().

Referenced by analyze().

467  {
468  Vertex::Point posVtx;
469  Vertex::Error errVtx;
470 
471  bool hasPrimaryVertex = false;
472 
473  if (vertex.isValid()) {
474  vector<Vertex>::const_iterator vertexIt = vertex->begin();
475  vector<Vertex>::const_iterator vertexEnd = vertex->end();
476 
477  for (;vertexIt!=vertexEnd;++vertexIt) {
478  if (vertexIt->isValid() && !vertexIt->isFake()) {
479  posVtx = vertexIt->position();
480  errVtx = vertexIt->error();
481  hasPrimaryVertex = true;
482  break;
483  }
484  }
485  }
486 
487  if ( !hasPrimaryVertex ) {
488  posVtx = beamSpot->position();
489  errVtx(0,0) = beamSpot->BeamWidthX();
490  errVtx(1,1) = beamSpot->BeamWidthY();
491  errVtx(2,2) = beamSpot->sigmaZ();
492  }
493  const Vertex primaryVertex(posVtx,errVtx);
494  return primaryVertex;
495 }
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
math::XYZPoint Point
point in the space
Definition: Vertex.h:39
double BeamWidthX() const
beam width X
Definition: BeamSpot.h:86
bool isValid() const
Definition: HandleBase.h:74
double sigmaZ() const
sigma z
Definition: BeamSpot.h:80
double BeamWidthY() const
beam width Y
Definition: BeamSpot.h:88
const Point & position() const
position
Definition: BeamSpot.h:62
void L1TMuonDQMOffline::getProbeMuons ( edm::Handle< edm::TriggerResults > &  trigResults,
edm::Handle< trigger::TriggerEvent > &  trigEvent 
)
private

Definition at line 514 of file L1TMuonDQMOffline.cc.

References gather_cfg::cout, particleFlow_cfi::dEta, SoftLeptonByDistance_cfi::distance, particleFlow_cfi::dPhi, PVValHelper::eta, kCtrlNProbesVsTight, kCtrlTagEta, kCtrlTagHltDr, kCtrlTagPhi, kCtrlTagProbeDr, kCtrlTagPt, m_ControlHistos, m_minTagProbeDR, m_ProbeMuons, m_TagPtCut, m_TightMuons, m_verbose, matchHlt(), phi, EnergyCorrector::pt, and mathSSE::sqrt().

Referenced by analyze().

515  {
516 
517  if (m_verbose) cout << "[L1TMuonDQMOffline:] getting probe muons" << endl;
518  m_ProbeMuons.clear();
519  std::vector<const reco::Muon*> tagMuonsInHist;
520 
521  tagMuonsInHist.clear();
522 
523  vector<const reco::Muon*>::const_iterator probeCandIt = m_TightMuons.begin();
524  vector<const reco::Muon*>::const_iterator tightMuonsEnd = m_TightMuons.end();
525 
526  for (; probeCandIt!=tightMuonsEnd; ++probeCandIt) {
527  bool isProbe = false;
528  vector<const reco::Muon*>::const_iterator tagCandIt = m_TightMuons.begin();
529  float deltar = 0.;
530 
531  for (; tagCandIt!=tightMuonsEnd; ++tagCandIt) {
532  bool tagMuonAlreadyInHist = false;
533  bool tagHasTrig = false;
534  float eta = (*tagCandIt)->eta();
535  float phi = (*tagCandIt)->phi();
536  float pt = (*tagCandIt)->pt();
537  float dEta = eta - (*probeCandIt)->eta();
538  float dPhi = phi - (*probeCandIt)->phi();
539  deltar = sqrt(dEta*dEta + dPhi*dPhi);
540 
541  if ( (*tagCandIt) == (*probeCandIt) || deltar<m_minTagProbeDR ) continue; // CB has a little bias for closed-by muons
542  auto matchHltDeltaR = matchHlt(trigEvent,(*tagCandIt));
543  tagHasTrig = (matchHltDeltaR < m_maxHltMuonDR) && (pt > m_TagPtCut);
544  isProbe |= tagHasTrig;
545  if (tagHasTrig) {
546  if (std::distance(m_TightMuons.begin(), m_TightMuons.end()) > 2 ) {
547  for (vector<const reco::Muon*>::const_iterator tagMuonsInHistIt = tagMuonsInHist.begin(); tagMuonsInHistIt!=tagMuonsInHist.end(); ++tagMuonsInHistIt) {
548  if ( (*tagCandIt) == (*tagMuonsInHistIt) ) {
549  tagMuonAlreadyInHist = true;
550  break;
551  }
552  }
553  if (tagMuonAlreadyInHist == false) tagMuonsInHist.push_back((*tagCandIt));
554  }
555  if (tagMuonAlreadyInHist == false) {
556  m_ControlHistos[kCtrlTagEta]->Fill(eta);
557  m_ControlHistos[kCtrlTagPhi]->Fill(phi);
558  m_ControlHistos[kCtrlTagPt]->Fill(pt);
559  m_ControlHistos[kCtrlTagProbeDr]->Fill(deltar);
560  m_ControlHistos[kCtrlTagHltDr]->Fill(matchHltDeltaR);
561  }
562  }
563  }
564  if (isProbe) m_ProbeMuons.push_back((*probeCandIt));
565  }
567 }
std::vector< const reco::Muon * > m_ProbeMuons
double matchHlt(edm::Handle< trigger::TriggerEvent > &triggerEvent, const reco::Muon *mu)
T sqrt(T t)
Definition: SSEVec.h:18
Definition: deltar.py:1
std::vector< const reco::Muon * > m_TightMuons
std::map< Control, MonitorElement * > m_ControlHistos
void L1TMuonDQMOffline::getTightMuons ( edm::Handle< reco::MuonCollection > &  muons,
const reco::Vertex vertex 
)
private

Definition at line 498 of file L1TMuonDQMOffline.cc.

References gather_cfg::cout, muon::isTightMuon(), kCtrlNTightVsAll, m_ControlHistos, m_TightMuons, and m_verbose.

Referenced by analyze().

498  {
499 
500  if (m_verbose) cout << "[L1TMuonDQMOffline:] Getting tight muons" << endl;
501  m_TightMuons.clear();
502  MuonCollection::const_iterator muonIt = muons->begin();
503  MuonCollection::const_iterator muonEnd = muons->end();
504 
505  for(; muonIt!=muonEnd; ++muonIt) {
506  if (muon::isTightMuon((*muonIt), vertex)) {
507  m_TightMuons.push_back(&(*muonIt));
508  }
509  }
510  m_ControlHistos[kCtrlNTightVsAll]->Fill(muons->size(), m_TightMuons.size());
511 }
std::vector< const reco::Muon * > m_TightMuons
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
std::map< Control, MonitorElement * > m_ControlHistos
double L1TMuonDQMOffline::matchHlt ( edm::Handle< trigger::TriggerEvent > &  triggerEvent,
const reco::Muon mu 
)
private

Definition at line 605 of file L1TMuonDQMOffline.cc.

References deltaR(), trigger::TriggerEvent::filterIds(), trigger::TriggerEvent::filterIndex(), trigger::TriggerEvent::filterKeys(), trigger::TriggerEvent::getObjects(), m_hltConfig, m_trigIndices, m_trigProcess, HLTConfigProvider::moduleLabels(), HLTConfigProvider::size(), and TriggerAnalyzer::trigObjs.

Referenced by getProbeMuons().

605  {
606 
607  double matchDeltaR = 9999;
608 
609  TriggerObjectCollection trigObjs = triggerEvent->getObjects();
610 
611  vector<int>::const_iterator trigIndexIt = m_trigIndices.begin();
612  vector<int>::const_iterator trigIndexEnd = m_trigIndices.end();
613 
614  for(; trigIndexIt!=trigIndexEnd; ++trigIndexIt) {
615  const vector<string> moduleLabels(m_hltConfig.moduleLabels(*trigIndexIt));
616  const unsigned moduleIndex = m_hltConfig.size((*trigIndexIt))-2;
617  const unsigned hltFilterIndex = triggerEvent->filterIndex(InputTag(moduleLabels[moduleIndex],"",m_trigProcess));
618 
619  if (hltFilterIndex < triggerEvent->sizeFilters()) {
620  const Keys triggerKeys(triggerEvent->filterKeys(hltFilterIndex));
621  const Vids triggerVids(triggerEvent->filterIds(hltFilterIndex));
622  const unsigned nTriggers = triggerVids.size();
623  for (size_t iTrig = 0; iTrig < nTriggers; ++iTrig) {
624  const TriggerObject trigObject = trigObjs[triggerKeys[iTrig]];
625  double dRtmp = deltaR((*mu),trigObject);
626  if (dRtmp < matchDeltaR) matchDeltaR = dRtmp;
627  }
628  }
629  }
630  return matchDeltaR;
631 }
unsigned int size() const
number of trigger paths in trigger table
const Keys & filterKeys(trigger::size_type index) const
Definition: TriggerEvent.h:111
trigger::size_type filterIndex(const edm::InputTag &filterTag) const
find index of filter in data-member vector from filter tag
Definition: TriggerEvent.h:123
std::string m_trigProcess
const Vids & filterIds(trigger::size_type index) const
Definition: TriggerEvent.h:110
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:98
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:81
std::vector< size_type > Keys
HLTConfigProvider m_hltConfig
std::vector< int > Vids
std::vector< int > m_trigIndices

Member Data Documentation

edm::ESHandle<MagneticField> L1TMuonDQMOffline::m_BField
private

Definition at line 98 of file L1TMuonDQMOffline.h.

Referenced by analyze().

edm::EDGetTokenT<reco::BeamSpot> L1TMuonDQMOffline::m_BsInputTag
private

Definition at line 155 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and L1TMuonDQMOffline().

std::map<Control, MonitorElement*> L1TMuonDQMOffline::m_ControlHistos
private
std::vector<std::pair<int, QualLevel> > L1TMuonDQMOffline::m_cuts
private

Definition at line 130 of file L1TMuonDQMOffline.h.

Referenced by analyze(), bookEfficiencyHistos(), and L1TMuonDQMOffline().

std::vector<edm::ParameterSet> L1TMuonDQMOffline::m_cutsVPSet
private

Definition at line 151 of file L1TMuonDQMOffline.h.

Referenced by L1TMuonDQMOffline().

std::map<int, MonitorElement*> L1TMuonDQMOffline::m_EfficiencyDenEtaHistos
private

Definition at line 116 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and bookEfficiencyHistos().

std::map<EtaRegion, MonitorElement*> L1TMuonDQMOffline::m_EfficiencyDenPtHistos
private

Definition at line 115 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and bookEfficiencyHistos().

std::map<std::tuple<EffType, int, EtaRegion>, MonitorElement*> L1TMuonDQMOffline::m_EfficiencyDenVarHistos
private

Definition at line 114 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and bookEfficiencyHistos().

std::map<std::pair<int, QualLevel>, MonitorElement*> L1TMuonDQMOffline::m_EfficiencyNumEtaHistos
private

Definition at line 113 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and bookEfficiencyHistos().

std::map<std::tuple<EffType, int, EtaRegion, QualLevel>, MonitorElement*> L1TMuonDQMOffline::m_EfficiencyNumVarHistos
private

Definition at line 112 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and bookEfficiencyHistos().

std::map<EffType, std::string> L1TMuonDQMOffline::m_effLabelStrings
private

Definition at line 140 of file L1TMuonDQMOffline.h.

Referenced by bookEfficiencyHistos(), and L1TMuonDQMOffline().

std::map<EffType, std::string> L1TMuonDQMOffline::m_effStrings
private

Definition at line 139 of file L1TMuonDQMOffline.h.

Referenced by bookEfficiencyHistos(), and L1TMuonDQMOffline().

const std::vector<EffType> L1TMuonDQMOffline::m_effTypes
private

Definition at line 133 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and bookEfficiencyHistos().

std::vector<double> L1TMuonDQMOffline::m_effVsEtaBins
private

Definition at line 163 of file L1TMuonDQMOffline.h.

Referenced by getHistBinsEff(), and L1TMuonDQMOffline().

std::vector<double> L1TMuonDQMOffline::m_effVsPhiBins
private

Definition at line 162 of file L1TMuonDQMOffline.h.

Referenced by getHistBinsEff(), and L1TMuonDQMOffline().

std::vector<double> L1TMuonDQMOffline::m_effVsPtBins
private

Definition at line 161 of file L1TMuonDQMOffline.h.

Referenced by getHistBinsEff(), and L1TMuonDQMOffline().

std::vector<double> L1TMuonDQMOffline::m_effVsVtxBins
private

Definition at line 164 of file L1TMuonDQMOffline.h.

Referenced by getHistBinsEff(), and L1TMuonDQMOffline().

const std::vector<EtaRegion> L1TMuonDQMOffline::m_etaRegions
private
std::map<EtaRegion, std::string> L1TMuonDQMOffline::m_etaStrings
private
edm::EDGetTokenT<l1t::MuonBxCollection> L1TMuonDQMOffline::m_GmtInputTag
private

Definition at line 153 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and L1TMuonDQMOffline().

std::string L1TMuonDQMOffline::m_HistFolder
private
HLTConfigProvider L1TMuonDQMOffline::m_hltConfig
private

Definition at line 96 of file L1TMuonDQMOffline.h.

Referenced by bookHistograms(), dqmBeginRun(), and matchHlt().

BXVector<l1t::Muon> L1TMuonDQMOffline::m_L1tL1tMuons
private

Definition at line 128 of file L1TMuonDQMOffline.h.

std::vector<l1t::MuonBxCollection> L1TMuonDQMOffline::m_L1tMuons
private

Definition at line 126 of file L1TMuonDQMOffline.h.

float L1TMuonDQMOffline::m_maxGmtMuonDR
private

Definition at line 169 of file L1TMuonDQMOffline.h.

Referenced by getMuonGmtPairs(), and L1TMuonDQMOffline().

float L1TMuonDQMOffline::m_maxHltMuonDR
private

Definition at line 171 of file L1TMuonDQMOffline.h.

Referenced by L1TMuonDQMOffline().

float L1TMuonDQMOffline::m_minTagProbeDR
private

Definition at line 170 of file L1TMuonDQMOffline.h.

Referenced by getProbeMuons(), and L1TMuonDQMOffline().

std::vector<MuonGmtPair> L1TMuonDQMOffline::m_MuonGmtPairs
private

Definition at line 123 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and getMuonGmtPairs().

edm::EDGetTokenT<reco::MuonCollection> L1TMuonDQMOffline::m_MuonInputTag
private

Definition at line 152 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and L1TMuonDQMOffline().

std::vector<const reco::Muon*> L1TMuonDQMOffline::m_ProbeMuons
private

Definition at line 122 of file L1TMuonDQMOffline.h.

Referenced by getMuonGmtPairs(), and getProbeMuons().

edm::ESHandle<Propagator> L1TMuonDQMOffline::m_propagatorAlong
private

Definition at line 99 of file L1TMuonDQMOffline.h.

Referenced by analyze().

edm::ESHandle<Propagator> L1TMuonDQMOffline::m_propagatorOpposite
private

Definition at line 100 of file L1TMuonDQMOffline.h.

Referenced by analyze().

const std::vector<QualLevel> L1TMuonDQMOffline::m_qualLevelsRes
private

Definition at line 136 of file L1TMuonDQMOffline.h.

Referenced by analyze(), bookResolutionHistos(), and L1TMuonDQMOffline().

std::map<QualLevel, std::string> L1TMuonDQMOffline::m_qualStrings
private
std::vector<reco::MuonCollection> L1TMuonDQMOffline::m_RecoMuons
private

Definition at line 125 of file L1TMuonDQMOffline.h.

std::vector<reco::Muon> L1TMuonDQMOffline::m_RecoRecoMuons
private

Definition at line 127 of file L1TMuonDQMOffline.h.

double L1TMuonDQMOffline::m_recoToL1PtCutFactor
private

Definition at line 150 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and L1TMuonDQMOffline().

std::map<ResType, std::string> L1TMuonDQMOffline::m_resLabelStrings
private

Definition at line 142 of file L1TMuonDQMOffline.h.

Referenced by bookResolutionHistos(), and L1TMuonDQMOffline().

std::map<std::tuple<ResType, EtaRegion, QualLevel>, MonitorElement*> L1TMuonDQMOffline::m_ResolutionHistos
private

Definition at line 117 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and bookResolutionHistos().

std::map<ResType, std::string> L1TMuonDQMOffline::m_resStrings
private

Definition at line 141 of file L1TMuonDQMOffline.h.

Referenced by bookResolutionHistos(), and L1TMuonDQMOffline().

const std::vector<ResType> L1TMuonDQMOffline::m_resTypes
private

Definition at line 134 of file L1TMuonDQMOffline.h.

Referenced by analyze(), bookResolutionHistos(), and L1TMuonDQMOffline().

double L1TMuonDQMOffline::m_TagPtCut
private

Definition at line 149 of file L1TMuonDQMOffline.h.

Referenced by getProbeMuons(), and L1TMuonDQMOffline().

std::vector<const reco::Muon*> L1TMuonDQMOffline::m_TightMuons
private

Definition at line 121 of file L1TMuonDQMOffline.h.

Referenced by getProbeMuons(), and getTightMuons().

std::vector<int> L1TMuonDQMOffline::m_trigIndices
private

Definition at line 166 of file L1TMuonDQMOffline.h.

Referenced by bookHistograms(), and matchHlt().

edm::EDGetTokenT<trigger::TriggerEvent> L1TMuonDQMOffline::m_trigInputTag
private

Definition at line 156 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and L1TMuonDQMOffline().

std::vector<std::string> L1TMuonDQMOffline::m_trigNames
private

Definition at line 160 of file L1TMuonDQMOffline.h.

Referenced by bookHistograms(), and L1TMuonDQMOffline().

std::string L1TMuonDQMOffline::m_trigProcess
private

Definition at line 157 of file L1TMuonDQMOffline.h.

Referenced by dqmBeginRun(), L1TMuonDQMOffline(), and matchHlt().

edm::EDGetTokenT<edm::TriggerResults> L1TMuonDQMOffline::m_trigProcess_token
private

Definition at line 158 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and L1TMuonDQMOffline().

bool L1TMuonDQMOffline::m_useAtVtxCoord
private

Definition at line 168 of file L1TMuonDQMOffline.h.

Referenced by getMuonGmtPairs(), and L1TMuonDQMOffline().

bool L1TMuonDQMOffline::m_verbose
private
edm::EDGetTokenT<reco::VertexCollection> L1TMuonDQMOffline::m_VtxInputTag
private

Definition at line 154 of file L1TMuonDQMOffline.h.

Referenced by analyze(), and L1TMuonDQMOffline().