20 m_iVertexFitter(
"Trk::AdaptiveVertexFitter", this )
22 declareInterface<IVertexMergingTool> (
this );
37 return StatusCode::FAILURE;
41 return StatusCode::SUCCESS;
46 return StatusCode::SUCCESS;
49 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
60 NewContainer->setStore(auxNewContainer);
92 std::vector<bool> remerged(MyVxCont.
size(),
false);
104 std::vector<const xAOD::TrackParticle*> combinedTracks;
105 std::vector<ElementLink<xAOD::TrackParticleContainer>> tpLinks1 =
107 if (!tpLinks1.empty()) {
108 for (
const auto& tp_EL : tpLinks1) {
110 combinedTracks.push_back(trk);
113 unsigned int Nj = Ni + 1;
114 bool newmerge =
false;
122 combinedTracks.clear();
124 if (tpLinks1.empty())
126 for (
const auto& tp_EL : tpLinks1) {
128 combinedTracks.push_back(trk);
141 const std::vector<ElementLink<xAOD::TrackParticleContainer>>
143 if (tpLinks2.empty())
146 for (
const auto& tp_EL : tpLinks2) {
148 combinedTracks.push_back(trk);
169 float pt1 = sqrt(mAcc_sumPt2(*vx));
170 float pt2 = sqrt(mAcc_sumPt2(*mergeCand));
174 0.6 * pt1 / (pt1 + pt2) + 0.4 * ntrk1 / (ntrk1 + ntrk2);
176 0.6 * pt2 / (pt1 + pt2) + 0.4 * ntrk2 / (ntrk1 + ntrk2);
180 float mas1 = mAcc_mass(*vx);
181 float mas2 = mAcc_mass(*mergeCand);
182 float e1 = mAcc_energy(*vx);
183 float e2 = mAcc_energy(*mergeCand);
184 int inNtrk1 = mAcc_intrk(*vx);
185 int inNtrk2 = mAcc_intrk(*mergeCand);
188 float md1 = 0., md2 = 0., hf1 = 0., hf2 = 0.;
189 std::vector<float> trkW1, trkW2, doe1, doe2;
191 doe1 = mAcc_trkdoe(*vx);
192 doe2 = mAcc_trkdoe(*mergeCand);
193 doe2.insert(doe2.end(), doe1.begin(), doe1.end());
194 md1 = mAcc_momdir(*vx);
195 md2 = mAcc_momdir(*mergeCand);
196 hf1 = mAcc_radpat(*vx);
197 hf2 = mAcc_radpat(*mergeCand);
198 trkW1 = mAcc_trkwt(*vx);
199 trkW2 = mAcc_trkwt(*mergeCand);
200 trkW2.insert(trkW2.end(), trkW1.begin(), trkW1.end());
201 ntrks = mAcc_numtav(*vx) + mAcc_numtav(*mergeCand);
214 mAcc_trkdoe(*vx) = doe2;
215 mAcc_momdir(*vx) = wght1 * md1 + wght2 * md2;
216 mAcc_radpat(*vx) = wght1 * hf1 + wght2 * hf2;
217 mAcc_trkwt(*vx) = trkW2;
218 mAcc_numtav(*vx) = ntrks;
221 mDecor_sumPt2(*vx) = pt1 * pt1 + pt2 * pt2;
222 mDecor_mass(*vx) = wght1 * mas1 + wght2 * mas2;
223 mDecor_energy(*vx) = wght1 *
e1 + wght2 *
e2;
224 mDecor_nrobbed(*vx) = 0;
225 mDecor_intrk(*vx) = (
int)(wght1 * inNtrk1 + wght1 * inNtrk2);
237 return std::make_pair(NewContainer, auxNewContainer);
249 AmgSymMatrix(3) vErrs = v1->covariancePosition() +
v2->covariancePosition() ;
250 vErrs = vErrs.inverse().eval();
254 sigma = sqrt( vdif.dot( vErrs * vdif ) ) ;
257 sigma = vdif(0)*vdif(0)*vErrs(0,0) + vdif(1)*vdif(1)*vErrs(1,1) + 2*vdif(0)*vdif(1)*vErrs(0,1) ;
262 sigma = vdif(2)*sqrt( vErrs(2,2) );