ATLAS Offline Software
Loading...
Searching...
No Matches
CscRdoToCscPrepDataToolMT.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8#include "GaudiKernel/ThreadLocalContext.h"
10#include "MuonRDO/CscRawData.h"
14#include "TrkSurfaces/Surface.h"
16
17using namespace MuonGM;
18using namespace Trk;
19using namespace Muon;
20
21CscRdoToCscPrepDataToolMT::CscRdoToCscPrepDataToolMT(const std::string& type, const std::string& name, const IInterface* parent) :
22 base_class(type, name, parent) {}
23
24
26 ATH_CHECK(m_cscCalibTool.retrieve());
28 ATH_CHECK(m_idHelperSvc.retrieve());
29 ATH_CHECK(m_cabling.retrieve());
30
31 // initialize handle keys
32 ATH_CHECK(m_rdoContainerKey.initialize());
33 ATH_CHECK(m_outputCollectionKey.initialize());
34 ATH_CHECK(m_muDetMgrKey.initialize());
36 return StatusCode::SUCCESS;
37}
38
39StatusCode CscRdoToCscPrepDataToolMT::decode(const EventContext&, const std::vector<uint32_t>&) const {
40 ATH_MSG_FATAL("ROB based decoding is not supported....");
41 return StatusCode::FAILURE;
42}
43StatusCode CscRdoToCscPrepDataToolMT::provideEmptyContainer(const EventContext& ctx) const{
46
47 // Caching of PRD container
48 if (m_prdContainerCacheKey.key().empty()) {
49 // without the cache we just record the container
50 ATH_CHECK(outputHandle.record(std::make_unique<Muon::CscStripPrepDataContainer>(m_idHelperSvc->cscIdHelper().module_hash_max())));
51 ATH_MSG_DEBUG("Created container " << m_outputCollectionKey.key());
52 } else {
53 // use the cache to get the container
55 if (!update.isValid()) {
56 ATH_MSG_FATAL("Invalid UpdateHandle " << m_prdContainerCacheKey.key());
57 return StatusCode::FAILURE;
58 }
59 ATH_CHECK(outputHandle.record(std::make_unique<Muon::CscStripPrepDataContainer>(update.ptr())));
60 ATH_MSG_DEBUG("Created container using cache for " << m_prdContainerCacheKey.key());
61 }
62 return StatusCode::SUCCESS;
63}
64StatusCode CscRdoToCscPrepDataToolMT::decode(const EventContext& ctx, const std::vector<IdentifierHash>& givenIdhs) const {
65 // WARNING : Trigger Part is not finished.
66 unsigned int sizeVectorRequested = givenIdhs.size();
67 ATH_MSG_DEBUG("decode for " << sizeVectorRequested << " offline collections called");
68
69
72
73 // Caching of PRD container
74 if (m_prdContainerCacheKey.key().empty()) {
75 // without the cache we just record the container
76 ATH_CHECK(outputHandle.record(std::make_unique<Muon::CscStripPrepDataContainer>(m_idHelperSvc->cscIdHelper().module_hash_max())));
77 ATH_MSG_DEBUG("Created container " << m_outputCollectionKey.key());
78 } else {
79 // use the cache to get the container
81 if (!update.isValid()) {
82 ATH_MSG_FATAL("Invalid UpdateHandle " << m_prdContainerCacheKey.key());
83 return StatusCode::FAILURE;
84 }
85 ATH_CHECK(outputHandle.record(std::make_unique<Muon::CscStripPrepDataContainer>(update.ptr())));
86 ATH_MSG_DEBUG("Created container using cache for " << m_prdContainerCacheKey.key());
87 }
88 // Pass the container from the handle
89 Muon::CscStripPrepDataContainer* outputCollection = outputHandle.ptr();
90
91 // retrieve the pointer to the RDO container
92 // this will just get the pointer from memory if the container is already recorded in SG
93 // or
94 // will activate the TP converter for reading from pool root the RDO container and recording it in SG
95
96 auto rdoContainerHandle = SG::makeHandle(m_rdoContainerKey, ctx);
97 if (!rdoContainerHandle.isValid()) {
98 ATH_MSG_WARNING("No CSC RDO container in StoreGate!");
99 return StatusCode::SUCCESS;
100 }
101 const CscRawDataContainer* rdoContainer = rdoContainerHandle.cptr();
102
103 ATH_MSG_DEBUG("Retrieved " << rdoContainer->size() << " CSC RDOs.");
104 // here the RDO container is in SG and its pointer rdoContainer is initialised
105 // decoding
106 if (sizeVectorRequested) {
107 // seeded decoding
108 for (unsigned int i = 0; i < sizeVectorRequested; ++i) {
109 if (decodeImpl(outputCollection, rdoContainer, givenIdhs[i]).isFailure()) {
110 ATH_MSG_ERROR("Unable to decode CSC RDO " << i << "th into CSC PrepRawData");
111 return StatusCode::FAILURE;
112 }
113 }
114 } else {
115 // unseeded decoding
116 if (decodeImpl(outputCollection, rdoContainer).isFailure()) {
117 ATH_MSG_ERROR("Unable to decode CSC RDO ");
118 return StatusCode::FAILURE;
119 }
120 }
121
122 return StatusCode::SUCCESS;
123}
124
126 const CscRawDataContainer* rdoContainer,
127 IdentifierHash givenHashId) const {
128 IdContext cscContext = m_idHelperSvc->cscIdHelper().module_context();
130 const MuonGM::MuonDetectorManager* muDetMgr = muDetMgrHandle.cptr();
131
132 // if CSC decoding is switched off stop here
133 if (!m_decodeData) {
134 ATH_MSG_DEBUG("Stored empty container; Decoding CSC RDO into CSC PrepRawData is switched off");
135 return StatusCode::SUCCESS;
136 }
137
138 // These collections can be empty for the trigger
139 if (!outputCollection || outputCollection->empty()) {
140 ATH_MSG_DEBUG("Stored empty collection.");
141 return StatusCode::SUCCESS;
142 }
143
144 ATH_MSG_DEBUG("Decoding CSC RDO into CSC PrepRawData");
146 //**********************************************
147 // retrieve specific collection for the givenID
148 uint16_t idColl = 0xffff;
149 m_cabling->hash2CollectionId(givenHashId, idColl);
150 const CscRawDataCollection* rawCollection = rdoContainer->indexFindPtr(idColl);
151 if (nullptr == rawCollection) {
152 ATH_MSG_DEBUG("Specific CSC RDO collection retrieving failed for collection hash = " << idColl);
153 return StatusCode::SUCCESS;
154 }
155
156 ATH_MSG_DEBUG("Retrieved " << rawCollection->size() << " CSC RDOs.");
157 // return if the input raw collection is empty (can happen for seeded decoding in trigger)
158 if (rawCollection->empty()) return StatusCode::SUCCESS;
159
160 //************************************************
161 IdentifierHash cscHashId;
162
163 unsigned int samplingTime = rawCollection->rate();
164 unsigned int numSamples = rawCollection->numSamples();
165 bool samplingPhase = rawCollection->samplingPhase();
166 std::vector<float> charges;
167 charges.reserve(4);
168 std::vector<uint16_t> samples;
169 samples.reserve(4);
170
171 if (int(samplingTime) != int(m_cscCalibTool->getSamplingTime())) {
172 ATH_MSG_WARNING(" CSC sampling time from Collection is NOT consistant to calibTool parameter!!!!!!! ");
173 }
174
175 // For each Rdo, loop over RawData, converter RawData to PrepRawData
176 // Retrieve/create PrepRawData collection, and insert PrepRawData into collection
177 CscRawDataCollection::const_iterator itD = rawCollection->begin();
178 CscRawDataCollection::const_iterator itD_e = rawCollection->end();
179
180 // Each RDO Collection goes into a PRD Collection, but we need to know what hash the PRD container is
181 // and this is determined by the stationID, no the RDO hash ID
182 ATH_MSG_DEBUG("CSC RDO ID " << rawCollection->identify() << " with hashID " << rawCollection->identifyHash());
183 // Just use the first iterator entry as stationID does not change between data inside a single container
184 Identifier stationId = m_cscRdoDecoderTool->stationIdentifier((const CscRawData*)(*itD), &m_idHelperSvc->cscIdHelper());
185 if (m_idHelperSvc->cscIdHelper().get_hash(stationId, cscHashId, &cscContext)) {
186 ATH_MSG_WARNING("Unable to get CSC digiti collection hash id "
187 << "context begin_index = " << cscContext.begin_index() << " context end_index = " << cscContext.end_index()
188 << " the identifier is ");
189 stationId.show();
190 }
191 ATH_MSG_DEBUG("Create CSC PRD Collection with hash " << cscHashId << " (givenHashId is " << givenHashId << ")");
192 std::unique_ptr<CscStripPrepDataCollection> collection = nullptr;
193 CscStripPrepDataContainer::IDC_WriteHandle lock = outputCollection->getWriteHandle(cscHashId);
194 // Note that if the hash check above works, we should never reach this step where the lock is present
195 if (lock.alreadyPresent()) {
196 ATH_MSG_DEBUG("CSC PRD collection already exist with collection hash = " << cscHashId << " collection filling is skipped!");
197 return StatusCode::SUCCESS;
198 } else {
199 ATH_MSG_DEBUG("CSC PRD collection does not exist - creating a new one with hash = " << cscHashId);
200 collection = std::make_unique<CscStripPrepDataCollection>(cscHashId);
201 collection->setIdentifier(stationId);
202 }
203
204 for (; itD != itD_e; ++itD) {
205 const CscRawData* data = (*itD);
206 uint16_t width = data->width();
207 uint16_t totalSamples = (data->samples()).size();
208 uint32_t hashOffset = data->hashId();
209
210 ATH_MSG_DEBUG(" Size of online cluster in this RawData: "
211 << " Width = " << width << " Samples = " << totalSamples << " stationId : " << stationId
212 << " hashOffset : " << hashOffset);
213
214 for (unsigned int j = 0; j < width; ++j) {
215 const Identifier channelId = m_cscRdoDecoderTool->channelIdentifier(data, &m_idHelperSvc->cscIdHelper(), j);
216 ATH_MSG_DEBUG(" LOOP over width " << j << " " << channelId);
217
218 const CscReadoutElement* descriptor = muDetMgr->getCscReadoutElement(channelId);
219 // calculate local positions on the strip planes
220 if (!descriptor) {
221 ATH_MSG_WARNING("Invalid descriptor for " << m_idHelperSvc->cscIdHelper().show_to_string(channelId)
222 << " Skipping channel ");
223 continue;
224 } else if (!descriptor->containsId(channelId)) {
225 ATH_MSG_WARNING("Identifier from the cabling service <"
226 << m_idHelperSvc->cscIdHelper().show_to_string(channelId)
227 << "> inconsistent with the geometry of detector element <"
228 << m_idHelperSvc->cscIdHelper().show_to_string(descriptor->identify()) << "> =>>ignore this hit");
229 continue;
230 }
231
232 float timeOfFirstSample = 0.0;
233 bool extractSamples = data->samples(j, numSamples, samples);
234 if (!extractSamples) {
235 ATH_MSG_WARNING("Unable to extract samples for strip " << j << " Online Cluster width = " << width
236 << " for number of Samples = " << numSamples << " continuing ...");
237 continue;
238 }
239
240 IdentifierHash stripHash;
241 if (m_idHelperSvc->cscIdHelper().get_channel_hash(channelId, stripHash)) {
242 ATH_MSG_WARNING("Unable to get CSC strip hash id");
243 channelId.show();
244 }
245
246 bool adctocharge = m_cscCalibTool->adcToCharge(samples, stripHash, charges);
247 if (!adctocharge) {
248 ATH_MSG_WARNING(" CSC conversion ADC to Charge failed "
249 << "CSC PrepData not build ... skipping ");
250 continue;
251 }
252 if (samples.size() >= 4)
253 ATH_MSG_DEBUG("ADC: " << m_idHelperSvc->cscIdHelper().show_to_string(channelId) << " " << samples[0] << " " << samples[1]
254 << " " << samples[2] << " " << samples[3] << " Charges: "
255 << " " << charges[0] << " " << charges[1] << " " << charges[2] << " " << charges[3]);
256
257 int measuresPhi = m_idHelperSvc->cscIdHelper().measuresPhi(channelId);
258
259 Amg::Vector2D localWirePos1(descriptor->xCoordinateInTrackingFrame(channelId), 0.);
260
261 int chamberLayer = m_idHelperSvc->cscIdHelper().chamberLayer(channelId);
262 float stripWidth = descriptor->cathodeReadoutPitch(chamberLayer, measuresPhi);
263 double errPos = stripWidth / sqrt(12.0);
264
265 AmgSymMatrix(2) covariance;
266 covariance.setIdentity();
267 covariance *= errPos * errPos;
268 Amg::MatrixX errClusterPos = Amg::MatrixX(covariance);
269
271 CscStripPrepData* newPrepData = new CscStripPrepData(channelId, cscHashId, localWirePos1, std::move(errClusterPos), descriptor,
272 charges, timeOfFirstSample, samplingTime);
273
274 if (samplingPhase) newPrepData->set_samplingPhase();
275 newPrepData->setHashAndIndex(collection->identifyHash(), collection->size());
276 collection->push_back(newPrepData);
277 }
278 }
279 // Record the container
280 StatusCode status_lock = lock.addOrDelete(std::move(collection));
281 if (status_lock.isFailure()) {
282 ATH_MSG_ERROR("Could not insert CscStripPrepdataCollection into CscStripPrepdataContainer...");
283 return StatusCode::FAILURE;
284 }
285 return StatusCode::SUCCESS;
286}
287
288//************** Process for all in case of Offline
290 const CscRawDataContainer* rdoContainer) const {
291 typedef CscRawDataContainer::const_iterator collection_iterator;
292
293 IdContext cscContext = m_idHelperSvc->cscIdHelper().module_context();
295 const MuonGM::MuonDetectorManager* muDetMgr = muDetMgrHandle.cptr();
296
297 // if CSC decoding is switched off stop here
298 if (!m_decodeData) {
299 ATH_MSG_DEBUG("Stored empty container. "
300 << "Decoding CSC RDO into CSC PrepRawData is switched off");
301 return StatusCode::SUCCESS;
302 }
303 ATH_MSG_DEBUG("Decoding CSC RDO into CSC PrepRawData");
304
305 collection_iterator rdoColl = rdoContainer->begin();
306 collection_iterator lastRdoColl = rdoContainer->end();
307 std::vector<float> charges;
308 charges.reserve(4);
309 std::vector<uint16_t> samples;
310 samples.reserve(4);
311
312 IdentifierHash cscHashId;
313 for (; rdoColl != lastRdoColl; ++rdoColl) {
314 if (!(*rdoColl)->empty()) {
315 ATH_MSG_DEBUG(" Number of RawData in this rdo " << (*rdoColl)->size());
316
317 const CscRawDataCollection* cscCollection = *rdoColl;
318 unsigned int samplingTime = cscCollection->rate();
319 unsigned int numSamples = cscCollection->numSamples();
320 bool samplingPhase = cscCollection->samplingPhase();
321
322 if (int(samplingTime) != int(m_cscCalibTool->getSamplingTime())) {
323 ATH_MSG_WARNING(" CSC sampling time from Collection is NOT consistant to calibTool parameter!!!!!!! ");
324 }
325 // For each Rdo, loop over RawData, converter RawData to PrepRawData
326 // Retrieve/create PrepRawData collection, and insert PrepRawData into collection
327 CscRawDataCollection::const_iterator itD = cscCollection->begin();
328 CscRawDataCollection::const_iterator itD_e = cscCollection->end();
329
330 // Each RDO Collection goes into a PRD Collection, but we need to know what hash the PRD container is
331 // and this is determined by the stationID, no the RDO hash ID
332 ATH_MSG_DEBUG("CSC RDO ID " << (*rdoColl)->identify() << " with hashID " << (*rdoColl)->identifyHash());
333 // Just use the first iterator entry as stationID does not change between data inside a single container
334 Identifier stationId = m_cscRdoDecoderTool->stationIdentifier((const CscRawData*)(*itD), &m_idHelperSvc->cscIdHelper());
335 if (m_idHelperSvc->cscIdHelper().get_hash(stationId, cscHashId, &cscContext)) {
336 ATH_MSG_WARNING("Unable to get CSC digiti collection hash id "
337 << "context begin_index = " << cscContext.begin_index()
338 << " context end_index = " << cscContext.end_index() << " the identifier is ");
339 stationId.show();
340 }
341
342 ATH_MSG_DEBUG("Create CSC PRD Collection with hash " << cscHashId);
343 std::unique_ptr<CscStripPrepDataCollection> collection = nullptr;
344 CscStripPrepDataContainer::IDC_WriteHandle lock = outputCollection->getWriteHandle(cscHashId);
345 if (lock.alreadyPresent()) {
346 ATH_MSG_DEBUG("CSC PRD collection already exist with collection hash = " << cscHashId << " collection filling is skipped!");
347 continue;
348 } else {
349 ATH_MSG_DEBUG("CSC PRD collection does not exist - creating a new one with hash = " << cscHashId);
350 collection = std::make_unique<CscStripPrepDataCollection>(cscHashId);
351 collection->setIdentifier(stationId);
352 }
353
354 // This loops over the RDO data, decodes and puts into the PRD collection
355 for (; itD != itD_e; ++itD) {
356 const CscRawData* data = (*itD);
357 uint16_t width = data->width();
358 uint16_t totalSamples = (data->samples()).size();
359 uint32_t hashOffset = data->hashId();
360
361 ATH_MSG_DEBUG("DecodeAll*Size of online cluster in this RawData: "
362 << " Width = " << width << " Samples = " << totalSamples << " stationId : " << stationId
363 << " hashOffset : " << hashOffset);
364
365 for (unsigned int j = 0; j < width; ++j) {
366 const Identifier channelId = m_cscRdoDecoderTool->channelIdentifier(data, &m_idHelperSvc->cscIdHelper(), j);
367 ATH_MSG_DEBUG("DecodeAll**LOOP over width " << j << " " << channelId);
368
369 const CscReadoutElement* descriptor = muDetMgr->getCscReadoutElement(channelId);
370 // calculate local positions on the strip planes
371 if (!descriptor) {
372 ATH_MSG_WARNING("Invalid descriptor for " << m_idHelperSvc->cscIdHelper().show_to_string(channelId)
373 << " Skipping channel ");
374 continue;
375 } else if (!descriptor->containsId(channelId)) {
376 ATH_MSG_WARNING("Identifier from the cabling service <"
377 << m_idHelperSvc->cscIdHelper().show_to_string(channelId)
378 << "> inconsistent with the geometry of detector element <"
379 << m_idHelperSvc->cscIdHelper().show_to_string(descriptor->identify()) << "> =>>ignore this hit");
380 continue;
381 }
382
383 float timeOfFirstSample = 0.0;
384 bool extractSamples = data->samples(j, numSamples, samples);
385 if (!extractSamples) {
386 ATH_MSG_WARNING("Unable to extract samples for strip " << j << " Online Cluster width = " << width
387 << " for number of Samples = " << numSamples
388 << " continuing ...");
389 continue;
390 }
391
392 IdentifierHash stripHash;
393 if (m_idHelperSvc->cscIdHelper().get_channel_hash(channelId, stripHash)) {
394 ATH_MSG_WARNING("Unable to get CSC strip hash id");
395 channelId.show();
396 }
397
398 Identifier channelIdFromHash;
399 m_idHelperSvc->cscIdHelper().get_id(stripHash, channelIdFromHash, &cscContext);
400
401 bool adctocharge = m_cscCalibTool->adcToCharge(samples, stripHash, charges);
402 if (!adctocharge) {
403 ATH_MSG_WARNING(" CSC conversion ADC to Charge failed "
404 << "CSC PrepData not build ... skipping ");
405 continue;
406 }
407 if (samples.size() >= 4)
408 ATH_MSG_DEBUG("DecodeAll*** ADC: "
409 << m_idHelperSvc->cscIdHelper().show_to_string(channelId) << " " << (int)stripHash << " "
410 << m_idHelperSvc->cscIdHelper().show_to_string(channelIdFromHash) << " " << samples[0] << " "
411 << samples[1] << " " << samples[2] << " " << samples[3] << " Charges: "
412 << " " << charges[0] << " " << charges[1] << " " << charges[2] << " " << charges[3]);
413 if (m_idHelperSvc->cscIdHelper().get_hash(stationId, cscHashId, &cscContext)) {
414 ATH_MSG_WARNING("Unable to get CSC hash id from CSC RDO collection "
415 << "context begin_index = " << cscContext.begin_index()
416 << " context end_index = " << cscContext.end_index() << " the identifier is ");
417 stationId.show();
418 }
419
420 // Check if this strip is already decoded.. Then we don't have to decode it again
421 bool IsThisStripDecoded = 0;
422 for (CscStripPrepDataCollection::const_iterator idig = collection->begin(); idig != collection->end(); ++idig) {
423 const CscStripPrepData& dig = **idig;
424 Identifier did = dig.identify();
425 if (did == channelId) {
426 IsThisStripDecoded = 1;
427 break;
428 }
429 }
430 if (IsThisStripDecoded) continue;
431
432 int measuresPhi = m_idHelperSvc->cscIdHelper().measuresPhi(channelId);
433
434 Amg::Vector2D localWirePos1(descriptor->xCoordinateInTrackingFrame(channelId), 0.);
435
436 int chamberLayer = m_idHelperSvc->cscIdHelper().chamberLayer(channelId);
437 float stripWidth = descriptor->cathodeReadoutPitch(chamberLayer, measuresPhi);
438 double errPos = stripWidth / sqrt(12.0);
439
440 AmgSymMatrix(2) covariance;
441 covariance.setIdentity();
442 covariance *= errPos * errPos;
443 auto errClusterPos = Amg::MatrixX(covariance);
444
446 CscStripPrepData* newPrepData = new CscStripPrepData(channelId, cscHashId, localWirePos1, std::move(errClusterPos),
447 descriptor, charges, timeOfFirstSample, samplingTime);
448
449 if (samplingPhase) newPrepData->set_samplingPhase();
450 newPrepData->setHashAndIndex(collection->identifyHash(), collection->size());
451 collection->push_back(newPrepData);
452 }
453 }
454 // Record the container after looping through all the RDO data in this RDO collection
455 StatusCode status_lock = lock.addOrDelete(std::move(collection));
456 if (status_lock.isFailure()) {
457 ATH_MSG_ERROR("Could not insert CscStripPrepdataCollection into CscStripPrepdataContainer...");
458 return StatusCode::FAILURE;
459 }
460 }
461 }
462 return StatusCode::SUCCESS;
463}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
#define AmgSymMatrix(dim)
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
const double width
Collection of CSC Raw Hits, arranged according to CSC Detector Elements Author: Ketevi A.
IdentifierHash identifyHash() const
Returns the OFFLINE identifier hash for this collection.
uint16_t identify() const
access methods
uint8_t rate() const
the rate could be 25 or 50 ns
This container provides access to collections of CSC RDOs and a mechanism for recording them.
Class to hold the electronic output for a single CSC readout channel: n sampling ADC data + the addre...
Definition CscRawData.h:21
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition IdContext.h:26
size_type begin_index() const
Definition IdContext.h:45
size_type end_index() const
Definition IdContext.h:46
StatusCode addOrDelete(std::unique_ptr< T > ptr)
const_iterator end() const
return const_iterator for end of container
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
size_t size() const
Duplicate of fullSize for backwards compatability.
const_iterator begin() const
return const_iterator for first entry
This is a "hash" representation of an Identifier.
void show(std::ostream &out=std::cout) const
Print out in hex form.
double cathodeReadoutPitch(int chLayer, int measuresPhi) const
double xCoordinateInTrackingFrame(const Identifier &id) const
virtual bool containsId(const Identifier &id) const override
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
const CscReadoutElement * getCscReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Identifier identify() const override final
Returns the ATLAS Identifier of the MuonReadOutElement.
Gaudi::Property< bool > m_decodeData
toggle on/off the decoding of CSC RDO into CscStripPrepData
SG::WriteHandleKey< Muon::CscStripPrepDataContainer > m_outputCollectionKey
CscStripPrepRawData containers.
virtual StatusCode initialize() override
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_muDetMgrKey
SG::UpdateHandleKey< CscStripPrepDataCollection_Cache > m_prdContainerCacheKey
This is the key for the cache for the CSC PRD containers, can be empty.
SG::ReadHandleKey< CscRawDataContainer > m_rdoContainerKey
ServiceHandle< CSCcablingSvc > m_cabling
StatusCode decodeImpl(Muon::CscStripPrepDataContainer *outputCollection, const CscRawDataContainer *rdoContainer, IdentifierHash givenHashId) const
virtual StatusCode provideEmptyContainer(const EventContext &ctx) const override
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
CscRdoToCscPrepDataToolMT(const std::string &type, const std::string &name, const IInterface *parent)
ToolHandle< ICSC_RDO_Decoder > m_cscRdoDecoderTool
virtual StatusCode decode(const EventContext &ctx, const std::vector< IdentifierHash > &givenIdhs) const override
ToolHandle< ICscCalibTool > m_cscCalibTool
CSC Calibration tools.
Class representing the raw data of one CSC strip (for clusters look at Muon::CscPrepData).
void set_samplingPhase()
set the sampling phase
const_pointer_type cptr()
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
Identifier identify() const
return the identifier
void setHashAndIndex(unsigned short collHash, unsigned short objIndex)
TEMP for testing: might make some classes friends later ...
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
Ensure that the Athena extensions are properly loaded.
Definition GeoMuonHits.h:27
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
MuonPrepDataContainerT< CscStripPrepData > CscStripPrepDataContainer
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Ensure that the ATLAS eigen extensions are properly loaded.