57 ATH_MSG_DEBUG(
" ***************** Start of process STGC Collection with hash Id: " <<
hash);
59 auto stgcPrepDataContainer = xAODcontainers.prd;
61 if ( stgcPrepDataContainer->indexFindPtr(
hash) !=
nullptr ) {
62 ATH_MSG_DEBUG(
"In processCollection: collection already contained in the sTGC PrepData container");
63 return StatusCode::FAILURE;
71 ATH_MSG_DEBUG(
"In processCollection: collection already available in the sTgc PrepData container (via cache)");
72 return StatusCode::SUCCESS;
76 std::unique_ptr<sTgcPrepDataCollection> prdColl = std::make_unique<sTgcPrepDataCollection>(
hash);
81 int getId = id_helper.
get_id(
hash, moduleId, &context);
89 std::vector<sTgcPrepData> sTgcStripPrds;
90 std::vector<sTgcPrepData> sTgcWirePrds;
91 std::vector<sTgcPrepData> sTgcPadPrds;
92 sTgcStripPrds.reserve(rdoColl->
size());
93 sTgcPadPrds.reserve(rdoColl->
size());
94 sTgcWirePrds.reserve(rdoColl->
size());
101 if(!muonDetMgr.isValid()){
102 ATH_MSG_ERROR(
"Null pointer to the read MuonDetectorManager conditions object");
103 return StatusCode::FAILURE;
110 const Identifier rdoId = rdo->identify();
113 ATH_MSG_WARNING(
"The given Identifier "<<rdoId.get_compact()<<
" ("<<
m_idHelperSvc->toString(rdoId)<<
") is no sTGC Identifier, continuing");
117 std::vector<Identifier> rdoList;
118 rdoList.push_back(rdoId);
125 if (channelType < 0 || channelType > 2) {
127 return StatusCode::FAILURE;
131 if ( !getLocalPos ) {
133 return StatusCode::FAILURE;
143 int calibratedCharge =
static_cast<int>(calibStrip.
charge);
144 if (calibratedCharge < 0 && channelType == 1) {
145 if (!hitNegativeCharge) {
146 ATH_MSG_WARNING(
"One sTGC RDO or more, such as one with pdo = "<<rdo->charge() <<
" counts, corresponds to a negative charge (" << calibratedCharge <<
"). Skipping these RDOs");
147 hitNegativeCharge =
true;
153 if (channelType == sTgcIdHelper::sTgcChannelTypes::Pad) {
177 std::vector<sTgcPrepData>& sTgcPrds = channelType ==
sTgcIdHelper::Pad ? sTgcPadPrds :
181 auto it = std::find_if(sTgcPrds.begin(), sTgcPrds.end(), [&rdoId](
const sTgcPrepData& prd) {
182 return (prd.identify() == rdoId);
184 if (
it == sTgcPrds.end()) {
185 sTgcPrds.emplace_back(rdoId,
hash, std::move(localPos), std::move(rdoList), std::move(
cov), detEl, calibratedCharge, calibStrip.
time);
187 }
else if (
it->time() > calibStrip.
time) {
188 *
it =
sTgcPrepData(rdoId,
hash, std::move(localPos), std::move(rdoList), std::move(
cov), detEl, calibratedCharge, calibStrip.
time);
196 prdColl->
push_back(std::make_unique<sTgcPrepData>(rdoId,
209 std::vector<std::unique_ptr<Muon::sTgcPrepData>> sTgcStripClusters;
212 for ( std::unique_ptr<Muon::sTgcPrepData>&
it : sTgcStripClusters ) {
218 prdColl->
push_back(std::make_unique<sTgcPrepData>(std::move(prd)));
222 prdColl->
push_back(std::make_unique<sTgcPrepData>(std::move(prd)));
230 const Identifier prdId = prd->identify();
237 <<
", cov: "<<prd->localCovariance()(0,0)
240 outHit = xAODcontainers.pad->push_back(std::make_unique<xAOD::sTgcPadHit>());
242 lCov(0,0) = prd->localCovariance()(0,0);
245 outHit->setMeasurement<2>(
m_idHelperSvc->detElementHash(prdId),
249 outHit = xAODcontainers.wire->push_back(std::make_unique<xAOD::sTgcWireHit>());
251 auto stripHit = xAODcontainers.strip->push_back(std::make_unique<xAOD::sTgcStripCluster>());
252 stripHit->setStripCharges(prd->stripCharges());
253 stripHit->setStripNumbers(prd->stripNumbers());
254 stripHit->setStripTimes(prd->stripTimes());
260 if (
chType != sTgcIdHelper::sTgcChannelTypes::Pad){
263 lCov(0,0) = prd->localCovariance()(0,0);
264 outHit->setMeasurement<1>(
m_idHelperSvc->detElementHash(prdId),
269 outHit->setChannelNumber(
channel);
270 outHit->setGasGap(
gasGap);
271 outHit->setAuthor(prd->author());
272 outHit->setTime(prd->time());
273 outHit->setCharge(prd->charge());
274 outHit->setIdentifier(prdId.get_compact());
276 outHit->setReadoutElement(
m_detMgrR4->getsTgcReadoutElement(prdId));
286 return StatusCode::SUCCESS;