|
62 | 62 | #include <fcntl.h> |
63 | 63 | #include <unistd.h> |
64 | 64 | #include <regex> |
| 65 | +#include <numeric> |
65 | 66 |
|
66 | 67 | using namespace o2::framework; |
67 | 68 |
|
@@ -477,22 +478,24 @@ void CTFWriterSpec::run(ProcessingContext& pc) |
477 | 478 | CTFHeader header{mTimingInfo.runNumber, mTimingInfo.creation, mTimingInfo.firstTForbit, mTimingInfo.tfCounter}; |
478 | 479 | size_t szCTF = 0; |
479 | 480 | mSizeReport = ""; |
480 | | - szCTF += processDet<o2::itsmft::CTF>(pc, DetID::ITS, header, mCTFTreeOut.get()); |
481 | | - szCTF += processDet<o2::tpc::CTF>(pc, DetID::TPC, header, mCTFTreeOut.get()); |
482 | | - szCTF += processDet<o2::trd::CTF>(pc, DetID::TRD, header, mCTFTreeOut.get()); |
483 | | - szCTF += processDet<o2::tof::CTF>(pc, DetID::TOF, header, mCTFTreeOut.get()); |
484 | | - szCTF += processDet<o2::phos::CTF>(pc, DetID::PHS, header, mCTFTreeOut.get()); |
485 | | - szCTF += processDet<o2::cpv::CTF>(pc, DetID::CPV, header, mCTFTreeOut.get()); |
486 | | - szCTF += processDet<o2::emcal::CTF>(pc, DetID::EMC, header, mCTFTreeOut.get()); |
487 | | - szCTF += processDet<o2::hmpid::CTF>(pc, DetID::HMP, header, mCTFTreeOut.get()); |
488 | | - szCTF += processDet<o2::itsmft::CTF>(pc, DetID::MFT, header, mCTFTreeOut.get()); |
489 | | - szCTF += processDet<o2::mch::CTF>(pc, DetID::MCH, header, mCTFTreeOut.get()); |
490 | | - szCTF += processDet<o2::mid::CTF>(pc, DetID::MID, header, mCTFTreeOut.get()); |
491 | | - szCTF += processDet<o2::zdc::CTF>(pc, DetID::ZDC, header, mCTFTreeOut.get()); |
492 | | - szCTF += processDet<o2::ft0::CTF>(pc, DetID::FT0, header, mCTFTreeOut.get()); |
493 | | - szCTF += processDet<o2::fv0::CTF>(pc, DetID::FV0, header, mCTFTreeOut.get()); |
494 | | - szCTF += processDet<o2::fdd::CTF>(pc, DetID::FDD, header, mCTFTreeOut.get()); |
495 | | - szCTF += processDet<o2::ctp::CTF>(pc, DetID::CTP, header, mCTFTreeOut.get()); |
| 481 | + std::array<size_t, DetID::CTP + 1> szCTFperDet{0}; // DetID::TST is between FDD and CTP and remains empty |
| 482 | + szCTFperDet[DetID::ITS] = processDet<o2::itsmft::CTF>(pc, DetID::ITS, header, mCTFTreeOut.get()); |
| 483 | + szCTFperDet[DetID::TPC] = processDet<o2::tpc::CTF>(pc, DetID::TPC, header, mCTFTreeOut.get()); |
| 484 | + szCTFperDet[DetID::TRD] = processDet<o2::trd::CTF>(pc, DetID::TRD, header, mCTFTreeOut.get()); |
| 485 | + szCTFperDet[DetID::TOF] = processDet<o2::tof::CTF>(pc, DetID::TOF, header, mCTFTreeOut.get()); |
| 486 | + szCTFperDet[DetID::PHS] = processDet<o2::phos::CTF>(pc, DetID::PHS, header, mCTFTreeOut.get()); |
| 487 | + szCTFperDet[DetID::CPV] = processDet<o2::cpv::CTF>(pc, DetID::CPV, header, mCTFTreeOut.get()); |
| 488 | + szCTFperDet[DetID::EMC] = processDet<o2::emcal::CTF>(pc, DetID::EMC, header, mCTFTreeOut.get()); |
| 489 | + szCTFperDet[DetID::HMP] = processDet<o2::hmpid::CTF>(pc, DetID::HMP, header, mCTFTreeOut.get()); |
| 490 | + szCTFperDet[DetID::MFT] = processDet<o2::itsmft::CTF>(pc, DetID::MFT, header, mCTFTreeOut.get()); |
| 491 | + szCTFperDet[DetID::MCH] = processDet<o2::mch::CTF>(pc, DetID::MCH, header, mCTFTreeOut.get()); |
| 492 | + szCTFperDet[DetID::MID] = processDet<o2::mid::CTF>(pc, DetID::MID, header, mCTFTreeOut.get()); |
| 493 | + szCTFperDet[DetID::ZDC] = processDet<o2::zdc::CTF>(pc, DetID::ZDC, header, mCTFTreeOut.get()); |
| 494 | + szCTFperDet[DetID::FT0] = processDet<o2::ft0::CTF>(pc, DetID::FT0, header, mCTFTreeOut.get()); |
| 495 | + szCTFperDet[DetID::FV0] = processDet<o2::fv0::CTF>(pc, DetID::FV0, header, mCTFTreeOut.get()); |
| 496 | + szCTFperDet[DetID::FDD] = processDet<o2::fdd::CTF>(pc, DetID::FDD, header, mCTFTreeOut.get()); |
| 497 | + szCTFperDet[DetID::CTP] = processDet<o2::ctp::CTF>(pc, DetID::CTP, header, mCTFTreeOut.get()); |
| 498 | + szCTF = std::accumulate(szCTFperDet.begin(), szCTFperDet.end(), 0); |
496 | 499 | if (mReportInterval > 0 && (mTimingInfo.tfCounter % mReportInterval) == 0) { |
497 | 500 | LOGP(important, "CTF {} size report:{} - Total:{}", mTimingInfo.tfCounter, mSizeReport, fmt::group_digits(szCTF)); |
498 | 501 | } |
@@ -532,6 +535,7 @@ void CTFWriterSpec::run(ProcessingContext& pc) |
532 | 535 | } |
533 | 536 | int dummy = 0; |
534 | 537 | pc.outputs().snapshot({"ctfdone", 0}, dummy); |
| 538 | + pc.outputs().snapshot(Output{"CTF", "SIZES", 0}, szCTFperDet); |
535 | 539 | } |
536 | 540 |
|
537 | 541 | //___________________________________________________________________ |
@@ -797,7 +801,8 @@ DataProcessorSpec getCTFWriterSpec(DetID::mask_t dets, const std::string& outTyp |
797 | 801 | return DataProcessorSpec{ |
798 | 802 | "ctf-writer", |
799 | 803 | inputs, |
800 | | - Outputs{{OutputLabel{"ctfdone"}, "CTF", "DONE", 0, Lifetime::Timeframe}}, |
| 804 | + Outputs{{OutputLabel{"ctfdone"}, "CTF", "DONE", 0, Lifetime::Timeframe}, |
| 805 | + {"CTF", "SIZES", 0, Lifetime::Timeframe}}, |
801 | 806 | AlgorithmSpec{adaptFromTask<CTFWriterSpec>(dets, outType, verbosity, reportInterval)}, // RS FIXME once global/local options clash is solved, --output-type will become device option |
802 | 807 | Options{ //{"output-type", VariantType::String, "ctf", {"output types: ctf (per TF) or dict (create dictionaries) or both or none"}}, |
803 | 808 | {"save-ctf-after", VariantType::Int64, 0ll, {"autosave CTF tree with multiple CTFs after every N CTFs if >0 or every -N MBytes if < 0"}}, |
|
0 commit comments