CMS 3D CMS Logo

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