ATLAS Offline Software
Loading...
Searching...
No Matches
TgcCoinDataCnv_p2.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
5//-----------------------------------------------------------------------------
6//
7// file: TgcCoinDataCnv_p2.cxx
8//* Takashi Kubota - June 30, 2008 */
9//-----------------------------------------------------------------------------
10
13#include <algorithm>
16
18persToTrans( const Muon::TgcCoinData_p2 *persObj, Muon::TgcCoinData *transObj,MsgStream &log )
19{
20 log << MSG::DEBUG << "TgcCoinDataCnv_p2::persToTrans" << endmsg;
21
23 switch(persObj->m_type){
26 case 2: type=Muon::TgcCoinData::TYPE_SL; break;
29 default: break;
30 }
31
32 auto posIn = std::unique_ptr<Amg::Vector2D>
33 (createTransFromPStore( &m_localPosCnv, persObj->m_posIn, log ));
34 auto posOut = std::unique_ptr<Amg::Vector2D>
35 (createTransFromPStore( &m_localPosCnv, persObj->m_posOut, log ));
36
37 Trk::ErrorMatrix dummy;
38 fillTransFromPStore( &m_errorMxCnv, persObj->m_errMat, &dummy, log );
39 auto tempMat = std::make_unique<Amg::MatrixX>();
40 if (!dummy.values.empty())
41 EigenHelpers::vectorToEigenMatrix(dummy.values, *tempMat, "TgcCoinDataCnv_p2");
42
43 *transObj = Muon::TgcCoinData (Identifier(persObj->m_channelIdIn),
44 Identifier(persObj->m_channelIdOut),
45 persObj->m_collectionIdHash,
46 transObj->detectorElementIn(),
47 transObj->detectorElementOut(),
48 type,
49 persObj->m_isAside,
50 persObj->m_phi,
51 false, // isInner
52 persObj->m_isForward,
53 persObj->m_isStrip,
54 persObj->m_trackletId,
55 posIn.release(),
56 posOut.release(),
57 persObj->m_widthIn,
58 persObj->m_widthOut,
59 persObj->m_delta,
60 persObj->m_sub,
61 0, // tile
62 persObj->m_roi,
63 persObj->m_pt,
64 persObj->m_trackletIdStrip,
65 tempMat.release(),
66 persObj->m_isPositiveDeltaR
67 );
68
69 transObj->setHashAndIndex(persObj->m_indexAndHash);
70}
71
73transToPers( const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p2 *persObj, MsgStream &log )
74{
75 log << MSG::DEBUG << "TgcCoinDataCnv_p2::transToPers" << endmsg;
76
77 // Tracklet and HiPt should have valid channelIdIn
78 if(transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET ||
79 transObj->type()==Muon::TgcCoinData::TYPE_HIPT ||
81 if(!transObj->channelIdIn().get_identifier32().is_valid()) {
82 log << MSG::ERROR << "TgcCoinDataCnv_p2::transToPers - invalid trans channelIdIn!! "
83 << (transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET ? "(TRACKLET)" :
84 (transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET_EIFI ? "(TRACKLET_EIFI)" : "(HIPT)"))
85 << endmsg;
86 }
87 }
88 // Tracklet, HiPt and SL should have valid channelIdOut
89 if(transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET ||
90 transObj->type()==Muon::TgcCoinData::TYPE_HIPT ||
91 transObj->type()==Muon::TgcCoinData::TYPE_SL) {
92 if(!transObj->channelIdOut().get_identifier32().is_valid()) {
93 log << MSG::ERROR << "TgcCoinDataCnv_p2::transToPers - invalid trans channelIdOut!! "
94 << (transObj->type()==Muon::TgcCoinData::TYPE_TRACKLET ? "(TRACKLET)" :
95 (transObj->type()==Muon::TgcCoinData::TYPE_HIPT ? "(HIPT)" : "(SL)"))
96 << endmsg;
97 }
98 }
99 persObj->m_channelIdIn = transObj->channelIdIn().get_identifier32().get_compact();
100 persObj->m_channelIdOut = transObj->channelIdOut().get_identifier32().get_compact();
101 persObj->m_collectionIdHash = transObj->identifyHash();
102 persObj->m_indexAndHash=transObj->getHashAndIndex().hashAndIndex();
103 switch(transObj->type()){
104 case Muon::TgcCoinData::TYPE_TRACKLET: persObj->m_type=0; break;
105 case Muon::TgcCoinData::TYPE_HIPT: persObj->m_type=1; break;
106 case Muon::TgcCoinData::TYPE_SL: persObj->m_type=2; break;
107 case Muon::TgcCoinData::TYPE_UNKNOWN: persObj->m_type=3; break;
108 case Muon::TgcCoinData::TYPE_TRACKLET_EIFI: persObj->m_type=4; break;
109 default: break;
110 }
111
112 persObj->m_isAside = transObj->isAside();
113 persObj->m_phi = transObj->phi();
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 if (m_numErrsPrinted<10) {
129 log << MSG::WARNING << "Have been given a TgcCoinData error matrix with size = ["
130 <<transObj->errMat().rows()<<","<<transObj->errMat().cols()<<"]. Skipping writing of the matrix."<<endmsg;
131 }
132 } else {
133 Trk::ErrorMatrix pMat;
134 EigenHelpers::eigenMatrixToVector(pMat.values, transObj->errMat(), "TgcCoinDataCnv_p2");
135 persObj->m_errMat = toPersistent( &m_errorMxCnv, &pMat, log );
136 }
137 }
138
139 persObj->m_delta = transObj->delta();
140 persObj->m_roi = transObj->roi();
141 persObj->m_pt = transObj->pt();
142
143 persObj->m_sub = transObj->sub();
144 persObj->m_isPositiveDeltaR = transObj->isPositiveDeltaR();
145}
146
147
#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.
unsigned int m_indexAndHash
Identifier32::value_type m_channelIdIn
IdentifierHash m_collectionIdHash
Identifier32::value_type m_channelIdOut
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
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
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?
unsigned int m_numErrsPrinted
void persToTrans(const Muon::TgcCoinData_p2 *persObj, Muon::TgcCoinData *transObj, MsgStream &log)
LocalPositionCnv_p1 * m_localPosCnv
ErrorMatrixCnv_p1 * m_errorMxCnv
void transToPers(const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p2 *persObj, MsgStream &log)
std::vector< float > values
static void eigenMatrixToVector(VECTOR &vec, COVARIANCE &cov, const char *)