109 assert(cascadeinfoContainer!=
nullptr);
111 if(!vertexContainer.
isValid()){
113 return StatusCode::FAILURE;
118 if(!TrackPContainer.
isValid()){
120 return StatusCode::FAILURE;
128 if(handle.isValid()) importedMuonCollection = handle.cptr();
131 return StatusCode::FAILURE;
138 for (
auto tp : *TrackPContainer){
141 if (importedMuonCollection!=NULL) {
144 if (
m_trkSelector->decision(*tp, NULL) ) theIDTracksAfterSelection.push_back(tp);
148 const std::vector<double> initialVertexMassHypo(fullMassHypoth.begin(), fullMassHypoth.end()-1);
150 TrackBag originalVertexTracks(initialVertexMassHypo.size());
151 TrackBag secondVertexTracks(fullMassHypoth.size());
153 const std::vector< Trk::VertexID > emptyVtxList;
157 assert(fullMassHypoth.size() == secondVertexTracks.size());
159 for(
auto vertex : *vertexContainer){
161 size_t OriginaltrackNum = vertex->nTrackParticles();
162 if(initialVertexMassHypo.size() != OriginaltrackNum){
164 return StatusCode::FAILURE;
166 for(
size_t i = 0;i<OriginaltrackNum;i++)
167 originalVertexTracks[i] = secondVertexTracks[i] = (vertex->trackParticle(i));
169 for(
auto newtrack : theIDTracksAfterSelection){
171 if(std::find(originalVertexTracks.begin(), originalVertexTracks.end(), newtrack) != originalVertexTracks.end())
continue;
173 secondVertexTracks.back() = newtrack;
179 std::unique_ptr<Trk::IVKalState> state =
m_iVertexFitter->makeState(ctx);
182 auto vID1 =
m_iVertexFitter->startVertex( originalVertexTracks, initialVertexMassHypo, *state );
183 auto vID2 =
m_iVertexFitter->nextVertex( secondVertexTracks, fullMassHypoth, *state );
200 if(result ==
nullptr ){
ATH_MSG_WARNING(
"Cascade Fit failed");
continue; }
201 assert(result->vertices().size()==2);
202 cascadeinfoContainer->push_back(result);
207 ATH_MSG_DEBUG(
"cascadeinfoContainer size " << cascadeinfoContainer->size());
208 return StatusCode::SUCCESS;