89 const EventContext& ctx = inc.context();
95 const FileIncident* fileInc =
dynamic_cast<const FileIncident*
>(&inc);
96 if (fileInc !=
nullptr) {
97 rangeID = fileInc->fileName();
99 if (inc.type() == IncidentType::BeginInputFile) {
103 "Requested (through incident) Next Event Range filename extension: "
107 if( rangeID ==
"dummy" ) {
113 bool disconnect {
true };
114 std::lock_guard lockg(
m_mutex );
116 throw GaudiException(
"Cannot transition MetaData", name(), StatusCode::FAILURE);
124 std::lock_guard lockg(
m_mutex );
126 if( rangeID.empty() ) {
127 std::ostringstream n;
130 ATH_MSG_DEBUG(
"Default next event range filename extension: " << rangeID);
132 else if (rangeID ==
"INFILE") {
145 bool disconnect {
false };
147 if( !
m_metaDataSvc->transitionMetaDataFile(
"" , disconnect ).isSuccess() ) {
148 throw GaudiException(
"Cannot transition MetaData", name(), StatusCode::FAILURE);
152 else if( inc.type() == IncidentType::BeginProcessing ) {
154 std::lock_guard lockg(
m_mutex );
168 std::lock_guard lockg(
m_mutex );
171 std::string fileNameCore = orgFileName, fileNameExt;
172 std::size_t sepPos = orgFileName.find(
'[');
173 if (sepPos != std::string::npos) {
174 fileNameCore = orgFileName.substr(0, sepPos);
175 fileNameExt = orgFileName.substr(sepPos);
177 std::ostringstream n;
178 n << fileNameCore <<
"." << rangeID << fileNameExt;
181 std::string_view origFileNameView = orgFileName;
182 std::size_t open = origFileNameView.find(
'[');
183 std::size_t close = origFileNameView.find(
']');
186 if (open == std::string_view::npos || close == std::string_view::npos) {
191 std::vector<std::string_view> elems{};
192 std::size_t pos = open + 1;
193 for (std::size_t comma = origFileNameView.find(
',', pos);
195 comma = origFileNameView.find(
',', pos)) {
196 std::string_view item = origFileNameView.substr(pos, comma - pos);
197 ATH_MSG_DEBUG(
"(start) pos = " << pos <<
", (end) comma = " << comma <<
", item = " << item);
198 elems.push_back(item);
201 std::string_view last_item = origFileNameView.substr(pos, close - pos);
202 ATH_MSG_DEBUG(
"(start) pos = " << pos <<
", (end) close = " << close <<
", item = " << last_item);
203 elems.push_back(last_item);
205 std::size_t rangeIdx{};
206 auto rangeIdxParseRes = std::from_chars(
207 rangeID.data(), rangeID.data() + rangeID.size(), rangeIdx);
208 if (rangeIdxParseRes.ec != std::errc()) {
210 "Error parsing rangeID to integer. Replacing [] list with "
213 std::format(
"{}{}{}", origFileNameView.substr(0, open), rangeID,
214 origFileNameView.substr(close + 1));
215 }
else if (rangeIdx >= elems.size()) {
217 "Number of elements in [] list <= rangeID. Replacing [] list with "
220 std::format(
"{}{}{}", origFileNameView.substr(0, open), rangeID,
221 origFileNameView.substr(close + 1));
224 "{}{}{}", origFileNameView.substr(0, open), elems.at(rangeIdx),
225 origFileNameView.substr(close + 1));