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  saveToFile_=iConfig.getParameter<bool>("saveToFile");
63  outRootFileName_=iConfig.getParameter<std::string>("outputRootFileName");
64  hltEventTag_= consumes<trigger::TriggerEvent>(iConfig.getParameter<edm::InputTag>("hltTriggerEventLabel"));
65  l1FilterTag_=iConfig.getParameter<std::string>("l1FilterLabel");
66  hltFilterTag_=iConfig.getParameter<std::vector<std::string> >("hltL3FilterLabels");
67  nameLength_=iConfig.getUntrackedParameter<int>("filterNameLength",27);
68  l1nameLength_=iConfig.getUntrackedParameter<int>("l1filterNameLength",11);
69  arITrLabel_= consumes<reco::IsolatedPixelTrackCandidateCollection>(iConfig.getParameter<edm::InputTag>("alcarecoIsoTracksLabel"));
70  recoTrLabel_=iConfig.getParameter<edm::InputTag>("recoTracksLabel");
71  pThr_=iConfig.getUntrackedParameter<double>("pThrL3",0);
72  heLow_=iConfig.getUntrackedParameter<double>("lowerHighEnergyCut",40);
73  heUp_=iConfig.getUntrackedParameter<double>("upperHighEnergyCut",60);
74 
75  nTotal=0;
76  nHLTL3accepts=0;
77 }
78 
80 {}
81 
83 {
84 
85  nTotal++;
86 
88  iEvent.getByToken(hltEventTag_,trEv);
89 
91  iEvent.getByToken(arITrLabel_,recoIsoTracks);
92 
93  const trigger::TriggerObjectCollection& TOCol(trEv->getObjects());
94 
95  const trigger::size_type nFilt(trEv->sizeFilters());
96 
97  //get coordinates of L1 trigger
98  trigger::Keys KEYSl1;
99  for (trigger::size_type iFilt=0; iFilt!=nFilt; iFilt++)
100  {
101  if ((trEv->filterTag(iFilt).label()).substr(0,l1nameLength_)==l1FilterTag_) KEYSl1=trEv->filterKeys(iFilt);
102  }
103 
104  trigger::size_type nRegl1=KEYSl1.size();
105 
106  double etaTrigl1=-10000;
107  double phiTrigl1=-10000;
108  double ptMaxl1=0;
109  for (trigger::size_type iReg=0; iReg<nRegl1; iReg++)
110  {
111  const trigger::TriggerObject& TObj(TOCol[KEYSl1[iReg]]);
112  if (TObj.pt()>ptMaxl1)
113  {
114  etaTrigl1=TObj.eta();
115  phiTrigl1=TObj.phi();
116  ptMaxl1=TObj.pt();
117  }
118  }
119 
120  //get coordinates of hlt objects
121  std::vector<double> trigEta;
122  std::vector<double> trigPhi;
123 
124  trigger::Keys KEYS;
125  for (unsigned l=0; l<hltFilterTag_.size(); l++)
126  {
127  for (trigger::size_type iFilt=0; iFilt!=nFilt; iFilt++)
128  {
129  if ((trEv->filterTag(iFilt).label()).substr(0,nameLength_)==hltFilterTag_[l])
130  {
131  KEYS=trEv->filterKeys(iFilt);
132  }
133  }
134 
135  trigger::size_type nReg=KEYS.size();
136 
137  //checks with IsoTrack trigger results
138  for (trigger::size_type iReg=0; iReg<nReg; iReg++)
139  {
140  const trigger::TriggerObject& TObj(TOCol[KEYS[iReg]]);
141  if (TObj.p()<pThr_) continue;
142  hl3eta->Fill(TObj.eta(),1);
143  hl3AbsEta->Fill(fabs(TObj.eta()),1);
144  hl3phi->Fill(TObj.phi(),1);
145 
146  if (recoIsoTracks->size()>0)
147  {
148  double minRecoL3dist=1000;
149  reco::IsolatedPixelTrackCandidateCollection::const_iterator mrtr;
150  for (reco::IsolatedPixelTrackCandidateCollection::const_iterator rtrit=recoIsoTracks->begin(); rtrit!=recoIsoTracks->end(); rtrit++)
151  {
152  double R=deltaR(rtrit->eta(),rtrit->phi(),TObj.eta(),TObj.phi());
153  if (R<minRecoL3dist)
154  {
155  mrtr=rtrit;
156  minRecoL3dist=R;
157  }
158  }
159  hOffL3TrackMatch->Fill(minRecoL3dist,1);
160  if (minRecoL3dist<0.02) hOffL3TrackPtRat->Fill(TObj.pt()/mrtr->pt(),1);
161  }
162 
163  hl3Pt->Fill(TObj.pt(),1);
164  trigEta.push_back(TObj.eta());
165  trigPhi.push_back(TObj.phi());
166  }
167  }
168 
169  //general distributions
170  for (reco::IsolatedPixelTrackCandidateCollection::const_iterator itr=recoIsoTracks->begin(); itr!=recoIsoTracks->end(); itr++)
171  {
172  bool match=false;
173  for (unsigned int l=0; l<trigEta.size(); l++)
174  {
175  if (deltaR(itr->eta(),itr->phi(),trigEta[l],trigPhi[l])<0.02) match=true;
176  }
177  if (match)
178  {
179  hOffEtaFP->Fill(itr->eta(),1);
180  hOffPhiFP->Fill(itr->phi(),1);
181  }
182 
183  hOffEta->Fill(itr->eta(),1);
184  hOffPhi->Fill(itr->phi(),1);
185 
186  hOffAbsEta->Fill(fabs(itr->eta()),1);
187 
188  hL1jetMatch->Fill(deltaR(itr->eta(), itr->phi(), etaTrigl1, phiTrigl1),1);
189 
190  if (fabs(itr->eta())<1.479)
191  {
192  hDeposEcalInnerEB->Fill(itr->energyIn(),1);
193  hDeposEcalOuterEB->Fill(itr->energyOut(),1);
194  }
195  else
196  {
197  hDeposEcalInnerEE->Fill(itr->energyIn(),1);
198  hDeposEcalOuterEE->Fill(itr->energyOut(),1);
199  }
200 
201  hTracksSumP->Fill(itr->sumPtPxl(),1);
202  if (itr->maxPtPxl()==-10) hTracksMaxP->Fill(0,1);
203  else hTracksMaxP->Fill(itr->maxPtPxl(),1);
204 
205  if (fabs(itr->eta())<0.5) hOffP_0005->Fill(itr->p(),1);
206  if (fabs(itr->eta())>0.5&&fabs(itr->eta())<1.0) hOffP_0510->Fill(itr->p(),1);
207  if (fabs(itr->eta())>1.0&&fabs(itr->eta())<1.5) hOffP_1015->Fill(itr->p(),1);
208  if (fabs(itr->eta())<1.5&&fabs(itr->eta())<2.0) hOffP_1520->Fill(itr->p(),1);
209 
210  hOffP->Fill(itr->p(),1);
211 
212  std::pair<int,int> TI=towerIndex(itr->eta(),itr->phi());
213  hOccupancyFull->Fill(TI.first,TI.second,1);
214  if (itr->p()>heLow_&&itr->p()<heUp_) hOccupancyHighEn->Fill(TI.first,TI.second,1);
215  }
216 
217 }
218 
220 {
223 
224  hl3Pt=dbe_->book1D("hl3Pt","pT of hlt L3 objects",1000,0,1000);
225  hl3Pt->setAxisTitle("pT(GeV)",1);
226 
227  hl3eta=dbe_->book1D("hl3eta","eta of hlt L3 objects",16,-2,2);
228  hl3eta->setAxisTitle("eta",1);
229  hl3AbsEta=dbe_->book1D("hl3AbsEta","|eta| of hlt L3 objects",8,0,2);
230  hl3AbsEta->setAxisTitle("eta",1);
231  hl3phi=dbe_->book1D("hl3phi","phi of hlt L3 objects",16,-3.2,3.2);
232  hl3phi->setAxisTitle("phi",1);
233  hOffEta=dbe_->book1D("hOffEta","eta of alcareco objects",100,-2,2);
234  hOffEta->setAxisTitle("eta",1);
235  hOffPhi=dbe_->book1D("hOffPhi","phi of alcareco objects",100,-3.2,3.2);
236  hOffPhi->setAxisTitle("phi",1);
237  hOffP=dbe_->book1D("hOffP","p of alcareco objects",1000,0,1000);
238  hOffP->setAxisTitle("E(GeV)",1);
239  hOffP_0005=dbe_->book1D("hOffP_0005","p of alcareco objects, |eta|<0.5",1000,0,1000);
240  hOffP_0005->setAxisTitle("E(GeV)",1);
241  hOffP_0510=dbe_->book1D("hOffP_0510","p of alcareco objects, 0.5<|eta|<1.0",1000,0,1000);
242  hOffP_0510->setAxisTitle("E(GeV)",1);
243  hOffP_1015=dbe_->book1D("hOffP_1015","p of alcareco objects, 1.0<|eta|<1.5",1000,0,1000);
244  hOffP_1015->setAxisTitle("E(GeV)",1);
245  hOffP_1520=dbe_->book1D("hOffP_1520","p of alcareco objects, 1.5<|eta|<2.0",1000,0,1000);
246  hOffP_1520->setAxisTitle("E(GeV)",1);
247  hOffEtaFP=dbe_->book1D("hOffEtaFP","eta of alcareco objects, FP",16,-2,2);
248  hOffEtaFP->setAxisTitle("eta",1);
249  hOffAbsEta=dbe_->book1D("hOffAbsEta","|eta| of alcareco objects",8,0,2);
250  hOffAbsEta->setAxisTitle("|eta|",1);
251  hOffPhiFP=dbe_->book1D("hOffPhiFP","phi of alcareco objects, FP",16,-3.2,3.2);
252  hOffPhiFP->setAxisTitle("phi",1);
253  hTracksSumP=dbe_->book1D("hTracksSumP","summary p of tracks in the isolation cone",100,0,20);
254  hTracksSumP->setAxisTitle("E(GeV)");
255  hTracksMaxP=dbe_->book1D("hTracksMaxP","maximum p among tracks in the isolation cone",100,0,20);
256  hTracksMaxP->setAxisTitle("E(GeV)");
257  hDeposEcalInnerEE=dbe_->book1D("hDeposEcalInnerEE","ecal energy deposition in inner cone around track, EE",20,0,20);
258  hDeposEcalInnerEE->setAxisTitle("E(GeV)");
259  hDeposEcalOuterEE=dbe_->book1D("hDeposEcalOuterEE","ecal energy deposition in outer cone around track, EE",100,0,100);
260  hDeposEcalInnerEB=dbe_->book1D("hDeposEcalInnerEB","ecal energy deposition in inner cone around track, EB",20,0,20);
261  hDeposEcalInnerEB->setAxisTitle("E(GeV)");
262  hDeposEcalOuterEB=dbe_->book1D("hDeposEcalOuterEB","ecal energy deposition in outer cone around track, EB",100,0,100);
263  hDeposEcalOuterEB->setAxisTitle("E(GeV)");
264  hOccupancyFull=dbe_->book2D("hOccupancyFull","number of tracks per tower, full energy range",48,-25,25,73,0,73);
265  hOccupancyFull->setAxisTitle("ieta",1);
266  hOccupancyFull->setAxisTitle("iphi",2);
267  hOccupancyFull->getTH2F()->SetOption("colz");
268  hOccupancyFull->getTH2F()->SetStats(kFALSE);
269  hOccupancyHighEn=dbe_->book2D("hOccupancyHighEn","number of tracks per tower, high energy tracks",48,-25,25,73,0,73);
270  hOccupancyHighEn->setAxisTitle("ieta",1);
271  hOccupancyHighEn->setAxisTitle("iphi",2);
272  hOccupancyHighEn->getTH2F()->SetOption("colz");
273  hOccupancyHighEn->getTH2F()->SetStats(kFALSE);
274  hOffL3TrackMatch=dbe_->book1D("hOffL3TrackMatch","Distance from L3 object to offline track",40,0,0.2);
275  hOffL3TrackMatch->setAxisTitle("R(eta,phi)",1);
276  hOffL3TrackPtRat=dbe_->book1D("hOffL3TrackPtRat","Ratio of pT: L3/offline",500,0,3);
277  hOffL3TrackPtRat->setAxisTitle("ratio L3/offline",1);
278 
279  hL1jetMatch=dbe_->book1D("hL1jetMatch","dR(eta,phi) from leading L1 jet to offline track",100,0,5);
280 
281 }
282 
284 
285 if(dbe_)
286  {
288  }
289 }
290 
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
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:971
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
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
virtual void endJob() override
edm::EDGetTokenT< reco::IsolatedPixelTrackCandidateCollection > arITrLabel_
virtual void beginJob() override
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< size_type > Keys
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, const uint32_t lumi=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE", const bool resetMEsAfterWriting=false)
Definition: DQMStore.cc:2562
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:6
TH2F * getTH2F(void) const
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1099
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:684
Definition: DDAxes.h:10