Project
Loading...
Searching...
No Matches
BaselineCalibEPNSpec.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
16#include <iostream>
17#include <vector>
18#include <string>
21#include "CCDB/CcdbApi.h"
22#include "Framework/Logger.h"
41
42using namespace o2::framework;
43
44namespace o2
45{
46namespace zdc
47{
48
50{
51 mTimer.Stop();
52 mTimer.Reset();
53}
54
56{
57 mTimer.Stop();
58 mTimer.Reset();
59}
60
62{
63 mVerbosity = ic.options().get<int>("verbosity-level");
64 mWorker.setVerbosity(mVerbosity);
65 const auto& opt = CalibParamZDC::Instance();
66 mModTF = opt.modTF;
67 if (mVerbosity >= DbgZero) {
68 LOG(info) << "Sending calibration data to aggregator every mModTF = " << mModTF << " TF";
69 }
70}
71
73{
74 // we call these methods just to trigger finaliseCCDB callback
75 pc.inputs().get<o2::zdc::ModuleConfig*>("moduleconfig");
76}
77
79{
80 if (matcher == ConcreteDataMatcher("ZDC", "MODULECONFIG", 0)) {
81 auto* config = (const o2::zdc::ModuleConfig*)obj;
82 if (mVerbosity >= DbgFull) {
83 config->print();
84 }
85 mWorker.setModuleConfig(config);
86 }
87}
88
90{
91 const auto& tinfo = pc.services().get<o2::framework::TimingInfo>();
92
93 if (tinfo.globalRunNumberChanged) { // new run is starting
94 LOG(info) << "Run number changed to " << tinfo.runNumber;
95 mRunStopRequested = false;
96 mInitialized = false;
97 mWorker.resetInitFlag();
98 }
99
100 if (mRunStopRequested) {
101 return;
102 }
103
104 if (!mInitialized) {
105 mInitialized = true;
107 mTimer.Stop();
108 mTimer.Reset();
109 mTimer.Start(false);
110 }
111
112 // Process reconstructed data
113 auto creationTime = pc.services().get<o2::framework::TimingInfo>().creation; // approximate time in ms
114 auto peds = pc.inputs().get<gsl::span<o2::zdc::OrbitData>>("peds");
115 mWorker.process(peds);
116 mWorker.getData().mergeCreationTime(creationTime);
117 mProcessed++;
118
119 if (mProcessed >= mModTF || pc.transitionState() == TransitionHandlingState::Requested) {
120 if (mVerbosity >= DbgMedium) {
121 if (mModTF > 0 && mProcessed >= mModTF) {
122 LOG(info) << "Send intermediate calibration data mProcessed=" << mProcessed << " >= mModTF=" << mModTF;
123 }
124 if (pc.transitionState() == TransitionHandlingState::Requested) {
125 LOG(info) << "Send intermediate calibration data pc.transitionState()==TransitionHandlingState::Requested";
126 }
127 }
128 // Send intermediate calibration data
129 auto& summary = mWorker.mData.getSummary();
130 o2::framework::Output outputData("ZDC", "BASECALIBDATA", 0);
131 pc.outputs().snapshot(outputData, summary);
132 if (pc.transitionState() == TransitionHandlingState::Requested) {
133 // End of processing for this run
134 mWorker.endOfRun();
135 LOGF(info, "ZDC EPN Baseline pausing at total timing: Cpu: %.3e Real: %.3e s in %d slots", mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1);
136 mRunStopRequested = true;
137 } else {
138 // Prepare to process other time frames
139 mWorker.resetInitFlag();
140 }
141 // Clear data already transmitted
142 mWorker.mData.clear();
143 mProcessed = 0;
144 }
145}
146
148{
149#ifdef O2_ZDC_DEBUG
150 LOG(info) << "BaselineCalibEPNSpec::endOfStream() mRunStopRequested=" << mRunStopRequested << " mProcessed=" << mProcessed;
151#endif
152 if (mRunStopRequested) {
153 return;
154 }
155 // This (unfortunately) is not received by aggregator
156 // if(mProcessed>0){
157 // if(mVerbosity>=DbgMedium){
158 // LOG(info) << "Send calibration data at endOfStream() mProcessed=" << mProcessed;
159 // }
160 // auto& summary = mWorker.mData.getSummary();
161 // o2::framework::Output outputData("ZDC", "BASECALIBDATA", 0, Lifetime::Sporadic);
162 // printf("Sending last processed data mProcessed = %u\n", mProcessed);
163 // ec.outputs().snapshot(outputData, summary);
164 // }
165 mWorker.endOfRun();
166 mTimer.Stop();
167 LOGF(info, "ZDC EPN Baseline calibration total timing: Cpu: %.3e Real: %.3e s in %d slots", mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1);
168 mRunStopRequested = true;
169}
170
172{
173 using device = o2::zdc::BaselineCalibEPNSpec;
174 std::vector<InputSpec> inputs;
175 inputs.emplace_back("peds", "ZDC", "DIGITSPD", 0, Lifetime::Timeframe);
176 inputs.emplace_back("moduleconfig", "ZDC", "MODULECONFIG", 0, Lifetime::Condition, o2::framework::ccdbParamSpec(o2::zdc::CCDBPathConfigModule.data()));
177
178 std::vector<OutputSpec> outputs;
179 outputs.emplace_back("ZDC", "BASECALIBDATA", 0, Lifetime::Sporadic);
180
181 return DataProcessorSpec{
182 "zdc-calib-baseline-epn",
183 inputs,
184 outputs,
185 AlgorithmSpec{adaptFromTask<device>()},
186 Options{{"verbosity-level", o2::framework::VariantType::Int, 0, {"Verbosity level"}}}};
187}
188
189} // namespace zdc
190} // namespace o2
#define verbosity
Class to describe fired triggered and/or stored channels for the BC and to refer to channel data.
Baseline calibration intermediate data.
ZDC calibration common parameters.
Definition of the Names Generator class.
Class to describe pedestal data accumulated over the orbit.
Class to describe reconstructed ZDC event (single BC with signal in one of detectors)
ZDC reconstruction parameters.
Container class to store NTimeBinsPerBC ADC values of single ZDC channel.
void snapshot(const Output &spec, T const &object)
ConfigParamRegistry const & options()
Definition InitContext.h:33
decltype(auto) get(R binding, int part=0) const
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
ServiceRegistryRef services()
The services registry associated with this processing context.
TransitionHandlingState transitionState() const
void init(o2::framework::InitContext &ic) final
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
void updateTimeDependentParams(o2::framework::ProcessingContext &pc)
void run(o2::framework::ProcessingContext &pc) final
void setModuleConfig(const ModuleConfig *moduleConfig)
int process(const gsl::span< const o2::zdc::OrbitData > &orbitdata)
BaselineCalibData & getData()
GLboolean * data
Definition glcorearb.h:298
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
std::vector< ConfigParamSpec > ccdbParamSpec(std::string const &path, int runDependent, std::vector< CCDBMetadata > metadata={}, int qrate=0)
std::vector< ConfigParamSpec > Options
struct o2::upgrades_utils::@463 zdc
structure to keep FT0 information
constexpr int DbgFull
Definition Constants.h:210
constexpr int DbgZero
Definition Constants.h:207
const std::string CCDBPathConfigModule
Definition Constants.h:219
framework::DataProcessorSpec getBaselineCalibEPNSpec()
constexpr int DbgMedium
Definition Constants.h:209
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
BaselineCalibSummaryData & getSummary()
void mergeCreationTime(uint64_t ctime)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"