31 return StatusCode::SUCCESS;
36 auto translatedSegments = std::make_unique<Trk::SegmentCollection>();
40 for (
const Segment* segment : *translateMe) {
45 ATH_MSG_VERBOSE(
"Translated in total "<<translatedSegments->size()<<
" segments.");
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,
102 if constexpr (std::is_same_v<PrdType, Muon::sTgcPrepData>) {
105 const Amg::Vector3D locPos = prd->detectorElement()->transform(prd->identify()).inverse() *
107 if (prd->detectorElement()->isEtaZero(prd->identify(), locPos.block<2,1>(0,0))){
122 return StatusCode::FAILURE;
125 convMeasVec.push_back(std::move(rot));
129 return StatusCode::FAILURE;
131 return StatusCode::SUCCESS;
153 std::vector<std::unique_ptr<Trk::RIO_OnTrack>> rots{};
154 unsigned int nPrec{0};
156 if (spacePoint->fitState() != CalibratedSpacePoint::State::Valid) {
160 switch (spacePoint->type()) {
192 auto makeCompetingROT = [
this, &measurements](
RotVec& rots) {
196 std::list<const Trk::PrepRawData*> prds{};
197 for (
const std::unique_ptr<Trk::RIO_OnTrack>& rot : rots) {
198 prds.push_back(rot->prepRawData());
204 RotVec etaPrds{}, phiPrds{};
205 for (std::unique_ptr<Trk::RIO_OnTrack>& rot : rots) {
208 std::vector<std::unique_ptr<Trk::RIO_OnTrack>>& pushMe{
m_idHelperSvc->measuresPhi(rot->identify())? phiPrds : etaPrds};
209 if (pushMe.size() && pushMe.back()->detectorElement() != rot->detectorElement()){
210 makeCompetingROT(pushMe);
212 pushMe.push_back(std::move(rot));
216 makeCompetingROT(etaPrds);
217 makeCompetingROT(phiPrds);
221 makeCompetingROT(etaPrds);
222 makeCompetingROT(phiPrds);
225 <<
". Do not convert segment due to potential puff.");
226 return StatusCode::SUCCESS;
228 ATH_MSG_DEBUG(
"Fetched in total "<<measurements.
size()<<
" measurements. "<<std::endl<<
234 segSurf->globalToLocalDirection(segment.
direction(), segDir);
235 std::vector<Identifier> holes{};
236 auto fitQuality = std::make_unique<Muon::MuonSegmentQuality>(segment.
chi2(),
237 static_cast<double>(segment.
nDoF()),
241 covMatrix.setIdentity();
249 auto legacySeg = std::make_unique<Muon::MuonSegment>(Amg::Vector2D::Zero(), std::move(segDir),
250 std::move(covMatrix), segSurf.release(),
251 std::move(measurements), fitQuality.release());
254 <<
Amg::toString(legacySeg->globalDirection())<<std::endl<<
m_printer->print(legacySeg->containedMeasurements()));
255 outContainer.
push_back(std::move(legacySeg));
256 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const PtrVector & stdcont() const
Return the underlying std::vector of the container.
size_type size() const noexcept
Returns the number of elements in the collection.
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
const Amg::Transform3D & localToGlobalTrans(const ActsTrk::GeometryContext &gctx) const
Returns the local -> global tarnsformation from the sector.
The calibrated Space point is created during the calibration process.
const SpacePoint * spacePoint() const
The pointer to the space point out of which this space point has been built.
Placeholder for what will later be the muon segment EDM representation.
unsigned int nDoF() const
Returns the number of degrees of freedom.
const SegmentFit::Covariance & covariance() const
Returns the uncertainties of the defining parameters.
const MuonGMR4::SpectrometerSector * msSector() const
Returns the associated MS sector.
std::unique_ptr< CalibratedSpacePoint > MeasType
Calibrated space point type.
const MeasVec & measurements() const
Returns the associated measurements.
double chi2() const
Returns the chi2 of the segment fit.
const Amg::Vector3D & position() const
Returns the global segment position.
const Amg::Vector3D & direction() const
Returns the global segment direction.
const xAOD::UncalibratedMeasurement * secondaryMeasurement() const
const Identifier & identify() const
: Identifier of the primary measurement
const xAOD::UncalibratedMeasurement * primaryMeasurement() const
SG::WriteHandleKey< Trk::SegmentCollection > m_writeKey
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_clusterCreator
StatusCode convertMeasurement(const MuonR4::Segment &segment, const CalibratedSpacePoint &spacePoint, const Muon::MuonPrepDataContainerT< PrdType > *prdContainer, RotVec &convMeasVec) const
StatusCode execute(const EventContext &ctx) const override final
StatusCode convert(const EventContext &ctx, const MuonR4::Segment &segment, Trk::SegmentCollection &outContainer) const
Convert the R4 segment and fill the converted segment into the SegmentCollection.
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_keyRpc
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > m_mdtCreator
std::vector< std::unique_ptr< Trk::RIO_OnTrack > > RotVec
StatusCode initialize() override final
const PrdType * fetchPrd(const Identifier &prdId, const Muon::MuonPrepDataContainerT< PrdType > *prdContainer) const
SG::ReadHandleKeyArray< SegmentContainer > m_readKeys
SG::ReadHandleKey< ActsTrk::GeometryContext > m_geoCtxKey
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_keyMdt
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_keyTgc
Prep data container keys.
ToolHandle< Muon::IMuonCompetingClustersOnTrackCreator > m_compClusterCreator
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_keyMM
SG::ReadHandleKey< Muon::sTgcPrepDataContainer > m_keysTgc
Template to hold collections of MuonPrepRawData objects.
Property holding a SG store/key/clid from which a ReadHandle is made.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
represents the three-dimensional global direction with respect to a planar surface frame.
virtual bool type(PrepRawDataType type) const
Interface method checking the type.
Abstract Base Class for tracking surfaces.
Intersection straightLineIntersection(const T &pars, bool forceDir=false, const Trk::BoundaryCheck &bchk=false) const
fst straight line intersection schema - templated for charged and neutral parameters
int channelType(const Identifier &id) const
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Amg::Transform3D getTransformFromRotTransl(Amg::RotationMatrix3D rot, Amg::Vector3D transl_vec)
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
This header ties the generic definitions in this package.
DataVector< Segment > SegmentContainer
MuonPrepDataContainerT< RpcPrepData > RpcPrepDataContainer
MuonPrepDataContainer< MuonPrepDataCollection< PrdType > > MuonPrepDataContainerT
MuonPrepDataContainerT< TgcPrepData > TgcPrepDataContainer
MuonPrepDataContainerT< MdtPrepData > MdtPrepDataContainer
MuonPrepDataContainerT< sTgcPrepData > sTgcPrepDataContainer
MuonPrepDataContainerT< MMPrepData > MMPrepDataContainer
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
DataVector< Trk::Segment > SegmentCollection
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.