diff --git a/src/OutputFileHandler.cc b/src/OutputFileHandler.cc index dba0aafdff5a3fa4d33a6b9548071e23700dd24f..8649556fd7cff3a8de0f20ae911dfca5572cd94d 100644 --- a/src/OutputFileHandler.cc +++ b/src/OutputFileHandler.cc @@ -1,5 +1,7 @@ #include "OutputFileHandler.h" +#include <stdint.h> + #include <atomic> #include <cassert> #include <string> @@ -15,6 +17,22 @@ std::string OutputFileHandler::GetSinkDataDir() const { return Detail::FormatRun(run_.number) + "/"; } +uint32_t OutputFileHandler::GetMaxFileIndexPerLumisection() { + auto max_index = static_cast<uint32_t>(constants::N_orbits_per_lumisection / nOrbitsPerFile_) - 1; + if (HasCmsswHeaders()) { + return 10; + } else { + return UINT32_MAX; + } +} + +uint32_t OutputFileHandler::GetLumisectionFromFileIndex(int index) { + assert(index > 0 && nOrbitsPerFile_ > 0); + uint32_t i = index; + auto ls_index = 1 + (i * nOrbitsPerFile_) / constants::N_orbits_per_lumisection; + return 1 + i / 10; +} + void OutputFileHandler::UpdateRunInfo(uint32_t run, uint32_t index) { if (run_.number != static_cast<int>(run)) { LOG(TRACE) << "Previous run: " << run_.number << " | New run: " << run; @@ -27,12 +45,12 @@ void OutputFileHandler::UpdateRunInfo(uint32_t run, uint32_t index) { current_index_ = static_cast<int>(index); } +// 1706770016 //+ 96 +// 1706769920 // +864 +// 1706769056 + if (!ls_) { - if (HasCmsswHeaders()) - ls_ = std::make_unique<Detail::LumisectionMetadata>( - static_cast<uint32_t>(constants::N_orbits_per_lumisection / nOrbitsPerFile_) - 1); - else - ls_ = std::make_unique<Detail::LumisectionMetadata>(); + ls_ = std::make_unique<Detail::LumisectionMetadata>(GetMaxFileIndexPerLumisection()); } ls_->UpdateIndex(current_index_); @@ -100,15 +118,13 @@ void OutputFileHandler::CommitLumisection() { } void OutputFileHandler::CommitRun() { - assert(current_index_ > 0 && nOrbitsPerFile_ > 0); - int ls_index = 1 + (current_index_ * nOrbitsPerFile_) / constants::N_orbits_per_lumisection; - - auto lumi_number = ls_->lumisection; + auto ls_index = GetLumisectionFromFileIndex(current_index_); LOG(INFO) << "Lumi " << std::to_string(ls_index) << ". Assert that lumisection pointer exists: " << bool(ls_); if (ls_) { - assert(lumi_number == static_cast<uint32_t>(ls_index)); + auto lumi_number = ls_->lumisection; + assert(lumi_number == ls_index); if (IsMainPipeline()) { LOG(INFO) << "Committing lumi EOLS before EoR can be written"; diff --git a/src/OutputFileHandler.h b/src/OutputFileHandler.h index 47128bfe361c200e1546b2cee56968c1bd5cc045..ed8da0d28351ef21b64ae771c248352c8a8d032f 100644 --- a/src/OutputFileHandler.h +++ b/src/OutputFileHandler.h @@ -39,8 +39,7 @@ class OutputFileHandler { is_main_pipeline_(loc_.filename_suffix == ".raw"), sourceID_(source_id), sink_(root_path_, root_path_) { - ls_ = std::make_unique<Detail::LumisectionMetadata>( - static_cast<uint32_t>(constants::N_orbits_per_lumisection / num_orbits_per_file) - 1); + ls_ = std::make_unique<Detail::LumisectionMetadata>(GetMaxFileIndexPerLumisection()); } ~OutputFileHandler() { CommitFile(run_.number, current_index_); } @@ -49,6 +48,9 @@ class OutputFileHandler { int StageSlice(const char *buffer, size_t size_bytes, uint32_t size_orbits, uint32_t run_number, uint32_t file_index); + uint32_t GetMaxFileIndexPerLumisection(); + uint32_t GetLumisectionFromFileIndex(int index); + auto HasFile() const { return outputFile_.IsOpen(); } auto HasCmsswHeaders() const { return has_cmssw_headers_; } auto IsMainPipeline() const { return is_main_pipeline_; }