CMS 3D CMS Logo

DQMHcalIsoTrackAlCaReco.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: DQMOffline/CalibCalo
4 // Class: DQMHcalIsoTrackAlCaReco
5 //
14 //
15 // Original Author: Grigory SAFRONOV
16 // Created: Tue Oct 14 16:10:31 CEST 2008
17 // Modified: Tue Mar 3 16:10:31 CEST 2015
18 //
19 //
20 
21 // system include files
22 #include <cmath>
23 
24 // user include files
25 
28 
30  folderName_ = iConfig.getParameter<std::string>("FolderName");
31  l1FilterTag_ = iConfig.getParameter<std::vector<std::string>>("L1FilterLabel");
32  hltFilterTag_ = iConfig.getParameter<std::vector<std::string>>("HltFilterLabels");
33  type_ = iConfig.getParameter<std::vector<int>>("TypeFilter");
34  labelTrigger_ = iConfig.getParameter<edm::InputTag>("TriggerLabel");
35  labelTrack_ = iConfig.getParameter<edm::InputTag>("TracksLabel");
36  pThr_ = iConfig.getUntrackedParameter<double>("pThrL3", 0);
37 
38  nTotal_ = nHLTaccepts_ = 0;
39  tokTrigger_ = consumes<trigger::TriggerEvent>(labelTrigger_);
40  tokTrack_ = consumes<reco::HcalIsolatedTrackCandidateCollection>(labelTrack_);
41  LogDebug("HcalIsoTrack") << "Folder " << folderName_ << " Input Tag for Trigger " << labelTrigger_ << " track "
42  << labelTrack_ << " threshold " << pThr_ << " with " << l1FilterTag_.size()
43  << " level 1 and " << hltFilterTag_.size() << " hlt filter tags"
44  << "\n";
45  for (unsigned int k = 0; k < l1FilterTag_.size(); ++k)
46  LogDebug("HcalIsoTrack") << "L1FilterTag[" << k << "] " << l1FilterTag_[k] << "\n";
47  for (unsigned int k = 0; k < hltFilterTag_.size(); ++k)
48  LogDebug("HcalIsoTrack") << "HLTFilterTag[" << k << "] " << hltFilterTag_[k] << "\n";
49 }
50 
52 
54  nTotal_++;
55  bool accept(false);
57  iEvent.getByToken(tokTrigger_, trEv);
58 
60  iEvent.getByToken(tokTrack_, recoIsoTracks);
61  LogDebug("HcalIsoTrack") << "Gets Trigger information with " << trEv.isValid() << " and offline tracks with "
62  << recoIsoTracks.isValid() << "\n";
63 
64  if (trEv.isValid()) {
65  const trigger::TriggerObjectCollection &TOCol(trEv->getObjects());
66  const trigger::size_type nFilt(trEv->sizeFilters());
67  // plots for L1 trigger
68  for (unsigned int k = 0; k < l1FilterTag_.size(); ++k) {
69  trigger::Keys KEYSl1;
70  double etaTrigl1(-10000), phiTrigl1(-10000), ptMaxl1(0);
71  for (trigger::size_type iFilt = 0; iFilt != nFilt; iFilt++) {
72  LogDebug("HcalIsoTrack") << trEv->filterTag(iFilt).label() << " find for " << l1FilterTag_[k] << " gives "
73  << (trEv->filterTag(iFilt).label()).find(l1FilterTag_[k]) << "\n";
74  if ((trEv->filterTag(iFilt).label()).find(l1FilterTag_[k]) != std::string::npos) {
75  KEYSl1 = trEv->filterKeys(iFilt);
76  trigger::size_type nRegl1 = KEYSl1.size();
77  LogDebug("HcalIsoTrack") << "# of objects " << nRegl1 << "\n";
78  for (trigger::size_type iReg = 0; iReg < nRegl1; iReg++) {
79  const trigger::TriggerObject &TObj(TOCol[KEYSl1[iReg]]);
80  LogDebug("HcalIsoTrack") << "Object[" << iReg << "] with pt " << TObj.pt() << " " << TObj.eta() << " "
81  << TObj.phi() << "\n";
82  if (TObj.pt() > ptMaxl1) {
83  etaTrigl1 = TObj.eta();
84  phiTrigl1 = TObj.phi();
85  ptMaxl1 = TObj.pt();
86  }
87  }
88  }
89  }
90  LogDebug("HcalIsoTrack") << "For L1 trigger type " << k << " pt " << ptMaxl1 << " eta " << etaTrigl1 << " phi "
91  << phiTrigl1 << "\n";
92  if (ptMaxl1 > 0) {
93  hL1Pt_[k]->Fill(ptMaxl1);
94  hL1Eta_[k]->Fill(etaTrigl1);
95  hL1phi_[k]->Fill(phiTrigl1);
96  }
97  }
98  // Now make plots for hlt objects
99  trigger::Keys KEYS;
100  for (unsigned l = 0; l < hltFilterTag_.size(); l++) {
101  for (trigger::size_type iFilt = 0; iFilt != nFilt; iFilt++) {
102  LogDebug("HcalIsoTrack") << trEv->filterTag(iFilt).label() << " find for " << hltFilterTag_[l] << " gives "
103  << (trEv->filterTag(iFilt).label()).find(hltFilterTag_[l]) << "\n";
104  if ((trEv->filterTag(iFilt).label()).find(hltFilterTag_[l]) != std::string::npos) {
105  KEYS = trEv->filterKeys(iFilt);
106  trigger::size_type nReg = KEYS.size();
107  LogDebug("HcalIsoTrack") << "# of objects for HLT " << nReg << "\n";
108  // checks with IsoTrack trigger results
109  for (trigger::size_type iReg = 0; iReg < nReg; iReg++) {
110  const trigger::TriggerObject &TObj(TOCol[KEYS[iReg]]);
111  LogDebug("HcalIsoTrack") << "HLT Filter Tag " << l << " trigger " << iFilt << " object " << iReg << " p "
112  << TObj.p() << " pointer " << indexH_[l] << ":" << hHltP_[indexH_[l]] << ":"
113  << hHltEta_[indexH_[l]] << ":" << hHltPhi_[indexH_[l]] << "\n";
114  if (TObj.p() > pThr_) {
115  hHltP_[indexH_[l]]->Fill(TObj.p());
116  hHltEta_[indexH_[l]]->Fill(TObj.eta());
117  hHltPhi_[indexH_[l]]->Fill(TObj.phi());
118  if (ifL3_[l])
119  accept = true;
120  if (recoIsoTracks.isValid() && ifL3_[l]) {
121  double minRecoL3dist(1000), pt(1000);
122  reco::HcalIsolatedTrackCandidateCollection::const_iterator mrtr;
123  for (mrtr = recoIsoTracks->begin(); mrtr != recoIsoTracks->end(); mrtr++) {
124  double R = deltaR(mrtr->eta(), mrtr->phi(), TObj.eta(), TObj.phi());
125  if (R < minRecoL3dist) {
126  minRecoL3dist = R;
127  pt = mrtr->pt();
128  }
129  }
130  LogDebug("HcalIsoTrack") << "Minimum R " << minRecoL3dist << " pt " << pt << ":" << TObj.pt() << "\n";
131  hL3Dr_->Fill(minRecoL3dist);
132  if (minRecoL3dist < 0.02)
133  hL3Rat_->Fill(TObj.pt() / pt);
134  }
135  }
136  }
137  }
138  }
139  }
140  }
141 
142  // general distributions
143  if (recoIsoTracks.isValid()) {
144  for (reco::HcalIsolatedTrackCandidateCollection::const_iterator itr = recoIsoTracks->begin();
145  itr != recoIsoTracks->end();
146  itr++) {
147  hMaxP_->Fill(itr->maxP());
148  hEnEcal_->Fill(itr->energyEcal());
149  std::pair<int, int> etaphi = itr->towerIndex();
150  hIeta_->Fill(etaphi.first);
151  hIphi_->Fill(etaphi.second);
152  LogDebug("HcalIsoTrack") << "Reco track p " << itr->p() << " eta|phi " << etaphi.first << "|" << etaphi.second
153  << " maxP " << itr->maxP() << " EcalE " << itr->energyEcal() << " pointers " << hHltP_[3]
154  << ":" << hHltEta_[3] << ":" << hHltPhi_[3] << "\n";
155  if (itr->p() >= pThr_) {
156  hHltP_[3]->Fill(itr->p());
157  hHltEta_[3]->Fill(itr->eta());
158  hHltPhi_[3]->Fill(itr->phi());
159  }
160  double etaAbs = std::abs(itr->eta());
161  hOffP_[0]->Fill(itr->p());
162  for (unsigned int l = 1; l < etaRange_.size(); l++) {
163  if (etaAbs >= etaRange_[l - 1] && etaAbs < etaRange_[l]) {
164  LogDebug("HcalIsoTrack") << "Range " << l << " p " << itr->p() << " pointer " << hOffP_[l];
165  hOffP_[l]->Fill(itr->p());
166  break;
167  }
168  }
169  }
170  }
171 
172  if (accept)
173  nHLTaccepts_++;
174  LogDebug("HcalIsoTrack") << "Accept " << accept << "\n";
175 }
176 
178  iBooker.setCurrentFolder(folderName_);
179  LogDebug("HcalIsoTrack") << "Set the folder to " << folderName_ << "\n";
180  char name[100], title[200];
181  for (unsigned int k = 0; k < l1FilterTag_.size(); ++k) {
182  sprintf(name, "hp%s", l1FilterTag_[k].c_str());
183  sprintf(title, "p_T of L1 object for %s", l1FilterTag_[k].c_str());
184  hL1Pt_.push_back(iBooker.book1D(name, title, 1000, 0, 1000));
185  hL1Pt_[k]->setAxisTitle("p_T (GeV)", 1);
186  sprintf(name, "heta%s", l1FilterTag_[k].c_str());
187  sprintf(title, "#eta of L1 object for %s", l1FilterTag_[k].c_str());
188  hL1Eta_.push_back(iBooker.book1D(name, title, 100, -2.5, 2.5));
189  hL1Eta_[k]->setAxisTitle("#eta", 1);
190  sprintf(name, "hphi%s", l1FilterTag_[k].c_str());
191  sprintf(title, "#phi of L1 object for %s", l1FilterTag_[k].c_str());
192  hL1phi_.push_back(iBooker.book1D(name, title, 100, -3.2, 3.2));
193  hL1phi_[k]->setAxisTitle("#phi", 1);
194  }
195 
196  std::string types[4] = {"L2", "L2x", "L3", "Off"};
197  for (unsigned int l = 0; l < 4; l++) {
198  sprintf(name, "hp%s", types[l].c_str());
199  sprintf(title, "Momentum of %s object", types[l].c_str());
200  hHltP_.push_back(iBooker.book1D(name, title, 200, 0, 1000));
201  hHltP_[l]->setAxisTitle("p (GeV)", 1);
202  sprintf(name, "heta%s", types[l].c_str());
203  sprintf(title, "#eta of %s object", types[l].c_str());
204  hHltEta_.push_back(iBooker.book1D(name, title, 16, -2, 2));
205  hHltEta_[l]->setAxisTitle("#eta", 1);
206  sprintf(name, "hphi%s", types[l].c_str());
207  sprintf(title, "#phi of %s object", types[l].c_str());
208  hHltPhi_.push_back(iBooker.book1D(name, title, 16, -3.2, 3.2));
209  hHltPhi_[l]->setAxisTitle("#phi", 1);
210  }
211  sprintf(title, "Distance of offline track from L3 object");
212  hL3Dr_ = (iBooker.book1D("hDRL3", title, 40, 0, 0.2));
213  hL3Dr_->setAxisTitle("R(#eta,#phi)", 1);
214  sprintf(title, "Ratio of p L3/Offline");
215  hL3Rat_ = (iBooker.book1D("hRatL3", title, 500, 0, 3));
216  indexH_.clear();
217  ifL3_.clear();
218  for (unsigned int l = 0; l < hltFilterTag_.size(); l++) {
219  unsigned int indx = (type_[l] >= 0 && type_[l] < 3) ? type_[l] : 0;
220  indexH_.push_back(indx);
221  ifL3_.push_back(indx == 2);
222  LogDebug("HcalIsoTrack") << "Filter[" << l << "] " << hltFilterTag_[l] << " type " << type_[l] << " index "
223  << indexH_[l] << " L3? " << ifL3_[l] << "\n";
224  }
225 
226  double etaV[6] = {0.0, 0.5, 1.0, 1.5, 2.0, 2.5};
227  for (unsigned int k = 0; k < 6; ++k) {
228  sprintf(name, "hOffP%d", k);
229  if (k == 0) {
230  sprintf(title, "p of AlCaReco object (All)");
231  } else {
232  sprintf(title, "p of AlCaReco object (%3.1f < |#eta| < %3.1f)", etaV[k - 1], etaV[k]);
233  }
234  etaRange_.push_back(etaV[k]);
235  hOffP_.push_back(iBooker.book1D(name, title, 1000, 0, 1000));
236  hOffP_[k]->setAxisTitle("E (GeV)", 1);
237  }
238  hMaxP_ = iBooker.book1D("hChgIsol", "Energy for charge isolation", 110, -10, 100);
239  hMaxP_->setAxisTitle("p (GeV)", 1);
240  hEnEcal_ = iBooker.book1D("hEnEcal", "Energy in ECAL", 100, 0, 20);
241  hEnEcal_->setAxisTitle("E (GeV)", 1);
242  hIeta_ = iBooker.book1D("hIEta", "i#eta for HCAL tower", 90, -45, 45);
243  hIeta_->setAxisTitle("i#eta", 1);
244  hIphi_ = iBooker.book1D("hIPhi", "i#phi for HCAL tower", 72, 0, 72);
245  hIphi_->setAxisTitle("i#phi", 1);
246 }
#define LogDebug(id)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:135
std::vector< MonitorElement * > hL1phi_
edm::EDGetTokenT< reco::HcalIsolatedTrackCandidateCollection > tokTrack_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
float phi() const
Definition: TriggerObject.h:58
void analyze(const edm::Event &, const edm::EventSetup &) override
DQMHcalIsoTrackAlCaReco(const edm::ParameterSet &)
std::vector< unsigned int > indexH_
const Keys & filterKeys(trigger::size_type index) const
Definition: TriggerEvent.h:111
std::vector< MonitorElement * > hHltP_
float eta() const
Definition: TriggerObject.h:57
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
uint16_t size_type
void Fill(long long x)
std::vector< double > etaRange_
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:22
edm::EDGetTokenT< trigger::TriggerEvent > tokTrigger_
int iEvent
Definition: GenABIO.cc:224
std::vector< MonitorElement * > hHltPhi_
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:98
std::vector< MonitorElement * > hHltEta_
std::vector< MonitorElement * > hL1Pt_
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
std::pair< T, T > etaphi(T x, T y, T z)
Definition: FastMath.h:128
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool isValid() const
Definition: HandleBase.h:74
int k[5][pyjets_maxn]
std::vector< std::string > hltFilterTag_
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:81
const edm::InputTag filterTag(trigger::size_type index) const
Definition: TriggerEvent.h:103
std::vector< size_type > Keys
std::string const & label() const
Definition: InputTag.h:36
std::vector< MonitorElement * > hL1Eta_
std::vector< MonitorElement * > hOffP_
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
std::vector< std::string > l1FilterTag_
Definition: Run.h:45