Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2f04e24
Changes to ZDC data model
Feb 21, 2023
ef4aa63
Changes WIP
Mar 2, 2023
c473ee4
Bugfix in span
Mar 2, 2023
1317296
Fix name of tree in AO2D
Mar 3, 2023
f4d33c6
Fix AOD creation
cortesep Mar 17, 2023
301b7d7
Move ZDC channel ids to shared file
cortesep Mar 17, 2023
39adc36
Merge pull request #3 from cortesep/zdcdevel
ddobrigk Mar 17, 2023
96cbebf
Please consider the following formatting changes
alibuild Mar 17, 2023
d9b363e
Merge pull request #4 from alibuild/alibot-cleanup-10973
ddobrigk Mar 17, 2023
efa0012
Comment #define for now
ddobrigk Mar 17, 2023
d163e32
Update Framework/Core/include/Framework/AnalysisDataModel.h
ddobrigk Apr 3, 2023
5182ea4
Update Framework/Core/include/Framework/AnalysisDataModel.h
ddobrigk Apr 3, 2023
cd846a1
Please consider the following formatting changes
alibuild Apr 3, 2023
b1de32a
Merge pull request #5 from alibuild/alibot-cleanup-10973
ddobrigk Apr 3, 2023
b72eebc
Add comments
Apr 3, 2023
db62dc1
Please consider the following formatting changes
alibuild Apr 3, 2023
a674891
Merge pull request #6 from alibuild/alibot-cleanup-10973
ddobrigk Apr 3, 2023
0d68bd8
Change syntax to correct one for aod producer
Apr 3, 2023
a182c90
Fixes
Apr 3, 2023
8a0c6ca
Change naming to avoid issues
Apr 4, 2023
f8f00f9
Please consider the following formatting changes
alibuild Apr 4, 2023
b8f8703
Merge pull request #7 from alibuild/alibot-cleanup-10973
ddobrigk Apr 4, 2023
8653560
Unified zdc namespace, same getters, different names
Apr 4, 2023
faf3d32
Please consider the following formatting changes
alibuild Apr 4, 2023
aa608f9
Merge pull request #8 from alibuild/alibot-cleanup-10973
ddobrigk Apr 4, 2023
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
63 changes: 63 additions & 0 deletions Common/Constants/include/CommonConstants/ZDCConstants.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.

/// @file ZDCConstants.h
/// @brief Some ZDC constants shared between O2 and O2Physics

/// @author pietro.cortese@cern.ch

#ifndef ALICEO2_ZDCCONSTANTS_H_
#define ALICEO2_ZDCCONSTANTS_H_

namespace o2
{
namespace zdc
{

//< map detector/tower to continuous channel Id
constexpr int IdDummy = -1;
constexpr int IdVoid = -2;

constexpr int IdZNAC = 0;
constexpr int IdZNA1 = 1;
constexpr int IdZNA2 = 2;
constexpr int IdZNA3 = 3;
constexpr int IdZNA4 = 4;
constexpr int IdZNASum = 5;
//
constexpr int IdZPAC = 6;
constexpr int IdZPA1 = 7;
constexpr int IdZPA2 = 8;
constexpr int IdZPA3 = 9;
constexpr int IdZPA4 = 10;
constexpr int IdZPASum = 11;
//
constexpr int IdZEM1 = 12;
constexpr int IdZEM2 = 13;
//
constexpr int IdZNCC = 14;
constexpr int IdZNC1 = 15;
constexpr int IdZNC2 = 16;
constexpr int IdZNC3 = 17;
constexpr int IdZNC4 = 18;
constexpr int IdZNCSum = 19;
//
constexpr int IdZPCC = 20;
constexpr int IdZPC1 = 21;
constexpr int IdZPC2 = 22;
constexpr int IdZPC3 = 23;
constexpr int IdZPC4 = 24;
constexpr int IdZPCSum = 25;

} // namespace zdc
} // namespace o2

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -274,8 +274,8 @@ class AODProducerWorkflowDPL : public Task

// zdc helper maps to avoid a number of "if" statements
// when filling ZDC table
map<string, float> mZDCEnergyMap; // mapping detector name to a corresponding energy
map<string, float> mZDCTDCMap; // mapping TDC channel to a corresponding TDC value
std::array<float, o2::zdc::NChannels> mZDCEnergyMap; // mapping detector id to a corresponding energy
std::array<float, o2::zdc::NTDCChannels> mZDCTDCMap; // mapping TDC channel id to a corresponding TDC value

std::vector<uint16_t> mITSTPCTRDTriggers; // mapping from TRD tracks ID to corresponding trigger (for tracks time extraction)
std::vector<uint16_t> mTPCTRDTriggers; // mapping from TRD tracks ID to corresponding trigger (for tracks time extraction)
Expand Down
153 changes: 104 additions & 49 deletions Detectors/AOD/src/AODProducerWorkflowSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1431,12 +1431,15 @@ void AODProducerWorkflowDPL::init(InitContext& ic)
mFDDAmplitude = 0xFFFFFFFF;
mT0Amplitude = 0xFFFFFFFF;
}

// initialize zdc helper maps
for (auto& ChannelName : o2::zdc::ChannelNames) {
mZDCEnergyMap[(string)ChannelName] = 0;
mZDCTDCMap[(string)ChannelName] = 999;
#ifdef O2_ZDC_NEWDATAMODEL
// Initialize ZDC helper maps
for (int ic = 0; ic < o2::zdc::NChannels; ic++) {
mZDCEnergyMap[ic] = -std::numeric_limits<float>::infinity();
}
for (int ic = 0; ic < o2::zdc::NTDCChannels; ic++) {
mZDCTDCMap[ic] = -std::numeric_limits<float>::infinity();
}
#endif

mTimer.Reset();
}
Expand Down Expand Up @@ -1509,7 +1512,11 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
auto& ambigMFTTracksBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "AMBIGUOUSMFTTR"});
auto& ambigFwdTracksBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "AMBIGUOUSFWDTR"});
auto& v0sBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "V0_001"});
#ifdef O2_ZDC_NEWDATAMODEL
auto& zdcBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "ZDC_001"});
#else
auto& zdcBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "ZDC"});
#endif
auto& caloCellsBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "CALO"});
auto& caloCellsTRGTableBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "CALOTRIGGER"});
auto& cpvClustersBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "CPVCLUSTER"});
Expand Down Expand Up @@ -1593,6 +1600,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
fv0RecPoint.getTrigger().getTriggersignals());
}

#ifndef O2_ZDC_NEWDATAMODEL
for (auto zdcRecData : zdcBCRecData) {
uint64_t bc = zdcRecData.ir.toLong();
auto item = bcsMap.find(bc);
Expand All @@ -1602,66 +1610,109 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
} else {
LOG(fatal) << "Error: could not find a corresponding BC ID for a ZDC rec. point; BC = " << bc;
}
float energyZEM1 = 0;
float energyZEM2 = 0;
float energyCommonZNA = 0;
float energyCommonZNC = 0;
float energyCommonZPA = 0;
float energyCommonZPC = 0;
float energySectorZNA[4] = {0.};
float energySectorZNC[4] = {0.};
float energySectorZPA[4] = {0.};
float energySectorZPC[4] = {0.};
int fe, ne, ft, nt, fi, ni;
zdcRecData.getRef(fe, ne, ft, nt, fi, ni);
// initialize zdc helper maps
for (int ic = 0; ic < o2::zdc::NChannels; ic++) {
mZDCEnergyMap[ic] = -std::numeric_limits<float>::infinity();
}
for (int ic = 0; ic < o2::zdc::NTDCChannels; ic++) {
mZDCTDCMap[ic] = -std::numeric_limits<float>::infinity();
}
for (int ie = 0; ie < ne; ie++) {
auto& zdcEnergyData = zdcEnergies[fe + ie];
int ch = zdcEnergyData.ch();
float energy = zdcEnergyData.energy();
string chName = o2::zdc::channelName(zdcEnergyData.ch());
mZDCEnergyMap.at(chName) = energy;
if (ch >= 0 && ch < o2::zdc::NChannels) {
mZDCEnergyMap[ch] = energy;
}
}
for (int it = 0; it < nt; it++) {
auto& tdc = zdcTDCData[ft + it];
int ch = tdc.ch();
float tdcValue = tdc.value();
int channelID = o2::zdc::TDCSignal[tdc.ch()];
auto channelName = o2::zdc::ChannelNames[channelID];
mZDCTDCMap.at((string)channelName) = tdcValue;
}
energySectorZNA[0] = mZDCEnergyMap.at("ZNA1");
energySectorZNA[1] = mZDCEnergyMap.at("ZNA2");
energySectorZNA[2] = mZDCEnergyMap.at("ZNA3");
energySectorZNA[3] = mZDCEnergyMap.at("ZNA4");
energySectorZNC[0] = mZDCEnergyMap.at("ZNC1");
energySectorZNC[1] = mZDCEnergyMap.at("ZNC2");
energySectorZNC[2] = mZDCEnergyMap.at("ZNC3");
energySectorZNC[3] = mZDCEnergyMap.at("ZNC4");
energySectorZPA[0] = mZDCEnergyMap.at("ZPA1");
energySectorZPA[1] = mZDCEnergyMap.at("ZPA2");
energySectorZPA[2] = mZDCEnergyMap.at("ZPA3");
energySectorZPA[3] = mZDCEnergyMap.at("ZPA4");
energySectorZPC[0] = mZDCEnergyMap.at("ZPC1");
energySectorZPC[1] = mZDCEnergyMap.at("ZPC2");
energySectorZPC[2] = mZDCEnergyMap.at("ZPC3");
energySectorZPC[3] = mZDCEnergyMap.at("ZPC4");
if (ch >= 0 && ch < o2::zdc::NTDCChannels) {
mZDCTDCMap[ch] = tdcValue;
}
}
float energySectorZNA[4];
float energySectorZNC[4];
float energySectorZPA[4];
float energySectorZPC[4];
energySectorZNA[0] = mZDCEnergyMap[o2::zdc::IdZNA1];
energySectorZNA[1] = mZDCEnergyMap[o2::zdc::IdZNA2];
energySectorZNA[2] = mZDCEnergyMap[o2::zdc::IdZNA3];
energySectorZNA[3] = mZDCEnergyMap[o2::zdc::IdZNA4];
energySectorZNC[0] = mZDCEnergyMap[o2::zdc::IdZNC1];
energySectorZNC[1] = mZDCEnergyMap[o2::zdc::IdZNC2];
energySectorZNC[2] = mZDCEnergyMap[o2::zdc::IdZNC3];
energySectorZNC[3] = mZDCEnergyMap[o2::zdc::IdZNC4];
energySectorZPA[0] = mZDCEnergyMap[o2::zdc::IdZPA1];
energySectorZPA[1] = mZDCEnergyMap[o2::zdc::IdZPA2];
energySectorZPA[2] = mZDCEnergyMap[o2::zdc::IdZPA3];
energySectorZPA[3] = mZDCEnergyMap[o2::zdc::IdZPA4];
energySectorZPC[0] = mZDCEnergyMap[o2::zdc::IdZPC1];
energySectorZPC[1] = mZDCEnergyMap[o2::zdc::IdZPC2];
energySectorZPC[2] = mZDCEnergyMap[o2::zdc::IdZPC3];
energySectorZPC[3] = mZDCEnergyMap[o2::zdc::IdZPC4];
zdcCursor(0,
bcID,
mZDCEnergyMap.at("ZEM1"),
mZDCEnergyMap.at("ZEM2"),
mZDCEnergyMap.at("ZNAC"),
mZDCEnergyMap.at("ZNCC"),
mZDCEnergyMap.at("ZPAC"),
mZDCEnergyMap.at("ZPCC"),
mZDCEnergyMap[o2::zdc::IdZEM1],
mZDCEnergyMap[o2::zdc::IdZEM2],
mZDCEnergyMap[o2::zdc::IdZNAC],
mZDCEnergyMap[o2::zdc::IdZNCC],
mZDCEnergyMap[o2::zdc::IdZPAC],
mZDCEnergyMap[o2::zdc::IdZPCC],
energySectorZNA,
energySectorZNC,
energySectorZPA,
energySectorZPC,
mZDCTDCMap.at("ZEM1"),
mZDCTDCMap.at("ZEM2"),
mZDCTDCMap.at("ZNAC"),
mZDCTDCMap.at("ZNCC"),
mZDCTDCMap.at("ZPAC"),
mZDCTDCMap.at("ZPCC"));
mZDCTDCMap[o2::zdc::TDCChannelID::TDCZEM1],
mZDCTDCMap[o2::zdc::TDCChannelID::TDCZEM2],
mZDCTDCMap[o2::zdc::TDCChannelID::TDCZNAC],
mZDCTDCMap[o2::zdc::TDCChannelID::TDCZNCC],
mZDCTDCMap[o2::zdc::TDCChannelID::TDCZPAC],
mZDCTDCMap[o2::zdc::TDCChannelID::TDCZPCC]);
}
#else
std::vector<float> zdcEnergy, zdcAmplitudes, zdcTime;
std::vector<uint8_t> zdcChannelsE, zdcChannelsT;
for (auto zdcRecData : zdcBCRecData) {
uint64_t bc = zdcRecData.ir.toLong();
auto item = bcsMap.find(bc);
int bcID = -1;
if (item != bcsMap.end()) {
bcID = item->second;
} else {
LOG(fatal) << "Error: could not find a corresponding BC ID for a ZDC rec. point; BC = " << bc;
}
int fe, ne, ft, nt, fi, ni;
zdcRecData.getRef(fe, ne, ft, nt, fi, ni);
zdcEnergy.clear();
zdcChannelsE.clear();
zdcAmplitudes.clear();
zdcTime.clear();
zdcChannelsT.clear();
for (int ie = 0; ie < ne; ie++) {
auto& zdcEnergyData = zdcEnergies[fe + ie];
zdcEnergy.emplace_back(zdcEnergyData.energy());
zdcChannelsE.emplace_back(zdcEnergyData.ch());
}
for (int it = 0; it < nt; it++) {
auto& tdc = zdcTDCData[ft + it];
zdcAmplitudes.emplace_back(tdc.amplitude());
zdcTime.emplace_back(tdc.value());
zdcChannelsT.emplace_back(o2::zdc::TDCSignal[tdc.ch()]);
}
zdcCursor(0,
bcID,
zdcEnergy,
zdcChannelsE,
zdcAmplitudes,
zdcTime,
zdcChannelsT);
}
#endif

// keep track event/source id for each mc-collision
// using map and not unordered_map to ensure
Expand Down Expand Up @@ -2522,7 +2573,11 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
outputs.emplace_back(OutputLabel{"O2ambiguousMFTtrack"}, "AOD", "AMBIGUOUSMFTTR", 0, Lifetime::Timeframe);
outputs.emplace_back(OutputLabel{"O2ambiguousFwdtrack"}, "AOD", "AMBIGUOUSFWDTR", 0, Lifetime::Timeframe);
outputs.emplace_back(OutputLabel{"O2v0_001"}, "AOD", "V0_001", 0, Lifetime::Timeframe);
#ifdef O2_ZDC_NEWDATAMODEL
outputs.emplace_back(OutputLabel{"O2zdc_001"}, "AOD", "ZDC", 1, Lifetime::Timeframe);
#else
outputs.emplace_back(OutputLabel{"O2zdc"}, "AOD", "ZDC", 0, Lifetime::Timeframe);
#endif
outputs.emplace_back(OutputLabel{"O2caloCell"}, "AOD", "CALO", 0, Lifetime::Timeframe);
outputs.emplace_back(OutputLabel{"O2caloCellTRGR"}, "AOD", "CALOTRIGGER", 0, Lifetime::Timeframe);
outputs.emplace_back(OutputLabel{"O2cpvCluster"}, "AOD", "CPVCLUSTER", 0, Lifetime::Timeframe);
Expand Down
36 changes: 1 addition & 35 deletions Detectors/ZDC/base/include/ZDCBase/Constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

#include "CommonConstants/PhysicsConstants.h"
#include "CommonConstants/LHCConstants.h"
#include "CommonConstants/ZDCConstants.h"
#include <cstdint>
#include <cstdlib>
#include <array>
Expand Down Expand Up @@ -129,41 +130,6 @@ constexpr float getTOFCorrection(int det)
return TOFCorr[det - DetIDOffs];
}

//< map detector/tower to continuous channel Id
constexpr int IdDummy = -1;
constexpr int IdVoid = -2;

constexpr int IdZNAC = 0;
constexpr int IdZNA1 = 1;
constexpr int IdZNA2 = 2;
constexpr int IdZNA3 = 3;
constexpr int IdZNA4 = 4;
constexpr int IdZNASum = 5;
//
constexpr int IdZPAC = 6;
constexpr int IdZPA1 = 7;
constexpr int IdZPA2 = 8;
constexpr int IdZPA3 = 9;
constexpr int IdZPA4 = 10;
constexpr int IdZPASum = 11;
//
constexpr int IdZEM1 = 12;
constexpr int IdZEM2 = 13;
//
constexpr int IdZNCC = 14;
constexpr int IdZNC1 = 15;
constexpr int IdZNC2 = 16;
constexpr int IdZNC3 = 17;
constexpr int IdZNC4 = 18;
constexpr int IdZNCSum = 19;
//
constexpr int IdZPCC = 20;
constexpr int IdZPC1 = 21;
constexpr int IdZPC2 = 22;
constexpr int IdZPC3 = 23;
constexpr int IdZPC4 = 24;
constexpr int IdZPCSum = 25;

constexpr uint32_t MaskZNA = 0x0000001f;
constexpr uint32_t MaskAllZNA = 0x0000003f;
constexpr uint32_t MaskZPA = 0x000007c0;
Expand Down
Loading