Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
05fee66
Optional transfer of interpolated waveform for TDC channels
cortesep May 5, 2022
57f8fb7
Optional transfer of interpolated waveform for TDC channels
cortesep May 5, 2022
0648d45
WIP
cortesep May 5, 2022
ab53549
WIP
cortesep May 6, 2022
b5b2b68
WIP
cortesep May 9, 2022
7e03600
WIP
cortesep May 9, 2022
96003d0
WIP
cortesep May 10, 2022
5ac27a2
WIP
cortesep May 11, 2022
998d37c
WIP
cortesep May 12, 2022
dfb290b
WIP
cortesep May 12, 2022
cd4543a
EPN Waveform workflow
cortesep May 13, 2022
bc94ef2
EPN Waveform workflow
cortesep May 13, 2022
29860be
Correct trailing spaces
cortesep May 13, 2022
1552453
Add waveforms
cortesep May 13, 2022
3ee31eb
WIP
cortesep May 18, 2022
6a6664e
WIP
cortesep May 18, 2022
f75f101
WIP
cortesep May 19, 2022
c383d17
Full workflow
cortesep May 19, 2022
bea6b04
Fix whitespace
cortesep May 19, 2022
0713c4a
Fix whitespace
cortesep May 19, 2022
963e07c
Room to analyze waveform for all channels
cortesep May 19, 2022
02594c4
WIP
cortesep May 20, 2022
0cb1cda
WIP
cortesep May 20, 2022
5e5dc2a
WIP
cortesep May 20, 2022
88c9fad
Indroduced cuts on tower signals
cortesep May 23, 2022
2676d9c
Split WaveformCalibData into two classes
cortesep May 24, 2022
1084516
Improve printout
cortesep May 24, 2022
6938be1
Moving InterCalibData.h and InterCalibData.cxx to ZDCCalib
cortesep May 24, 2022
3382acb
Simplified class to store WaveformCalib output
cortesep May 24, 2022
4648932
Simplified class to store WaveformCalib output
cortesep May 24, 2022
aada04c
Simplified class to store WaveformCalib output
cortesep May 24, 2022
fa06c3b
Simplified class to store WaveformCalib output
cortesep May 24, 2022
9e14bb0
Fix whitespace
cortesep May 24, 2022
8af8bdb
Saving histograms from calibration object
cortesep May 24, 2022
c83d184
clang-format
cortesep May 24, 2022
80c9ccf
Fixed crash
cortesep May 25, 2022
e96371f
Fixing some compilation errors
cortesep May 25, 2022
4d383f3
clang-format
cortesep May 25, 2022
357a6af
Fixing some compilation errors
cortesep May 26, 2022
19db720
Corrected initialization
cortesep May 26, 2022
93e4943
Merge branch 'AliceO2Group:dev' into dev_shape
cortesep May 27, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
WIP
  • Loading branch information
cortesep committed May 19, 2022
commit f75f101ea657a62ebbf559aac48db7b92f623762
1 change: 1 addition & 0 deletions Detectors/ZDC/base/include/ZDCBase/Constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@ const std::string CCDBPathTDCCorr = "ZDC/Calib/TDCCorr";
const std::string CCDBPathEnergyCalib = "ZDC/Calib/EnergyCalib";
const std::string CCDBPathTowerCalib = "ZDC/Calib/TowerCalib";
const std::string CCDBPathInterCalibConfig = "ZDC/Calib/InterCalibConfig";
const std::string CCDBPathWaveformCalib = "ZDC/Calib/WaveformCalib";
const std::string CCDBPathWaveformCalibConfig = "ZDC/Calib/WaveformCalibConfig";

enum Ped { PedND = 0,
Expand Down
7 changes: 7 additions & 0 deletions Detectors/ZDC/calib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ o2_add_library(ZDCCalib
src/InterCalibEPNSpec.cxx
src/WaveformCalibConfig.cxx
src/WaveformCalib.cxx
src/WaveformCalibSpec.cxx
src/WaveformCalibEPN.cxx
src/WaveformCalibEPNSpec.cxx
src/WaveformCalibQueue.cxx
Expand Down Expand Up @@ -48,6 +49,7 @@ o2_target_root_dictionary(ZDCCalib
include/ZDCCalib/InterCalibEPNSpec.h
include/ZDCCalib/WaveformCalibConfig.h
include/ZDCCalib/WaveformCalib.h
include/ZDCCalib/WaveformCalibSpec.h
include/ZDCCalib/WaveformCalibEPN.h
include/ZDCCalib/WaveformCalibEPNSpec.h
include/ZDCCalib/WaveformCalibQueue.h
Expand All @@ -68,3 +70,8 @@ o2_add_executable(waveformcalib-epn-workflow
COMPONENT_NAME zdc
SOURCES src/zdc-waveformcalib-epn-workflow.cxx
PUBLIC_LINK_LIBRARIES O2::ZDCWorkflow O2::ZDCCalib O2::DetectorsCalibration)

o2_add_executable(waveformcalib-workflow
COMPONENT_NAME zdc
SOURCES src/zdc-waveformcalib-workflow.cxx
PUBLIC_LINK_LIBRARIES O2::ZDCWorkflow O2::ZDCCalib O2::DetectorsCalibration)
26 changes: 0 additions & 26 deletions Detectors/ZDC/calib/include/ZDCCalib/InterCalibWorkflow.h

This file was deleted.

23 changes: 9 additions & 14 deletions Detectors/ZDC/calib/include/ZDCCalib/WaveformCalib.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,36 +34,31 @@ class WaveformCalib
WaveformCalib() = default;
int init();
static constexpr int NH = WaveformCalibConfig::NH;
void clear(int ih = -1);
int process(const WaveformCalibData& data); // Calibration of RUN3 data - aggregator node
int endOfRun(); // Perform minimization
void clear();
int process(const WaveformCalibData& data); // Calibration of RUN3 data - aggregator node
int endOfRun(); // Perform minimization
int write(const std::string fn = "ZDCWaveformCalib.root");

CcdbObjectInfo& getCcdbObjectInfo() { return mInfo; }

void setWaveformCalibConfig(const WaveformCalibConfig* param) { mWaveformCalibConfig = param; };
const WaveformCalibConfig* getWaveformCalibConfig() const { return mWaveformCalibConfig; };
void setConfig(const WaveformCalibConfig* param) { mConfig = param; };
const WaveformCalibConfig* getConfig() const { return mConfig; };

void setVerbosity(int v) { mVerbosity = v; }
int getVerbosity() const { return mVerbosity; }

void setSaveDebugHistos() { mSaveDebugHistos = true; }
void setDontSaveDebugHistos() { mSaveDebugHistos = false; }

WaveformCalibData& getData() { return mData; }

private:
WaveformCalibData mData;
bool mInitDone = false;
bool mSaveDebugHistos = false;
int32_t mVerbosity = DbgMinimal;
static std::mutex mMtx; /// mutex for critical section
double mPar[NH][NPAR] = {0};
double mErr[NH][NPAR] = {0};
const WaveformCalibConfig* mWaveformCalibConfig = nullptr; /// Configuration of intercalibration
const ZDCEnergyParam* mEnergyParam = nullptr; /// Energy calibration object
const ZDCTowerParam* mTowerParam = nullptr; /// Tower calibration object
ZDCTowerParam mTowerParamUpd; /// Updated tower calibration object
CcdbObjectInfo mInfo; /// CCDB Info
void assign(int ih, bool ismod); /// Assign updated calibration object
const WaveformCalibConfig* mConfig = nullptr; /// Configuration of intercalibration
CcdbObjectInfo mInfo; /// CCDB Info
};
} // namespace zdc
} // namespace o2
Expand Down
1 change: 1 addition & 0 deletions Detectors/ZDC/calib/include/ZDCCalib/WaveformCalibData.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ struct WaveformCalibData {
WaveformCalibData& operator+=(const WaveformCalibData& other);
int getEntries(int ih) const;
void print() const;
void clear();
void setCreationTime(uint64_t ctime);
void setN(int n);
int write(const std::string fn);
Expand Down
25 changes: 13 additions & 12 deletions Detectors/ZDC/calib/include/ZDCCalib/WaveformCalibEPN.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ class WaveformCalibEPN
const gsl::span<const o2::zdc::ZDCWaveform>& wave);
int endOfRun();
int write(const std::string fn = "ZDCWaveformCalibEPN.root");
void setConfig(const WaveformCalibConfig* param) { mWaveformCalibConfig = param; };
const WaveformCalibConfig* getConfig() const { return mWaveformCalibConfig; };
void setConfig(const WaveformCalibConfig* param) { mConfig = param; };
const WaveformCalibConfig* getConfig() const { return mConfig; };
void setSaveDebugHistos() { mSaveDebugHistos = true; }
void setDontSaveDebugHistos() { mSaveDebugHistos = false; }
void setVerbosity(int val) { mVerbosity = val; }
Expand All @@ -51,19 +51,20 @@ class WaveformCalibEPN
bool mSaveDebugHistos = false;
int32_t mNBin = 0;
int32_t mVerbosity = DbgMinimal;
const WaveformCalibConfig* mWaveformCalibConfig = nullptr; /// Configuration of intercalibration
const WaveformCalibConfig* mConfig = nullptr; /// Configuration of intercalibration

int mFirst=0;
int mLast=0;
int mN=1;
int mFirst = 0;
int mLast = 0;
int mN = 1;

void configure(int ifirst, int ilast){
if(ifirst>0 || ilast<0 || ilast<ifirst){
LOGF(fatal,"WaveformCalibEPN configure error with ifirst=%d ilast=%d", ifirst, ilast);
void configure(int ifirst, int ilast)
{
if (ifirst > 0 || ilast < 0 || ilast < ifirst) {
LOGF(fatal, "WaveformCalibEPN configure error with ifirst=%d ilast=%d", ifirst, ilast);
}
mFirst=ifirst;
mLast=ilast;
mN=ilast-ifirst+1;
mFirst = ifirst;
mLast = ilast;
mN = ilast - ifirst + 1;
}

WaveformCalibQueue mQueue;
Expand Down
3 changes: 2 additions & 1 deletion Detectors/ZDC/calib/include/ZDCCalib/WaveformCalibSpec.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
#include "Framework/Task.h"
#include "CommonDataFormat/FlatHisto1D.h"
#include "CommonDataFormat/FlatHisto2D.h"
#include "DataFormatsZDC/WaveformCalibData.h"
#include "CommonUtils/NameConf.h"
#include "ZDCCalib/WaveformCalibData.h"
#include "ZDCCalib/WaveformCalib.h"
#include "ZDCCalib/WaveformCalibConfig.h"
#include "DetectorsCalibration/Utils.h"
Expand All @@ -49,6 +49,7 @@ class WaveformCalibSpec : public o2::framework::Task

private:
int mVerbosity = DbgMinimal; // Verbosity level
bool mInitialized = false; // Connect once to CCDB during initialization
WaveformCalib mWorker; // Intercalibration object
TStopwatch mTimer;
};
Expand Down
61 changes: 14 additions & 47 deletions Detectors/ZDC/calib/src/WaveformCalib.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ using namespace o2::zdc;

int WaveformCalib::init()
{
if (mWaveformCalibConfig == nullptr) {
if (mConfig == nullptr) {
LOG(fatal) << "o2::zdc::WaveformCalib: missing configuration object";
return -1;
}
Expand All @@ -44,13 +44,13 @@ int WaveformCalib::endOfRun()
if (mVerbosity > DbgZero) {
LOGF(info, "Computing intercalibration coefficients");
}
auto clName = o2::utils::MemFileHelper::getClassName(mTowerParamUpd);
auto clName = o2::utils::MemFileHelper::getClassName(mData);
mInfo.setObjectType(clName);
auto flName = o2::ccdb::CcdbApi::generateFileName(clName);
mInfo.setFileName(flName);
mInfo.setPath(CCDBPathTowerCalib);
mInfo.setPath(CCDBPathWaveformCalib);
std::map<std::string, std::string> md;
md["config"] = mWaveformCalibConfig->desc;
md["config"] = mConfig->desc;
mInfo.setMetaData(md);
uint64_t starting = mData.mCTimeBeg;
if (starting >= 10000) {
Expand All @@ -66,61 +66,28 @@ int WaveformCalib::endOfRun()
return 0;
}

void WaveformCalib::clear(int ih)
void WaveformCalib::clear()
{
mData.mSum[ii][i][j] = 0;
mData.clear();
}

int WaveformCalib::process(const WaveformCalibData& data)
{
if (!mInitDone) {
init();
}
// Add checks before addition
auto nbun = mConfig->nbun;
auto peak = -mConfig->ibeg;
if ((nbun != mData.mN) || (mData.mPeak != peak)) {
LOG(fatal) << "WaveformCalib::process adding inconsistent data mN cfg=" << nbun << " vs data=" << mData.mN << " mPeak cfg=" << peak << " vs data=" << mData.mPeak;
return -1;
}
mData += data;
return 0;
}

int WaveformCalib::write(const std::string fn)
{
TDirectory* cwd = gDirectory;
TFile* f = new TFile(fn.data(), "recreate");
if (f->IsZombie()) {
LOG(error) << "Cannot create file: " << fn;
return 1;
}
for (int32_t ih = 0; ih < (2 * NH); ih++) {
if (mHUnc[ih]) {
auto p = mHUnc[ih]->createTH1F(WaveformCalib::mHUncN[ih]);
p->SetTitle(WaveformCalib::mHUncT[ih]);
p->Write("", TObject::kOverwrite);
}
}
for (int32_t ih = 0; ih < NH; ih++) {
if (mCUnc[ih]) {
auto p = mCUnc[ih]->createTH2F(WaveformCalib::mCUncN[ih]);
p->SetTitle(WaveformCalib::mCUncT[ih]);
p->Write("", TObject::kOverwrite);
}
}
// Only after replay of RUN2 data
for (int32_t ih = 0; ih < NH; ih++) {
if (mHCorr[ih]) {
mHCorr[ih]->Write("", TObject::kOverwrite);
}
}
for (int32_t ih = 0; ih < NH; ih++) {
if (mCCorr[ih]) {
mCCorr[ih]->Write("", TObject::kOverwrite);
}
}
// Minimization output
const char* mntit[NH] = {"mZNA", "mZPA", "mZNC", "mZPC", "mZEM"};
for (int32_t ih = 0; ih < NH; ih++) {
if (mMn[ih]) {
mMn[ih]->Write(mntit[ih], TObject::kOverwrite);
}
}
f->Close();
cwd->cd();
return 0;
return mData.write(fn);
}
16 changes: 16 additions & 0 deletions Detectors/ZDC/calib/src/WaveformCalibData.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,19 @@ int WaveformCalibData::write(const std::string fn)
cwd->cd();
return 0;
}

void WaveformCalibData::clear()
{
mCTimeBeg = 0;
mCTimeEnd = 0;
mN = 0;
mPeak = 0;
for (int32_t ih = 0; ih < NH; ih++) {
mEntries[ih]=0;
mFirstValid[ih] = -1;
mLastValid[ih] = -1;
for (int iw=0; iw<NW; iw++){
mWave[ih][iw] = 0;
}
}
}
10 changes: 5 additions & 5 deletions Detectors/ZDC/calib/src/WaveformCalibEPN.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ using namespace o2::zdc;

int WaveformCalibEPN::init()
{
if (mWaveformCalibConfig == nullptr) {
if (mConfig == nullptr) {
LOG(fatal) << "o2::zdc::WaveformCalibEPN: missing configuration object";
return -1;
}

auto* cfg = mWaveformCalibConfig;
auto* cfg = mConfig;
if (mVerbosity > DbgZero) {
mWaveformCalibConfig->print();
mConfig->print();
}

// Inspect reconstruction parameters
Expand Down Expand Up @@ -90,8 +90,8 @@ int WaveformCalibEPN::endOfRun()
LOGF(info, "WaveformCalibEPN::endOfRun ts (%llu:%llu)", mData.mCTimeBeg, mData.mCTimeEnd);
for (int ih = 0; ih < NH; ih++) {
LOGF(info, "Waveform %2d with %10d events and cuts AMP:(%g:%g) TDC:(%g:%g) Valid:[%d:%d:%d]", ih, mData.mEntries[ih],
mWaveformCalibConfig->cutLow[ih], mWaveformCalibConfig->cutHigh[ih],
mWaveformCalibConfig->cutTimeLow[ih], mWaveformCalibConfig->cutTimeHigh[ih],
mConfig->cutLow[ih], mConfig->cutHigh[ih],
mConfig->cutTimeLow[ih], mConfig->cutTimeHigh[ih],
mData.mFirstValid[ih], mData.mPeak, mData.mLastValid[ih]);
}
}
Expand Down
26 changes: 16 additions & 10 deletions Detectors/ZDC/calib/src/WaveformCalibEPNSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <string>
#include "CCDB/BasicCCDBManager.h"
#include "CCDB/CCDBTimeStampUtils.h"
#include "CCDB/CcdbApi.h"
#include "Framework/Logger.h"
#include "Framework/ControlService.h"
#include "Framework/ConfigParamRegistry.h"
Expand All @@ -30,6 +31,7 @@
#include "DataFormatsZDC/RecEvent.h"
#include "ZDCBase/ModuleConfig.h"
#include "CommonUtils/NameConf.h"
#include "CommonUtils/MemFileHelper.h"
#include "CCDB/BasicCCDBManager.h"
#include "CCDB/CCDBTimeStampUtils.h"
#include "ZDCCalib/WaveformCalibData.h"
Expand Down Expand Up @@ -57,6 +59,9 @@ WaveformCalibEPNSpec::WaveformCalibEPNSpec(const int verbosity) : mVerbosity(ver
void WaveformCalibEPNSpec::init(o2::framework::InitContext& ic)
{
mVerbosity = ic.options().get<int>("verbosity-level");
mWorker.setVerbosity(mVerbosity);
mTimer.CpuTime();
mTimer.Start(false);
}

void WaveformCalibEPNSpec::updateTimeDependentParams(ProcessingContext& pc)
Expand All @@ -71,21 +76,22 @@ void WaveformCalibEPNSpec::run(ProcessingContext& pc)
if (!mInitialized) {
mInitialized = true;
std::string loadedConfFiles = "Loaded ZDC configuration files:";
std::string ct = "WaveformCalibConfig";
std::string cn = "wavecalibconfig";
// WaveformCalib configuration
auto interConfig = pc.inputs().get<o2::zdc::WaveformCalibConfig*>("wavecalibconfig");
if (!interConfig) {
LOG(fatal) << "Missing WaveformCalibConfig calibration object";
auto config = pc.inputs().get<o2::zdc::WaveformCalibConfig*>(cn);
if (!config) {
LOG(fatal) << "Missing calibration object: " << ct;
return;
} else {
loadedConfFiles += " WaveformCalibConfig";
loadedConfFiles += " ";
loadedConfFiles += cn;
if (mVerbosity > DbgZero) {
LOG(info) << "Loaded WaveformCalibConfig configuration object";
interConfig->print();
LOG(info) << "Loaded configuration object: " << ct;
config->print();
}
mWorker.setConfig(config.get());
}

mWorker.setConfig(interConfig.get());

LOG(info) << loadedConfFiles;
mTimer.CpuTime();
mTimer.Start(false);
Expand All @@ -105,7 +111,7 @@ void WaveformCalibEPNSpec::run(ProcessingContext& pc)
// Process reconstructed data
mWorker.process(bcrec, energy, tdc, info, wave);

// Send intermediate calibration data and debug histograms
// Send intermediate calibration data
o2::framework::Output output("ZDC", "WAVECALIBDATA", 0, Lifetime::Timeframe);
pc.outputs().snapshot(output, mWorker.mData);
}
Expand Down
Loading