ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_ClusterCnv_p3.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
5//-----------------------------------------------------------------------------
6//
7// file: SCT_ClusterCnv_p3.cxx
8//
9//-----------------------------------------------------------------------------
10
12
14
16
17#include <memory>
18
20 :
21 m_sctId2(sctid)
22{}
23
24
27 Identifier clusId,
28 const InDetDD::SiDetectorElement* detEl,
29 MsgStream& log)
30{
31 // Local Position
32 Amg::Vector2D localPos;
33 localPos[Trk::locX] = persObj->m_localPos;
34 localPos[Trk::locY] = 0;
35
36 // List of Id of the cluster
37 std::vector<Identifier> rdoList;
38 rdoList.resize( persObj->m_rdoList.size() );
39 //Identifier::value_type id32 = transObj->identify().get_compact();
40 //Identifier id32 = transObj->identify();
41 std::vector<Identifier>::iterator tit = rdoList.begin();
42 for (const InDet::SCT_Cluster_p3::rdo_diff_type& rdo : persObj->m_rdoList) {
43 *tit = Identifier(m_sctId2->strip_id_offset(clusId,rdo) );
44 ++tit;
45 }
46
48 m_swCnv.persToTrans(&persObj->m_width, &sw, log);
49
50 // Error matrix
51 auto cmat = Amg::MatrixX(2,2);
52 (cmat)(0,0) = static_cast<double>(persObj->m_mat00);
53 (cmat)(1,0) = static_cast<double>(persObj->m_mat01);
54 (cmat)(0,1) = static_cast<double>(persObj->m_mat01);
55 (cmat)(1,1) = static_cast<double>(persObj->m_mat11);
56
57 InDet::SCT_Cluster clus (clusId,
58 localPos,
59 std::move(rdoList),
60 sw,
61 detEl,
62 std::move(cmat));
64 return clus;
65}
66
67
69persToTrans( const InDet::SCT_Cluster_p3 *persObj, InDet::SCT_Cluster *transObj, MsgStream &log)
70{
71 Identifier clusId = transObj->identify();
72 *transObj = createSCT_Cluster (persObj, clusId, nullptr, log);
73}
74
75
76void SCT_ClusterCnv_p3::transToPers( const InDet::SCT_Cluster *transObj, InDet::SCT_Cluster_p3 *persObj, MsgStream &log )
77{
78// if (log.level() <= MSG::VERBOSE) log << MSG::VERBOSE << "In SCT_Cluster::transToPers" << endmsg;
79 const InDet::SiWidth *sw = &transObj->width();
80 m_swCnv.transToPers(sw, &persObj->m_width, log);
81
82 // Local Position
83 persObj->m_localPos = transObj->localPosition()[Trk::locX];
84
85 // cluster weight
86 persObj->m_hitsInThirdTimeBin = transObj->hitsInThirdTimeBin();
87
88
89 // Error Matrix
90 persObj->m_mat00 = (transObj->localCovariance())(0,0);
91 persObj->m_mat01 = (transObj->localCovariance())(0,1);
92 persObj->m_mat11 = (transObj->localCovariance())(1,1);
93
94 persObj->m_rdoList.resize( transObj->rdoList().size() );
95 //Identifier::value_type id32 = transObj->identify().get_compact();
96 const Identifier id32 = transObj->identify();
97
98 std::vector<InDet::SCT_Cluster_p3::rdo_diff_type>::iterator pit = persObj->m_rdoList.begin();
99 for (const Identifier& id : transObj->rdoList()) {
100 *pit = static_cast<InDet::SCT_Cluster_p3::rdo_diff_type>( m_sctId2->calc_offset(id32, id) );
101 ++pit;
102 }
103
104}
105
106
Class to hold geometrical description of a silicon detector element.
std::vector< rdo_diff_type > m_rdoList
InDet::SiWidth_p2 m_width
void setHitsInThirdTimeBin(uint16_t hitsInThirdTimeBin)
Setter method of timing.
const InDet::SiWidth & width() const
return width class reference
void transToPers(const InDet::SCT_Cluster *, InDet::SCT_Cluster_p3 *, MsgStream &)
void persToTrans(const InDet::SCT_Cluster_p3 *, InDet::SCT_Cluster *, MsgStream &)
const SCT_ID * m_sctId2
InDet::SiWidthCnv_p2 m_swCnv
InDet::SCT_Cluster createSCT_Cluster(const InDet::SCT_Cluster_p3 *persObj, Identifier clusId, const InDetDD::SiDetectorElement *detEl, MsgStream &log)
This is an Identifier helper class for the SCT subdetector.
Definition SCT_ID.h:68
const Amg::Vector2D & localPosition() const
return the local position reference
Identifier identify() const
return the identifier
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
@ locY
local cartesian
Definition ParamDefs.h:38
@ locX
Definition ParamDefs.h:37