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 static const SG::InitializedReadHandleKey<InDet::SCT_ClusterContainer> sctClusContName ("SCT_Clusters");
70 bool isFound{m_eventCnvTool->getHashAndIndex<InDet::SCT_ClusterContainer, InDet::SCT_ClusterOnTrack>(transObj, sctClusContName, hashAndIndex)};
71 if(m_eventCnvTool->doTrackOverlay()){
72 persObj->m_prdLink.m_contName = (isFound ? "Bkg_SCT_Clusters" : "");
73 if(!isFound){ //in this case the input collection is called Bkg_SCT_Clusters as well
74 static const SG::InitializedReadHandleKey<InDet::SCT_ClusterContainer> sctClusContName("Bkg_SCT_Clusters");
75 isFound=m_eventCnvTool->getHashAndIndex<InDet::SCT_ClusterContainer, InDet::SCT_ClusterOnTrack>(transObj, sctClusContName, hashAndIndex);
76 persObj->m_prdLink.m_contName = (isFound ? "Bkg_SCT_Clusters" : "");
77 }
78 }
79 else persObj->m_prdLink.m_contName = (isFound ? sctClusContName.key() : "");
80 persObj->m_prdLink.m_elementIndex = hashAndIndex;
81}
#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.
const std::string & key() const
Return the StoreGate ID for the referenced object.
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 *)