ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_ClusterOnTrackCnv_p2.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include "AthLinks/ElementLink.h"
8#include "Identifier/Identifier.h"
12
14
16 m_elCnv.persToTrans(&persObj->m_prdLink,&rio,log);
17
18 Trk::LocalParameters localParams;
19 fillTransFromPStore( &m_localParCnv, persObj->m_localParams, &localParams, log );
20
21 Trk::ErrorMatrix dummy;
22 Amg::MatrixX localCovariance;
23 fillTransFromPStore( &m_errorMxCnv, persObj->m_localErrMat, &dummy, log );
24 EigenHelpers::vectorToEigenMatrix(dummy.values, localCovariance, "SCT_ClusterOnTrackCnv_p2");
25
26 // When reading in 32-bit id, must cast to unsigned int
27 const Identifier::value_type upper = 0XFFFFFFFF00000000LL;
28 const Identifier::value_type lower = 0X00000000FFFFFFFFLL;
29 const Identifier::value_type testUpper = persObj->m_id & upper;
30 const Identifier::value_type testLower = persObj->m_id & lower;
31 Identifier id;
32 if ( testUpper == 0 && testLower > 0) {
33 Identifier32::value_type id1 = persObj->m_id;
34 id = id1;
35 } else {
36 id = persObj->m_id;
37 }
38
39 *transObj = InDet::SCT_ClusterOnTrack (rio,
40 localParams,
41 localCovariance,
42 persObj->m_idDE,
43 id,
44 persObj->m_isbroad,
45 persObj->m_positionAlongStrip);
46
47 // Attempt to call supertool to fill in detElements
48 m_eventCnvTool->recreateRIO_OnTrack(transObj);
49 if (transObj->detectorElement()==nullptr) {
50 log << MSG::WARNING<<"Unable to reset DetEl for this RIO_OnTrack, "
51 << "probably because of a problem with the Identifier/IdentifierHash : ("
52 << transObj->identify()<<"/"<<transObj->idDE()<<endmsg;
53 }
54}
55
57 if (transObj==nullptr or persObj==nullptr) return;
58
59 persObj->m_id = transObj->identify().get_compact();
60 persObj->m_localParams = toPersistent( &m_localParCnv, &transObj->localParameters(), log );
62 EigenHelpers::eigenMatrixToVector(pMat.values, transObj->localCovariance(), "SCT_ClusterOnTrackCnv_p2");
63 persObj->m_localErrMat = toPersistent( &m_errorMxCnv, &pMat, log );
64 persObj->m_idDE = transObj->idDE();
65 persObj->m_isbroad = transObj->isBroadCluster();
66 persObj->m_positionAlongStrip = static_cast<float>(transObj->positionAlongStrip());
67
68 using SCTContainer = InDet::SCT_ClusterContainer;
69
70 static const SG::InitializedReadHandleKey<SCTContainer> sctClusters{
71 "SCT_Clusters"};
72 static const SG::InitializedReadHandleKey<SCTContainer> bkgSctClusters{
73 "Bkg_SCT_Clusters"};
74 static const SG::InitializedReadHandleKey<SCTContainer> itkStripClusters{
75 "ITkStripClusters"};
76 static const SG::InitializedReadHandleKey<SCTContainer> bkgItkStripClusters{
77 "Bkg_ITkStripClusters"};
78
79 struct ContainerCandidate {
81 const char* overlayOutputName;
82 };
83 static const ContainerCandidate candidates[] = {
84 {sctClusters, "Bkg_SCT_Clusters"},
85 {itkStripClusters, "Bkg_ITkStripClusters"},
86 {bkgSctClusters, "Bkg_SCT_Clusters"},
87 {bkgItkStripClusters, "Bkg_ITkStripClusters"},
88 };
89
91
92 persObj->m_prdLink.m_contName.clear();
93
94 const bool doOverlay = m_eventCnvTool->doTrackOverlay();
95
96 for (const ContainerCandidate& candidate : candidates) {
97 const bool found =
99 ->getHashAndIndex<SCTContainer, InDet::SCT_ClusterOnTrack>(
100 transObj, candidate.key, hashAndIndex);
101
102 if (!found) continue;
103
104 persObj->m_prdLink.m_contName =
105 doOverlay ? candidate.overlayOutputName : candidate.key.key();
106
107 break;
108 }
109
110 persObj->m_prdLink.m_elementIndex = hashAndIndex;
111}
#define endmsg
int upper(int c)
ElementLink< InDet::SCT_ClusterContainer > ElementLinkToIDCSCT_ClusterContainer
void fillTransFromPStore(CNV **cnv, const TPObjRef &ref, TRANS_T *trans, MsgStream &log) const
TPObjRef toPersistent(CNV **cnv, const typename CNV::TransBase_t *transObj, MsgStream &log) const
unsigned int value_type
value_type get_compact() const
Get the compact id.
IdentifierHash::value_type m_idDE
Specific class to represent the SCT measurements.
virtual const InDetDD::SiDetectorElement * detectorElement() const override final
returns the detector element, assoicated with the PRD of this class
virtual IdentifierHash idDE() const override
returns the DE hashID*
void persToTrans(const InDet::SCT_ClusterOnTrack_p2 *persObj, InDet::SCT_ClusterOnTrack *transObj, MsgStream &log)
ToolHandle< Trk::IEventCnvSuperTool > m_eventCnvTool
ElementLinkCnv_p1< ElementLinkToIDCSCT_ClusterContainer > m_elCnv
void transToPers(const InDet::SCT_ClusterOnTrack *transObj, InDet::SCT_ClusterOnTrack_p2 *persObj, MsgStream &log)
LocalParametersCnv_p1 * m_localParCnv
ReadHandleKey that initializes during construction.
Property holding a SG store/key/clid from which a ReadHandle is made.
std::vector< float > values
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Identifier identify() const
return the identifier -extends MeasurementBase
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
static void eigenMatrixToVector(VECTOR &vec, COVARIANCE &cov, const char *)