001 #include "JetTagTools/DetailedTrackGradeFactory.h"
002 #include "GaudiKernel/MsgStream.h"
003
004 #include "JetTagInfo/TrackGrade.h"
005
006 #include "TrkTrackSummary/TrackSummary.h"
007 #include "TrkToolInterfaces/ITrackSummaryTool.h"
008 #include "JetTagInfo/TrackGradesDefinition.h"
009
010 #include "TrkTrack/Track.h"
011 #include "TrkParticleBase/TrackParticleBase.h"
012
013 #include "TrkParameters/MeasuredPerigee.h"
014
015 namespace Analysis
016 {
017
018 DetailedTrackGradeFactory::DetailedTrackGradeFactory( const std::string& t, const std::string& n, const IInterface* p ) :
019 AlgTool( t, n, p ),
020 m_trackSumTool("Trk::TrackSummaryTool"),
021 m_trackSumToolAvailable(false)
022 {
023
024 declareProperty("hitBLayerGrade", m_hitBLayerGrade = false);
025
026 declareProperty("useSharedHitInfo", m_useSharedHitInfo = false);
027 declareProperty("nSharedBLayer", m_nSharedBLayer = 0);
028 declareProperty("nSharedPix", m_nSharedPix = 0);
029 declareProperty("nSharedSct", m_nSharedSct = 1);
030 declareProperty("nSharedSi", m_nSharedSi = 999);
031
032 declareProperty("ptFracGrade", m_ptFracGrade = false);
033 declareProperty("ptFracCut", m_ptFracCut = 0.04);
034
035 declareProperty("ptEtaGrades", m_ptEtaGrades = false);
036 declareProperty("ptLowerCuts", m_ptLowerCuts);
037 declareProperty("etaLowerCuts", m_etaLowerCuts);
038
039 m_ptLowerCuts.push_back(1000.);
040 m_ptLowerCuts.push_back(4000.);
041 m_ptLowerCuts.push_back(10000.);
042
043 m_etaLowerCuts.push_back(0.);
044 m_etaLowerCuts.push_back(0.5);
045 m_etaLowerCuts.push_back(1.5);
046
047 declareProperty("TrackSummaryTool",m_trackSumTool);
048
049 declareInterface<ITrackGradeFactory>( this );
050 }
051
052 DetailedTrackGradeFactory::~DetailedTrackGradeFactory()
053 {}
054
055 StatusCode DetailedTrackGradeFactory::initialize()
056 {
057
058 MsgStream log(msgSvc(), name());
059
060 std::vector<TrackGrade> myGrades;
061 int nbGrades=0;
062
063 if (m_hitBLayerGrade)
064 {
065 myGrades.push_back(TrackGrade(nbGrades,std::string("0HitBLayer")));
066 nbGrades++;
067 }
068 if (m_useSharedHitInfo)
069 {
070 myGrades.push_back(TrackGrade(nbGrades,std::string("Shared")));
071 nbGrades++;
072 }
073 if (m_ptFracGrade)
074 {
075 myGrades.push_back(TrackGrade(nbGrades,std::string("PtFrac")));
076 nbGrades++;
077 }
078
079 int ptGradeNumber=m_ptLowerCuts.size();
080 int etaGradeNumber=m_etaLowerCuts.size();
081
082 if (m_ptEtaGrades)
083 {
084
085 if (ptGradeNumber==0)
086 {
087 log << MSG::ERROR << "Vector with pt categories has 0 size!!! You need at least 1 lower cut..." << endreq;
088 }
089
090 if (etaGradeNumber==0)
091 {
092 log << MSG::ERROR << "Vector with eta categories has 0 size!!! You need at least 1 lower cut..." << endreq;
093 }
094
095
096 for (int i=0;i<ptGradeNumber;i++){
097 for (int j=0;j<etaGradeNumber;j++){
098
099 std::string nameGrade("Good");
100
101 char namePt[30];
102 if (i<ptGradeNumber-1)
103 {
104 sprintf(namePt,"Pt%.1f-%.1f",m_ptLowerCuts[i]*1e-3,m_ptLowerCuts[i+1]*1e-3);
105 }
106 else
107 {
108 sprintf(namePt,"Pt%.1f-inf",m_ptLowerCuts[i]*1e-3);
109 }
110
111
112 char nameEta[30];
113 if (j<etaGradeNumber-1)
114 {
115 sprintf(nameEta,"Eta%.1f-%.1f",m_etaLowerCuts[j],m_etaLowerCuts[j+1]);
116 }
117 else
118 {
119 sprintf(nameEta,"Eta%.1f-2.5",m_etaLowerCuts[j]);
120 }
121
122 nameGrade+=namePt;
123 nameGrade+=nameEta;
124
125 log << MSG::DEBUG << "Adding cat. pt " << i << " eta " << j << " name of Grade: " << nameGrade << endreq;
126
127 myGrades.push_back(TrackGrade(nbGrades,nameGrade));
128 nbGrades++;
129 }
130 }
131 }
132 else
133 {
134 myGrades.push_back(TrackGrade(nbGrades,std::string("Good")));
135 }
136
137 m_trackGradesDefinition=TrackGradesDefinition(myGrades);
138
139
140 m_trackSumToolAvailable=false;
141 if (!m_trackSumTool.empty()) {
142 if(m_trackSumTool.retrieve().isFailure())
143 {
144 log<<MSG::INFO<<" Unable to retrieve. OK if running on AOD. "<<m_trackSumTool<<endreq;
145 }
146 else
147 {
148 log<<MSG::INFO<<"Track summary tool retrieved"<<endreq;
149 m_trackSumToolAvailable=true;
150 }
151 }
152
153 return StatusCode::SUCCESS;
154 }
155
156 StatusCode DetailedTrackGradeFactory::finalize()
157 {
158 return StatusCode::SUCCESS;
159 }
160
161 TrackGrade* DetailedTrackGradeFactory::getGrade(const Trk::Track & track,const HepLorentzVector & jetMomentum) const
162 {
163
164 const Trk::MeasuredPerigee* perigee=
165 dynamic_cast<const Trk::MeasuredPerigee*>(track.perigeeParameters());
166
167 if (perigee==0)
168 {
169 MsgStream log(msgSvc(),name());
170 log << MSG::WARNING << " Perigee parameters of track not defined. Not foreseen by DetailedTrackGradeFactory ... " << endreq;
171 return 0;
172 }
173
174
175 const Trk::TrackSummary* summary =track.trackSummary();
176
177 if (summary == 0)
178 {
179 if (m_trackSumToolAvailable)
180 {
181
182 Trk::Track& nonConstTrack = const_cast<Trk::Track&>(track);
183 m_trackSumTool->updateTrack(nonConstTrack);
184 summary = nonConstTrack.trackSummary();
185 }
186 else
187 {
188 MsgStream log(msgSvc(), name());
189 log << MSG::DEBUG <<
190 " No Track Summary Tool available. " <<
191 "This should be the case only when running on AOD" << endreq;
192 }
193 }
194
195 if (summary==0)
196 {
197 MsgStream log(msgSvc(), name());
198 log << MSG::WARNING << " No track summary available for the track... Contact the developer! " << endreq;
199 return 0;
200 }
201
202 return getGrade(*perigee,*summary,jetMomentum);
203
204 }
205
206 TrackGrade* DetailedTrackGradeFactory::getGrade(const Trk::TrackParticleBase & myTPBase,const HepLorentzVector & jetMomentum) const
207 {
208
209 const Trk::ParametersBase* definingParameters=&(myTPBase.definingParameters());
210
211 const Trk::MeasuredPerigee* perigee= dynamic_cast<const Trk::MeasuredPerigee*>(definingParameters);
212
213 if (perigee==0)
214 {
215 MsgStream log(msgSvc(),name());
216 log << MSG::WARNING << " Defining parameter of TrackParticleBase is not a perigee. Not foreseen by DetailedTrackGradeFactory ... " << endreq;
217 return 0;
218 }
219
220
221
222 const Trk::TrackSummary* summary = myTPBase.trackSummary();
223
224 if (0==summary ) {
225 MsgStream log(msgSvc(),name());
226 log << MSG::WARNING << "Track preselection: cannot create a track summary (but useTrackSummary is true). Selection failed." << endreq;
227 return 0;
228 }
229
230 return getGrade(*perigee,*summary,jetMomentum);
231
232 }
233
234
235 const TrackGradesDefinition & DetailedTrackGradeFactory::getTrackGradesDefinition() const
236 {
237 return m_trackGradesDefinition;
238 }
239
240
241
242
243
244
245
246
247 TrackGrade* DetailedTrackGradeFactory::getGrade(const Trk::MeasuredPerigee & measuredPerigee,
248 const Trk::TrackSummary & trackSummary,
249 const HepLorentzVector & jetMomentum) const
250 {
251
252
253 bool nohitBLayer(false);
254 bool sharedClass(false);
255 bool ptFrac(false);
256
257 if (m_hitBLayerGrade)
258 {
259
260 int nb = trackSummary.get(Trk::numberOfBLayerHits); if(nb<0) nb=0;
261 if (nb==0) {
262 nohitBLayer = true;
263 }
264 }
265
266 if (m_useSharedHitInfo)
267 {
268
269
270 int nbs = trackSummary.get(Trk::numberOfBLayerSharedHits); if(nbs < 0) nbs = 0;
271 int nps = trackSummary.get(Trk::numberOfPixelSharedHits); if(nps < 0) nps = 0;
272 int nss = trackSummary.get(Trk::numberOfSCTSharedHits); if(nss < 0) nss = 0;
273 int nsht = nps+nss ;
274 if(nbs>m_nSharedBLayer) {
275 sharedClass = true;
276 }
277 if(nps>m_nSharedPix) {
278 sharedClass = true;
279 }
280 if(nss>m_nSharedSct) {
281 sharedClass = true;
282 }
283 if(nsht>m_nSharedSi) {
284 sharedClass = true;
285 }
286
287 }
288
289 const Hep3Vector & momTrack=measuredPerigee.momentum();
290
291 double ptTrack = momTrack.perp();
292 double etaTrack = fabs(momTrack.pseudoRapidity());
293
294
295 if (m_ptFracGrade)
296 {
297
298 double ptJet = jetMomentum.perp();
299 if ((ptTrack/ptJet) < m_ptFracCut) ptFrac = true;
300 }
301
302
303 std::string ptEtaCategoryName;
304
305 if (m_ptEtaGrades)
306 {
307
308 int ptGradeNumber=m_ptLowerCuts.size();
309 int etaGradeNumber=m_etaLowerCuts.size();
310
311
312 int ptBin(-1);
313
314 for (int i=0;i<ptGradeNumber;i++){
315
316 if (i<ptGradeNumber-1)
317 {
318 if (ptTrack>m_ptLowerCuts[i]&& ptTrack<=m_ptLowerCuts[i+1])
319 {
320 ptBin=i;
321 break;
322 }
323 }
324 else
325 {
326 if (ptTrack>m_ptLowerCuts[i])
327 {
328 ptBin=i;
329 break;
330 }
331 }
332 }
333
334
335 int etaBin(-1);
336
337 for (int i=0;i<etaGradeNumber;i++){
338
339 if (i<etaGradeNumber-1)
340 {
341 if (etaTrack>m_etaLowerCuts[i]&& etaTrack<=m_etaLowerCuts[i+1])
342 {
343 etaBin=i;
344 break;
345 }
346 }
347 else
348 {
349 if (etaTrack>m_etaLowerCuts[i])
350 {
351 etaBin=i;
352 break;
353 }
354 }
355 }
356
357
358
359 std::string nameGrade("Good");
360
361 char namePt[30];
362 if (ptBin<ptGradeNumber-1)
363 {
364 sprintf(namePt,"Pt%.1f-%.1f",m_ptLowerCuts[ptBin]*1e-3,m_ptLowerCuts[ptBin+1]*1e-3);
365 }
366 else
367 {
368 sprintf(namePt,"Pt%.1f-inf",m_ptLowerCuts[ptBin]*1e-3);
369 }
370
371 char nameEta[30];
372 if (etaBin<etaGradeNumber-1)
373 {
374 sprintf(nameEta,"Eta%.1f-%.1f",m_etaLowerCuts[etaBin],m_etaLowerCuts[etaBin+1]);
375 }
376 else
377 {
378 sprintf(nameEta,"Eta%.1f-2.5",m_etaLowerCuts[etaBin]);
379 }
380
381 nameGrade+=namePt;
382 nameGrade+=nameEta;
383
384 ptEtaCategoryName=nameGrade;
385
386 }
387
388
389 const TrackGrade * gradeToReturn(0);
390
391 if (nohitBLayer)
392 {
393 std::cout << " No Hit BLayer " << std::endl;
394 gradeToReturn=m_trackGradesDefinition.getGrade(std::string("0HitBLayer"));
395 }
396 else if (sharedClass)
397 {
398 std::cout << " Shared " << std::endl;
399 gradeToReturn=m_trackGradesDefinition.getGrade(std::string("Shared"));
400
401 }
402 else if (ptFrac)
403 {
404 std::cout << " pTFrac" << std::endl;
405 gradeToReturn=m_trackGradesDefinition.getGrade(std::string("PtFrac"));
406 }
407 else
408 {
409 std::cout << " etapt" << std::endl;
410 if (m_ptEtaGrades)
411 {
412 std::cout << " category " << ptEtaCategoryName << std::endl;
413 gradeToReturn=m_trackGradesDefinition.getGrade(ptEtaCategoryName);
414 }
415 else
416 {
417 gradeToReturn=m_trackGradesDefinition.getGrade(std::string("Good"));
418 }
419 }
420
421 if (gradeToReturn==0)
422 {
423 MsgStream log(msgSvc(),name());
424 log << MSG::ERROR << "Grade not found. Internal error... " << endreq;
425 }
426
427 return new TrackGrade(*gradeToReturn);
428
429 }
430
431 }
432
| Due to the LXR bug, the updates fail sometimes to remove references to deleted files. The Saturday's full rebuilds fix these problems |
|
This page was automatically generated by the
LXR engine.
|
|