316 const EventContext& ctx = Gaudi::Hive::currentContext();
317 const auto *caloCluster =
el->caloCluster();
323 int vtxTrkParticleIndex1 = -999;
324 int vtxTrkParticleIndex2 = -999;
325 float vtxTrkParticle1_dEta2 = -999;
326 float vtxTrkParticle1_dPhi2 = -999;
327 float vtxTrkParticle2_dEta2 = -999;
328 float vtxTrkParticle2_dPhi2 = -999;
329 float vtxRerr = -999;
330 float vtxZerr = -999;
331 float vtxMerr = -999;
332 float vtxPerr = -999;
333 float vtxChi2 = -999;
335 float vtxdEta = -999;
336 float vtxdPhi = -999;
341 if( caloCluster && caloCluster->pt() >
m_minET ){
344 int trkIndex1 = -999;
345 int trkIndex2 = -999;
346 for(
unsigned int i(0);
i <
el->nTrackParticles(); ++
i ){
347 const auto *trackParticle =
el->trackParticle(
i );
349 if ( trk1 ==
nullptr ){
350 trk1 = trackParticle;
352 }
else if( trk2 ==
nullptr ){
353 if( trk1->
charge() == trackParticle->charge() )
355 trk2 = trackParticle;
361 if( trk2 !=
nullptr){
368 std::vector<const xAOD::TrackParticle*> trksToFit;
369 trksToFit.push_back( trk1 );
370 trksToFit.push_back( trk2 );
371 vtxTrkParticleIndex1 = trkIndex1;
372 vtxTrkParticleIndex2 = trkIndex2;
374 std::unique_ptr<xAOD::Vertex> myVertex(
m_VertexFitter->fit( trksToFit, startingPoint ) );
379 vtxRerr =
m_V0Tools->rxyError( myVertex.get() );
380 vtxZ = myVertex->z();
381 vtxZerr = myVertex->covariancePosition()(2,2) > 0 ? sqrt( myVertex->covariancePosition()(2,2) ): myVertex->covariancePosition()(2,2);
383 std::vector<double>
masses = { 0.511e-3, 0.511e-3 };
388 vtxPerr =
m_V0Tools->pTError( myVertex.get() );
390 vtxChi2 = myVertex->chiSquared();
391 vtxNdof = myVertex->numberDoF();
396 vtxdEta -= caloCluster->etaBE(2);
400 vtxPhi = vertex4P.Phi();
401 vtxEta = vertex4P.Eta();
402 double momentumScaleFactor = caloCluster->e() / vtxE;
407 mom *= momentumScaleFactor;
410 float etaAtCalo, phiAtCalo;
415 vtxTrkParticle1_dEta2 = caloCluster->etaBE(2) - etaAtCalo;
420 pos = perigeeParameters2.position();
421 mom = perigeeParameters2.momentum();
422 mom *= momentumScaleFactor;
429 vtxTrkParticle2_dEta2 = caloCluster->etaBE(2) - etaAtCalo;
463 vtxRerrDec(*
el) = vtxRerr;
465 vtxZerrDec(*
el) = vtxZerr;
467 vtxMerrDec(*
el) = vtxMerr;
468 vtxPtDec(*
el) = vtxP;
469 vtxPterrDec(*
el)= vtxPerr;
471 vtxEtaDec(*
el) = vtxEta;
472 vtxPhiDec(*
el) = vtxPhi;
473 vtxTrkParticleIndex1Dec(*
el) = vtxTrkParticleIndex1;
474 vtxTrkParticleIndex2Dec(*
el) = vtxTrkParticleIndex2;
475 vtxTrkParticle1_dPhi2Dec(*
el) = vtxTrkParticle1_dPhi2;
476 vtxTrkParticle1_dEta2Dec(*
el) = vtxTrkParticle1_dEta2;
477 vtxTrkParticle2_dPhi2Dec(*
el) = vtxTrkParticle2_dPhi2;
478 vtxTrkParticle2_dEta2Dec(*
el) = vtxTrkParticle2_dEta2;
479 vtxChi2Dec(*
el) = vtxChi2;
480 vtxNdofDec(*
el) = vtxNdof;
481 vtxdEtaDec(*
el) = vtxdEta;
482 vtxdPhiDec(*
el) = vtxdPhi;