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 //
17 //
18 
19 
20 // system include files
21 #include <memory>
23 
24 std::pair<int,int> DQMHcalIsoTrackAlCaReco::towerIndex(double eta, double phi)
25 {
26  int ieta = 0;
27  int iphi = 0;
28  for (int i=1; i<21; i++)
29  {
30  if (fabs(eta)<=(i*0.087)&&fabs(eta)>(i-1)*0.087) ieta=int(fabs(eta)/eta)*i;
31  }
32  if (fabs(eta)>1.740&&fabs(eta)<=1.830) ieta=int(fabs(eta)/eta)*21;
33  if (fabs(eta)>1.830&&fabs(eta)<=1.930) ieta=int(fabs(eta)/eta)*22;
34  if (fabs(eta)>1.930&&fabs(eta)<=2.043) ieta=int(fabs(eta)/eta)*23;
35  if (fabs(eta)>2.043&&fabs(eta)<=2.172) ieta=int(fabs(eta)/eta)*24;
36 
37  double delta=phi+0.174532925;
38  if (delta<0) delta=delta+2*acos(-1);
39  if (fabs(eta)<1.740)
40  {
41  for (int i=0; i<72; i++)
42  {
43  if (delta<(i+1)*0.087266462&&delta>i*0.087266462) iphi=i;
44  }
45  }
46  else
47  {
48  for (int i=0; i<36; i++)
49  {
50  if (delta<2*(i+1)*0.087266462&&delta>2*i*0.087266462) iphi=2*i;
51  }
52  }
53 
54  return std::pair<int,int>(ieta,iphi);
55 }
56 
57 
59 
60 {
61  folderName_ = iConfig.getParameter<std::string>("folderName");
62  hltEventTag_= consumes<trigger::TriggerEvent>(iConfig.getParameter<edm::InputTag>("hltTriggerEventLabel"));
63  l1FilterTag_=iConfig.getParameter<std::string>("l1FilterLabel");
64  hltFilterTag_=iConfig.getParameter<std::vector<std::string> >("hltL3FilterLabels");
65  nameLength_=iConfig.getUntrackedParameter<int>("filterNameLength",27);
66  l1nameLength_=iConfig.getUntrackedParameter<int>("l1filterNameLength",11);
67  arITrLabel_= consumes<reco::IsolatedPixelTrackCandidateCollection>(iConfig.getParameter<edm::InputTag>("alcarecoIsoTracksLabel"));
68  recoTrLabel_=iConfig.getParameter<edm::InputTag>("recoTracksLabel");
69  pThr_=iConfig.getUntrackedParameter<double>("pThrL3",0);
70  heLow_=iConfig.getUntrackedParameter<double>("lowerHighEnergyCut",40);
71  heUp_=iConfig.getUntrackedParameter<double>("upperHighEnergyCut",60);
72 
73  nTotal=0;
74  nHLTL3accepts=0;
75 }
76 
78 {}
79 
81 {
82 
83  nTotal++;
84 
86  iEvent.getByToken(hltEventTag_,trEv);
87 
89  iEvent.getByToken(arITrLabel_,recoIsoTracks);
90 
91  const trigger::TriggerObjectCollection& TOCol(trEv->getObjects());
92 
93  const trigger::size_type nFilt(trEv->sizeFilters());
94 
95  //get coordinates of L1 trigger
96  trigger::Keys KEYSl1;
97  for (trigger::size_type iFilt=0; iFilt!=nFilt; iFilt++)
98  {
99  if ((trEv->filterTag(iFilt).label()).substr(0,l1nameLength_)==l1FilterTag_) KEYSl1=trEv->filterKeys(iFilt);
100  }
101 
102  trigger::size_type nRegl1=KEYSl1.size();
103 
104  double etaTrigl1=-10000;
105  double phiTrigl1=-10000;
106  double ptMaxl1=0;
107  for (trigger::size_type iReg=0; iReg<nRegl1; iReg++)
108  {
109  const trigger::TriggerObject& TObj(TOCol[KEYSl1[iReg]]);
110  if (TObj.pt()>ptMaxl1)
111  {
112  etaTrigl1=TObj.eta();
113  phiTrigl1=TObj.phi();
114  ptMaxl1=TObj.pt();
115  }
116  }
117 
118  //get coordinates of hlt objects
119  std::vector<double> trigEta;
120  std::vector<double> trigPhi;
121 
122  trigger::Keys KEYS;
123  for (unsigned l=0; l<hltFilterTag_.size(); l++)
124  {
125  for (trigger::size_type iFilt=0; iFilt!=nFilt; iFilt++)
126  {
127  if ((trEv->filterTag(iFilt).label()).substr(0,nameLength_)==hltFilterTag_[l])
128  {
129  KEYS=trEv->filterKeys(iFilt);
130  }
131  }
132 
133  trigger::size_type nReg=KEYS.size();
134 
135  //checks with IsoTrack trigger results
136  for (trigger::size_type iReg=0; iReg<nReg; iReg++)
137  {
138  const trigger::TriggerObject& TObj(TOCol[KEYS[iReg]]);
139  if (TObj.p()<pThr_) continue;
140  hl3eta->Fill(TObj.eta(),1);
141  hl3AbsEta->Fill(fabs(TObj.eta()),1);
142  hl3phi->Fill(TObj.phi(),1);
143 
144  if (recoIsoTracks->size()>0)
145  {
146  double minRecoL3dist=1000;
147  reco::IsolatedPixelTrackCandidateCollection::const_iterator mrtr;
148  for (reco::IsolatedPixelTrackCandidateCollection::const_iterator rtrit=recoIsoTracks->begin(); rtrit!=recoIsoTracks->end(); rtrit++)
149  {
150  double R=deltaR(rtrit->eta(),rtrit->phi(),TObj.eta(),TObj.phi());
151  if (R<minRecoL3dist)
152  {
153  mrtr=rtrit;
154  minRecoL3dist=R;
155  }
156  }
157  hOffL3TrackMatch->Fill(minRecoL3dist,1);
158  if (minRecoL3dist<0.02) hOffL3TrackPtRat->Fill(TObj.pt()/mrtr->pt(),1);
159  }
160 
161  hl3Pt->Fill(TObj.pt(),1);
162  trigEta.push_back(TObj.eta());
163  trigPhi.push_back(TObj.phi());
164  }
165  }
166 
167  //general distributions
168  for (reco::IsolatedPixelTrackCandidateCollection::const_iterator itr=recoIsoTracks->begin(); itr!=recoIsoTracks->end(); itr++)
169  {
170  bool match=false;
171  for (unsigned int l=0; l<trigEta.size(); l++)
172  {
173  if (deltaR(itr->eta(),itr->phi(),trigEta[l],trigPhi[l])<0.02) match=true;
174  }
175  if (match)
176  {
177  hOffEtaFP->Fill(itr->eta(),1);
178  hOffPhiFP->Fill(itr->phi(),1);
179  }
180 
181  hOffEta->Fill(itr->eta(),1);
182  hOffPhi->Fill(itr->phi(),1);
183 
184  hOffAbsEta->Fill(fabs(itr->eta()),1);
185 
186  hL1jetMatch->Fill(deltaR(itr->eta(), itr->phi(), etaTrigl1, phiTrigl1),1);
187 
188  if (fabs(itr->eta())<1.479)
189  {
190  hDeposEcalInnerEB->Fill(itr->energyIn(),1);
191  hDeposEcalOuterEB->Fill(itr->energyOut(),1);
192  }
193  else
194  {
195  hDeposEcalInnerEE->Fill(itr->energyIn(),1);
196  hDeposEcalOuterEE->Fill(itr->energyOut(),1);
197  }
198 
199  hTracksSumP->Fill(itr->sumPtPxl(),1);
200  if (itr->maxPtPxl()==-10) hTracksMaxP->Fill(0,1);
201  else hTracksMaxP->Fill(itr->maxPtPxl(),1);
202 
203  if (fabs(itr->eta())<0.5) hOffP_0005->Fill(itr->p(),1);
204  if (fabs(itr->eta())>0.5&&fabs(itr->eta())<1.0) hOffP_0510->Fill(itr->p(),1);
205  if (fabs(itr->eta())>1.0&&fabs(itr->eta())<1.5) hOffP_1015->Fill(itr->p(),1);
206  if (fabs(itr->eta())<1.5&&fabs(itr->eta())<2.0) hOffP_1520->Fill(itr->p(),1);
207 
208  hOffP->Fill(itr->p(),1);
209 
210  std::pair<int,int> TI=towerIndex(itr->eta(),itr->phi());
211  hOccupancyFull->Fill(TI.first,TI.second,1);
212  if (itr->p()>heLow_&&itr->p()<heUp_) hOccupancyHighEn->Fill(TI.first,TI.second,1);
213  }
214 
215 }
216 
218  edm::Run const &, edm::EventSetup const & ) {
219 
220  iBooker.setCurrentFolder(folderName_);
221 
222  hl3Pt=iBooker.book1D("hl3Pt","pT of hlt L3 objects",1000,0,1000);
223  hl3Pt->setAxisTitle("pT(GeV)",1);
224 
225  hl3eta=iBooker.book1D("hl3eta","eta of hlt L3 objects",16,-2,2);
226  hl3eta->setAxisTitle("eta",1);
227  hl3AbsEta=iBooker.book1D("hl3AbsEta","|eta| of hlt L3 objects",8,0,2);
228  hl3AbsEta->setAxisTitle("eta",1);
229  hl3phi=iBooker.book1D("hl3phi","phi of hlt L3 objects",16,-3.2,3.2);
230  hl3phi->setAxisTitle("phi",1);
231  hOffEta=iBooker.book1D("hOffEta","eta of alcareco objects",100,-2,2);
232  hOffEta->setAxisTitle("eta",1);
233  hOffPhi=iBooker.book1D("hOffPhi","phi of alcareco objects",100,-3.2,3.2);
234  hOffPhi->setAxisTitle("phi",1);
235  hOffP=iBooker.book1D("hOffP","p of alcareco objects",1000,0,1000);
236  hOffP->setAxisTitle("E(GeV)",1);
237  hOffP_0005=iBooker.book1D("hOffP_0005","p of alcareco objects, |eta|<0.5",1000,0,1000);
238  hOffP_0005->setAxisTitle("E(GeV)",1);
239  hOffP_0510=iBooker.book1D("hOffP_0510","p of alcareco objects, 0.5<|eta|<1.0",1000,0,1000);
240  hOffP_0510->setAxisTitle("E(GeV)",1);
241  hOffP_1015=iBooker.book1D("hOffP_1015","p of alcareco objects, 1.0<|eta|<1.5",1000,0,1000);
242  hOffP_1015->setAxisTitle("E(GeV)",1);
243  hOffP_1520=iBooker.book1D("hOffP_1520","p of alcareco objects, 1.5<|eta|<2.0",1000,0,1000);
244  hOffP_1520->setAxisTitle("E(GeV)",1);
245  hOffEtaFP=iBooker.book1D("hOffEtaFP","eta of alcareco objects, FP",16,-2,2);
246  hOffEtaFP->setAxisTitle("eta",1);
247  hOffAbsEta=iBooker.book1D("hOffAbsEta","|eta| of alcareco objects",8,0,2);
248  hOffAbsEta->setAxisTitle("|eta|",1);
249  hOffPhiFP=iBooker.book1D("hOffPhiFP","phi of alcareco objects, FP",16,-3.2,3.2);
250  hOffPhiFP->setAxisTitle("phi",1);
251  hTracksSumP=iBooker.book1D("hTracksSumP","summary p of tracks in the isolation cone",100,0,20);
252  hTracksSumP->setAxisTitle("E(GeV)");
253  hTracksMaxP=iBooker.book1D("hTracksMaxP","maximum p among tracks in the isolation cone",100,0,20);
254  hTracksMaxP->setAxisTitle("E(GeV)");
255  hDeposEcalInnerEE=iBooker.book1D("hDeposEcalInnerEE","ecal energy deposition in inner cone around track, EE",20,0,20);
256  hDeposEcalInnerEE->setAxisTitle("E(GeV)");
257  hDeposEcalOuterEE=iBooker.book1D("hDeposEcalOuterEE","ecal energy deposition in outer cone around track, EE",100,0,100);
258  hDeposEcalInnerEB=iBooker.book1D("hDeposEcalInnerEB","ecal energy deposition in inner cone around track, EB",20,0,20);
259  hDeposEcalInnerEB->setAxisTitle("E(GeV)");
260  hDeposEcalOuterEB=iBooker.book1D("hDeposEcalOuterEB","ecal energy deposition in outer cone around track, EB",100,0,100);
261  hDeposEcalOuterEB->setAxisTitle("E(GeV)");
262  hOccupancyFull=iBooker.book2D("hOccupancyFull","number of tracks per tower, full energy range",48,-25,25,73,0,73);
263  hOccupancyFull->setAxisTitle("ieta",1);
264  hOccupancyFull->setAxisTitle("iphi",2);
265  hOccupancyFull->getTH2F()->SetOption("colz");
266  hOccupancyFull->getTH2F()->SetStats(kFALSE);
267  hOccupancyHighEn=iBooker.book2D("hOccupancyHighEn","number of tracks per tower, high energy tracks",48,-25,25,73,0,73);
268  hOccupancyHighEn->setAxisTitle("ieta",1);
269  hOccupancyHighEn->setAxisTitle("iphi",2);
270  hOccupancyHighEn->getTH2F()->SetOption("colz");
271  hOccupancyHighEn->getTH2F()->SetStats(kFALSE);
272  hOffL3TrackMatch=iBooker.book1D("hOffL3TrackMatch","Distance from L3 object to offline track",40,0,0.2);
273  hOffL3TrackMatch->setAxisTitle("R(eta,phi)",1);
274  hOffL3TrackPtRat=iBooker.book1D("hOffL3TrackPtRat","Ratio of pT: L3/offline",500,0,3);
275  hOffL3TrackPtRat->setAxisTitle("ratio L3/offline",1);
276 
277  hL1jetMatch=iBooker.book1D("hL1jetMatch","dR(eta,phi) from leading L1 jet to offline track",100,0,5);
278 
279 }
dbl * delta
Definition: mlp_gen.cc:36
edm::EDGetTokenT< trigger::TriggerEvent > hltEventTag_
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
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::pair< int, int > towerIndex(double eta, double phi)
float eta() const
Definition: TriggerObject.h:57
T eta() const
uint16_t size_type
void Fill(long long x)
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:22
int iEvent
Definition: GenABIO.cc:230
edm::EDGetTokenT< reco::IsolatedPixelTrackCandidateCollection > arITrLabel_
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
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
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
std::vector< size_type > Keys
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
TH2F * getTH2F(void) const
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Definition: Run.h:41
Definition: DDAxes.h:10