7#include <GaudiKernel/EventIDRange.h>
19 return StatusCode::SUCCESS;
30 <<
". In theory this should not be called, but may happen"
31 <<
" if multiple concurrent events are being processed out of order.");
32 return StatusCode::SUCCESS;
34 auto writeCdo{std::make_unique<MuonAlignmentErrorData>()};
36 std::string clobContent;
40 if (clobContent.empty()) {
42 return StatusCode::FAILURE;
45 std::istringstream indata(clobContent);
48 return StatusCode::FAILURE;
55 std::vector<MuonAlignmentErrorData::MuonAlignmentErrorRule> MuonAlignmentErrorRuleVec;
57 while (getline(indata, line)) {
59 if (line.compare(0, 1,
"#") == 0) {
66 std::string name_sstring(
"");
67 std::string multilayer_sstring(
"");
68 double translation(0.);
72 if (line.compare(0, 7,
"version") == 0) {
73 std::string clobVersion;
74 std::istringstream(line) >> flag >> clobVersion;
75 ATH_MSG_INFO(
"*****************************************");
77 ATH_MSG_INFO(
"*****************************************");
78 writeCdo->setClobVersion(std::move(clobVersion));
83 if (line.compare(0, 12,
"has_nsw_hits") == 0) {
84 bool hasNswHits{
false};
85 std::istringstream(line) >> flag >> hasNswHits;
86 writeCdo->setHasNswHits(hasNswHits);
93 if (std::istringstream(line) >> flag >> name_sstring >> multilayer_sstring >> translation >> rotation) {
94 ATH_MSG_DEBUG(flag <<
" " << name_sstring <<
" " << multilayer_sstring <<
" " << translation <<
" " << rotation);
103 MuonAlignmentErrorRuleVec.emplace_back(std::move(aDev));
109 std::vector<MuonAlignmentErrorData::MuonAlignmentErrorRuleCache> MuonAlignmentErrorRuleCacheVec;
113 if (writeCdo->hasNswHits() == 1){
141 MuonAlignmentErrorRuleCacheVec.emplace_back(std::move(aDev_cache));
142 if (MuonAlignmentErrorRuleVec.empty()) {
144 return StatusCode::FAILURE;
147 writeCdo->setAlignmentErrorRules(std::move(MuonAlignmentErrorRuleVec));
148 writeCdo->setMuonAlignmentErrorRuleCache(std::move(MuonAlignmentErrorRuleCacheVec));
150 if (writeHandle.
record(rangeW, std::move(writeCdo)).isFailure()) {
151 ATH_MSG_FATAL(
"Could not record MuonAlignmentErrorData " << writeHandle.
key() <<
" with EventRange " << rangeW
152 <<
" into Conditions Store");
153 return StatusCode::FAILURE;
155 ATH_MSG_INFO(
"recorded new " << writeHandle.
key() <<
" with range " << rangeW <<
" into Conditions Store");
157 return StatusCode::SUCCESS;
162 std::vector<MuonAlignmentErrorData::MuonAlignmentErrorRule>& devVec)
const {
164 for(
auto itr = helper_obj.detectorElement_begin(); itr!= helper_obj.detectorElement_end(); ++itr){
167 if (!calibId.
isValid())
continue;
171 }
else if (calibId.
is_mmg()) {
173 }
else if (calibId.
is_stg()) {
176 std::string multilayerName = std::to_string(multilayer);
180 for (
auto& iDev : devVec){
181 if (!boost::regex_match(alignStationName, iDev.stationName)) {
185 if (!boost::regex_match(multilayerName, iDev.multilayer)) {
204 if (!readCdo.
range(rangeW)) {
209 ATH_MSG_INFO(
"Size of CondAttrListCollection " <<
m_readKey.fullKey() <<
" readCdo->size()= " << readCdo->size());
214 std::string clobContent, dbClobVersion;
216 for (itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
217 const coral::AttributeList& atr = itr->second;
218 clobContent = *(
static_cast<const std::string*
>((atr[
"syserrors"]).addressOfData()));
219 dbClobVersion = *(
static_cast<const std::string*
>((atr[
"version"]).addressOfData()));
221 return std::make_tuple(std::move(clobContent), rangeW);
230 return std::make_tuple(std::string(), EventIDRange());
242 if (
sector(calibId)==13) {
243 if (calibId.
eta()== 7 && calibId.
stationName()==StationName::BOL)
return "BOE1A13";
244 if (calibId.
eta()==-7 && calibId.
stationName()==StationName::BOL)
return "BOE1C13";
245 if (calibId.
eta()== 8 && calibId.
stationName()==StationName::BOL)
return "BOE2A13";
246 if (calibId.
eta()==-8 && calibId.
stationName()==StationName::BOL)
return "BOE2C13";
254 return calibId.
eta()>0 ?
"A" : calibId.
eta()<0 ?
"C" :
"B";
258 int sec =
sector(calibId);
259 if (sec<0 || sec > 99) {
260 throw std::runtime_error(
"Unhandled sector number");
262 return std::to_string(sec/10) + std::to_string(sec%10);
268 return calibId.
phi();
277 case StationName::BIS:
278 case StationName::BMS:
279 case StationName::BOS:
280 case StationName::BEE:
281 case StationName::BMF:
282 case StationName::BOF:
283 case StationName::BOG:
284 case StationName::EES:
285 case StationName::EMS:
286 case StationName::EOS:
287 case StationName::EIS:
288 case StationName::CSS:
289 case StationName::BMG:
290 case StationName::MMS:
291 case StationName::STS:
301 case StationName::BML:
303 if (
sector(calibId)==13) {
304 switch (calibId.
eta()) {
313 return calibId.
eta();
315 case StationName::BOL:
318 if (
sector(calibId)==13) {
319 if (calibId.
eta()== 7)
return 1;
320 if (calibId.
eta()==-7)
return -1;
322 return calibId.
eta();
324 case StationName::BOF:
326 return calibId.
eta()>0 ? calibId.
eta()*2-1 : calibId.
eta()*2+1;
327 case StationName::BOG:
329 return calibId.
eta()*2;
330 case StationName::EIL:
333 switch (calibId.
eta()) {
341 return calibId.
eta();
343 case StationName::EEL:
346 if ((
sector(calibId) == 5) && (calibId.
eta() == 1))
return 2;
347 if ((
sector(calibId) == 5) && (calibId.
eta() == -1))
return -2;
348 return calibId.
eta();
350 default:
return calibId.
eta();
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
ChanAttrListMap::const_iterator const_iterator
static EventIDRange infiniteTime()
Produces an EventIDRange that is inifinite in Time and invalid in RunLumi.
size_t MuonAlignmentErrorRuleIndex
int stgMultilayer() const
Stg specific:
StationName
an enum with the station names
std::string_view stationNameString() const
StationName stationName() const
int mdtMultilayer() const
Mdt specific:
int mmgMultilayer() const
Mmg specific:
bool isValid() const
check validity of the identifier.
std::string sectorString(MuonCalib::MuonFixedLongId calibId) const
ToolHandle< MuonCalib::IIdToFixedIdTool > m_idTool
SG::WriteCondHandleKey< MuonAlignmentErrorData > m_writeKey
bool isSmallSector(MuonCalib::MuonFixedLongId calibId) const
int sector(MuonCalib::MuonFixedLongId calibId) const
StatusCode initialize() override
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
StatusCode execute(const EventContext &ctx) const override
SG::ReadCondHandleKey< CondAttrListCollection > m_readKey
int hardwareEta(MuonCalib::MuonFixedLongId calibId) const
std::string hardwareName(MuonCalib::MuonFixedLongId calibId) const
std::tuple< std::string, EventIDRange > getDbClobContent(const EventContext &ctx) const
std::tuple< std::string, EventIDRange > getFileClobContent() const
std::string_view side(MuonCalib::MuonFixedLongId calibId) const
void generateMap(const auto &helper_obj, const auto &idTool, MuonAlignmentErrorData::MuonAlignmentErrorRuleCache &adev_new, std::vector< MuonAlignmentErrorData::MuonAlignmentErrorRule > &devVec) const
Gaudi::Property< std::string > m_clobFileOverride
bool range(EventIDRange &r)
const std::string & key() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
const DataObjID & fullKey() const
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
std::unordered_multimap< Identifier, MuonAlignmentErrorRuleIndex > id_rule_map
For each multilayer identifier, cache the indices of the affecting rules.