Skip to content

Commit eb60797

Browse files
wpierozakwpierozak
authored andcommitted
Fixing bugs
1 parent 24919bb commit eb60797

File tree

5 files changed

+106
-94
lines changed

5 files changed

+106
-94
lines changed

Detectors/FIT/FT0/calibration/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ o2_add_library(FT0Calibration
3636
o2_add_executable(ft0-events-per-bc-processor
3737
COMPONENT_NAME calibration
3838
SOURCES workflow/FT0EventsPerBcProcessor-Workflow.cxx
39+
src/EventsPerBcCalibrator.cxx
3940
PUBLIC_LINK_LIBRARIES
4041
O2::FT0Calibration
4142
)

Detectors/FIT/FT0/calibration/include/FT0Calibration/EventsPerBcCalibrator.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33

44
#include <bitset>
55
#include <array>
6+
#include <TH1F.h>
67

78
#include "CommonDataFormat/FlatHisto2D.h"
89
#include "CommonConstants/LHCConstants.h"
910
#include "DataFormatsFT0/SpectraInfoObject.h"
11+
#include "DataFormatsFT0/Digit.h"
1012
#include "DetectorsCalibration/TimeSlotCalibration.h"
1113
#include "DetectorsCalibration/TimeSlot.h"
1214

Detectors/FIT/FT0/calibration/src/EventsPerBcCalibrator.cxx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "FT0Calibration/EventsPerBcCalibrator.h"
2+
#include "CommonUtils/MemFileHelper.h"
23

34
namespace o2::ft0
45
{
@@ -9,9 +10,9 @@ namespace o2::ft0
910

1011
void EventsPerBc::fill(const gsl::span<const o2::ft0::Digit> data)
1112
{
12-
for(const auto& digit: digits) {
13-
double isVertex = digit.mTriggers.isVertex();
14-
mTvx[digits.mIntRecord.bc] += isVertex;
13+
for(const auto& digit: data) {
14+
double isVertex = digit.mTriggers.getVertex();
15+
mTvx[digit.mIntRecord.bc] += isVertex;
1516
entries += isVertex;
1617
}
1718
}
@@ -21,29 +22,29 @@ namespace o2::ft0
2122
for(int bc = 0; bc < o2::constants::lhc::LHCMaxBunches; bc++){
2223
mTvx[bc] += prev->mTvx[bc];
2324
}
24-
entries += prev->mEntries;
25+
entries += prev->entries;
2526
}
2627

27-
void EventsPerBcCalibrator::initOutput() final
28+
void EventsPerBcCalibrator::initOutput()
2829
{
29-
mTvxPerBc.clear();
30-
mTvxPerBcInfo.clear();
30+
mTvxPerBcs.clear();
31+
mTvxPerBcInfos.clear();
3132
}
3233

33-
void EventsPerBcCalibrator::finalizeSlot(EventsPerBcCalibrator::Slot& slot) final
34+
void EventsPerBcCalibrator::finalizeSlot(EventsPerBcCalibrator::Slot& slot)
3435
{
3536
o2::ft0::EventsPerBc* data = slot.getContainer();
3637
mTvxPerBcs.emplace_back(std::make_unique<TH1F>("TvxPerBc", "FT0 TVX per BC", o2::constants::lhc::LHCMaxBunches, 0, o2::constants::lhc::LHCMaxBunches - 1));
3738
for(int bin = 0; bin < o2::constants::lhc::LHCMaxBunches; bin++) {
38-
mTvxPerBcs.back()->fill(bin, data->mTvx[bin]);
39+
mTvxPerBcs.back()->Fill(bin, data->mTvx[bin]);
3940
}
4041
auto clName = o2::utils::MemFileHelper::getClassName(*mTvxPerBcs.back());
4142
auto flName = o2::ccdb::CcdbApi::generateFileName(clName);
4243
std::map<std::string, std::string> metaData;
43-
mTvxPerBcInfos.emplace_back(std::make_unique<CcdbObjectInfo>("FT0/Calib/TvxPerBc", clName, flName, metaData, slot.getStarTimeMs(), slot.getEndTimeStampMS()));
44+
mTvxPerBcInfos.emplace_back(std::make_unique<o2::ccdb::CcdbObjectInfo>("FT0/Calib/TvxPerBc", clName, flName, metaData, slot.getStartTimeMS(), slot.getEndTimeMS()));
4445
}
4546

46-
EventsPerBcCalibrator::Slot& EventsPerBcCalibrator::emplaceNewSlot(bool front, TFType tstart, TFType tend) final
47+
EventsPerBcCalibrator::Slot& EventsPerBcCalibrator::emplaceNewSlot(bool front, TFType tstart, TFType tend)
4748
{
4849
auto& cont = getSlots();
4950
auto& slot = front ? cont.emplace_front(tstart, tend) : cont.emplace_back(tstart, tend);
Lines changed: 5 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,24 @@
1-
#include "Framework/runDataProcessing.h"
2-
#include "CommonUtils/ConfigurableParam.h"
3-
#include "Framework/ConfigParamSpec.h"
4-
#include <Framework/ConfigContext.h>
5-
#include "Framework/DeviceSpec.h"
6-
#include "Framework/WorkflowSpec.h"
7-
#include "Framework/Task.h"
8-
#include "DetectorsCalibration/Utils.h"
9-
10-
#include "DataFormatsFT0/Digit.h"
11-
#include "FT0Calibration/EventsPerBcCalibrator.h"
12-
13-
14-
namespace o2::calibration
15-
{
16-
class FT0EventsPerBcProcessor final : public o2::framework::Task
17-
{
18-
public:
19-
void init(o2::framework::InitContext& ic) final
20-
{
21-
mCalibrator = std::make_unique<o2::ft0::EventsPerBcCalibrator>();
22-
if(ic.options().hasOption("slot-len-sec")) {
23-
mSlotLenSec = ic.options().get<uint32_t>("slot-len-sec");
24-
}
25-
if(ic.options().hasOption("one-object-per-run")) {
26-
mOneObjectPerRun = ic.options().get<bool>("one-object-per-run");
27-
}
28-
29-
if(mOneObjectPerRun) {
30-
mCalibrator->setUpdateAtTheEndOfRunOnly();
31-
} else {
32-
mCalibrator->setSlotLengthInSeconds(mSlotLenSec);
33-
}
34-
}
35-
36-
void run(o2::framework::ProcessingContext& pc) final
37-
{
38-
auto digits = pc.inputs().get<gsl::span<o2::ft0::Digit>>("digits");
39-
mCalibrator->process(digits);
40-
if(mOneObjectPerRun == false) {
41-
sendOutput(pc.outputs());
42-
}
43-
}
44-
45-
void endOfStream(o2::framework::EndOfStreamContext& ec) final
46-
{
47-
mCalibrator->checkSlotsToFinalize();
48-
sendOutput(ec.outputs());
49-
mCalibrator->initOutput();
50-
}
51-
52-
void sendOutput(o2::framework::DataAllocator& output)
53-
{
54-
using o2::framework::Output;
55-
56-
const auto& tvxHists = mCalibrator->getTvxPerBc();
57-
auto& infos = mCalibrator->getTvxPerBcCcdbInfo();
58-
for(int idx = 0; idx < tvxHists.size(); idx++){
59-
auto& info = infos[idx];
60-
const auto& payload = tvxHists[idx];
61-
62-
auto image = o2::ccdb::CcdbApi::createObjectImage(payload.get(), info.get());
63-
LOG(info) << "Sending object " << info->getPath() << "/" << info->getFileName() << " of size " << image->size()
64-
<< " bytes, valid for " << info->getStartValidityTimestamp() << " : " << info->getEndValidityTimestamp();
65-
output.snapshot(Output(o2::calibration::Utils::gDataOriginCDBPayload, "EVENTS_PER_BC_INFO", 0), *image.get());
66-
output.snapshot(Output(o2::calibration::Utils::gDataOriginCDBWrapper, "EVENTS_PER_BC_INFO", 0), *info.get());
67-
}
68-
}
69-
70-
private:
71-
std::unique_ptr<o2::ft0::EventsPerBcCalibrator> mCalibrator;
72-
bool mOneObjectPerRun;
73-
uint32_t mSlotLenSec;
74-
};
75-
}
76-
77-
namespace o2::framework
78-
{
79-
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
1+
#include "FT0EventsPerBcSpec.h"
2+
o2::framework::WorkflowSpec defineDataProcessing(o2::framework::ConfigContext const& cfgc)
803
{
814
using namespace o2::framework;
825
using o2::calibration::FT0EventsPerBcProcessor;
836
std::vector<InputSpec> inputs;
847
inputs.emplace_back("digits", "FT0", "DIGITSBC");
858
std::vector<OutputSpec> outputs;
86-
outputs.emplace_back("eventsPerBcInfo", "FT0", "EVENTS_PER_BC_INFO");
9+
outputs.emplace_back(ConcreteDataTypeMatcher{"FT0", "EventsPerBc"}, Lifetime::Sporadic);
8710
DataProcessorSpec dataProcessorSpec{
8811
"FT0EventsPerBcProcessor",
8912
inputs,
9013
outputs,
9114
AlgorithmSpec(adaptFromTask<FT0EventsPerBcProcessor>()),
9215
Options{
93-
{"slot-len-sec", VariantType::UInt32, 3600u, "Time lenght of slot in seconds"},
94-
{"one-object-per-run", VariantType::Bool, false, "If true, then one calibration object is created per run"}
16+
{"slot-len-sec", VariantType::UInt32, 3600u, {"Time lenght of slot in seconds"}},
17+
{"one-object-per-run", VariantType::Bool, false, {"If true, then one calibration object is created per run"}}
9518
}
9619
};
9720

9821
WorkflowSpec workflow;
9922
workflow.emplace_back(dataProcessorSpec);
10023
return workflow;
101-
}
10224
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
2+
#ifndef O2_CALIBRATION_FT0_EVENTS_PER_BC_CALIBRATOR_H
3+
#define O2_CALIBRATION_FT0_EVENTS_PER_BC_CALIBRATOR_H
4+
5+
#include "Framework/runDataProcessing.h"
6+
#include "CommonUtils/ConfigurableParam.h"
7+
#include "Framework/ConfigParamSpec.h"
8+
#include <Framework/ConfigContext.h>
9+
#include "Framework/DeviceSpec.h"
10+
#include "Framework/WorkflowSpec.h"
11+
#include "Framework/Task.h"
12+
#include "DetectorsCalibration/Utils.h"
13+
14+
#include "DataFormatsFT0/Digit.h"
15+
#include "FT0Calibration/EventsPerBcCalibrator.h"
16+
17+
18+
namespace o2::calibration
19+
{
20+
class FT0EventsPerBcProcessor final : public o2::framework::Task
21+
{
22+
public:
23+
FT0EventsPerBcProcessor() = default;
24+
25+
void init(o2::framework::InitContext& ic) final
26+
{
27+
mCalibrator = std::make_unique<o2::ft0::EventsPerBcCalibrator>();
28+
if(ic.options().hasOption("slot-len-sec")) {
29+
mSlotLenSec = ic.options().get<uint32_t>("slot-len-sec");
30+
}
31+
if(ic.options().hasOption("one-object-per-run")) {
32+
mOneObjectPerRun = ic.options().get<bool>("one-object-per-run");
33+
}
34+
35+
if(mOneObjectPerRun) {
36+
mCalibrator->setUpdateAtTheEndOfRunOnly();
37+
} else {
38+
mCalibrator->setSlotLengthInSeconds(mSlotLenSec);
39+
}
40+
}
41+
42+
void run(o2::framework::ProcessingContext& pc) final
43+
{
44+
auto digits = pc.inputs().get<gsl::span<o2::ft0::Digit>>("digits");
45+
mCalibrator->process(digits);
46+
if(mOneObjectPerRun == false) {
47+
sendOutput(pc.outputs());
48+
}
49+
}
50+
51+
void endOfStream(o2::framework::EndOfStreamContext& ec) final
52+
{
53+
mCalibrator->checkSlotsToFinalize();
54+
sendOutput(ec.outputs());
55+
mCalibrator->initOutput();
56+
}
57+
58+
void sendOutput(o2::framework::DataAllocator& output)
59+
{
60+
using o2::framework::Output;
61+
62+
const auto& tvxHists = mCalibrator->getTvxPerBc();
63+
auto& infos = mCalibrator->getTvxPerBcCcdbInfo();
64+
for(int idx = 0; idx < tvxHists.size(); idx++){
65+
auto& info = infos[idx];
66+
const auto& payload = tvxHists[idx];
67+
68+
auto image = o2::ccdb::CcdbApi::createObjectImage(payload.get(), info.get());
69+
LOG(info) << "Sending object " << info->getPath() << "/" << info->getFileName() << " of size " << image->size()
70+
<< " bytes, valid for " << info->getStartValidityTimestamp() << " : " << info->getEndValidityTimestamp();
71+
output.snapshot(Output{o2::header::gDataOriginFT0, "EventsPerBc", idx}, *image.get());
72+
output.snapshot(Output{o2::header::gDataOriginFT0, "EventsPerBc", idx}, *info.get());
73+
}
74+
75+
if(tvxHists.size()) {
76+
mCalibrator->initOutput();
77+
}
78+
}
79+
80+
private:
81+
std::unique_ptr<o2::ft0::EventsPerBcCalibrator> mCalibrator;
82+
bool mOneObjectPerRun;
83+
uint32_t mSlotLenSec;
84+
};
85+
}
86+
#endif

0 commit comments

Comments
 (0)