98 <<
". In theory this should not be called, but may happen"
99 <<
" if multiple concurrent events are being processed out of order.");
100 return StatusCode::SUCCESS;
104 std::unique_ptr<SCT_CablingData> writeCdo{std::make_unique<SCT_CablingData>()};
108 unsigned int onlineId;
110 std::ifstream fromDataFile{
m_source.value().c_str()};
111 if (not fromDataFile) {
113 return StatusCode::FAILURE;
115 std::string inString;
116 bool endOfFile{
false};
118 if (inString.empty()) {
119 ATH_MSG_FATAL(
"The end of the datafile was reached before an identifier mapping was found");
120 return StatusCode::FAILURE;
123 bool endOfTable{
false};
124 unsigned int numEntries{0};
125 std::vector<IdentifierHash> disabledFibres;
127 std::getline(fromDataFile, inString);
128 if (
contains(inString,
"- "))
continue;
129 endOfTable=
contains(inString,
"</textList>");
130 std::istringstream dataLine(inString);
131 if (not endOfTable) {
132 int rod,link,barrelOrEndcap,layer,
phi,
eta,side,robidFromfile;
135 dataLine.exceptions(std::ios_base::badbit|std::ios_base::failbit);
137 dataLine>>rod>>Link>>barrelOrEndcap>>layer>>
eta>>
phi>>side>>std::hex>>robidFromfile>>std::dec>>sn;
139 offlineIdHash =
m_idHelper->wafer_hash(offlineId);
140 }
catch (
const std::ios_base::failure&) {
142 <<
", it may be badly formatted in the following line: \n" << inString);
147 if (Link.empty() or Link.size()>10) {
149 <<
", Link (" << Link <<
") cannot be converted to an integer");
153 link = std::stoi(Link,
nullptr, 0);
155 ATH_MSG_ERROR(
"link " << link <<
" seems invalid. This was obtained from Link " << Link <<
". Will not be used.");
159 ATH_MSG_DEBUG(sn <<
": Disabled fibre encountered in text file. Will attempt to place identifier using the other fibre.");
161 offlineIdHash =
m_idHelper->wafer_hash(offlineId);
162 disabledFibres.push_back(offlineIdHash);
165 robid = robidFromfile;
166 onlineId = (robid & 0xFFFFFF) | (link << 24);
170 ATH_MSG_ERROR(
"Insertion of fibre failed, " << offlineIdHash <<
", " << std::hex << onlineId << std::dec <<
" " << sn);
175 endOfFile = fromDataFile.eof();
176 }
while ((not endOfTable) and (not endOfFile));
181 std::string plural{(disabledFibres.size()==1) ?
" was" :
"s were"};
182 ATH_MSG_INFO(disabledFibres.size() <<
" disabled fibre" << plural <<
" found.");
183 if (not disabledFibres.empty()) {
185 std::vector<IdentifierHash>::const_iterator it{disabledFibres.begin()};
186 for (;it not_eq disabledFibres.end();++it) {
194 onlineId=writeCdo->getOnlineIdFromHash(otherIdHash);
195 int link{
static_cast<int>((onlineId>>24) & 0x7F)};
196 bool cableSwapped{(link % 2)!=os};
199 int newlink{(s == 0) ? (link - 1) : (link +1)};
200 if (cableSwapped) newlink = (s == 0) ? (link+1) : (link-1);
201 int newOnlineId{
static_cast<int>((onlineId & 0xFFFFFF)|(newlink << 24))};
205 bool success{
insert(offlineIdHash, newOnlineId, sn, writeCdo.get())};
207 ATH_MSG_ERROR(
"Insertion of disabled fibre failed, " << offlineIdHash <<
", " << std::hex << newOnlineId << std::dec <<
" " << sn.
str());
213 ATH_MSG_INFO(numEntries <<
" entries were made to the identifier map.");
216 const EventIDBase start{EventIDBase::UNDEFNUM, EventIDBase::UNDEFEVT, 0, 0, EventIDBase::UNDEFNUM, EventIDBase::UNDEFNUM};
217 const EventIDBase stop{EventIDBase::UNDEFNUM, EventIDBase::UNDEFEVT, EventIDBase::UNDEFNUM-1, EventIDBase::UNDEFNUM-1, EventIDBase::UNDEFNUM, EventIDBase::UNDEFNUM};
218 const EventIDRange rangeW{start, stop};
219 if (writeHandle.
record(rangeW, std::move(writeCdo)).isFailure()) {
221 <<
" with EventRange " << rangeW
222 <<
" into Conditions Store");
223 return StatusCode::FAILURE;
225 ATH_MSG_INFO(
"recorded new CDO " << writeHandle.
key() <<
" with range " << rangeW <<
" into Conditions Store");
227 return (numEntries==0) ? (StatusCode::FAILURE) : (StatusCode::SUCCESS);
static const std::string atlasTableSignature
Fills an SCT cabling object from a plain text source.
bool insert(const IdentifierHash &hash, const SCT_OnlineId &onlineId, const SCT_SerialNumber &sn, SCT_CablingData *data) const
SCT_CablingCondAlgFromText(const std::string &name, ISvcLocator *svc)
virtual StatusCode initialize() override
virtual StatusCode finalize() override
virtual StatusCode execute(const EventContext &ctx) const override
SG::WriteCondHandleKey< SCT_CablingData > m_writeKey