Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scouting Offline DQM framework for muons #47207

3 changes: 3 additions & 0 deletions DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
from DQM.TrackingMonitorClient.TrackingClientConfig_Tier0_cff import *
from DQMOffline.Muon.muonQualityTests_cff import *
from DQMOffline.EGamma.egammaPostProcessing_cff import *
from DQMOffline.HLTScouting.hltScoutingPostProcessing_cff import *
from DQMOffline.Trigger.DQMOffline_Trigger_Client_cff import *
from DQMOffline.Trigger.DQMOffline_HLT_Client_cff import *
from DQMOffline.RecoB.dqmCollector_cff import *
Expand Down Expand Up @@ -267,6 +268,8 @@

DQMHarvestBTag = cms.Sequence( bTagCollectorSequenceDATA )

DQMHarvestHLTScouting = cms.Sequence( hltScoutingPostProcessing )

from PhysicsTools.NanoAOD.nanoDQM_cff import *
from Validation.RecoParticleFlow.DQMForPF_MiniAOD_cff import *
from DQMOffline.RecoB.bTagMiniDQM_cff import *
Expand Down
4 changes: 4 additions & 0 deletions DQMOffline/Configuration/python/DQMOffline_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from DQMServices.Components.DQMProvInfo_cfi import *
from DQMServices.Components.DQMFastTimerService_cff import *

from DQMOffline.HLTScouting.HLTScoutingDqmOffline_cff import *
from DQMOffline.L1Trigger.L1TriggerDqmOffline_cff import *
from DQMOffline.Ecal.ecal_dqm_source_offline_cff import *
from DQM.EcalPreshowerMonitorModule.es_dqm_source_offline_cff import *
Expand All @@ -28,6 +29,9 @@
dqmProvInfo.dcsRecord = cms.untracked.InputTag("onlineMetaDataDigis")
DQMOfflineDCS = cms.Sequence( dqmProvInfo )

# HLT Scouting trigger sequence
DQMOfflineScouting = cms.Sequence( hltScoutingDqmOffline )

# L1 trigger sequences
DQMOfflineL1T = cms.Sequence( l1TriggerDqmOffline ) # L1 emulator is run within this sequence for real data

Expand Down
23 changes: 18 additions & 5 deletions DQMOffline/Configuration/python/autoDQM.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,22 @@
'PostDQMOffline',
'DQMMessageLoggerClientSeq'],

'commonReduced': ['@dcs+@DQMMessageLogger+@hlt+@beam+@castor+@physics',
'commonReduced': ['@dcs+@DQMMessageLogger+@hlt+@beam+@castor+@physics',
'PostDQMOffline',
'@dcs+@DQMMessageLogger+@hlt+@beam+@fed+dqmFastTimerServiceClient'],

'common': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@castor+@physics',
'PostDQMOffline',
'@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@fed+dqmFastTimerServiceClient'],
'common': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@castor+@physics',
'PostDQMOffline',
'@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@fed+dqmFastTimerServiceClient'],

'commonWithScouting': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@castor+@physics+@hltScouting',
'PostDQMOffline',
'@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@fed+dqmFastTimerServiceClient'],

'commonWithScouting': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@castor+@physics+@hltScouting',
'PostDQMOffline',
'@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@fed+dqmFastTimerServiceClient'],


'commonFakeHLT': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@beam+@castor+@physics',
'PostDQMOffline',
Expand Down Expand Up @@ -141,7 +150,7 @@
'physics': ['DQMOfflinePhysics',
'PostDQMOffline',
'DQMNone'],

'heavyFlavor': ['DQMOfflineHeavyFlavor',
'PostDQMOffline',
'DQMNone'],
Expand Down Expand Up @@ -219,6 +228,10 @@
'PostDQMOffline',
'dqmHarvesting'],

'hltScouting': ['DQMOfflineScouting',
'PostDQMOffline',
'DQMHarvestHLTScouting'],

'standardDQMExpress': ['DQMOfflineExpress',
'PostDQMOffline',
'dqmHarvestingExpress'],
Expand Down
49 changes: 49 additions & 0 deletions DQMOffline/HLTScouting/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<use name="FWCore/Framework"/>
<use name="FWCore/Utilities"/>
<use name="DQMServices/Core"/>
<use name="FWCore/PluginManager"/>
<use name="MagneticField/Engine"/>
<use name="MagneticField/Records"/>
<use name="Geometry/CaloGeometry"/>
<use name="Geometry/CSCGeometry"/>
<use name="Geometry/HcalTowerAlgo"/>
<use name="HLTrigger/HLTcore"/>
<use name="HLTriggerOffline/Scouting"/>
<use name="DataFormats/JetReco"/>
<use name="DataFormats/METReco"/>
<use name="DataFormats/CaloTowers"/>
<use name="DataFormats/HcalRecHit"/>
<use name="DataFormats/HcalDetId"/>
<use name="DataFormats/EgammaReco"/>
<use name="DataFormats/EgammaCandidates"/>
<use name="DataFormats/CSCRecHit"/>
<use name="DataFormats/EcalDetId"/>
<use name="DataFormats/DetId"/>
<use name="DataFormats/RecoCandidate"/>
<use name="DataFormats/MuonReco"/>
<use name="DataFormats/FEDRawData"/>
<use name="RecoJets/JetProducers"/>
<use name="RecoJets/JetAssociationAlgorithms"/>
<use name="RecoMuon/TrackingTools"/>
<use name="TrackingTools/TransientTrack"/>
<use name="TrackingTools/Records"/>
<use name="DataFormats/TrackReco"/>
<use name="DataFormats/Common"/>
<use name="DataFormats/Math"/>
<use name="DataFormats/CSCDigi"/>
<use name="DataFormats/CSCRecHit"/>
<use name="DataFormats/DTRecHit"/>
<use name="DataFormats/PatCandidates"/>
<use name="DataFormats/TrackingRecHit"/>
<use name="DataFormats/TrackerRecHit2D"/>
<use name="DataFormats/SiStripCluster"/>
<use name="DataFormats/SiStripDetId"/>
<use name="CalibFormats/SiStripObjects"/>
<use name="CondFormats/SiStripObjects"/>
<use name="CondFormats/DTObjects"/>
<use name="CalibTracker/Records"/>
<use name="CondFormats/DataRecord"/>
<use name="CommonTools/TriggerUtils"/>
<use name="JetMETCorrections/JetCorrector"/>
<use name="EventFilter/CSCRawToDigi"/>
<flags EDM_PLUGIN="1"/>
23 changes: 23 additions & 0 deletions DQMOffline/HLTScouting/python/HLTScoutingDqmOffline_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# ------------------------------------------- #
# Scouting DQM sequence for offline DQM #
# #
# used by DQM GUI: DQMOffline/Configuration #
# ------------------------------------------- #
import FWCore.ParameterSet.Config as cms
from DQMServices.Core.DQMEDHarvester import DQMEDHarvester

import FWCore.ParameterSet.Config as cms
from DQMServices.Core.DQMEDHarvester import DQMEDHarvester

from HLTriggerOffline.Scouting.ScoutingMuonTriggerAnalyzer_cfi import *
from HLTriggerOffline.Scouting.ScoutingMuonTagProbeAnalyzer_cfi import *
from HLTriggerOffline.Scouting.ScoutingMuonMonitoring_Client_cff import *

from HLTriggerOffline.Scouting.HLTScoutingEGammaDqmOffline_cff import *

hltScoutingMuonDqmOffline = cms.Sequence(scoutingMonitoringTagProbeMuonNoVtx
* scoutingMonitoringTagProbeMuonVtx
* scoutingMonitoringTriggerMuon
)

hltScoutingDqmOffline = cms.Sequence(hltScoutingMuonDqmOffline + hltScoutingEGammaDqmOffline)
12 changes: 12 additions & 0 deletions DQMOffline/HLTScouting/python/hltScoutingPostProcessing_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import FWCore.ParameterSet.Config as cms
from DQMServices.Core.DQMEDHarvester import DQMEDHarvester
from DQMOffline.HLTScouting.HLTScoutingDqmOffline_cff import *
from HLTriggerOffline.Scouting.ScoutingMuonMonitoring_Client_cff import *
from HLTriggerOffline.Scouting.HLTScoutingEGammaPostProcessing_cff import *

hltScoutingMuonPostProcessing = cms.Sequence(muonEfficiencyNoVtx
* muonEfficiencyVtx
* muonTriggerEfficiency
)

hltScoutingPostProcessing = cms.Sequence(hltScoutingMuonPostProcessing + hltScoutingEGammaPostProcessing)
14 changes: 14 additions & 0 deletions HLTriggerOffline/Scouting/plugins/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<use name="FWCore/Framework"/>
<use name="FWCore/PluginManager"/>
<use name="FWCore/ParameterSet"/>
<use name="DQMServices/Core"/>
<use name="CLHEP"/>
<use name="DataFormats/PatCandidates"/>
<use name="DataFormats/Scouting"/>
<use name="L1Trigger/L1TGlobal"/>
<use name="DataFormats/L1TGlobal"/>
<use name="FWCore/Utilities"/>
<use name="TrackingTools/Records"/>
<use name="HLTrigger/HLTcore"/>
<use name="DataFormats/HLTReco"/>
<flags EDM_PLUGIN="1"/>
96 changes: 96 additions & 0 deletions HLTriggerOffline/Scouting/plugins/ElectronEfficiencyPlotter.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#include "ElectronEfficiencyPlotter.h"

// Framework
#include <FWCore/Framework/interface/Event.h>
#include "DataFormats/Common/interface/Handle.h"
#include <FWCore/Framework/interface/ESHandle.h>
#include <FWCore/Framework/interface/MakerMacros.h>
#include <FWCore/Framework/interface/EventSetup.h>
#include <FWCore/ParameterSet/interface/ParameterSet.h>

#include "DQMServices/Core/interface/DQMStore.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/Framework/interface/Run.h"

#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
#include "TF1.h"
#include "TH1F.h"

using namespace edm;
using namespace std;

ElectronEfficiencyPlotter::ElectronEfficiencyPlotter(const edm::ParameterSet &ps) {
parameters = ps;

ptBin = parameters.getParameter<int>("ptBin");
ptMin = parameters.getParameter<double>("ptMin");
ptMax = parameters.getParameter<double>("ptMax");

ID_ = parameters.getParameter<string>("sctElectronID");
theFolder_ = parameters.getParameter<string>("folder");
sourceFolder_ = parameters.getParameter<string>("srcFolder");
}

ElectronEfficiencyPlotter::~ElectronEfficiencyPlotter() {}

void ElectronEfficiencyPlotter::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter) {
ibooker.setCurrentFolder(theFolder_);

h_eff_pt_EB_ID = ibooker.book1D("Eff_pt_barrel_" + ID_, ID_ + "Eff. vs Pt (barrel)", ptBin, ptMin, ptMax);
h_eff_pt_EE_ID = ibooker.book1D("Eff_pt_endcap_" + ID_, ID_ + "Eff. vs Pt (endcap)", ptBin, ptMin, ptMax);
h_eff_pt_EB_HLT = ibooker.book1D("Eff_pt_barrel_DSTdoubleEG", "DSTdoubleEG Eff. vs Pt (barrel)", ptBin, ptMin, ptMax);
h_eff_pt_EE_HLT = ibooker.book1D("Eff_pt_endcap_DSTdoubleEG", "DSTdoubleEG Eff. vs Pt (endcap)", ptBin, ptMin, ptMax);

// Prevent the ME to be normalized when drawn into the GUI
// h_eff_pt_EB_ID->setEfficiencyFlag();
// h_eff_pt_EE_ID->setEfficiencyFlag();

// Axis title
h_eff_pt_EB_ID->setAxisTitle("p_{T} (GeV)", 1);
h_eff_pt_EE_ID->setAxisTitle("p_{T} (GeV)", 1);
h_eff_pt_EB_HLT->setAxisTitle("p_{T} (GeV)", 1);
h_eff_pt_EE_HLT->setAxisTitle("p_{T} (GeV)", 1);

MonitorElement *Numerator_pt_barrel = igetter.get(sourceFolder_ + "/resonanceAll_Probe_sctElectron_Pt_Barrel_passID");
MonitorElement *Numerator_pt_endcap = igetter.get(sourceFolder_ + "/resonanceAll_Probe_sctElectron_Pt_Endcap_passID");
MonitorElement *Numerator_pt_barrel_hlt =
igetter.get(sourceFolder_ + "/resonanceAll_Probe_sctElectron_Pt_Barrel_passDSTdoubleEG");
MonitorElement *Numerator_pt_endcap_hlt =
igetter.get(sourceFolder_ + "/resonanceAll_Probe_sctElectron_Pt_Endcap_passDSTdoubleEG");
MonitorElement *Denominator_pt_barrel = igetter.get(sourceFolder_ + "/resonanceAll_Probe_sctElectron_Pt_Barrel");
MonitorElement *Denominator_pt_endcap = igetter.get(sourceFolder_ + "/resonanceAll_Probe_sctElectron_Pt_Endcap");

if (Numerator_pt_barrel && Denominator_pt_barrel)
GetEfficiency(Numerator_pt_barrel, Denominator_pt_barrel, h_eff_pt_EB_ID);
if (Numerator_pt_endcap && Denominator_pt_endcap)
GetEfficiency(Numerator_pt_endcap, Denominator_pt_endcap, h_eff_pt_EE_ID);
if (Numerator_pt_barrel_hlt && Denominator_pt_barrel)
GetEfficiency(Numerator_pt_barrel_hlt, Denominator_pt_barrel, h_eff_pt_EB_HLT);
if (Numerator_pt_endcap_hlt && Denominator_pt_endcap)
GetEfficiency(Numerator_pt_endcap_hlt, Denominator_pt_endcap, h_eff_pt_EE_HLT);
}

void ElectronEfficiencyPlotter::GetEfficiency(MonitorElement *Numerator,
MonitorElement *Denominator,
MonitorElement *Efficiency) {
TH1F *h_numerator_pt = Numerator->getTH1F();
TH1F *h_denominator_pt = Denominator->getTH1F();
TH1F *h_eff_pt = Efficiency->getTH1F();
if (h_eff_pt->GetSumw2N() == 0)
h_eff_pt->Sumw2();

// ReBin
int nBins = h_eff_pt->GetNbinsX();
double *binEdges = new double[nBins + 1];
for (int i = 0; i <= nBins; i++)
binEdges[i] = h_eff_pt->GetBinLowEdge(i + 1);

TH1F *h_numerator_pt_rebin = (TH1F *)h_numerator_pt->Rebin(nBins, "num_pt_rebinned", binEdges);
TH1F *h_denominator_pt_rebin = (TH1F *)h_denominator_pt->Rebin(nBins, "num_pt_rebinned", binEdges);
h_eff_pt->Divide(h_numerator_pt_rebin, h_denominator_pt_rebin, 1., 1., "B");
}

DEFINE_FWK_MODULE(ElectronEfficiencyPlotter);
60 changes: 60 additions & 0 deletions HLTriggerOffline/Scouting/plugins/ElectronEfficiencyPlotter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#ifndef ElectronEfficiencyPlotter_H
#define ElectronEfficiencyPlotter_H

#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "DQMServices/Core/interface/DQMEDHarvester.h"
#include "DataFormats/Common/interface/Handle.h"
#include <FWCore/Framework/interface/ESHandle.h>
#include <FWCore/Framework/interface/Event.h>
#include <FWCore/Framework/interface/MakerMacros.h>
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include <FWCore/Framework/interface/LuminosityBlock.h>

#include "DQMServices/Core/interface/DQMStore.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/Framework/interface/Run.h"

#include <memory>
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include "TH1F.h"

class ElectronEfficiencyPlotter : public DQMEDHarvester {
public:
// Constructor
ElectronEfficiencyPlotter(const edm::ParameterSet& ps);
// Destructor
~ElectronEfficiencyPlotter() override;

protected:
// DQM Client Diagnostic
void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override;

private:
// counters
int nevents;
unsigned int nLumiSegs;
int prescaleFactor;
int run;

edm::ParameterSet parameters;

int ptBin;
double ptMin;
double ptMax;

std::string ID_;

MonitorElement* h_eff_pt_EB_ID;
MonitorElement* h_eff_pt_EE_ID;
MonitorElement* h_eff_pt_EB_HLT;
MonitorElement* h_eff_pt_EE_HLT;

std::string theFolder_;
std::string sourceFolder_;
void GetEfficiency(MonitorElement* Numerator, MonitorElement* Denominator, MonitorElement* Efficiency);
};

#endif
Loading