001 #include "JetTagTools/BasicTrackGradeFactory.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
014 namespace Analysis
015 {
016
017 BasicTrackGradeFactory::BasicTrackGradeFactory( const std::string& t, const std::string& n, const IInterface* p ) :
018 AlgTool( t, n, p ),
019 m_trackSumTool("Trk::TrackSummaryTool"),
020 m_trackSumToolAvailable(false)
021 {
022
023 declareProperty("useSharedHitInfo", m_useSharedHitInfo = false);
024 declareProperty("nSharedBLayer", m_nSharedBLayer = 0);
025 declareProperty("nSharedPix", m_nSharedPix = 0);
026 declareProperty("nSharedSct", m_nSharedSct = 1);
027 declareProperty("nSharedSi", m_nSharedSi = 999);
028
029 declareProperty("TrackSummaryTool",m_trackSumTool);
030
031 declareInterface<ITrackGradeFactory>( this );
032 }
033
034 BasicTrackGradeFactory::~BasicTrackGradeFactory()
035 {}
036
037 StatusCode BasicTrackGradeFactory::initialize()
038 {
039
040 MsgStream log(msgSvc(), name());
041
042 std::vector<TrackGrade> myGrades;
043
044 if (!m_useSharedHitInfo)
045 {
046 myGrades.push_back(TrackGrade(0,std::string("Good")));
047 }
048 else
049 {
050 myGrades.push_back(TrackGrade(0,std::string("Good")));
051 myGrades.push_back(TrackGrade(1,std::string("Shared")));
052 }
053
054 m_trackGradesDefinition=TrackGradesDefinition(myGrades);
055
056 m_trackSumToolAvailable=false;
057 if (!m_trackSumTool.empty()) {
058 if(m_trackSumTool.retrieve().isFailure())
059 {
060 log<<MSG::INFO<<"#BTAG# Unable to retrieve. OK if running on AOD. "<<m_trackSumTool<<endreq;
061 }
062 else
063 {
064 log<<MSG::INFO<<"#BTAG# Track summary tool retrieved"<<endreq;
065 m_trackSumToolAvailable=true;
066 }
067 }
068
069 return StatusCode::SUCCESS;
070 }
071
072 StatusCode BasicTrackGradeFactory::finalize()
073 {
074 return StatusCode::SUCCESS;
075 }
076
077 TrackGrade* BasicTrackGradeFactory::getGrade(const Trk::Track & track,const HepLorentzVector &) const
078 {
079
080
081
082 const Trk::TrackSummary* summary =track.trackSummary();
083
084 if (summary == 0)
085 {
086 if (m_trackSumToolAvailable)
087 {
088
089 Trk::Track& nonConstTrack = const_cast<Trk::Track&>(track);
090 m_trackSumTool->updateTrack(nonConstTrack);
091 summary = nonConstTrack.trackSummary();
092 }
093 else
094 {
095 MsgStream log(msgSvc(), name());
096 log << MSG::DEBUG <<
097 "#BTAG# No Track Summary Tool available. " <<
098 "This should be the case only when running on AOD" << endreq;
099 }
100 }
101
102 if (summary==0)
103 {
104 MsgStream log(msgSvc(), name());
105 log << MSG::WARNING << "#BTAG# No track summary available for the track... Contact the developer! " << endreq;
106 return 0;
107 }
108
109 return getGrade(*summary);
110
111 }
112
113 TrackGrade* BasicTrackGradeFactory::getGrade(const Trk::TrackParticleBase & myTPBase,const HepLorentzVector &) const
114 {
115
116
117 const Trk::TrackSummary* summary = myTPBase.trackSummary();
118
119 if (0==summary ) {
120 MsgStream log(msgSvc(),name());
121 log << MSG::WARNING << "#BTAG# Track preselection: cannot create a track summary (but useTrackSummary is true). Selection failed." << endreq;
122 return 0;
123 }
124
125 return getGrade(*summary);
126
127 }
128
129
130 const TrackGradesDefinition & BasicTrackGradeFactory::getTrackGradesDefinition() const
131 {
132 return m_trackGradesDefinition;
133 }
134
135
136
137
138
139
140
141 TrackGrade* BasicTrackGradeFactory::getGrade(const Trk::TrackSummary & trackSummary) const
142 {
143
144 bool sharedClass(false);
145
146 if (m_useSharedHitInfo)
147 {
148
149 int nbs = trackSummary.get(Trk::numberOfBLayerSharedHits); if(nbs < 0) nbs = 0;
150 int nps = trackSummary.get(Trk::numberOfPixelSharedHits); if(nps < 0) nps = 0;
151 int nss = trackSummary.get(Trk::numberOfSCTSharedHits); if(nss < 0) nss = 0;
152 int nsht = nps+nss ;
153
154
155
156 if(nbs>m_nSharedBLayer) {
157 sharedClass = true;
158 }
159 if(nps>m_nSharedPix) {
160 sharedClass = true;
161 }
162 if(nss>m_nSharedSct) {
163 sharedClass = true;
164 }
165 if(nsht>m_nSharedSi) {
166 sharedClass = true;
167 }
168 }
169
170 const TrackGrade * gradeToReturn(0);
171
172 if (sharedClass)
173 {
174
175 gradeToReturn=m_trackGradesDefinition.getGrade(1);
176 }
177 else
178 {
179
180 gradeToReturn=m_trackGradesDefinition.getGrade(0);
181 }
182
183 if (gradeToReturn==0)
184 {
185 MsgStream log(msgSvc(),name());
186 log << MSG::ERROR << "#BTAG# Grade not found. Internal error... " << endreq;
187 }
188
189 return new TrackGrade(*gradeToReturn);
190
191 }
192
193 }
194
| 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.
|
|