58{
60
61
62
63 const ILArShape* cellShape = nullptr;
65
66
67 const CaloCell_SuperCell_ID* caloSCID = nullptr;
69
70
71 const LArOnline_SuperCellID* onlSCID = nullptr;
73
74 const EventContext& ctx = Gaudi::Hive::currentContext();
75
76 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{
m_cablingKey, ctx};
77 const LArOnOffIdMapping*
cabling{*cablingHdl};
78 if(!cabling) {
80 return StatusCode::FAILURE;
81 }
82
83 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdlSC{
m_cablingKeySC, ctx};
84 const LArOnOffIdMapping* cablingSC{*cablingHdlSC};
85 if(!cablingSC) {
87 return StatusCode::FAILURE;
88 }
89
92
93
94 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
95 spec->extend(
"Shape",
"blob");
96 spec->extend(
"ShapeDer",
"blob");
97 spec->extend(
"TimeOffset",
"blob");
98 spec->extend<
unsigned>(
"nSamples");
99 spec->extend<
unsigned>(
"version");
100
102
103 const unsigned blobSize=hashMax*
nSamples;
105
106 coral::AttributeList attrList(*spec);
107 attrList["version"].setValue(0U);
108 coral::Blob& shapeBlob=attrList["Shape"].data<coral::Blob>();
109 coral::Blob& shapeDerBlob=attrList["ShapeDer"].data<coral::Blob>();
110 coral::Blob& toBlob=attrList["TimeOffset"].data<coral::Blob>();
111
113
115
116 attrList["nSamples"].setValue(nSamples);
117 shapeBlob.resize(blobSize*sizeof(float));
118 shapeDerBlob.resize(blobSize*sizeof(float));
119 toBlob.resize(hashMax*sizeof(float));
120
121 float *pShape=static_cast<float*>(shapeBlob.startingAddress());
122 float *pShapeDer=static_cast<float*>(shapeDerBlob.startingAddress());
123 float *pTimeOffset=static_cast<float*>(toBlob.startingAddress());
124
125
126
127 for (
unsigned i=0;
i<blobSize;++
i) {
130 }
131
132
133 for (
unsigned i=0;
i<hashMax;++
i) {
135 }
136
137 unsigned nTileIds=0;
138 unsigned nTotalIds=0;
141 for (;scIt!=scIt_e;++scIt) {
142 ++nTotalIds;
143 const Identifier scId=*scIt;
145 ++nTileIds;
146 continue;
147 }
148
149 const std::vector<Identifier> &cellIds=
m_scidTool->superCellToOfflineID(scId);
150 if (cellIds.empty()) {
151 ATH_MSG_ERROR(
"Got empty vector of cell ids for super cell id 0x"
153 return StatusCode::FAILURE;
154 }
155 const Identifier cellId=cellIds[0];
156
157
159 const IdentifierHash scOnlHash=onlSCID->
channel_Hash(scOnlId);
160
161 auto shape=cellShape->
Shape(
cabling->createSignalChannelID(cellId),0);
162 auto shapeDer=cellShape->
ShapeDer(
cabling->createSignalChannelID(cellId),0);
163
164 if (nSamples!=shape.size() || nSamples!=shapeDer.size()) {
166 ATH_MSG_ERROR(
"Expected" << nSamples <<
", Shape:" << shape.size() <<
", ShapeDer:" << shapeDer.size());
167 return StatusCode::FAILURE;
168 }
172
173 }
174
175 }
176
177
178 CondAttrListCollection* coll=new CondAttrListCollection(true);
180 coll->
add(0,attrList);
181
182 ATH_MSG_INFO(
"Total number of SuperCells:" << nTotalIds <<
", Tile:" << nTileIds
183 << ", LAr: " << nTotalIds-nTileIds);
184 LArShapeSC* scShape=new LArShapeSC(coll);
186
187 return StatusCode::SUCCESS;
188}
#define CHECK(...)
Evaluate an expression and check for errors.
const ServiceHandle< StoreGateSvc > & detStore() const
id_iterator cell_begin() const
begin iterator over full set of Identifiers (LAr + Tiles)
id_iterator cell_end() const
end iterator over full set of Identifiers (LAr + Tiles)
bool is_tile(const Identifier id) const
test if the id belongs to the Tiles
bool add(ChanNum chanNum, const AttributeList &attributeList)
Adding in chan/attrList pairs.
virtual ShapeRef_t Shape(const HWIdentifier &id, int gain, int tbin=0, int mode=0) const =0
virtual ShapeRef_t ShapeDer(const HWIdentifier &id, int gain, int tbin=0, int mode=0) const =0
value_type get_compact() const
Get the compact id.
HWIdentifier createSignalChannelID(const Identifier &id) const
create a HWIdentifier from an Identifier (not inline)
IdentifierHash channel_Hash(HWIdentifier channelId) const
Create channel_hash from channel_Id.
size_type channelHashMax() const
Define channel hash tables max size.
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKeySC
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
ToolHandle< ICaloSuperCellIDTool > m_scidTool
retrieve(aClass, aKey=None)