17 using namespace SegmentFit;
45 return TechIdx_t::TechnologyUnknown;
59 return StatusCode::SUCCESS;
66 ATH_CHECK(outContainer.record(std::make_unique<xAOD::MuonSegmentContainer>(),
67 std::make_unique<xAOD::MuonSegmentAuxContainer>()));
70 ATH_CHECK(prdCombContainer.record(std::make_unique<xAOD::CombinedMuonStripContainer>(),
71 std::make_unique<xAOD::CombinedMuonStripAuxContainer>()));
77 static std::atomic<unsigned> sTgcWarnings{0};
78 bool printWarning{sTgcWarnings < 100};
80 std::vector<std::tuple<const xAOD::UncalibratedMeasurement*, State>> combineMap{};
81 combineMap.reserve(10);
88 auto decorateLinks = [
this, &dec_prdLinks, &prdCombContainer, &printWarning,
91 std::vector<char>& linkStates = dec_prdStates(outSegment);
92 links.reserve(2*inSegment.measurements().size());
93 linkStates.reserve(2*inSegment.measurements().size());
101 linkStates.emplace_back(Acts::toUnderlying(
st));
110 auto cmbMeas = prdCombContainer->push_back(std::make_unique<xAOD::CombinedMuonStrip>());
112 cmbMeas->setPrimaryStrip(
m1);
113 cmbMeas->setSecondaryStrip(
m2);
122 appendLink(cmbMeas,
st);
124 for (
const auto& meas : inSegment.measurements()) {
129 switch (sp->
type()) {
132 case MdtDriftCircleType:
133 case MMClusterType: {
151 }
case sTgcStripType:{
157 ATH_MSG_WARNING(__FILE__<<
":"<<__LINE__<<
" Please implement a stgc combination schema");
158 printWarning =
false;
165 for (std::size_t cmbIdx = 0; cmbIdx < combineMap.size(); ++cmbIdx){
167 const State s1{std::get<1>(combineMap[cmbIdx])};
170 if (cmbIdx +1 < combineMap.size()){
172 const State s2{std::get<1>(combineMap[cmbIdx+1])};
174 <<
" is a good candidate");
175 if (
m1->type() ==
m2->type() &&
176 m1->identifierHash() ==
m2->identifierHash() &&
201 unsigned recoSegIdx{0};
202 outContainer->reserve(outContainer->size() + segmentContainer->size());
203 for (
const Segment* inSegment : *segmentContainer) {
206 xAOD::MuonSegment* convertedSeg = outContainer->push_back(std::make_unique<xAOD::MuonSegment>());
207 dec_parentLink(*convertedSeg) =
SegLink_t{segmentContainer, recoSegIdx};
218 convertedSeg->
setFitQuality(inSegment->chi2(), inSegment->nDoF());
219 convertedSeg->
setNHits(inSegment->summary().nPrecHits, inSegment->summary().nPhiHits,
220 inSegment->summary().nEtaTrigHits);
223 convertedSeg->
setT0Error(inSegment->segementT0(),
224 Amg::error(inSegment->covariance(), Acts::toUnderlying(
t0)));
226 SegPars_t& localPars{dec_locPars(*convertedSeg)};
231 localPars[Acts::toUnderlying(x0)] = locPos.x();
232 localPars[Acts::toUnderlying(y0)] = locPos.y();
233 localPars[Acts::toUnderlying(
theta)] =
locDir.theta();
234 localPars[Acts::toUnderlying(
phi)] =
locDir.phi();
235 localPars[Acts::toUnderlying(
t0)] = inSegment->segementT0();
236 decorateLinks(*inSegment, *convertedSeg);
241 sTgcWarnings = sTgcWarnings + 1;
243 return StatusCode::SUCCESS;