Skip to content

Commit dbedb97

Browse files
committed
o2 hdr: derive first orbit of old STF files where the stored DataHeader had no informaton
1 parent 572913f commit dbedb97

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

src/common/SubTimeFrameFileReader.cxx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,9 +284,6 @@ std::unique_ptr<SubTimeFrame> SubTimeFrameFileReader::read(SubTimeFrameFileBuild
284284
return nullptr;
285285
}
286286

287-
// TODO: fix fake first orbit
288-
reinterpret_cast<DataHeader*>(lDataHeaderStack.data())->firstTForbit = sStfId * 256;
289-
290287
auto lHdrStackMsg = pFileBuilder.getHeaderMessage(lDataHeaderStack, lStf->id());
291288
if (!lHdrStackMsg) {
292289
DDLOGF(fair::Severity::WARNING, "Out of memory: header message, allocation size: {}", lDataHeaderStackSize);
@@ -305,6 +302,18 @@ std::unique_ptr<SubTimeFrame> SubTimeFrameFileReader::read(SubTimeFrameFileBuild
305302
}
306303
buffered_read(lDataMsg->GetData(), lDataSize);
307304

305+
// Try to figure out the first orbit
306+
try {
307+
const auto lHdr = reinterpret_cast<DataHeader*>(lDataHeaderStack.data());
308+
309+
if (lHdr && lHdr->firstTForbit == 0 && lHdr->dataDescription == o2::header::gDataDescriptionRawData) {
310+
const auto R = RDHReader(lDataMsg);
311+
lStf->updateFirstOrbit(R.getOrbit());
312+
}
313+
} catch (...) {
314+
DDLOGF(fair::Severity::ERROR, "Error getting RDHReader instace. Not setting firstOrbit for file data");
315+
}
316+
308317
mStfData.emplace_back(
309318
SubTimeFrame::StfData{
310319
std::move(lHdrStackMsg),

src/common/SubTimeFrameVisitors.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ void InterleavedHdrDataSerializer::visit(SubTimeFrame& pStf)
4949
throw std::bad_alloc();
5050
}
5151
std::memcpy(lDataHeaderMsg->GetData(), &gStfDistDataHeader, sizeof(DataHeader));
52+
reinterpret_cast<DataHeader*>(lDataHeaderMsg->GetData())->firstTForbit = pStf.mFirstOrbit;
53+
reinterpret_cast<DataHeader*>(lDataHeaderMsg->GetData())->payloadSerializationMethod = gSerializationMethodNone;
5254

5355
auto lDataMsg = mChan.NewMessage(sizeof(SubTimeFrame::Header));
5456
if (!lDataMsg) {

0 commit comments

Comments
 (0)