ATLAS Offline Software
TileRawChannelContainerCnv.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 // Gaudi
8 #include "GaudiKernel/MsgStream.h"
9 
11  MsgStream mlog(msgSvc(), "TileRawChannelContainerConverter" );
13  TileRawChannelContainer_PERS *persObj = converter.createPersistent( transCont, mlog );
14  return persObj;
15 }
16 
18  MsgStream mlog(msgSvc(), "TileRawChannelContainerConverter" );
19  TileRawChannelContainerCnv_p1 converter_p1;
20 
21  TileRawChannelContainer *trans_cont(0);
22 
23  static const pool::Guid p1_guid("BF727F06-9F94-4989-9C1F-9E59023988EA");
24  static const pool::Guid p0_guid("E18095F6-01D9-4E8B-AD51-A8628F92E7FF");
25 
26  if( this->compareClassGuid(p1_guid)) {
27  std::unique_ptr< TileRawChannelContainer_p1 > cont( this->poolReadObject< TileRawChannelContainer_p1 >() );
28  trans_cont = converter_p1.createTransient( cont.get(), mlog );
29  }
30  else if( this->compareClassGuid(p0_guid)) {
31  // old version from before TP separation
32  TileRawChannelCollectionVec* rdoV = this->poolReadObject<TileRawChannelCollectionVec>();
33  bool lDebug = (mlog.level()<=MSG::DEBUG);
34 
35  if (lDebug)
36  mlog << MSG::DEBUG << "Read IDC, size " << rdoV->size() << endmsg;
37 
38  // fixing bug with units in 13.0.20 - should be removed once all RDO files produced with 13.0.20 disappear
39  if (rdoV->m_type == 104) {
40  if (lDebug)
41  mlog << MSG::DEBUG << "fixing units bug in 13.0.20 RDO data: if (type=104) type=4;" << endmsg;
42  rdoV->m_type = (TileFragHash::TYPE)4;
43  }
44 
45  int hashType = rdoV->m_type & 0xF;
46  int type = (rdoV->m_type >> 4) & 0xF;
47  int unit = (rdoV->m_type >> 8) & 0xF;
48  uint32_t bsflags = rdoV->m_type & 0xFFFFF000;
49 
50  if (lDebug)
51  mlog << MSG::DEBUG << MSG::hex << "m_type=" << rdoV->m_type
52  << " " << bsflags << " " << unit << " " << type << " " << hashType << MSG::dec << endmsg;
53 
54  // create the Tile IdentifiableContainer to contain the rdo collections
55  trans_cont = new TileRawChannelContainer(false,hashType,unit,SG::OWN_ELEMENTS);
56  if (type != 0) trans_cont->set_type((TileFragHash::TYPE)type);
57  trans_cont->set_bsflags(bsflags);
58 
61 
62  for (; it != last; ++it) {
63 
64  TileRawChannelCollection* rdoColl = *it;
66 
67  // register the rdo collection in StoreGate
68  TileRawChannelCollection::ID id_coll = rdoColl->identify();
69  StatusCode sc = trans_cont->addCollection(rdoColl,trans_cont->hashFunc()(id_coll));
70  if(sc.isFailure()) {
71  mlog << MSG::ERROR << "Can't add collection " << id_coll << " to container" << endmsg;
72  }
73  }
74  delete rdoV;
75  } else {
76  throw std::runtime_error("Unsupported persistent version of Data container");
77  }
78  return trans_cont;
79 }
TileRawChannelContainer
Definition: TileRawChannelContainer.h:13
TileRawChannelCollectionVec
Definition: TileRawChannelContainer.h:35
TileRawDataCollectionVec::m_type
TileFragHash::TYPE m_type
Definition: TileRawDataContainer.h:100
TileRawChannelContainerCnv::createTransient
TileRawChannelContainer * createTransient()
Definition: TileRawChannelContainerCnv.cxx:17
IdentifiableContainerMT::addCollection
virtual StatusCode addCollection(const T *coll, IdentifierHash hashId) override final
insert collection into container with id hash if IDC should not take ownership of collection,...
Definition: IdentifiableContainerMT.h:300
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TPPolyCnvBase::createTransient
virtual TRANS * createTransient(const PERS *persObj, MsgStream &log)
Create transient representation of a persistent object.
TileFragHash::TYPE
TYPE
initialize
Definition: TileFragHash.h:33
skel.it
it
Definition: skel.GENtoEVGEN.py:423
TileRawChannelContainerCnv.h
TPAbstractPolyCnvBase::createPersistent
virtual PERS * createPersistent(const TRANS *transObj, MsgStream &log)
Create persistent representation of a transient object.
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
TileRawDataContainer::set_bsflags
void set_bsflags(uint32_t bsflags)
Definition: TileRawDataContainer.h:65
pool::Guid
::Guid Guid
Definition: T_AthenaPoolCustCnv.h:19
TileRawChannelCollection::ID
MyBase::ID ID
Definition: TileRawChannelCollection.h:17
python.InDetPriVxFinderConfig.mlog
mlog
Definition: InDetPriVxFinderConfig.py:134
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
DataModel_detail::iterator
(Non-const) Iterator class for DataVector/DataList.
Definition: DVLIterator.h:184
SG::OWN_ELEMENTS
@ OWN_ELEMENTS
this data object owns its elements
Definition: OwnershipPolicy.h:17
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TileRawDataCollection::setOwnership
void setOwnership(SG::OwnershipPolicy ownPolicy)
Definition: TileRawDataCollection.h:110
TileRawDataCollection::identify
ID identify() const
Definition: TileRawDataCollection.h:71
TileRawChannelCollection
Definition: TileRawChannelCollection.h:12
TileRawDataContainer::hashFunc
const TileFragHash & hashFunc() const
Definition: TileRawDataContainer.h:66
TileRawChannelContainerCnv::createPersistent
TileRawChannelContainer_PERS * createPersistent(TileRawChannelContainer *transCont)
Definition: TileRawChannelContainerCnv.cxx:10
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
TileRawDataContainer::set_type
void set_type(TYPE type)
Definition: TileRawDataContainer.h:63
TileRawChannelContainer_p1
Definition: TileRawChannelContainer_p1.h:19
TileRawChannelContainerCnv_p1.h
TileRawChannelContainer
Athena::TPCnvVers::Old Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current TileRawChannelContainer
Definition: TileTPCnv.cxx:127
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:20
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
T_TilePoolContainerCnv
Definition: T_TilePoolContainerCnv.h:24
T_AthenaPoolCustCnv< TileRawChannelContainer, TileRawChannelContainer_PERS >::compareClassGuid
virtual bool compareClassGuid(const Guid &clid) const
Compare POOL class GUID with the one of the object being read.
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.