CMS 3D CMS Logo

PatTriggerAnalyzer.cc
Go to the documentation of this file.
1 #include <map>
2 #include <string>
3 
4 #include "TH1D.h"
5 #include "TH2D.h"
6 
14 
15 
17 
18  public:
20  explicit PatTriggerAnalyzer( const edm::ParameterSet & iConfig );
22  ~PatTriggerAnalyzer() override;
23 
24  private:
26  void beginJob() override;
28  void analyze( const edm::Event & iEvent, const edm::EventSetup & iSetup ) override;
30  void endJob() override;
31 
41  unsigned minID_;
43  unsigned maxID_;
44 
46  std::map< std::string, TH1D* > histos1D_;
47  std::map< std::string, TH2D* > histos2D_;
48 
50  std::map< unsigned, unsigned > sumN_;
51  std::map< unsigned, double > sumPt_;
52 };
53 
54 
55 #include "TMath.h"
56 
60 
61 
62 using namespace pat;
63 
64 
66  // pat::Trigger
67  trigger_( iConfig.getParameter< edm::InputTag >( "trigger" ) ),
68  // pat::TriggerEvent
69  triggerEventToken_( consumes< TriggerEvent >( iConfig.getParameter< edm::InputTag >( "triggerEvent" ) ) ),
70  // muon input collection
71  muonsToken_( consumes< MuonCollection >( iConfig.getParameter< edm::InputTag >( "muons" ) ) ),
72  // muon match objects
73  muonMatch_( iConfig.getParameter< std::string >( "muonMatch" ) ),
74  // minimal id for of all trigger objects
75  minID_( iConfig.getParameter< unsigned >( "minID" ) ),
76  // maximal id for of all trigger objects
77  maxID_( iConfig.getParameter< unsigned >( "maxID" ) ),
78  histos1D_(), histos2D_()
79 {
80 }
81 
83 {
84 }
85 
87 {
89 
90  // pt correlation plot
91  histos2D_[ "ptTrigCand" ] = fileService->make< TH2D >( "ptTrigCand", "Object vs. candidate p_{T} (GeV)", 60, 0., 300., 60, 0., 300. );
92  histos2D_[ "ptTrigCand" ]->SetXTitle( "candidate p_{T} (GeV)" );
93  histos2D_[ "ptTrigCand" ]->SetYTitle( "object p_{T} (GeV)" );
94  // eta correlation plot
95  histos2D_[ "etaTrigCand" ] = fileService->make< TH2D >( "etaTrigCand", "Object vs. candidate #eta", 50, -2.5, 2.5, 50, -2.5, 2.5 );
96  histos2D_[ "etaTrigCand" ]->SetXTitle( "candidate #eta" );
97  histos2D_[ "etaTrigCand" ]->SetYTitle( "object #eta" );
98  // phi correlation plot
99  histos2D_[ "phiTrigCand" ] = fileService->make< TH2D >( "phiTrigCand", "Object vs. candidate #phi", 60, -TMath::Pi(), TMath::Pi(), 60, -TMath::Pi(), TMath::Pi() );
100  histos2D_[ "phiTrigCand" ]->SetXTitle( "candidate #phi" );
101  histos2D_[ "phiTrigCand" ]->SetYTitle( "object #phi" );
102  // turn-on curves
103  histos1D_[ "turnOn" ] = fileService->make< TH1D >( "turnOn", "p_{T} (GeV) of matched candidate", 10, 0., 50.);
104  histos1D_[ "turnOn" ]->SetXTitle( "candidate p_{T} (GeV)" );
105  histos1D_[ "turnOn" ]->SetYTitle( "# of objects" );
106  // mean pt for all trigger objects
107  histos1D_[ "ptMean" ] = fileService->make< TH1D >( "ptMean", "Mean p_{T} (GeV) per trigger object type", maxID_ - minID_ + 1, minID_ - 0.5, maxID_ + 0.5);
108  histos1D_[ "ptMean" ]->SetXTitle( "trigger object type" );
109  histos1D_[ "ptMean" ]->SetYTitle( "mean p_{T} (GeV)" );
110 
111  // initialize counters for mean pt calculation
112  for( unsigned id = minID_; id <= maxID_; ++id ){
113  sumN_ [ id ] = 0;
114  sumPt_[ id ] = 0.;
115  }
116 }
117 
119 {
120  // PAT trigger event
121  edm::Handle< TriggerEvent > triggerEvent;
122  iEvent.getByToken( triggerEventToken_, triggerEvent );
123 
124  // PAT object collection
126  iEvent.getByToken( muonsToken_, muons );
127 
128  // PAT trigger helper for trigger matching information
129  const helper::TriggerMatchHelper matchHelper;
130 
131  /*
132  kinematics comparison
133  */
134 
135  // loop over muon references (PAT muons have been used in the matcher in task 3)
136  for( size_t iMuon = 0; iMuon < muons->size(); ++iMuon ) {
137  // we need all these ingedients to recieve matched trigger objects from the matchHelper
138  const TriggerObjectRef trigRef( matchHelper.triggerMatchObject( muons, iMuon, muonMatch_, iEvent, *triggerEvent ) );
139  // finally we can fill the histograms
140  if ( trigRef.isAvailable() && trigRef.isNonnull() ) { // check references (necessary!)
141  histos2D_[ "ptTrigCand" ]->Fill( muons->at( iMuon ).pt(), trigRef->pt() );
142  histos2D_[ "etaTrigCand" ]->Fill( muons->at( iMuon ).eta(), trigRef->eta() );
143  histos2D_[ "phiTrigCand" ]->Fill( muons->at( iMuon ).phi(), trigRef->phi() );
144  }
145  }
146 
147  /*
148  turn-on curve
149  */
150 
151  // get the trigger objects corresponding to the used matching (HLT muons)
152  const TriggerObjectRefVector trigRefs( triggerEvent->objects( trigger::TriggerMuon ) );
153  // loop over selected trigger objects
154  for ( TriggerObjectRefVector::const_iterator iTrig = trigRefs.begin(); iTrig != trigRefs.end(); ++iTrig ) {
155  // get all matched candidates for the trigger object
156  const reco::CandidateBaseRefVector candRefs( matchHelper.triggerMatchCandidates( ( *iTrig ), muonMatch_, iEvent, *triggerEvent ) );
157  if ( candRefs.empty() ) continue;
158  // fill the histogram...
159  // (only for the first match, since we resolved ambiguities in the matching configuration,
160  // so that we have one at maximum per trigger object)
161  reco::CandidateBaseRef muonRef( candRefs.at( 0 ) );
162  if ( muonRef.isAvailable() && muonRef.isNonnull() ) {
163  histos1D_[ "turnOn" ]->Fill( muonRef->pt() );
164  }
165  }
166 
167  /*
168  mean pt
169  */
170 
171  // loop over all trigger match objects from minID to maxID; have
172  // a look to DataFormats/HLTReco/interface/TriggerTypeDefs.h to
173  // know more about the available trrigger object id's
174  for ( unsigned id=minID_; id<=maxID_; ++id ) {
175  // vector of all objects for a given object id
176  const TriggerObjectRefVector objRefs( triggerEvent->objects( id ) );
177  // buffer the number of objects
178  sumN_[ id ] += objRefs.size();
179  // iterate the objects and buffer the pt of the objects
180  for ( TriggerObjectRefVector::const_iterator iRef = objRefs.begin(); iRef != objRefs.end(); ++iRef ) {
181  sumPt_[ id ] += ( *iRef )->pt();
182  }
183  }
184 }
185 
187 {
188  // normalize the entries for the mean pt plot
189  for(unsigned id=minID_; id<=maxID_; ++id){
190  if( sumN_[ id ]!=0 ) histos1D_[ "ptMean" ]->Fill( id, sumPt_[ id ]/sumN_[ id ] );
191  }
192 }
193 
194 
void beginJob() override
everythin that needs to be done before the event loop
const double Pi
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: HeavyIon.h:7
~PatTriggerAnalyzer() override
default destructor
const TriggerObjectCollection * objects() const
Definition: TriggerEvent.h:283
edm::EDGetTokenT< pat::MuonCollection > muonsToken_
input for muons
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
PatTriggerAnalyzer(const edm::ParameterSet &iConfig)
default constructor
void endJob() override
everythin that needs to be done after the event loop
std::map< std::string, TH1D * > histos1D_
histogram management
Analysis-level trigger event class.
Definition: TriggerEvent.h:42
unsigned minID_
minimal id for meanPt plot
edm::Service< TFileService > fileService
std::vector< Muon > MuonCollection
Definition: Muon.h:35
std::map< unsigned, double > sumPt_
HLT enums.
edm::InputTag trigger_
input for patTrigger
std::map< std::string, TH2D * > histos2D_
std::map< unsigned, unsigned > sumN_
internals for meanPt histogram calculation
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
everythin that needs to be done during the event loop
unsigned maxID_
maximal id for meanPt plot
std::string muonMatch_
input for trigger match objects
edm::EDGetTokenT< pat::TriggerEvent > triggerEventToken_
input for patTriggerEvent