43 mMetaFileDir = ic.options().get<std::string>(
"meta-output-dir");
44 if (mMetaFileDir !=
"/dev/null") {
46 mStoreMetaFile =
true;
49 LOGP(info,
"Storing output in {}, meta file writing enabled: {}", mOutputDir, mStoreMetaFile);
50 mAutoSave = ic.options().get<
int>(
"autosave-interval");
52 char hostname[_POSIX_HOST_NAME_MAX];
53 gethostname(hostname, _POSIX_HOST_NAME_MAX);
55 mHostName = mHostName.substr(0, mHostName.find(
'.'));
60 mFileName = fmt::format(
"o2_trdKrCls_run{}_{}.root", runNumber, mHostName);
62 mFileOut = std::make_unique<TFile>(fileNameTmp.c_str(),
"recreate");
63 mTreeOut = std::make_unique<TTree>(
"krData",
"TRD krypton cluster data");
64 mTreeOut->Branch(
"cluster", &krClusterPtr);
65 mTreeOut->Branch(
"trigRec", &krTrigRecPtr);
67 mOutputFileCreated =
true;
72 if (!mOutputFileCreated) {
81 if (!mOutputFileCreated || mOutputFileClosed) {
84 std::lock_guard<std::mutex> guard(mMutex);
89 auto fileNameWithPath = mOutputDir + mFileName;
95 fileMetaData.
type =
"calib";
97 auto metaFileNameTmp = fmt::format(
"{}{}.tmp", mMetaFileDir, mFileName);
98 auto metaFileName = fmt::format(
"{}{}.done", mMetaFileDir, mFileName);
100 std::ofstream metaFileOut(metaFileNameTmp);
101 metaFileOut << fileMetaData;
103 std::filesystem::rename(metaFileNameTmp, metaFileName);
104 }
catch (std::exception
const& e) {
105 LOG(error) <<
"Failed to store meta data file " << metaFileName <<
", reason: " << e.what();
108 mOutputFileClosed =
true;
113 if (!mOutputFileCreated) {
117 if (mRunStopRequested) {
120 if (pc.transitionState() == TransitionHandlingState::Requested) {
121 LOG(info) <<
"Run stop requested, closing output file";
122 mRunStopRequested =
true;
126 auto cluster = pc.inputs().get<gsl::span<KrCluster>>(
"krcluster");
127 auto triggerRecords = pc.inputs().get<gsl::span<KrClusterTriggerRecord>>(
"krtrigrec");
128 for (
const auto& cls : cluster) {
129 krCluster.push_back(cls);
131 for (
const auto& trig : triggerRecords) {
132 krTrigRec.push_back(trig);
137 if (mAutoSave > 0 && ++mTFCounter % mAutoSave == 0) {
144 if (mRunStopRequested) {
147 LOG(info) <<
"End of stream received, closing output file";
152 bool mRunStopRequested{
false};
153 bool mStoreMetaFile{
false};
154 bool mOutputFileCreated{
false};
155 bool mOutputFileClosed{
false};
157 uint64_t mTFCounter{0};
159 std::string mOutputDir{
"none"};
160 std::string mMetaFileDir{
"/dev/null"};
161 std::string mHostName{};
162 std::string mFileName{};
163 std::unique_ptr<TFile> mFileOut{};
164 std::unique_ptr<TTree> mTreeOut{};
165 std::vector<KrCluster> krCluster, *krClusterPtr{&krCluster};
166 std::vector<KrClusterTriggerRecord> krTrigRec, *krTrigRecPtr{&krTrigRec};
ServiceRegistryRef services()
The services registry associated with this processing context.