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