246 {
247
248
249 const std::vector<Trk::VxJetCandidate*>& JFvertices = myVertexInfoJetFitter->
verticesJF();
250
251 int nVtx = 0;
252 if (!JFvertices.empty()) {
253 Trk::VxJetCandidate* vxjetcand = dynamic_cast< Trk::VxJetCandidate*>(JFvertices[0]);
254 if (!vxjetcand) {
256 return StatusCode::SUCCESS;
257 }
258
259
261 typedef std::map<Trk::VxVertexOnJetAxis*, std::vector<std::pair<Trk::VxVertexOnJetAxis*,float> > > map2vtx;
262 map2vtx inverseCompMap;
263
264 if (ClusteringTable !=nullptr) {
266 std::map<float,Trk::PairOfVxVertexOnJetAxis>::const_iterator mapiter = mapPairVtxOnJetAxis.begin();
267 for(;mapiter != mapPairVtxOnJetAxis.end(); ++mapiter){
268
269 Trk::VxVertexOnJetAxis* vtx1 = mapiter->second.first;
270 Trk::VxVertexOnJetAxis* vtx2 = mapiter->second.second;
271 float comp = mapiter->first;
272
273 std::pair<Trk::VxVertexOnJetAxis*,float>
pair1(vtx1, comp);
274 std::pair<Trk::VxVertexOnJetAxis*,float>
pair2(vtx1, comp);
275
276 inverseCompMap[vtx1].push_back(pair2);
277 inverseCompMap[vtx2].push_back(pair1);
278
279 }
280 }
281
282
284 ATH_MSG_DEBUG(
"#BTAG# VerticesOnJetAxis of VxJetCandidate size: " << Vtxonjetaxes.size());
285 std::vector<Trk::VxVertexOnJetAxis*>::const_iterator iterBegin = Vtxonjetaxes.begin();
286 std::vector<Trk::VxVertexOnJetAxis*>::const_iterator iterEnd = Vtxonjetaxes.end();
287 float comptoPV(0.);
290 nVtx = Vtxonjetaxes.size();
291 std::map<Trk::VxVertexOnJetAxis*, ElementLink< xAOD::BTagVertexContainer> > oldnewmap;
292
293 for (std::vector<Trk::VxVertexOnJetAxis*>::const_iterator it=iterBegin;
it!=iterEnd; ++
it) {
294
295 const Trk::FitQuality& fitquality = (*it)->fitQuality();
298 comptoPV = (*it)->getCompatibilityToPrimaryVtx();
299 const std::vector<Trk::VxTrackAtVertex*> & trackatVtx = (*it)->getTracksAtVertex();
300 std::vector<Trk::VxTrackAtVertex*>::const_iterator itrBegin = trackatVtx.begin();
301 std::vector<Trk::VxTrackAtVertex*>::const_iterator itrEnd = trackatVtx.end();
302 std::vector< float> tmpchi2;
303 std::vector< float> tmpndf;
304 std::vector< ElementLink< xAOD::TrackParticleContainer > > trkLinks;
305 std::vector< float> tmpRefPx;
306 std::vector< float> tmpRefPy;
307 std::vector< float> tmpRefPz;
308
309
310 for (std::vector<Trk::VxTrackAtVertex*>::const_iterator itr=itrBegin; itr!=itrEnd; ++itr) {
311
312 const Trk::FitQuality& trkquality = (*itr)->trackQuality();
315 tmpchi2.push_back(float(tpchi2));
316 tmpndf.push_back(float(tpndf));
317
318 Trk::ITrackLink* trklinks = (*itr)->trackOrParticleLink();
319 const Trk::LinkToXAODTrackParticle* trkLinkTPxAOD=dynamic_cast<const Trk::LinkToXAODTrackParticle *>(trklinks);
320 if (!trkLinkTPxAOD) {
321 ATH_MSG_WARNING(
"#BTAG# bad ITrackLink is not a LinkToXAODTrackParticle");
322 continue;
323 }
325 ElementLink<xAOD::TrackParticleContainer> tpel;
326
328 trkLinks.push_back(tpel);
329
330
333 tmpRefPx.push_back(mytrack.x());
334 tmpRefPy.push_back(mytrack.y());
335 tmpRefPz.push_back(mytrack.z());
336
337 }
338
340 bTagJFVertexContainer->
push_back(newbtagVtx);
341
351
352 ElementLink< xAOD::BTagVertexContainer> linkBTagVertex;
354 JFVerticesLinks->push_back(linkBTagVertex);
355 oldnewmap.insert(std::make_pair(*it,linkBTagVertex));
356 }
357
358 if(ClusteringTable !=nullptr){
359 for (std::vector<Trk::VxVertexOnJetAxis*>::const_iterator it=iterBegin;
it!=iterEnd; ++
it) {
360 std::vector< ElementLink< xAOD::BTagVertexContainer > > JFCompLinks;
361 std::vector<float> JFCompValues;
362
363 bool foundmap=true;
364 map2vtx::iterator itmap = inverseCompMap.find(*it);
365 if(itmap == inverseCompMap.end()){
366 ATH_MSG_DEBUG(
"#BTAG# JF compatibility value in map2vtx map not found ");
367 foundmap=false;
368 }
369
370 if(foundmap){
371
372 std::vector<std::pair<Trk::VxVertexOnJetAxis*,float> > tmpvectpair = itmap->second;
373
374 for(auto & icomppair : tmpvectpair){
375 std::map<Trk::VxVertexOnJetAxis*, ElementLink< xAOD::BTagVertexContainer> >::iterator JFOlNewIter = oldnewmap.find(icomppair.first);
376
377 if(JFOlNewIter == oldnewmap.end()){
379 continue;
380 }
381
382 JFCompLinks.push_back(JFOlNewIter->second);
383 JFCompValues.push_back(icomppair.second);
384 }
385 }
386 }
387 }
388
392 ATH_MSG_DEBUG(
"#BTAGJF# size vtxPosition "<<vtxPositions.size());
393 std::vector< float > fittedPosition = std::vector<float>(nVtx+5,-1);
394 std::vector< float > fittedCov = std::vector<float>(nVtx+5,-1);
395 if (fittedPosition.size() < 5) std::abort();
396 if(vtxPositions.rows()>4 ) {
402
403 fittedCov[0] = vtxCovMatrix(0,0);
404 fittedCov[1] = vtxCovMatrix(1,1);
405 fittedCov[2] = vtxCovMatrix(2,2);
406 fittedCov[3] = vtxCovMatrix(3,3);
407 fittedCov[4] = vtxCovMatrix(4,4);
408
409 }
410
411 for(
int i=0;
i<nVtx; ++
i){
412 fittedPosition[
i+5] = vtxPositions[
i+5];
413 fittedCov[
i+5] = vtxCovMatrix(i+5,i+5);
414 }
415
416
418 std::vector<Trk::VxTrackAtVertex*>::const_iterator irBegin = trackatPV.begin();
419 std::vector<Trk::VxTrackAtVertex*>::const_iterator irEnd = trackatPV.end();
420 std::vector< float > tracksAtPVchi2;
421 std::vector< float > tracksAtPVndf;
422 std::vector< ElementLink< xAOD::TrackParticleContainer > > tracksAtPVlinks;
423
424 for (std::vector<Trk::VxTrackAtVertex*>::const_iterator it=irBegin;
it!=irEnd; ++
it) {
425 const Trk::FitQuality& trkquality = (*it)->trackQuality();
428 tracksAtPVchi2.push_back(float(tmpchi2));
429 tracksAtPVndf.push_back(float(tmpndf));
430
431
432 Trk::ITrackLink* trklinks = (*it)->trackOrParticleLink();
433 const Trk::LinkToXAODTrackParticle* trkLinkTPxAOD = dynamic_cast<const Trk::LinkToXAODTrackParticle *>(trklinks);
434 if (!trkLinkTPxAOD) {
435 ATH_MSG_WARNING(
"#BTAG# bad ITrackLink is not a LinkToXAODTrackParticle");
436 continue;
437 }
439 ElementLink<xAOD::TrackParticleContainer> tpel;
441 tracksAtPVlinks.push_back(tpel);
442 }
443 }
444 else {
446 }
447
448 return StatusCode::SUCCESS;
449 }
#define ATH_MSG_WARNING(x)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
bool toContainedElement(BaseConstReference data, ElementType element, IProxyDict *sg=0)
Set from element pointer and a reference to the container (storable)
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: