 |
ATLAS Offline Software
|
Go to the documentation of this file.
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.");
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,
102 if constexpr (std::is_same_v<PrdType, Muon::sTgcPrepData>) {
104 if (!rot && idHelper.channelType(prd->identify()) == sTgcIdHelper::sTgcChannelTypes::Wire) {
105 const Amg::Vector3D locPos = prd->detectorElement()->transform(prd->identify()).inverse() *
107 if (prd->detectorElement()->isEtaZero(prd->identify(), locPos.block<2,1>(0,0))){
117 return StatusCode::FAILURE;
120 convMeasVec.push_back(std::move(rot));
124 return StatusCode::FAILURE;
126 return StatusCode::SUCCESS;
148 std::vector<std::unique_ptr<Trk::RIO_OnTrack>> rots{};
149 unsigned int nPrec{0};
155 switch (spacePoint->type()) {
187 auto makeCompetingROT = [
this, &measurements](
RotVec& rots) {
191 std::list<const Trk::PrepRawData*> prds{};
192 for (
const std::unique_ptr<Trk::RIO_OnTrack>& rot : rots) {
199 RotVec etaPrds{}, phiPrds{};
200 for (std::unique_ptr<Trk::RIO_OnTrack>& rot : rots) {
203 std::vector<std::unique_ptr<Trk::RIO_OnTrack>>& pushMe{
m_idHelperSvc->measuresPhi(rot->identify())? phiPrds : etaPrds};
204 if (pushMe.size() && pushMe.back()->detectorElement() != rot->detectorElement()){
205 makeCompetingROT(pushMe);
207 pushMe.push_back(std::move(rot));
211 makeCompetingROT(etaPrds);
212 makeCompetingROT(phiPrds);
213 measurements.push_back(std::move(rot));
216 makeCompetingROT(etaPrds);
217 makeCompetingROT(phiPrds);
220 <<
". Do not convert segment due to potential puff.");
221 return StatusCode::SUCCESS;
223 ATH_MSG_DEBUG(
"Fetched in total "<<measurements.size()<<
" measurements. "<<std::endl<<
224 m_printer->print(measurements.stdcont()));
229 segSurf->globalToLocalDirection(segment.
direction(), segDir);
230 std::vector<Identifier>
holes{};
231 auto fitQuality = std::make_unique<Muon::MuonSegmentQuality>(segment.
chi2(),
232 static_cast<double>(segment.
nDoF()),
244 auto legacySeg = std::make_unique<Muon::MuonSegment>(
Amg::Vector2D::Zero(), std::move(segDir),
246 std::move(measurements),
fitQuality.release());
249 <<
Amg::toString(legacySeg->globalDirection())<<std::endl<<
m_printer->print(legacySeg->containedMeasurements()));
250 outContainer.
push_back(std::move(legacySeg));
251 return StatusCode::SUCCESS;
Template for Muon PRD containers (which are basically collections of MuonPrepDataCollections).
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Scalar phi() const
phi method
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_clusterCreator
const Amg::Transform3D & localToGlobalTrans(const ActsTrk::GeometryContext &gctx) const
Returns the local -> global tarnsformation from the sector.
Scalar theta() const
theta method
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_keyMM
Placeholder for what will later be the muon segment EDM representation.
const MeasVec & measurements() const
Returns the associated measurements.
SG::WriteHandleKey< Trk::SegmentCollection > m_writeKey
const xAOD::UncalibratedMeasurement * secondaryMeasurement() const
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
double chi2() const
Returns the chi2 of the segment fit.
#define ATH_MSG_VERBOSE(x)
Property holding a SG store/key/clid from which a ReadHandle is made.
unsigned int nDoF() const
Returns the number of degrees of freedom.
const Amg::Vector3D & position() const
Returns the global segment position.
Amg::Transform3D getTransformFromRotTransl(Amg::RotationMatrix3D rot, Amg::Vector3D transl_vec)
std::unique_ptr< CalibratedSpacePoint > MeasType
Calibrated space point type.
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
const Amg::Vector3D & direction() const
Returns the global segment direction.
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
::StatusCode StatusCode
StatusCode definition for legacy code.
const PrdType * fetchPrd(const Identifier &prdId, const Muon::MuonPrepDataContainerT< PrdType > *prdContainer) const
virtual bool type(PrepRawDataType type) const
Interface method checking the type.
StatusCode initialize() override final
Eigen::Affine3d Transform3D
SG::ReadHandleKey< Muon::sTgcPrepDataContainer > m_keysTgc
std::vector< std::unique_ptr< Trk::RIO_OnTrack > > RotVec
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Template to hold collections of MuonPrepRawData objects.
const MuonGMR4::SpectrometerSector * msSector() const
Returns the associated MS sector.
represents the three-dimensional global direction with respect to a planar surface frame.
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_keyTgc
Prep data container keys.
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
value_type push_back(value_type pElem)
Add an element to the end of the collection.
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.
Eigen::Matrix< double, 3, 1 > Vector3D
FitQualityOnSurface fitQuality(const MultiComponentState &, const MeasurementBase &)
Method for determining the chi2 of the multi-component state and the number of degrees of freedom.
This header ties the generic definitions in this package.
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,...
SG::ReadHandleKeyArray< SegmentContainer > m_readKeys
#define ATH_MSG_WARNING(x)
The calibrated Space point is created during the calibration process.
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_keyMdt
StatusCode execute(const EventContext &ctx) const override final
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > m_mdtCreator
SG::ReadHandleKey< ActsTrk::GeometryContext > m_geoCtxKey
const SpacePoint * spacePoint() const
The pointer to the space point out of which this space point has been built.
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_keyRpc
StatusCode convertMeasurement(const MuonR4::Segment &segment, const CalibratedSpacePoint &spacePoint, const Muon::MuonPrepDataContainerT< PrdType > *prdContainer, RotVec &convMeasVec) const
const Identifier & identify() const
: Identifier of the primary measurement
ToolHandle< Muon::IMuonCompetingClustersOnTrackCreator > m_compClusterCreator
const SegmentFit::Covariance & covariance() const
Returns the uncertainties of the defining parameters.