ATLAS Offline Software
Loading...
Searching...
No Matches
TgcCoinDataCnv_p3.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
7#include <algorithm>
8#include <atomic>
11
13persToTrans( const Muon::TgcCoinData_p3 *persObj, Muon::TgcCoinData *transObj,MsgStream &log )
14{
15 log << MSG::DEBUG << "TgcCoinDataCnv_p3::persToTrans" << endmsg;
16
18 switch(persObj->m_type){
21 case 2: type=Muon::TgcCoinData::TYPE_SL; break;
24 default: break;
25 }
26
27 auto posIn = std::unique_ptr<Amg::Vector2D>
28 (createTransFromPStore( &m_localPosCnv, persObj->m_posIn, log ));
29 auto posOut = std::unique_ptr<Amg::Vector2D>
30 (createTransFromPStore( &m_localPosCnv, persObj->m_posOut, log ));
31
32 Trk::ErrorMatrix dummy;
33 fillTransFromPStore( &m_errorMxCnv, persObj->m_errMat, &dummy, log );
34 auto tempMat = std::make_unique<Amg::MatrixX>();
35 if (!dummy.values.empty())
36 EigenHelpers::vectorToEigenMatrix(dummy.values, *tempMat, "TgcCoinDataCnv_p3");
37
38 *transObj = Muon::TgcCoinData (Identifier(persObj->m_channelIdIn),
39 Identifier(persObj->m_channelIdOut),
40 persObj->m_collectionIdHash,
41 transObj->detectorElementIn(),
42 transObj->detectorElementOut(),
43 type,
44 persObj->m_isAside,
45 persObj->m_phi,
46 persObj->m_isInner,
47 persObj->m_isForward,
48 persObj->m_isStrip,
49 persObj->m_trackletId,
50 posIn.release(),
51 posOut.release(),
52 persObj->m_widthIn,
53 persObj->m_widthOut,
54 persObj->m_delta,
55 persObj->m_sub,
56 persObj->m_inner,
57 persObj->m_roi,
58 persObj->m_pt,
59 persObj->m_trackletIdStrip,
60 tempMat.release(),
61 persObj->m_isPositiveDeltaR,
62 persObj->m_veto
63 );
64 transObj->setHashAndIndex(persObj->m_indexAndHash);
65}
66
68transToPers( const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p3 *persObj, MsgStream &log )
69{
70 log << MSG::DEBUG << "TgcCoinDataCnv_p3::transToPers" << endmsg;
71
72 // Tracklet and HiPt should have valid channelIdIn
73 if((transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET ||
74 transObj->type()==Muon::TgcCoinData::TYPE_HIPT ||
76 (!transObj->isInner())) {
77 if(!transObj->channelIdIn().get_identifier32().is_valid()) {
78 log << MSG::ERROR << "TgcCoinDataCnv_p3::transToPers - invalid trans channelIdIn!! "
79 << (transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET ? "(TRACKLET)" :
80 (transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET_EIFI ? "(TRACKLET_EIFI)" : "(HIPT)"))
81 << endmsg;
82 }
83 }
84
85 // Tracklet, HiPt and SL should have valid channelIdOut
86 if((transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET ||
87 transObj->type()==Muon::TgcCoinData::TYPE_HIPT ||
88 transObj->type()==Muon::TgcCoinData::TYPE_SL) &&
89 (!transObj->isInner())) {
90 if(!transObj->channelIdOut().get_identifier32().is_valid()) {
91 log << MSG::ERROR << "TgcCoinDataCnv_p3::transToPers - invalid trans channelIdOut!! "
92 << (transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET ? "(TRACKLET)" :
93 (transObj->type()==Muon::TgcCoinData::TYPE_HIPT ? "(HIPT)" : "(SL)"))
94 << endmsg;
95 }
96 }
97
98 persObj->m_channelIdIn = transObj->channelIdIn().get_identifier32().get_compact();
99 persObj->m_channelIdOut = transObj->channelIdOut().get_identifier32().get_compact();
100 persObj->m_collectionIdHash = transObj->identifyHash();
101 persObj->m_indexAndHash=transObj->getHashAndIndex().hashAndIndex();
102 switch(transObj->type()){
103 case Muon::TgcCoinData::TYPE_TRACKLET: persObj->m_type=0; break;
104 case Muon::TgcCoinData::TYPE_HIPT: persObj->m_type=1; break;
105 case Muon::TgcCoinData::TYPE_SL: persObj->m_type=2; break;
106 case Muon::TgcCoinData::TYPE_UNKNOWN: persObj->m_type=3; break;
107 case Muon::TgcCoinData::TYPE_TRACKLET_EIFI: persObj->m_type=4; break;
108 default: break;
109 }
110
111 persObj->m_isAside = transObj->isAside();
112 persObj->m_phi = transObj->phi();
113 persObj->m_isInner = transObj->isInner();
114 persObj->m_isForward = transObj->isForward();
115 persObj->m_isStrip = transObj->isStrip();
116 persObj->m_trackletId = transObj->trackletId();
117 persObj->m_trackletIdStrip = transObj->trackletIdStrip();
118 persObj->m_widthIn = transObj->widthIn();
119 persObj->m_widthOut = transObj->widthOut();
120 persObj->m_posIn = toPersistent( &m_localPosCnv, transObj->posInPtr(), log );
121 persObj->m_posOut = toPersistent( &m_localPosCnv, transObj->posOutPtr(), log );
122 // persObj->m_errMat = toPersistent( &m_errorMxCnv, transObj->m_errMat, log );
123
124 if (transObj->hasErrMat() )
125 {
126 if (! transObj->errMat().cols() || !transObj->errMat().rows()) {
127 static std::atomic<unsigned int> numErrsPrinted=0;
128 if (numErrsPrinted<10) {
129 if (numErrsPrinted++ < 10) {
130 log << MSG::WARNING << "Have been given a TgcCoinData error matrix with size = ["
131 <<transObj->errMat().rows()<<","<<transObj->errMat().cols()<<"]. Skipping writing of the matrix."<<endmsg;
132 }
133 }
134 } else {
135 Trk::ErrorMatrix pMat;
136 EigenHelpers::eigenMatrixToVector(pMat.values, transObj->errMat(), "TgcCoinDataCnv_p3");
137 persObj->m_errMat = toPersistent( &m_errorMxCnv, &pMat, log );
138 }
139 }
140
141 persObj->m_delta = transObj->delta();
142 persObj->m_roi = transObj->roi();
143 persObj->m_pt = transObj->pt();
144 persObj->m_veto = transObj->veto();
145 persObj->m_inner = transObj->inner();
146
147 persObj->m_sub = transObj->sub();
148 persObj->m_isPositiveDeltaR = transObj->isPositiveDeltaR();
149}
150
151
#define endmsg
CNV::Trans_t * createTransFromPStore(CNV **cnv, const TPObjRef &ref, MsgStream &log) const
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 hashAndIndex() const
combined index
bool is_valid() const
Check if id is in a valid state.
value_type get_compact() const
Get the compact id.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
IdentifierHash m_collectionIdHash
unsigned int m_indexAndHash
Identifier32::value_type m_channelIdOut
Identifier32::value_type m_channelIdIn
int roi() const
return ROI number
double widthOut() const
return region width of hit on TGC2(TRACKLET) or TGC3(HIPT)
CoinDataType type() const
return the coincidence type (HIPT, LPT, SL)
int trackletId() const
return trackletId (Identifier for each track)
double widthIn() const
return region width of hit on TGC1
const IdentContIndex & getHashAndIndex() const
const MuonGM::TgcReadoutElement * detectorElementIn() const
return TgcReadoutElement of track on TGC1(HIPT) or TGC2(TRACKLET)
int trackletIdStrip() const
return trackletId for strip (Identifier for each track)
bool isPositiveDeltaR() const
return isPositiveDeltaR (isMuplus) of SL
int sub() const
return subMatrix of Tracklet or hsub of HiPt
const Amg::MatrixX & errMat() const
return 2d width of ROI for SL: errMat[0][0]==(width for R), errMat[1][1]==(width for phi)
IdentifierHash identifyHash() const
return the identifierHash of Outer Hit
bool isAside() const
Aside or Cside.
const Amg::Vector2D * posInPtr() const
bool veto() const
return veto bit
int phi() const
return phi number of trigger sector
bool isForward() const
Forward region or Endcap region.
void setHashAndIndex(unsigned short collHash, unsigned short objIndex)
bool hasErrMat() const
Test to see if the error matrix is present.
const MuonGM::TgcReadoutElement * detectorElementOut() const
return TgcReadoutElement of track on TGC3
bool isInner() const
Inner layers or BW.
int pt() const
return pt threshold value
Identifier channelIdIn() const
return offlineID on TGC1(HIPT) or TGC2(TRACKLET)
Identifier channelIdOut() const
return offlineID on track on TGC3
int delta() const
return the deviation from Pt=oo track
const Amg::Vector2D * posOutPtr() const
bool isStrip() const
Strip hit or Wire hit?
int inner() const
return InnerCoincidecne trigger bits
ErrorMatrixCnv_p1 * m_errorMxCnv
void transToPers(const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p3 *persObj, MsgStream &log)
LocalPositionCnv_p1 * m_localPosCnv
void persToTrans(const Muon::TgcCoinData_p3 *persObj, Muon::TgcCoinData *transObj, MsgStream &log)
std::vector< float > values
static void eigenMatrixToVector(VECTOR &vec, COVARIANCE &cov, const char *)