8 #include "GaudiKernel/ThreadLocalContext.h"
21 CscRdoToCscPrepDataToolMT::CscRdoToCscPrepDataToolMT(
const std::string&
type,
const std::string&
name,
const IInterface*
parent) :
35 return StatusCode::SUCCESS;
40 return StatusCode::FAILURE;
56 return StatusCode::FAILURE;
61 return StatusCode::SUCCESS;
65 unsigned int sizeVectorRequested = givenIdhs.size();
66 ATH_MSG_DEBUG(
"decode for " << sizeVectorRequested <<
" offline collections called");
82 return StatusCode::FAILURE;
96 if (!rdoContainerHandle.isValid()) {
98 return StatusCode::SUCCESS;
105 if (sizeVectorRequested) {
107 for (
unsigned int i = 0;
i < sizeVectorRequested; ++
i) {
109 ATH_MSG_ERROR(
"Unable to decode CSC RDO " <<
i <<
"th into CSC PrepRawData");
110 return StatusCode::FAILURE;
117 return StatusCode::FAILURE;
121 return StatusCode::SUCCESS;
126 IdentifierHash givenHashId)
const {
133 ATH_MSG_DEBUG(
"Stored empty container; Decoding CSC RDO into CSC PrepRawData is switched off");
134 return StatusCode::SUCCESS;
140 return StatusCode::SUCCESS;
148 m_cabling->hash2CollectionId(givenHashId, idColl);
150 if (
nullptr == rawCollection) {
151 ATH_MSG_DEBUG(
"Specific CSC RDO collection retrieving failed for collection hash = " << idColl);
152 return StatusCode::SUCCESS;
157 if (rawCollection->
empty())
return StatusCode::SUCCESS;
160 IdentifierHash cscHashId;
162 unsigned int samplingTime = rawCollection->
rate();
163 unsigned int numSamples = rawCollection->
numSamples();
165 std::vector<float> charges;
167 std::vector<uint16_t> samples;
170 if (
int(samplingTime) !=
int(
m_cscCalibTool->getSamplingTime())) {
171 ATH_MSG_WARNING(
" CSC sampling time from Collection is NOT consistant to calibTool parameter!!!!!!! ");
184 if (
m_idHelperSvc->cscIdHelper().get_hash(stationId, cscHashId, &cscContext)) {
186 <<
"context begin_index = " << cscContext.
begin_index() <<
" context end_index = " << cscContext.
end_index()
187 <<
" the identifier is ");
190 ATH_MSG_DEBUG(
"Create CSC PRD Collection with hash " << cscHashId <<
" (givenHashId is " << givenHashId <<
")");
191 std::unique_ptr<CscStripPrepDataCollection> collection =
nullptr;
195 ATH_MSG_DEBUG(
"CSC PRD collection already exist with collection hash = " << cscHashId <<
" collection filling is skipped!");
196 return StatusCode::SUCCESS;
198 ATH_MSG_DEBUG(
"CSC PRD collection does not exist - creating a new one with hash = " << cscHashId);
199 collection = std::make_unique<CscStripPrepDataCollection>(cscHashId);
203 for (; itD != itD_e; ++itD) {
210 <<
" Width = " <<
width <<
" Samples = " << totalSamples <<
" stationId : " << stationId
211 <<
" hashOffset : " << hashOffset);
213 for (
unsigned int j = 0; j <
width; ++j) {
221 <<
" Skipping channel ");
226 <<
"> inconsistent with the geometry of detector element <"
231 float timeOfFirstSample = 0.0;
232 bool extractSamples =
data->samples(j, numSamples, samples);
233 if (!extractSamples) {
234 ATH_MSG_WARNING(
"Unable to extract samples for strip " << j <<
" Online Cluster width = " <<
width
235 <<
" for number of Samples = " << numSamples <<
" continuing ...");
239 IdentifierHash stripHash;
245 bool adctocharge =
m_cscCalibTool->adcToCharge(samples, stripHash, charges);
248 <<
"CSC PrepData not build ... skipping ");
251 if (samples.size() >= 4)
253 <<
" " << samples[2] <<
" " << samples[3] <<
" Charges: "
254 <<
" " << charges[0] <<
" " << charges[1] <<
" " << charges[2] <<
" " << charges[3]);
262 double errPos = stripWidth / sqrt(12.0);
265 covariance.setIdentity();
266 covariance *= errPos * errPos;
271 charges, timeOfFirstSample, samplingTime);
280 if (status_lock.isFailure()) {
281 ATH_MSG_ERROR(
"Could not insert CscStripPrepdataCollection into CscStripPrepdataContainer...");
282 return StatusCode::FAILURE;
284 return StatusCode::SUCCESS;
299 <<
"Decoding CSC RDO into CSC PrepRawData is switched off");
300 return StatusCode::SUCCESS;
304 collection_iterator rdoColl = rdoContainer->
begin();
305 collection_iterator lastRdoColl = rdoContainer->
end();
306 std::vector<float> charges;
308 std::vector<uint16_t> samples;
311 IdentifierHash cscHashId;
312 for (; rdoColl != lastRdoColl; ++rdoColl) {
313 if (!(*rdoColl)->empty()) {
314 ATH_MSG_DEBUG(
" Number of RawData in this rdo " << (*rdoColl)->size());
317 unsigned int samplingTime = cscCollection->
rate();
318 unsigned int numSamples = cscCollection->
numSamples();
321 if (
int(samplingTime) !=
int(
m_cscCalibTool->getSamplingTime())) {
322 ATH_MSG_WARNING(
" CSC sampling time from Collection is NOT consistant to calibTool parameter!!!!!!! ");
331 ATH_MSG_DEBUG(
"CSC RDO ID " << (*rdoColl)->identify() <<
" with hashID " << (*rdoColl)->identifyHash());
334 if (
m_idHelperSvc->cscIdHelper().get_hash(stationId, cscHashId, &cscContext)) {
336 <<
"context begin_index = " << cscContext.
begin_index()
337 <<
" context end_index = " << cscContext.
end_index() <<
" the identifier is ");
341 ATH_MSG_DEBUG(
"Create CSC PRD Collection with hash " << cscHashId);
342 std::unique_ptr<CscStripPrepDataCollection> collection =
nullptr;
345 ATH_MSG_DEBUG(
"CSC PRD collection already exist with collection hash = " << cscHashId <<
" collection filling is skipped!");
348 ATH_MSG_DEBUG(
"CSC PRD collection does not exist - creating a new one with hash = " << cscHashId);
349 collection = std::make_unique<CscStripPrepDataCollection>(cscHashId);
354 for (; itD != itD_e; ++itD) {
360 ATH_MSG_DEBUG(
"DecodeAll*Size of online cluster in this RawData: "
361 <<
" Width = " <<
width <<
" Samples = " << totalSamples <<
" stationId : " << stationId
362 <<
" hashOffset : " << hashOffset);
364 for (
unsigned int j = 0; j <
width; ++j) {
372 <<
" Skipping channel ");
377 <<
"> inconsistent with the geometry of detector element <"
382 float timeOfFirstSample = 0.0;
383 bool extractSamples =
data->samples(j, numSamples, samples);
384 if (!extractSamples) {
385 ATH_MSG_WARNING(
"Unable to extract samples for strip " << j <<
" Online Cluster width = " <<
width
386 <<
" for number of Samples = " << numSamples
387 <<
" continuing ...");
391 IdentifierHash stripHash;
398 m_idHelperSvc->cscIdHelper().get_id(stripHash, channelIdFromHash, &cscContext);
400 bool adctocharge =
m_cscCalibTool->adcToCharge(samples, stripHash, charges);
403 <<
"CSC PrepData not build ... skipping ");
406 if (samples.size() >= 4)
409 <<
m_idHelperSvc->cscIdHelper().show_to_string(channelIdFromHash) <<
" " << samples[0] <<
" "
410 << samples[1] <<
" " << samples[2] <<
" " << samples[3] <<
" Charges: "
411 <<
" " << charges[0] <<
" " << charges[1] <<
" " << charges[2] <<
" " << charges[3]);
412 if (
m_idHelperSvc->cscIdHelper().get_hash(stationId, cscHashId, &cscContext)) {
414 <<
"context begin_index = " << cscContext.
begin_index()
415 <<
" context end_index = " << cscContext.
end_index() <<
" the identifier is ");
420 bool IsThisStripDecoded = 0;
425 IsThisStripDecoded = 1;
429 if (IsThisStripDecoded)
continue;
437 double errPos = stripWidth / sqrt(12.0);
440 covariance.setIdentity();
441 covariance *= errPos * errPos;
446 descriptor, charges, timeOfFirstSample, samplingTime);
455 if (status_lock.isFailure()) {
456 ATH_MSG_ERROR(
"Could not insert CscStripPrepdataCollection into CscStripPrepdataContainer...");
457 return StatusCode::FAILURE;
461 return StatusCode::SUCCESS;