31 return StatusCode::SUCCESS;
36 auto translatedSegments = std::make_unique<Trk::SegmentCollection>();
45 ATH_MSG_VERBOSE(
"Translated in total "<<translatedSegments->size()<<
" segments.");
48 ATH_CHECK(writeHandle.record(std::move(translatedSegments)));
49 return StatusCode::SUCCESS;
51 template <
class PrdType>
55 ATH_MSG_ERROR(
"Cannot fetch a prep data object as the container given for "<<
64 for (
const PrdType* prd : *coll) {
65 if (prd->identify() == prdId){
73 template <
class PrdType>
77 std::vector<std::unique_ptr<Trk::RIO_OnTrack>>& convMeasVec)
const {
82 if (!uncalib)
continue;
88 return StatusCode::FAILURE;
90 const Trk::Surface& surf{prd->detectorElement()->surface(prd->identify())};
93 std::unique_ptr<Trk::RIO_OnTrack> rot{};
94 if constexpr(std::is_same_v<PrdType, Muon::MdtPrepData>) {
95 rot = std::unique_ptr<Trk::RIO_OnTrack>{
m_mdtCreator->createRIO_OnTrack(*prd,
99 rot = std::unique_ptr<Trk::RIO_OnTrack>{
m_clusterCreator->createRIO_OnTrack(*prd,
105 return StatusCode::FAILURE;
108 convMeasVec.push_back(std::move(rot));
112 return StatusCode::FAILURE;
114 return StatusCode::SUCCESS;
136 std::vector<std::unique_ptr<Trk::RIO_OnTrack>> rots{};
137 unsigned int nPrec{0};
143 switch (spacePoint->type()) {
175 auto makeCompetingROT = [
this, &measurements](
RotVec& rots) {
179 std::list<const Trk::PrepRawData*> prds{};
180 for (
const std::unique_ptr<Trk::RIO_OnTrack>& rot : rots) {
187 RotVec etaPrds{}, phiPrds{};
188 for (std::unique_ptr<Trk::RIO_OnTrack>& rot : rots) {
191 std::vector<std::unique_ptr<Trk::RIO_OnTrack>>& pushMe{
m_idHelperSvc->measuresPhi(rot->identify())? phiPrds : etaPrds};
192 if (pushMe.size() && pushMe.back()->detectorElement() != rot->detectorElement()){
193 makeCompetingROT(pushMe);
195 pushMe.push_back(std::move(rot));
199 makeCompetingROT(etaPrds);
200 makeCompetingROT(phiPrds);
201 measurements.push_back(std::move(rot));
204 makeCompetingROT(etaPrds);
205 makeCompetingROT(phiPrds);
208 <<
". Do not convert segment due to potential puff.");
209 return StatusCode::SUCCESS;
211 ATH_MSG_DEBUG(
"Fetched in total "<<measurements.size()<<
" measurements. "<<std::endl<<
212 m_printer->print(measurements.stdcont()));
217 segSurf->globalToLocalDirection(
segment.direction(), segDir);
218 std::vector<Identifier>
holes{};
220 static_cast<double>(
segment.nDoF()),
232 auto legacySeg = std::make_unique<Muon::MuonSegment>(
Amg::Vector2D::Zero(), std::move(segDir),
234 std::move(measurements),
fitQuality.release());
237 <<
Amg::toString(legacySeg->globalDirection())<<std::endl<<
m_printer->print(legacySeg->containedMeasurements()));
238 outContainer.
push_back(std::move(legacySeg));
239 return StatusCode::SUCCESS;