195 {
196
197
198 const std::vector<Trk::VxJetCandidate*>& JFvertices = myVertexInfoJetFitter->
verticesJF();
199
200 int nVtx = 0;
201 if (!JFvertices.empty()) {
202 Trk::VxJetCandidate* vxjetcand = dynamic_cast< Trk::VxJetCandidate*>(JFvertices[0]);
203 if (!vxjetcand) {
205 return StatusCode::SUCCESS;
206 }
207
208
210 typedef std::map<Trk::VxVertexOnJetAxis*, std::vector<std::pair<Trk::VxVertexOnJetAxis*,float> > > map2vtx;
211 map2vtx inverseCompMap;
212
213 if (ClusteringTable !=nullptr) {
215 std::map<float,Trk::PairOfVxVertexOnJetAxis>::const_iterator mapiter = mapPairVtxOnJetAxis.begin();
216 for(;mapiter != mapPairVtxOnJetAxis.end(); ++mapiter){
217
218 Trk::VxVertexOnJetAxis* vtx1 = mapiter->second.first;
219 Trk::VxVertexOnJetAxis* vtx2 = mapiter->second.second;
220 float comp = mapiter->first;
221
222 std::pair<Trk::VxVertexOnJetAxis*,float>
pair1(vtx1, comp);
223 std::pair<Trk::VxVertexOnJetAxis*,float>
pair2(vtx1, comp);
224
225 inverseCompMap[vtx1].push_back(pair2);
226 inverseCompMap[vtx2].push_back(pair1);
227
228 }
229 }
230
231
233 ATH_MSG_DEBUG(
"#BTAG# VerticesOnJetAxis of VxJetCandidate size: " << Vtxonjetaxes.size());
234 std::vector<Trk::VxVertexOnJetAxis*>::const_iterator iterBegin = Vtxonjetaxes.begin();
235 std::vector<Trk::VxVertexOnJetAxis*>::const_iterator iterEnd = Vtxonjetaxes.end();
236 float comptoPV(0.);
239 nVtx = Vtxonjetaxes.size();
240 std::map<Trk::VxVertexOnJetAxis*, ElementLink< xAOD::BTagVertexContainer> > oldnewmap;
241
242 for (std::vector<Trk::VxVertexOnJetAxis*>::const_iterator it=iterBegin;
it!=iterEnd; ++
it) {
243
244 const Trk::FitQuality& fitquality = (*it)->fitQuality();
247 comptoPV = (*it)->getCompatibilityToPrimaryVtx();
248 const std::vector<Trk::VxTrackAtVertex*> & trackatVtx = (*it)->getTracksAtVertex();
249 std::vector<Trk::VxTrackAtVertex*>::const_iterator itrBegin = trackatVtx.begin();
250 std::vector<Trk::VxTrackAtVertex*>::const_iterator itrEnd = trackatVtx.end();
251 std::vector< float> tmpchi2;
252 std::vector< float> tmpndf;
253 std::vector< ElementLink< xAOD::TrackParticleContainer > > trkLinks;
254 std::vector< float> tmpRefPx;
255 std::vector< float> tmpRefPy;
256 std::vector< float> tmpRefPz;
257
258
259 for (std::vector<Trk::VxTrackAtVertex*>::const_iterator itr=itrBegin; itr!=itrEnd; ++itr) {
260
261 const Trk::FitQuality& trkquality = (*itr)->trackQuality();
264 tmpchi2.push_back(float(tpchi2));
265 tmpndf.push_back(float(tpndf));
266
267 Trk::ITrackLink* trklinks = (*itr)->trackOrParticleLink();
268 const Trk::LinkToXAODTrackParticle* trkLinkTPxAOD=dynamic_cast<const Trk::LinkToXAODTrackParticle *>(trklinks);
269 if (!trkLinkTPxAOD) {
270 ATH_MSG_WARNING(
"#BTAG# bad ITrackLink is not a LinkToXAODTrackParticle");
271 continue;
272 }
274 ElementLink<xAOD::TrackParticleContainer> tpel;
275
277 trkLinks.push_back(tpel);
278
279
282 tmpRefPx.push_back(mytrack.x());
283 tmpRefPy.push_back(mytrack.y());
284 tmpRefPz.push_back(mytrack.z());
285
286 }
287
289 bTagJFVertexContainer->
push_back(newbtagVtx);
290
300
303 JFVerticesLinks->push_back(linkBTagVertex);
304 oldnewmap.insert(std::make_pair(*it,linkBTagVertex));
305 }
306
307 if(ClusteringTable !=nullptr){
308 for (std::vector<Trk::VxVertexOnJetAxis*>::const_iterator it=iterBegin;
it!=iterEnd; ++
it) {
309 std::vector< ElementLink< xAOD::BTagVertexContainer > > JFCompLinks;
310 std::vector<float> JFCompValues;
311
312 bool foundmap=true;
313 map2vtx::iterator itmap = inverseCompMap.find(*it);
314 if(itmap == inverseCompMap.end()){
315 ATH_MSG_DEBUG(
"#BTAG# JF compatibility value in map2vtx map not found ");
316 foundmap=false;
317 }
318
319 if(foundmap){
320
321 std::vector<std::pair<Trk::VxVertexOnJetAxis*,float> > tmpvectpair = itmap->second;
322
323 for(auto & icomppair : tmpvectpair){
324 std::map<Trk::VxVertexOnJetAxis*, ElementLink< xAOD::BTagVertexContainer> >::iterator JFOlNewIter = oldnewmap.find(icomppair.first);
325
326 if(JFOlNewIter == oldnewmap.end()){
328 continue;
329 }
330
331 JFCompLinks.push_back(JFOlNewIter->second);
332 JFCompValues.push_back(icomppair.second);
333 }
334 }
335 }
336 }
337
341 ATH_MSG_DEBUG(
"#BTAGJF# size vtxPosition "<<vtxPositions.size());
342 std::vector< float > fittedPosition = std::vector<float>(nVtx+5,-1);
343 std::vector< float > fittedCov = std::vector<float>(nVtx+5,-1);
344 if (fittedPosition.size() < 5) std::abort();
345 if(vtxPositions.rows()>4 ) {
351
352 fittedCov[0] = vtxCovMatrix(0,0);
353 fittedCov[1] = vtxCovMatrix(1,1);
354 fittedCov[2] = vtxCovMatrix(2,2);
355 fittedCov[3] = vtxCovMatrix(3,3);
356 fittedCov[4] = vtxCovMatrix(4,4);
357
358 }
359
360 for(
int i=0;
i<nVtx; ++
i){
361 fittedPosition[
i+5] = vtxPositions[
i+5];
362 fittedCov[
i+5] = vtxCovMatrix(i+5,i+5);
363 }
364
365
367 std::vector<Trk::VxTrackAtVertex*>::const_iterator irBegin = trackatPV.begin();
368 std::vector<Trk::VxTrackAtVertex*>::const_iterator irEnd = trackatPV.end();
369 std::vector< float > tracksAtPVchi2;
370 std::vector< float > tracksAtPVndf;
371 std::vector< ElementLink< xAOD::TrackParticleContainer > > tracksAtPVlinks;
372
373 for (std::vector<Trk::VxTrackAtVertex*>::const_iterator it=irBegin;
it!=irEnd; ++
it) {
374 const Trk::FitQuality& trkquality = (*it)->trackQuality();
377 tracksAtPVchi2.push_back(float(tmpchi2));
378 tracksAtPVndf.push_back(float(tmpndf));
379
380
381 Trk::ITrackLink* trklinks = (*it)->trackOrParticleLink();
382 const Trk::LinkToXAODTrackParticle* trkLinkTPxAOD = dynamic_cast<const Trk::LinkToXAODTrackParticle *>(trklinks);
383 if (!trkLinkTPxAOD) {
384 ATH_MSG_WARNING(
"#BTAG# bad ITrackLink is not a LinkToXAODTrackParticle");
385 continue;
386 }
388 ElementLink<xAOD::TrackParticleContainer> tpel;
390 tracksAtPVlinks.push_back(tpel);
391 }
392 }
393 else {
395 }
396
397 return StatusCode::SUCCESS;
398 }
ElementLink()
Default constructor.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
bool toContainedElement(BaseConstReference container, ElementType element)
Set link to point to given element (slowest).
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
double chiSquared() const
returns the of the overall track fit
const Amg::Vector3D & momentum() const
Access method for the momentum.
Amg::MatrixX const & covariancePosition() const
return the covDeltaV matrix of the vertex fit
const Amg::VectorX & position() const
return position of vertex
const std::map< float, PairOfVxVertexOnJetAxis > & getCompatibilityPairOfVertices(void) const
Get back full compatibility info (only for reading).
Trk::VxClusteringTable *& getClusteringTable(void)
const std::vector< VxVertexOnJetAxis * > & getVerticesOnJetAxis(void) const
const VxVertexOnJetAxis * getPrimaryVertex(void) const
const Trk::RecVertexPositions & getRecVertexPositions() const
const std::vector< Trk::VxJetCandidate * > & verticesJF() const
const std::vector< VxTrackAtVertex * > & getTracksAtVertex(void) const
get Tracks At Vertex Method
void setTrack_chi2(const std::vector< float > &values)
set track chi2 values
void setTrack_NDF(const std::vector< float > &values)
set track NDF values
void setTrack_refPz(const std::vector< float > &values)
set track momentum z components
void setChi2(float value)
access the corresponding xAOD::BTagVertex
void setTrack_refPx(const std::vector< float > &values)
set track momentum x components
void setNDF(float value)
set fit NDF
void setTrack_links(const TPELinks_t &links)
set track ElementLinks
void setPV_compatibility(float value)
set compatibility with PV
void setTrack_refPy(const std::vector< float > &values)
set track momentum y components
double chi2(TH1 *h0, TH1 *h1)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
std::pair< HepMcParticleLink, CscMcData > pair2
std::pair< HepMcParticleLink,MuonMCData > pair1
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ jet_zv
position x,y,z of primary vertex
BTagVertex_v1 BTagVertex
Definition of the current "BTagging version".
TrackParticle_v1 TrackParticle
Reference the current persistent version: