Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
36 changes: 19 additions & 17 deletions 36 Detectors/AOD/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ target_link_libraries(
O2::SimulationDataFormat
O2::Steer
O2::TPCWorkflow
O2::ZDCBase
)

target_include_directories(AODProducerWorkflow INTERFACE include)
Expand All @@ -48,21 +49,22 @@ o2_add_executable(
COMPONENT_NAME reco
SOURCES src/StandaloneAODProducer.cxx
PUBLIC_LINK_LIBRARIES
O2::DataFormatsTPC
O2::DataFormatsITSMFT
O2::DataFormatsITS
O2::DataFormatsFT0
O2::DataFormatsFDD
O2::DataFormatsFV0
O2::DataFormatsTOF
O2::ITSReconstruction
O2::FT0Reconstruction
O2::TPCFastTransformation
O2::TPCBase
O2::TPCReconstruction
O2::TOFBase
O2::TOFCalibration
O2::SimConfig
O2::DataFormatsFT0
O2::Steer
O2::DataFormatsTPC
O2::DataFormatsITSMFT
O2::DataFormatsITS
O2::DataFormatsFT0
O2::DataFormatsFDD
O2::DataFormatsFV0
O2::DataFormatsTOF
O2::ITSReconstruction
O2::FT0Reconstruction
O2::TPCFastTransformation
O2::TPCBase
O2::TPCReconstruction
O2::TOFBase
O2::TOFCalibration
O2::SimConfig
O2::DataFormatsFT0
O2::Steer
O2::ZDCBase
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this global change necessary?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, it is a typo. I just added ZDCBase, but accidentally indented some lines.

)
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "DataFormatsMCH/TrackMCH.h"
#include "DataFormatsTPC/TrackTPC.h"
#include "DataFormatsTRD/TrackTRD.h"
#include "DataFormatsZDC/BCRecData.h"
#include "DataFormatsEMCAL/EventHandler.h"
#include "Framework/AnalysisDataModel.h"
#include "Framework/AnalysisHelpers.h"
Expand Down Expand Up @@ -233,6 +234,11 @@ class AODProducerWorkflowDPL : public Task
std::unordered_map<GIndex, int> mGIDToTableID;
int mTableTrID{0};

// 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

TripletsMap_t mToStore;

// MC production metadata holder
Expand Down
117 changes: 89 additions & 28 deletions 117 Detectors/AOD/src/AODProducerWorkflowSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#include "DataFormatsMCH/TrackMCH.h"
#include "DataFormatsMFT/TrackMFT.h"
#include "DataFormatsTPC/TrackTPC.h"
#include "DataFormatsZDC/ZDCEnergy.h"
#include "DataFormatsZDC/ZDCTDCData.h"
#include "CommonUtils/NameConf.h"
#include "DetectorsBase/GeometryManager.h"
#include "CCDB/BasicCCDBManager.h"
Expand Down Expand Up @@ -53,6 +55,7 @@
#include "SimulationDataFormat/MCEventLabel.h"
#include "SimulationDataFormat/MCTrack.h"
#include "SimulationDataFormat/MCTruthContainer.h"
#include "ZDCBase/Constants.h"
#include "GPUTPCGMMergedTrackHit.h"
#include "TOFBase/Utils.h"
#include "O2Version.h"
Expand All @@ -64,6 +67,7 @@
#include "TObjString.h"
#include <map>
#include <unordered_map>
#include <string>
#include <vector>

using namespace o2::framework;
Expand All @@ -87,6 +91,7 @@ void AODProducerWorkflowDPL::collectBCs(o2::globaltracking::RecoContainer& data,
const auto& fv0RecPoints = data.getFV0RecPoints();
const auto& caloEMCCellsTRGR = data.getEMCALTriggers();
const auto& ctpDigits = data.getCTPDigits();
const auto& zdcBCRecData = data.getZDCBCRecData();

// collecting non-empty BCs and enumerating them
for (auto& rec : mcRecords) {
Expand All @@ -109,6 +114,11 @@ void AODProducerWorkflowDPL::collectBCs(o2::globaltracking::RecoContainer& data,
bcsMap[globalBC] = 1;
}

for (auto& zdcRecData : zdcBCRecData) {
uint64_t globalBC = zdcRecData.ir.toLong();
bcsMap[globalBC] = 1;
}

for (auto& vertex : primVertices) {
auto& timeStamp = vertex.getTimeStamp();
double tsTimeStamp = timeStamp.getTimeStamp() * 1E3; // mus to ns
Expand Down Expand Up @@ -992,6 +1002,12 @@ void AODProducerWorkflowDPL::init(InitContext& ic)
// Needed by MCH track extrapolation
o2::base::GeometryManager::loadGeometry();

// initialize zdc helper maps
for (auto& ChannelName : o2::zdc::ChannelNames) {
mZDCEnergyMap[(string)ChannelName] = 0;
mZDCTDCMap[(string)ChannelName] = 999;
}

// writing metadata if it's not yet in AOD file
// note: `--aod-writer-resmode "UPDATE"` has to be used,
// so that metadata is not overwritten
Expand Down Expand Up @@ -1046,6 +1062,10 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
auto fv0ChData = recoData.getFV0ChannelsData();
auto fv0RecPoints = recoData.getFV0RecPoints();

auto zdcEnergies = recoData.getZDCEnergy();
auto zdcBCRecData = recoData.getZDCBCRecData();
auto zdcTDCData = recoData.getZDCTDCData();

// get calo information
auto caloEMCCells = recoData.getEMCALCells();
auto caloEMCCellsTRGR = recoData.getEMCALTriggers();
Expand Down Expand Up @@ -1169,34 +1189,75 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
dummyFV0AmplC,
dummyTime);

float dummyEnergyZEM1 = 0;
float dummyEnergyZEM2 = 0;
float dummyEnergyCommonZNA = 0;
float dummyEnergyCommonZNC = 0;
float dummyEnergyCommonZPA = 0;
float dummyEnergyCommonZPC = 0;
float dummyEnergySectorZNA[4] = {0.};
float dummyEnergySectorZNC[4] = {0.};
float dummyEnergySectorZPA[4] = {0.};
float dummyEnergySectorZPC[4] = {0.};
zdcCursor(0,
dummyBC,
dummyEnergyZEM1,
dummyEnergyZEM2,
dummyEnergyCommonZNA,
dummyEnergyCommonZNC,
dummyEnergyCommonZPA,
dummyEnergyCommonZPC,
dummyEnergySectorZNA,
dummyEnergySectorZNC,
dummyEnergySectorZPA,
dummyEnergySectorZPC,
dummyTime,
dummyTime,
dummyTime,
dummyTime,
dummyTime,
dummyTime);
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;
}
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);
for (int ie = 0; ie < ne; ie++) {
auto& zdcEnergyData = zdcEnergies[fe + ie];
float energy = zdcEnergyData.energy();
string chName = o2::zdc::channelName(zdcEnergyData.ch());
mZDCEnergyMap.at(chName) = energy;
}
for (int it = 0; it < nt; it++) {
auto& tdc = zdcTDCData[ft + it];
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");
zdcCursor(0,
bcID,
mZDCEnergyMap.at("ZEM1"),
mZDCEnergyMap.at("ZEM2"),
mZDCEnergyMap.at("ZNAC"),
mZDCEnergyMap.at("ZNCC"),
mZDCEnergyMap.at("ZPAC"),
mZDCEnergyMap.at("ZPCC"),
energySectorZNA,
energySectorZNC,
energySectorZPA,
energySectorZPC,
mZDCTDCMap.at("ZEM1"),
mZDCTDCMap.at("ZEM2"),
mZDCTDCMap.at("ZNAC"),
mZDCTDCMap.at("ZNCC"),
mZDCTDCMap.at("ZPAC"),
mZDCTDCMap.at("ZPCC"));
}

// keep track event/source id for each mc-collision
// using map and not unordered_map to ensure
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.