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

Offline DQM L1T Muon CMSSW_8_1_X #16234

Merged
merged 6 commits into from Oct 26, 2016
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
222 changes: 104 additions & 118 deletions DQMOffline/L1Trigger/interface/L1TEfficiencyMuons_Offline.h
Expand Up @@ -5,33 +5,35 @@
* \file L1TEfficiencyMuons.h
*
* \author J. Pela, C. Battilana
*
*
* Stage2 Muons implementation: Anna Stakia
*
*/

// system include files
#include <memory>
#include <unistd.h>

// user include files
#include "DataFormats/L1Trigger/interface/Muon.h"
#include "DataFormats/L1Trigger/interface/BXVector.h"
#include "DataFormats/L1TMuon/interface/RegionalMuonCand.h"
#include "DataFormats/L1TMuon/interface/RegionalMuonCandFwd.h"
#include "DataFormats/L1Trigger/interface/Muon.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/EDAnalyzer.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/LuminosityBlock.h"
#include "FWCore/Framework/interface/MakerMacros.h"

#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "DQMServices/Core/interface/DQMStore.h"
#include "DQMServices/Core/interface/MonitorElement.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"

#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h"

#include "DataFormats/MuonReco/interface/Muon.h"
#include "DataFormats/MuonReco/interface/MuonFwd.h"

#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h"
#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
Expand All @@ -42,155 +44,139 @@
#include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
#include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
#include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"

#include "MagneticField/Engine/interface/MagneticField.h"

#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/VertexReco/interface/VertexFwd.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"

#include "DataFormats/Math/interface/deltaR.h"
#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
#include "DataFormats/Common/interface/TriggerResults.h"
#include "DataFormats/HLTReco/interface/TriggerEvent.h"
#include "DataFormats/HLTReco/interface/TriggerObject.h"

#include "DQMServices/Core/interface/DQMEDAnalyzer.h"

#include "TRegexp.h"
#include "TString.h"

#include <iostream>
#include <fstream>
#include <utility>
#include <vector>


//
// helper class to manage GMT-Muon pariring
// helper class to manage GMT-Muon pairing
//

class MuonGmtPair {

public :

MuonGmtPair(const reco::Muon *muon, const L1MuGMTExtendedCand *gmt) :
m_muon(muon), m_gmt(gmt), m_eta(999.), m_phi_bar(999.), m_phi_end(999.) { };

MuonGmtPair(const MuonGmtPair& muonGmtPair);

~MuonGmtPair() { };

double dR();

double eta() const { return m_eta; };
double phi() const { return fabs(m_eta)< 1.04 ? m_phi_bar : m_phi_end; };
double pt() const { return m_muon->isGlobalMuon() ? m_muon->globalTrack()->pt() : -1; };

double gmtPt() const { return m_gmt ? m_gmt->ptValue() : -1.; };

void propagate(edm::ESHandle<MagneticField> bField,
public :
MuonGmtPair(const reco::Muon *muon, const l1t::Muon *regMu) :
m_muon(muon), m_regMu(regMu), m_eta(999.), m_phi_bar(999.), m_phi_end(999.) { };
MuonGmtPair(const MuonGmtPair& muonGmtPair);

~MuonGmtPair() { };

double dR();
double eta() const { return m_muon->eta(); };
double phi() const { return m_muon->phi(); };
double pt() const { return m_muon->pt(); };
double gmtPt() const { return m_regMu ? m_regMu->pt() : -1.; };
int gmtQual() const { return m_regMu ? m_regMu->hwQual() : -1; };
double gmtPhi() const { return m_regMu ? m_regMu->phi() : -5.; };
double gmtEta() const { return m_regMu ? m_regMu->eta() : -5.; };

void propagate(edm::ESHandle<MagneticField> bField,
edm::ESHandle<Propagator> propagatorAlong,
edm::ESHandle<Propagator> propagatorOpposite);

private :

// propagation private members
TrajectoryStateOnSurface cylExtrapTrkSam(reco::TrackRef track, double rho);
TrajectoryStateOnSurface surfExtrapTrkSam(reco::TrackRef track, double z);
FreeTrajectoryState freeTrajStateMuon(reco::TrackRef track);

private :
private :
// propagation private members
TrajectoryStateOnSurface cylExtrapTrkSam(reco::TrackRef track, double rho);
TrajectoryStateOnSurface surfExtrapTrkSam(reco::TrackRef track, double z);
FreeTrajectoryState freeTrajStateMuon(reco::TrackRef track);

const reco::Muon *m_muon;
const L1MuGMTExtendedCand *m_gmt;
private :
const reco::Muon *m_muon;
const l1t::Muon *m_regMu;

edm::ESHandle<MagneticField> m_BField;
edm::ESHandle<Propagator> m_propagatorAlong;
edm::ESHandle<Propagator> m_propagatorOpposite;

double m_eta;
double m_phi_bar;
double m_phi_end;
edm::ESHandle<MagneticField> m_BField;
edm::ESHandle<Propagator> m_propagatorAlong;
edm::ESHandle<Propagator> m_propagatorOpposite;

double m_eta;
double m_phi_bar;
double m_phi_end;
};

//
// DQM class declaration
//

class L1TEfficiencyMuons_Offline : public DQMEDAnalyzer {

public:

L1TEfficiencyMuons_Offline(const edm::ParameterSet& ps); // Constructor
virtual ~L1TEfficiencyMuons_Offline(); // Destructor

protected:

public:
L1TEfficiencyMuons_Offline(const edm::ParameterSet& ps);
virtual ~L1TEfficiencyMuons_Offline();

protected:
// Luminosity Block
virtual void beginLuminosityBlock(edm::LuminosityBlock const& lumiBlock, edm::EventSetup const& c);
virtual void dqmEndLuminosityBlock (edm::LuminosityBlock const& lumiBlock, edm::EventSetup const& c);
virtual void dqmBeginRun(const edm::Run& run, const edm::EventSetup& iSetup);
virtual void bookControlHistos(DQMStore::IBooker &);
virtual void bookEfficiencyHistos(DQMStore::IBooker &ibooker, int ptCut);
virtual void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run& run, const edm::EventSetup& iSetup) override;
//virtual void analyze (const edm::Event& e, const edm::EventSetup& c);

private:

void analyze (const edm::Event& e, const edm::EventSetup& c);

// Helper Functions
const reco::Vertex getPrimaryVertex(edm::Handle<reco::VertexCollection> & vertex,edm::Handle<reco::BeamSpot> & beamSpot);
bool matchHlt(edm::Handle<trigger::TriggerEvent> & triggerEvent,
const reco::Muon * mu);

// Cut and Matching
void getMuonGmtPairs(edm::Handle<L1MuGMTReadoutCollection> & gmtCands);
void getTightMuons(edm::Handle<reco::MuonCollection> & muons, const reco::Vertex & vertex);
void getProbeMuons(edm::Handle<edm::TriggerResults> & trigResults,edm::Handle<trigger::TriggerEvent> & trigEvent);

private:

bool m_verbose;

HLTConfigProvider m_hltConfig;

edm::ESHandle<MagneticField> m_BField;
edm::ESHandle<Propagator> m_propagatorAlong;
edm::ESHandle<Propagator> m_propagatorOpposite;

// histos
std::map<int, std::map<std::string, MonitorElement*> > m_EfficiencyHistos;
std::map<std::string, MonitorElement*> m_ControlHistos;

// helper variables
std::vector<const reco::Muon*> m_TightMuons;
std::vector<const reco::Muon*> m_ProbeMuons;
std::vector<MuonGmtPair> m_MuonGmtPairs;

// config params
std::vector<int> m_GmtPtCuts;

edm::EDGetTokenT<reco::MuonCollection> m_MuonInputTag;
edm::EDGetTokenT<L1MuGMTReadoutCollection> m_GmtInputTag;

edm::EDGetTokenT<reco::VertexCollection> m_VtxInputTag;
edm::EDGetTokenT<reco::BeamSpot> m_BsInputTag;

edm::EDGetTokenT<trigger::TriggerEvent> m_trigInputTag;
std::string m_trigProcess;
edm::EDGetTokenT<edm::TriggerResults> m_trigProcess_token;
std::vector<std::string> m_trigNames;
std::vector<int> m_trigIndices;

float m_MaxMuonEta;
float m_MaxGmtMuonDR;
float m_MaxHltMuonDR;
// CB ignored at present
virtual void beginLuminosityBlock(edm::LuminosityBlock const& lumiBlock, edm::EventSetup const& c);
virtual void dqmEndLuminosityBlock (edm::LuminosityBlock const& lumiBlock, edm::EventSetup const& c);
virtual void dqmBeginRun(const edm::Run& run, const edm::EventSetup& iSetup);
virtual void bookControlHistos(DQMStore::IBooker &);
virtual void bookEfficiencyHistos(DQMStore::IBooker &ibooker, int ptCut);
virtual void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run& run, const edm::EventSetup& iSetup) override;
//virtual void analyze (const edm::Event& e, const edm::EventSetup& c);

private:
void analyze (const edm::Event& e, const edm::EventSetup& c);

// Helper Functions
const reco::Vertex getPrimaryVertex(edm::Handle<reco::VertexCollection> & vertex,edm::Handle<reco::BeamSpot> & beamSpot);
bool matchHlt(edm::Handle<trigger::TriggerEvent> & triggerEvent, const reco::Muon * mu);

// Cut and Matching
void getMuonGmtPairs(edm::Handle<l1t::MuonBxCollection> & gmtCands);
void getTightMuons(edm::Handle<reco::MuonCollection> & muons, const reco::Vertex & vertex);
void getProbeMuons(edm::Handle<edm::TriggerResults> & trigResults,edm::Handle<trigger::TriggerEvent> & trigEvent);

private:
bool m_verbose;
HLTConfigProvider m_hltConfig;

edm::ESHandle<MagneticField> m_BField;
edm::ESHandle<Propagator> m_propagatorAlong;
edm::ESHandle<Propagator> m_propagatorOpposite;

// histos
std::map<int, std::map<std::string, MonitorElement*> > m_EfficiencyHistos;
std::map<std::string, MonitorElement*> m_ControlHistos;

// helper variables
std::vector<const reco::Muon*> m_TightMuons;
std::vector<const reco::Muon*> m_ProbeMuons;
std::vector<MuonGmtPair> m_MuonGmtPairs;

std::vector<reco::MuonCollection> m_RecoMuons;
std::vector<l1t::MuonBxCollection> m_L1tMuons;
std::vector<reco::Muon> m_RecoRecoMuons;
BXVector<l1t::Muon> m_L1tL1tMuons;

// config params
std::vector<int> m_GmtPtCuts;
edm::EDGetTokenT<reco::MuonCollection> m_MuonInputTag;
edm::EDGetTokenT<l1t::MuonBxCollection> m_GmtInputTag;
edm::EDGetTokenT<reco::VertexCollection> m_VtxInputTag;
edm::EDGetTokenT<reco::BeamSpot> m_BsInputTag;
edm::EDGetTokenT<trigger::TriggerEvent> m_trigInputTag;
std::string m_trigProcess;
edm::EDGetTokenT<edm::TriggerResults> m_trigProcess_token;
std::vector<std::string> m_trigNames;
std::vector<int> m_trigIndices;

float m_MaxMuonEta;
float m_MaxGmtMuonDR;
float m_MaxHltMuonDR;

// CB ignored at present
// float m_MinMuonDR;

};

#endif
28 changes: 18 additions & 10 deletions DQMOffline/L1Trigger/python/L1TEfficiencyHarvesting_cfi.py
@@ -1,14 +1,22 @@
import FWCore.ParameterSet.Config as cms

l1tEfficiencyHarvesting = cms.EDAnalyzer("L1TEfficiency_Harvesting",

verbose = cms.untracked.bool(False),
plotCfgs = cms.untracked.VPSet(
cms.untracked.PSet( dqmBaseDir = cms.untracked.string("L1T/Efficiency/Muons"),
plots = cms.untracked.vstring("EffvsPt16","EffvsEta16","EffvsPhi16",\
"EffvsPt20","EffvsEta20","EffvsPhi20",\
"EffvsPt25","EffvsEta25","EffvsPhi25")
)
)

verbose = cms.untracked.bool(False),
plotCfgs = cms.untracked.VPSet(
cms.untracked.PSet( dqmBaseDir = cms.untracked.string("L1T/Efficiency/Muons"),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DO NOT use tabs inside python files. Use 4 spaces.
Also, https://www.python.org/dev/peps/pep-0008/

plots = cms.untracked.vstring("EffvsPt16","EffvsEta16","EffvsPhi16",\
"EffvsPt_OPEN_16","EffvsEta_OPEN_16","EffvsPhi_OPEN_16",\
"EffvsPt_DOUBLE_16","EffvsEta_DOUBLE_16","EffvsPhi_DOUBLE_16",\
"EffvsPt_SINGLE_16","EffvsEta_SINGLE_16","EffvsPhi_SINGLE_16",\
"EffvsPt20","EffvsEta20","EffvsPhi20",\
"EffvsPt_OPEN_20","EffvsEta_OPEN_20","EffvsPhi_OPEN_20",\
"EffvsPt_DOUBLE_20","EffvsEta_DOUBLE_20","EffvsPhi_DOUBLE_20",\
"EffvsPt_SINGLE_20","EffvsEta_SINGLE_20","EffvsPhi_SINGLE_20",\
"EffvsPt25","EffvsEta25","EffvsPhi25",\
"EffvsPt_OPEN_25","EffvsEta_OPEN_25","EffvsPhi_OPEN_25",\
"EffvsPt_DOUBLE_25","EffvsEta_DOUBLE_25","EffvsPhi_DOUBLE_25",\
"EffvsPt_SINGLE_25","EffvsEta_SINGLE_25","EffvsPhi_SINGLE_25"
)
)
)
)
23 changes: 23 additions & 0 deletions DQMOffline/L1Trigger/python/L1TEfficiencyMuonsOffline_cff.py
@@ -0,0 +1,23 @@
import FWCore.ParameterSet.Config as cms

l1tEfficiencyMuons_offline = cms.EDAnalyzer("L1TEfficiencyMuons_Offline",
verbose = cms.untracked.bool(False),
gmtPtCuts = cms.untracked.vint32(16,20,25),
muonInputTag = cms.untracked.InputTag("muons"),
gmtInputTag = cms.untracked.InputTag("gmtStage2Digis"),
vtxInputTag = cms.untracked.InputTag("offlinePrimaryVertices"),
bsInputTag = cms.untracked.InputTag("offlineBeamSpot"),

triggerNames = cms.untracked.vstring(
"HLT_IsoMu18_v*",
"HLT_IsoMu20_v*",
"HLT_IsoMu22_v*",
"HLT_IsoMu24_v*",
"HLT_IsoMu27_v*",
"HLT_Mu30_v*",
"HLT_Mu40_v*"
),
trigInputTag = cms.untracked.InputTag("hltTriggerSummaryAOD", "", "HLT"),
trigProcess = cms.untracked.string("HLT"),
trigProcess_token = cms.untracked.InputTag("TriggerResults","","HLT")
)