// ----------member data ---------------------------
HLTConfigProvider hltConfig;
std::map< std::string, TH2D* > histos2D_;
std::map< std::string, TH1D* > histos1D_;
------------------
TriggerMatching::TriggerMatching(const edm::ParameterSet& iConfig):histos2D_(),histos1D_()
{
//now do what ever initialization is needed
}
------------------
edm::Service< TFileService > fileService;
histos2D_[ "ptTrigCand" ] = fileService->make< TH2D >( "ptTrigCand", "Object vs. candidate p_{T} (GeV)", 60, 0., 300., 60, 0., 300. );
histos2D_[ "ptTrigCand" ]->SetXTitle( "candidate p_{T} (GeV)" );
histos2D_[ "ptTrigCand" ]->SetYTitle( "object p_{T} (GeV)" );
histos2D_[ "etaTrigCand" ] = fileService->make< TH2D >( "etaTrigCand", "Object vs. candidate #eta", 50, -2.5, 2.5, 50, -2.5, 2.5 );
histos2D_[ "etaTrigCand" ]->SetXTitle( "candidate #eta" );
histos2D_[ "etaTrigCand" ]->SetYTitle( "object #eta" );
histos2D_[ "phiTrigCand" ] = fileService->make< TH2D >( "phiTrigCand", "Object vs. candidate #phi", 60, -TMath::Pi(), TMath::Pi(), 60, -TMath::Pi(),
TMath::Pi() );
histos2D_[ "phiTrigCand" ]->SetXTitle( "candidate #phi" );
histos2D_[ "phiTrigCand" ]->SetYTitle( "object #phi" );
histos1D_[ "diffPtRelat" ] = fileService->make< TH1D >("diffPtRelat","relat diff online vs offline",100,-0.2,0.2);
histos1D_[ "diffPtRelat" ]->SetXTitle( " (p_{T} HLT - p_{T} reco)/p_{T} reco " );
histos1D_[ "ptRecoMuon" ] = fileService->make< TH1D >("ptRecoMuon","Pt reco muon",20,10,50);
histos1D_[ "ptRecoMuon" ]->SetXTitle( "candidate p_{T} (GeV)" );
histos1D_[ "ptRecoMuonMatched" ] = fileService->make< TH1D >("ptRecoMuonMatched","Pt reco muon",20,10,50);
histos1D_[ "ptRecoMuonMatched" ]->SetXTitle( "candidate p_{T} (GeV)" );
histos1D_[ "ptRecoMuonEfficiency" ] = fileService->make< TH1D >("ptRecoMuonEfficiency","Pt reco muon",20,10,50);
histos1D_[ "ptRecoMuonEfficiency" ]->SetXTitle( "candidate p_{T} (GeV)" );
----------------
histos1D_[ "ptRecoMuonEfficiency" ]->Sumw2();
histos1D_[ "ptRecoMuonEfficiency" ]->Divide(histos1D_[ "ptRecoMuonMatched" ], histos1D_[ "ptRecoMuon" ], 1,1);
--------------
//open the trigger summary
edm::InputTag triggerSummaryLabel_ = edm::InputTag("hltTriggerSummaryAOD", "", "HLT");
edm::Handle<trigger::TriggerEvent> triggerSummary;
iEvent.getByLabel(triggerSummaryLabel_, triggerSummary);
//trigger object we want to match
edm::InputTag filterTag = edm::InputTag("hltL1Mu12EG7L3MuFiltered17", "", "HLT");
//find the index corresponding to the event
size_t filterIndex = (*triggerSummary).filterIndex(filterTag);
trigger::TriggerObjectCollection allTriggerObjects = triggerSummary->getObjects();
trigger::TriggerObjectCollection selectedObjects;
if (filterIndex < (*triggerSummary).sizeFilters()) { //check if the trigger object is present
const trigger::Keys &keys = (*triggerSummary).filterKeys(filterIndex);
for (size_t j = 0; j < keys.size(); j++) {
trigger::TriggerObject foundObject = (allTriggerObjects)[keys[j]];
selectedObjects.push_back(foundObject);
}
---------------
//Page 14
edm::Handle< reco::MuonCollection > muons;
iEvent.getByLabel( "muons", muons );
for( size_t iMuon = 0; iMuon < muons->size(); ++iMuon ) {
histos1D_[ "ptRecoMuon" ]->Fill(muons->at( iMuon ).pt());
for (size_t t = 0 ; t < selectedObjects.size() ; t++){!
float deltaR = sqrt(pow(selectedObjects[t].eta()-muons->at( iMuon ).eta(),2)+
pow(acos(cos(selectedObjects[t].phi()-muons->at( iMuon ).phi())),2)) ;
if (deltaR<0.1) {//matching successfull
histos2D_[ "ptTrigCand" ]->Fill( muons->at( iMuon ).pt(), selectedObjects[t].pt() );
histos2D_[ "etaTrigCand" ]->Fill( muons->at( iMuon ).eta(), selectedObjects[t].eta() );
histos2D_[ "phiTrigCand" ]->Fill( muons->at( iMuon ).phi(), selectedObjects[t].phi() );
histos1D_[ "ptRecoMuonMatched" ]->Fill(muons->at( iMuon ).pt());
if (muons->at( iMuon ).pt()>0) histos1D_[ "diffPtRelat" ]->Fill((selectedObjects[t].pt()-muons-
>at( iMuon ).pt())/muons->at( iMuon ).pt());
}
}
}
-----------
//slide 15
<use name="FWCore/Framework"/>
<use name="FWCore/PluginManager"/>
<use name="FWCore/ParameterSet"/>
<use name="HLTrigger/HLTcore"/>
<use name="DataFormats/Common"/>
<use name="PhysicsTools/CandUtils"/>
<use name="PhysicsTools/UtilAlgos"/>
<flags EDM_PLUGIN="1"/>
-----------
//slide 16
import FWCore.ParameterSet.Config as cms
process = cms.Process("TUTO")
process.load( "FWCore.MessageService.MessageLogger_cfi" )
process.MessageLogger.cerr.FwkReport.reportEvery = 10
process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(-1))
process.source = cms.Source(
"PoolSource",
fileNames = cms.untracked.vstring(
'/store/relval/CMSSW_5_3_6-START53_V14/RelValTTbarLepton/GEN-SIMRECO/
v2/00000/7C6ACC06-F729-E211-81DD-003048678FB2.root',
'/store/relval/CMSSW_5_3_6-START53_V14/RelValTTbarLepton/GEN-SIMRECO/
v2/00000/72CA37E3-F929-E211-906E-003048D15D22.root'
)
)
process.TFileService = cms.Service( "TFileService",
fileName = cms.string( 'analyzeRECO.root' )
)
process.triggerMatchingAnalyzer = cms.EDAnalyzer('TriggerMatching')
process.p= cms.Path(process.triggerMatchingAnalyzer)
--------------
//Pat part --> slide 20:
#trigger matching parameters
process.muonTriggerMatchHLTMuons = cms.EDProducer(
# matching in DeltaR, sorting by best DeltaR
"PATTriggerMatcherDRLessByR"
# matcher input collections
, src = cms.InputTag( 'cleanPatMuons' )
, matched = cms.InputTag( 'patTrigger' )
# selections of trigger objects
, matchedCuts = cms.string( 'type( "TriggerMuon" ) &&
filter( "hltL1Mu12EG7L3MuFiltered17" )' )
# selection of matches
, maxDPtRel = cms.double( 10 ) # no effect here
, maxDeltaR = cms.double( 0.1 )
, maxDeltaEta = cms.double( 10 ) # no effect here
# definition of matcher output
, resolveAmbiguities = cms.bool( True )
, resolveByMatchQuality = cms.bool( True )
)
#run the trigger matching
from PhysicsTools.PatAlgos.tools.trigTools import *
switchOnTrigger( process )
switchOnTriggerMatching( process, triggerMatchers = [ 'muonTriggerMatchHLTMuons'] )
------------
//slide 21
process.source.fileNames = cms.untracked.vstring(
'/store/relval/CMSSW_5_3_6-START53_V14/RelValTTbarLepton/
GEN-SIM-RECO/v2/00000/7C6ACC06-F729-E211-81DD-003048678FB2.root',
'/store/relval/CMSSW_5_3_6-START53_V14/RelValTTbarLepton/
GEN-SIM-RECO/v2/00000/72CA37E3-F929-E211-906E-003048D15D22.root'
)
# ##
process.maxEvents.input = 100
-----------
//slide 22
#include "DataFormats/PatCandidates/interface/Muon.h"
#include "DataFormats/PatCandidates/interface/TriggerEvent.h"
using namespace pat;
#include "PhysicsTools/PatUtils/interface/TriggerHelper.h"
--------------
//slide 23
//open the trigger summary
edm::InputTag triggerSummaryLabel_ = edm::InputTag("hltTriggerSummaryAOD", "", "HLT");
edm::Handle<trigger::TriggerEvent> triggerSummary;
iEvent.getByLabel(triggerSummaryLabel_, triggerSummary);
//trigger object we want to match
edm::InputTag filterTag = edm::InputTag("hltL1Mu12EG7L3MuFiltered17", "", "HLT");
//find the index corresponding to the event
size_t filterIndex = (*triggerSummary).filterIndex(filterTag);
trigger::TriggerObjectCollection allTriggerObjects = triggerSummary->getObjects();
trigger::TriggerObjectCollection selectedObjects;
if (filterIndex < (*triggerSummary).sizeFilters()) { //check if the trigger object is present
const trigger::Keys &keys = (*triggerSummary).filterKeys(filterIndex);
for (size_t j = 0; j < keys.size(); j++) {
trigger::TriggerObject foundObject = (allTriggerObjects)[keys[j]];
selectedObjects.push_back(foundObject);
}
}
edm::InputTag triggerEventName = edm::InputTag("patTriggerEvent");
edm::Handle<TriggerEvent> triggerEvent;
iEvent.getByLabel( triggerEventName, triggerEvent );
const pat::helper::TriggerMatchHelper matchHelper;
-----------
//slide 24
edm::Handle< reco::MuonCollection > muons;
iEvent.getByLabel( "muons", muons );
for( size_t iMuon = 0; iMuon < muons->size(); ++iMuon ) {
histos1D_[ "ptRecoMuon" ]->Fill(muons->at( iMuon ).pt());!
for (size_t t = 0 ; t < selectedObjects.size() ; t++){!
float deltaR = sqrt(pow(selectedObjects[t].eta()-muons->at( iMuon ).eta(),2)+
pow(acos(cos(selectedObjects[t].phi()-muons->at( iMuon ).phi())),2)) ;
if (deltaR<0.1) {//matching successfull
histos2D_[ "ptTrigCand" ]->Fill( muons->at( iMuon ).pt(), selectedObjects[t].pt() );
histos2D_[ "etaTrigCand" ]->Fill( muons->at( iMuon ).eta(), selectedObjects[t].eta() );
histos2D_[ "phiTrigCand" ]->Fill( muons->at( iMuon ).phi(), selectedObjects[t].phi() );
histos1D_[ "ptRecoMuonMatched" ]->Fill(muons->at( iMuon ).pt());
if (muons->at( iMuon ).pt()>0) histos1D_[ "diffPtRelat" ]->Fill((selectedObjects[t].pt()-muons-
>at( iMuon ).pt())/muons->at( iMuon ).pt());
}
}
}
edm::Handle<MuonCollection > muons;
iEvent.getByLabel( "cleanPatMuons", muons );
for( size_t iMuon = 0; iMuon < muons->size(); ++iMuon ) {
histos1D_[ "ptRecoMuon" ]->Fill(muons->at( iMuon ).pt());
const TriggerObjectRef selectedObjects( matchHelper.triggerMatchObject( muons, iMuon,
"muonTriggerMatchHLTMuons", iEvent, *triggerEvent ) );
if ( selectedObjects.isAvailable() && selectedObjects.isNonnull() ) {
histos2D_[ "ptTrigCand" ]->Fill( muons->at( iMuon ).pt(), selectedObjects->pt() );
histos2D_[ "etaTrigCand" ]->Fill( muons->at( iMuon ).eta(), selectedObjects->eta() );
histos2D_[ "phiTrigCand" ]->Fill( muons->at( iMuon ).phi(), selectedObjects->phi() );
histos1D_[ "ptRecoMuonMatched" ]->Fill(muons->at( iMuon ).pt());
if (muons->at( iMuon ).pt()>0) histos1D_[ "diffPtRelat" ]->Fill((selectedObjects->pt()-muons-
>at( iMuon ).pt())/muons->at( iMuon ).pt());
}
}
------------
//slide 25
<use name="FWCore/Framework"/>
<use name="FWCore/PluginManager"/>
<use name="FWCore/ParameterSet"/>
<use name="HLTrigger/HLTcore"/>
<use name="DataFormats/Common"/>
<use name="PhysicsTools/CandUtils"/>
<use name="PhysicsTools/UtilAlgos"/>
<use name="PhysicsTools/PatExamples"/>
<use name="PhysicsTools/PatAlgos"/>
<use name="PhysicsTools/PatUtils"/>
<flags EDM_PLUGIN="1"/>
------------
//slide 26
import FWCore.ParameterSet.Config as cms
process = cms.Process("TUTO")
process.load( "FWCore.MessageService.MessageLogger_cfi" )
process.MessageLogger.cerr.FwkReport.reportEvery = 10
process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(-1))
process.source = cms.Source(
"PoolSource",
fileNames = cms.untracked.vstring(
'/store/user/hbrun/triggerMatching/patTuple.root'
)
)
process.TFileService = cms.Service( "TFileService",
fileName = cms.string( 'analyzePAT.root' )
)
process.triggerMatchingAnalyzer = cms.EDAnalyzer('TriggerMatching')
process.p= cms.Path(process.triggerMatchingAnalyzer)
-------------
//slide 28
process.electronsTriggerMatchHLT = cms.EDProducer(
# matching in DeltaR, sorting by best DeltaR
"PATTriggerMatcherDRLessByR"
# matcher input collections
, src = cms.InputTag( 'cleanPatElectrons' )
, matched = cms.InputTag( 'patTrigger' )
# selections of trigger objects
, matchedCuts = cms.string( 'type( "TriggerElectron" ) &&
filter( "hltMu17Ele8CaloIdTCaloIsoVLTrkIdVLTrkIsoVLTrackIsoFilter" )' )
# selection of matches
, maxDPtRel = cms.double( 10 ) # no effect here
, maxDeltaR = cms.double( 0.1 )
, maxDeltaEta = cms.double( 10 ) # no effect here
# definition of matcher output
, resolveAmbiguities = cms.bool( True )
, resolveByMatchQuality = cms.bool( True )
)
from PhysicsTools.PatAlgos.tools.trigTools import *
switchOnTrigger( process )
switchOnTriggerMatching( process, triggerMatchers = [ 'muonTriggerMatchHLTMuons', 'electronsTriggerMatchHLT'] )
---------------
//slide 29
#include "DataFormats/PatCandidates/interface/Electron.h"
edm::Handle<ElectronCollection > electrons;
iEvent.getByLabel( "cleanPatElectrons", electrons );
for( size_t iElectron = 0; iElectron < electrons->size(); ++iElectron ) {
const TriggerObjectRef selectedObjects( matchHelper.triggerMatchObject( electrons, iElectron,
"electronsTriggerMatchHLT", iEvent, *triggerEvent ) );
if ( selectedObjects.isAvailable() && selectedObjects.isNonnull() ) {
if (electrons->at( iElectron ).pt()>0) histos1D_[ "diffPtRelatElectrons" ]->Fill((selectedObjects->pt()-
electrons->at( iElectron ).pt())/electrons->at( iElectron ).pt());
}
}
histos1D_[ "diffPtRelatElectrons" ] = fileService->make< TH1D >("diffPtRelatElectrons","relat diff online vs
offline",100,-0.2,0.2);
histos1D_[ "diffPtRelatElectrons" ]->SetXTitle( " (p_{T} HLT - p_{T} reco)/p_{T} reco " );
-------