7 #include <GaudiKernel/EventIDRange.h>
21 return StatusCode::SUCCESS;
30 if (writeHandle.isValid()) {
31 ATH_MSG_DEBUG(
"CondHandle " << writeHandle.fullKey() <<
" is already valid."
32 <<
". In theory this should not be called, but may happen"
33 <<
" if multiple concurrent events are being processed out of order.");
34 return StatusCode::SUCCESS;
36 std::unique_ptr<MuonAlignmentErrorData> writeCdo{std::make_unique<MuonAlignmentErrorData>()};
38 std::string clobContent;
42 if (clobContent.empty()) {
44 return StatusCode::FAILURE;
47 std::istringstream indata(clobContent);
50 return StatusCode::FAILURE;
57 std::vector<MuonAlignmentErrorData::MuonAlignmentErrorRule> MuonAlignmentErrorRuleVec;
59 while (getline(indata,
line)) {
61 if (
line.compare(0, 1,
"#") == 0) {
68 std::string name_sstring(
"");
69 std::string multilayer_sstring(
"");
70 double translation(0.);
74 if (
line.compare(0, 7,
"version") == 0) {
75 std::string clobVersion;
76 std::istringstream(
line) >>
flag >> clobVersion;
77 ATH_MSG_INFO(
"*****************************************");
79 ATH_MSG_INFO(
"*****************************************");
80 writeCdo->setClobVersion(std::move(clobVersion));
85 if (
line.compare(0, 12,
"has_nsw_hits") == 0) {
86 bool hasNswHits{
false};
87 std::istringstream(
line) >>
flag >> hasNswHits;
88 writeCdo->setHasNswHits(hasNswHits);
95 if (std::istringstream(
line) >>
flag >> name_sstring >> multilayer_sstring >> translation >>
rotation) {
105 MuonAlignmentErrorRuleVec.emplace_back(std::move(aDev));
111 std::vector<MuonAlignmentErrorData::MuonAlignmentErrorRuleCache> MuonAlignmentErrorRuleCacheVec;
115 if (writeCdo->hasNswHits() == 1){
143 MuonAlignmentErrorRuleCacheVec.emplace_back(std::move(aDev_cache));
144 if (MuonAlignmentErrorRuleVec.empty()) {
146 return StatusCode::FAILURE;
149 writeCdo->setAlignmentErrorRules(std::move(MuonAlignmentErrorRuleVec));
150 writeCdo->setMuonAlignmentErrorRuleCache(std::move(MuonAlignmentErrorRuleCacheVec));
152 if (writeHandle.record(rangeW, std::move(writeCdo)).isFailure()) {
153 ATH_MSG_FATAL(
"Could not record MuonAlignmentErrorData " << writeHandle.key() <<
" with EventRange " << rangeW
154 <<
" into Conditions Store");
155 return StatusCode::FAILURE;
157 ATH_MSG_INFO(
"recorded new " << writeHandle.key() <<
" with range " << rangeW <<
" into Conditions Store");
159 return StatusCode::SUCCESS;
164 std::vector<MuonAlignmentErrorData::MuonAlignmentErrorRule>& devVec)
const {
166 for(
auto itr = helper_obj.detectorElement_begin(); itr!= helper_obj.detectorElement_end(); ++itr){
169 if (!calibId.
isValid())
continue;
173 }
else if (calibId.
is_mmg()) {
175 }
else if (calibId.
is_stg()) {
182 for (
auto& iDev : devVec){
183 if (!boost::regex_match(alignStationName, iDev.stationName)) {
187 if (!boost::regex_match(multilayerName, iDev.multilayer)) {
203 if (readCdo ==
nullptr) {
205 return std::make_tuple(std::string(), EventIDRange());
209 if (!readHandle.range(rangeW)) {
210 ATH_MSG_ERROR(
"Failed to retrieve validity range for " << readHandle.key());
211 return std::make_tuple(std::string(), EventIDRange());
214 ATH_MSG_INFO(
"Size of CondAttrListCollection " << readHandle.fullKey() <<
" readCdo->size()= " << readCdo->size());
219 std::string clobContent, dbClobVersion;
221 for (itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
223 clobContent = *(
static_cast<const std::string*
>((atr[
"syserrors"]).addressOfData()));
224 dbClobVersion = *(
static_cast<const std::string*
>((atr[
"version"]).addressOfData()));
226 return std::make_tuple(std::move(clobContent), rangeW);
235 return std::make_tuple(std::string(), EventIDRange());
247 if (
sector(calibId)==13) {
259 return calibId.
eta()>0 ?
"A" : calibId.
eta()<0 ?
"C" :
"B";
263 int sec =
sector(calibId);
264 if (sec<0 || sec > 99) {
265 throw std::runtime_error(
"Unhandled sector number");
273 return calibId.
phi();
289 case StationName::EES:
290 case StationName::EMS:
291 case StationName::EOS:
292 case StationName::EIS:
294 case StationName::BMG:
295 case StationName::MMS:
296 case StationName::STS:
308 if (
sector(calibId)==13) {
309 switch (calibId.
eta()) {
318 return calibId.
eta();
323 if (
sector(calibId)==13) {
324 if (calibId.
eta()== 7)
return 1;
325 if (calibId.
eta()==-7)
return -1;
327 return calibId.
eta();
331 return calibId.
eta()>0 ? calibId.
eta()*2-1 : calibId.
eta()*2+1;
334 return calibId.
eta()*2;
335 case StationName::EIL:
338 switch (calibId.
eta()) {
346 return calibId.
eta();
348 case StationName::EEL:
351 if ((
sector(calibId) == 5) && (calibId.
eta() == 1))
return 2;
352 if ((
sector(calibId) == 5) && (calibId.
eta() == -1))
return -2;
353 return calibId.
eta();
355 default:
return calibId.
eta();