ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_ClusterCnv_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
5//-----------------------------------------------------------------------------
6//
7// file: SCT_ClusterCnv_p2.cxx
8//
9//-----------------------------------------------------------------------------
10
13
15
16#include <memory>
17
19 :
20 m_sctId2(sctid)
21{}
22
23
26 Identifier clusId,
27 const InDetDD::SiDetectorElement* detEl,
28 MsgStream& log)
29{
30 // Local Position
31 Amg::Vector2D localPos;
32 localPos[Trk::locX] = persObj->m_localPos;
33 localPos[Trk::locY] = 0;
34
35 // List of Id of the cluster
36 std::vector<Identifier> rdoList;
37 rdoList.resize( persObj->m_rdoList.size() );
38 //Identifier::value_type id32 = transObj->identify().get_compact();
39 //Identifier id32 = transObj->identify();
40 std::vector<Identifier>::iterator tit = rdoList.begin();
41 for (const InDet::SCT_Cluster_p2::rdo_diff_type& rdo : persObj->m_rdoList) {
42 *tit = Identifier(m_sctId2->strip_id_offset(clusId,rdo) );
43 ++tit;
44 }
45
47 m_swCnv.persToTrans(&persObj->m_width, &sw, log);
48
49 // Error matrix
50 auto cmat = Amg::MatrixX(2,2);
51 (cmat)(0,0) = static_cast<double>(persObj->m_mat00);
52 (cmat)(1,0) = static_cast<double>(persObj->m_mat01);
53 (cmat)(0,1) = static_cast<double>(persObj->m_mat01);
54 (cmat)(1,1) = static_cast<double>(persObj->m_mat11);
55
56 InDet::SCT_Cluster clus (clusId,
57 localPos,
58 std::move(rdoList),
59 sw,
60 detEl,
61 std::move(cmat));
62 return clus;
63}
64
65
67persToTrans( const InDet::SCT_Cluster_p2 *persObj, InDet::SCT_Cluster *transObj, MsgStream &log)
68{
69 Identifier clusId = transObj->identify();
70 *transObj = createSCT_Cluster (persObj, clusId, nullptr, log);
71}
72
73
74void SCT_ClusterCnv_p2::transToPers( const InDet::SCT_Cluster *transObj, InDet::SCT_Cluster_p2 *persObj, MsgStream &log )
75{
76// if (log.level() <= MSG::VERBOSE) log << MSG::VERBOSE << "In SCT_Cluster::transToPers" << endmsg;
77 const InDet::SiWidth *sw = &transObj->width();
78 m_swCnv.transToPers(sw, &persObj->m_width, log);
79
80 // base class:
81 //
82
83 // Local Position
84 persObj->m_localPos = transObj->localPosition()[Trk::locX];
85
86 // Error Matrix
87 persObj->m_mat00 = (transObj->localCovariance())(0,0);
88 persObj->m_mat01 = (transObj->localCovariance())(0,1);
89 persObj->m_mat11 = (transObj->localCovariance())(1,1);
90
91 // List of Id of the cluster
92 persObj->m_rdoList.resize( transObj->rdoList().size() );
93 //Identifier::value_type id32 = transObj->identify().get_compact();
94 Identifier id32 = transObj->identify();
95
96
97 // convert the list of ID saved for the cluster
98 persObj->m_rdoList.resize(transObj->rdoList().size() );
99 std::vector<InDet::SCT_Cluster_p2::rdo_diff_type>::iterator pit = persObj->m_rdoList.begin();
100
101
102 for (const Identifier& id : transObj->rdoList()) {
103 *pit = static_cast<InDet::SCT_Cluster_p2::rdo_diff_type>( m_sctId2->calc_offset(id32, id) );
104 ++pit;
105 }
106
107}
108
109
Class to hold geometrical description of a silicon detector element.
InDet::SiWidth_p2 m_width
std::vector< rdo_diff_type > m_rdoList
const InDet::SiWidth & width() const
return width class reference
void transToPers(const InDet::SCT_Cluster *, InDet::SCT_Cluster_p2 *, MsgStream &)
void persToTrans(const InDet::SCT_Cluster_p2 *, InDet::SCT_Cluster *, MsgStream &)
const SCT_ID * m_sctId2
InDet::SiWidthCnv_p2 m_swCnv
InDet::SCT_Cluster createSCT_Cluster(const InDet::SCT_Cluster_p2 *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