Report problems to ATLAS LXR Team (with time and IP address indicated)

The LXR Cross Referencer

source navigation ]
diff markup ]
identifier search ]
general search ]
 
 
Architecture: linux ]
Version: head ] [ nightly ] [ GaudiDev ]
  Links to LXR source navigation pages for stable releases [ 12.*.* ]   [ 13.*.* ]   [ 14.*.* ]   [ 15.*.* ] 

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   // first ask track for summary
175   const Trk::TrackSummary* summary =track.trackSummary();
176   
177   if (summary == 0)
178   {
179     if (m_trackSumToolAvailable) 
180     {
181       // ugly but one needs to cast the const away because the method needs to update the track (the tool is a friend of track)
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   //number of hits, silicon hits, b-layer
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 //TrackGrade* BasicTrackGradeFactory::getGrade(const Trk::MeasuredPerigee &,
243 //                                             const Trk::TrackSummary & trackSummary,
244 //                                             const Trk::FitQuality &,
245 //                                             const HepLorentzVector & jetMomentum) const
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     //check if no hit in BLayer
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     //check if shared
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   //check if ptFrac < cut value  
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     //check pt
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     //now choose the right grade
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     //gradeToReturn=m_trackGradesDefinition.getGrade(1);
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 

source navigation ] diff markup ] identifier search ] general search ]

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. Valid HTML 4.01!