ATLAS Offline Software
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 
13 persToTrans( 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){
20  case 1: type=Muon::TgcCoinData::TYPE_HIPT; break;
21  case 2: type=Muon::TgcCoinData::TYPE_SL; break;
24  default: break;
25  }
26 
27  auto posIn = std::unique_ptr<Amg::Vector2D>
29  auto posOut = std::unique_ptr<Amg::Vector2D>
31 
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 
68 transToPers( 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 
Muon::TgcCoinData::hasErrMat
bool hasErrMat() const
Test to see if the error matrix is present.
Definition: TgcCoinData.h:368
Identifier32::is_valid
bool is_valid() const
Check if id is in a valid state.
Definition: Identifier32.h:220
Muon::TgcCoinData_p3::m_veto
bool m_veto
Definition: TgcCoinData_p3.h:73
Muon::TgcCoinData_p3
Definition: TgcCoinData_p3.h:23
Muon::TgcCoinData_p3::m_pt
int m_pt
Definition: TgcCoinData_p3.h:72
TgcCoinDataCnv_p3::persToTrans
void persToTrans(const Muon::TgcCoinData_p3 *persObj, Muon::TgcCoinData *transObj, MsgStream &log)
Definition: TgcCoinDataCnv_p3.cxx:13
Muon::TgcCoinData::channelIdOut
Identifier channelIdOut() const
return offlineID on track on TGC3
Definition: TgcCoinData.h:344
Muon::TgcCoinData::isAside
bool isAside() const
Aside or Cside.
Definition: TgcCoinData.h:348
Muon::TgcCoinData::type
CoinDataType type() const
return the coincidence type (HIPT, LPT, SL)
Definition: TgcCoinData.h:346
Muon::TgcCoinData_p3::m_type
int m_type
Definition: TgcCoinData_p3.h:55
TgcCoinDataCnv_p3::m_localPosCnv
LocalPositionCnv_p1 * m_localPosCnv
Definition: TgcCoinDataCnv_p3.h:39
Muon::TgcCoinData_p3::m_trackletIdStrip
int m_trackletIdStrip
Definition: TgcCoinData_p3.h:62
Muon::TgcCoinData_p3::m_isStrip
bool m_isStrip
Definition: TgcCoinData_p3.h:60
Muon::TgcCoinData_p3::m_trackletId
int m_trackletId
Definition: TgcCoinData_p3.h:61
TgcCoinDataCnv_p3.h
Muon::TgcCoinData::inner
int inner() const
return InnerCoincidecne trigger bits
Definition: TgcCoinData.h:386
Muon::TgcCoinData::isStrip
bool isStrip() const
Strip hit or Wire hit?
Definition: TgcCoinData.h:356
Muon::TgcCoinData_p3::m_roi
int m_roi
Definition: TgcCoinData_p3.h:71
Muon::TgcCoinData::TYPE_TRACKLET
@ TYPE_TRACKLET
Definition: TgcCoinData.h:50
Muon::TgcCoinData::trackletId
int trackletId() const
return trackletId (Identifier for each track)
Definition: TgcCoinData.h:358
Muon::TgcCoinData::veto
bool veto() const
return veto bit
Definition: TgcCoinData.h:382
Muon::TgcCoinData_p3::m_errMat
TPObjRef m_errMat
Definition: TgcCoinData_p3.h:66
Muon::TgcCoinData_p3::m_widthOut
double m_widthOut
Definition: TgcCoinData_p3.h:68
Muon::TgcCoinData_p3::m_sub
int m_sub
Definition: TgcCoinData_p3.h:75
Muon::TgcCoinData::identifyHash
IdentifierHash identifyHash() const
return the identifierHash of Outer Hit
Definition: TgcCoinData.h:319
Muon::TgcCoinData::isPositiveDeltaR
bool isPositiveDeltaR() const
return isPositiveDeltaR (isMuplus) of SL
Definition: TgcCoinData.h:388
Muon::TgcCoinData
Definition: TgcCoinData.h:37
ITPConverterFor< TRANS_BASE >::fillTransFromPStore
void fillTransFromPStore(CNV **cnv, const TPObjRef &ref, TRANS_T *trans, MsgStream &log) const
Convert persistent object, stored in the the top-level persistent object and referenced by the TP Ref...
Definition: TPConverter.h:145
Trk::ErrorMatrix
Definition: ErrorMatrixCnv_p1.h:25
Muon::TgcCoinData::trackletIdStrip
int trackletIdStrip() const
return trackletId for strip (Identifier for each track)
Definition: TgcCoinData.h:360
Muon::TgcCoinData_p3::m_isForward
bool m_isForward
Definition: TgcCoinData_p3.h:59
Muon::TgcCoinData::delta
int delta() const
return the deviation from Pt=oo track
Definition: TgcCoinData.h:376
EigenHelpers::vectorToEigenMatrix
static void vectorToEigenMatrix(VECTOR &vec, COVARIANCE &cov, const char *)
Helper fn to fill the covariance from the raw data (vec<float>)
Definition: EigenHelpers.h:22
Muon::TgcCoinData_p3::m_phi
int m_phi
Definition: TgcCoinData_p3.h:57
Muon::TgcCoinData::isInner
bool isInner() const
Inner layers or BW.
Definition: TgcCoinData.h:352
Muon::TgcCoinData_p3::m_indexAndHash
unsigned int m_indexAndHash
Definition: TgcCoinData_p3.h:53
Muon::TgcCoinData::CoinDataType
CoinDataType
Definition: TgcCoinData.h:49
Muon::TgcCoinData::TYPE_HIPT
@ TYPE_HIPT
Definition: TgcCoinData.h:51
Muon::TgcCoinData_p3::m_inner
int m_inner
Definition: TgcCoinData_p3.h:76
Identifier32::get_compact
value_type get_compact(void) const
Get the compact id.
Definition: Identifier32.h:171
Muon::TgcCoinData_p3::m_collectionIdHash
IdentifierHash m_collectionIdHash
Definition: TgcCoinData_p3.h:51
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
Muon::TgcCoinData::setHashAndIndex
void setHashAndIndex(unsigned short collHash, unsigned short objIndex)
Definition: TgcCoinData.h:326
Muon::TgcCoinData_p3::m_channelIdIn
Identifier32::value_type m_channelIdIn
Definition: TgcCoinData_p3.h:49
Muon::TgcCoinData::widthIn
double widthIn() const
return region width of hit on TGC1
Definition: TgcCoinData.h:372
Muon::TgcCoinData::errMat
const Amg::MatrixX & errMat() const
return 2d width of ROI for SL: errMat[0][0]==(width for R), errMat[1][1]==(width for phi)
Definition: TgcCoinData.h:370
Muon::TgcCoinData::widthOut
double widthOut() const
return region width of hit on TGC2(TRACKLET) or TGC3(HIPT)
Definition: TgcCoinData.h:374
EigenHelpers.h
python.xAODType.dummy
dummy
Definition: xAODType.py:4
Muon::TgcCoinData::posInPtr
const Amg::Vector2D * posInPtr() const
Definition: TgcCoinData.h:363
Muon::TgcCoinData::TYPE_UNKNOWN
@ TYPE_UNKNOWN
Definition: TgcCoinData.h:53
Muon::TgcCoinData::detectorElementIn
const MuonGM::TgcReadoutElement * detectorElementIn() const
return TgcReadoutElement of track on TGC1(HIPT) or TGC2(TRACKLET)
Definition: TgcCoinData.h:390
EigenHelpers::eigenMatrixToVector
static void eigenMatrixToVector(VECTOR &vec, COVARIANCE &cov, const char *)
Helper fn to get raw data (vec<float>) from the covariance.
Definition: EigenHelpers.h:30
Muon::TgcCoinData_p3::m_delta
int m_delta
Definition: TgcCoinData_p3.h:70
ITPConverterFor< TRANS_BASE >::toPersistent
TPObjRef toPersistent(CNV **cnv, const typename CNV::TransBase_t *transObj, MsgStream &log) const
Persistify an object and store the persistent represenation in the storage vector of the top-level pe...
Definition: TPConverter.h:119
IdentContIndex::hashAndIndex
unsigned int hashAndIndex() const
combined index
Definition: IdentContIndex.h:99
Muon::TgcCoinData_p3::m_channelIdOut
Identifier32::value_type m_channelIdOut
Definition: TgcCoinData_p3.h:50
Muon::TgcCoinData::getHashAndIndex
const IdentContIndex & getHashAndIndex() const
Definition: TgcCoinData.h:337
IdentContIndex.h
Muon::TgcCoinData_p3::m_posIn
TPObjRef m_posIn
Definition: TgcCoinData_p3.h:64
Muon::TgcCoinData::roi
int roi() const
return ROI number
Definition: TgcCoinData.h:378
Muon::TgcCoinData::posOutPtr
const Amg::Vector2D * posOutPtr() const
Definition: TgcCoinData.h:366
TgcCoinDataCnv_p3::m_errorMxCnv
ErrorMatrixCnv_p1 * m_errorMxCnv
Definition: TgcCoinDataCnv_p3.h:40
Trk::ErrorMatrix::values
std::vector< float > values
Definition: ErrorMatrixCnv_p1.h:27
Muon::TgcCoinData::isForward
bool isForward() const
Forward region or Endcap region.
Definition: TgcCoinData.h:354
Muon::TgcCoinData::sub
int sub() const
return subMatrix of Tracklet or hsub of HiPt
Definition: TgcCoinData.h:384
Muon::TgcCoinData_p3::m_posOut
TPObjRef m_posOut
Definition: TgcCoinData_p3.h:65
Muon::TgcCoinData::pt
int pt() const
return pt threshold value
Definition: TgcCoinData.h:380
Muon::TgcCoinData::TYPE_SL
@ TYPE_SL
Definition: TgcCoinData.h:52
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
Muon::TgcCoinData_p3::m_widthIn
double m_widthIn
Definition: TgcCoinData_p3.h:67
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
Muon::TgcCoinData_p3::m_isAside
bool m_isAside
Definition: TgcCoinData_p3.h:56
Muon::TgcCoinData::TYPE_TRACKLET_EIFI
@ TYPE_TRACKLET_EIFI
Definition: TgcCoinData.h:54
Muon::TgcCoinData::channelIdIn
Identifier channelIdIn() const
return offlineID on TGC1(HIPT) or TGC2(TRACKLET)
Definition: TgcCoinData.h:342
Muon::TgcCoinData_p3::m_isInner
bool m_isInner
Definition: TgcCoinData_p3.h:58
Muon::TgcCoinData::detectorElementOut
const MuonGM::TgcReadoutElement * detectorElementOut() const
return TgcReadoutElement of track on TGC3
Definition: TgcCoinData.h:395
TgcCoinData.h
Identifier::get_identifier32
Identifier32 get_identifier32(void) const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
Muon::TgcCoinData_p3::m_isPositiveDeltaR
bool m_isPositiveDeltaR
Definition: TgcCoinData_p3.h:77
ITPConverterFor< TRANS_BASE >::createTransFromPStore
CNV::Trans_t * createTransFromPStore(CNV **cnv, const TPObjRef &ref, MsgStream &log) const
Create transient representation of a persistent object, stored in the the top-level persistent object...
Definition: TPConverter.h:172
TgcCoinDataCnv_p3::transToPers
void transToPers(const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p3 *persObj, MsgStream &log)
Definition: TgcCoinDataCnv_p3.cxx:68
Muon::TgcCoinData::phi
int phi() const
return phi number of trigger sector
Definition: TgcCoinData.h:350