Skip to content
Closed
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
96 changes: 46 additions & 50 deletions ALICE3/TableProducer/alice3-dq-table-maker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,6 @@
/// \file alice3-dq-table-maker.cxx
/// \brief DQ table maker for ALICE 3

#include <map>
#include <memory>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>

#include "PWGDQ/Core/AnalysisCompositeCut.h"
#include "PWGDQ/Core/AnalysisCut.h"
#include "PWGDQ/Core/CutsLibrary.h"
Expand All @@ -33,12 +26,11 @@
#include "PWGDQ/DataModel/ReducedInfoTables.h"
#include "PWGDQ/DataModel/ReducedTablesAlice3.h"

#include "ALICE3/DataModel/OTFTOF.h"
#include "ALICE3/DataModel/OTFRICH.h"
#include "ALICE3/DataModel/OTFPIDTrk.h"
#include "ALICE3/DataModel/OTFRICH.h"
#include "ALICE3/DataModel/OTFTOF.h"
#include "ALICE3/DataModel/collisionAlice3.h"
#include "ALICE3/DataModel/tracksAlice3.h"

#include "Common/CCDB/TriggerAliases.h"
#include "Common/DataModel/Centrality.h"
#include "Common/DataModel/CollisionAssociationTables.h"
Expand Down Expand Up @@ -67,18 +59,25 @@
#include "ReconstructionDataFormats/VtxTrackIndex.h"
#include "ReconstructionDataFormats/VtxTrackRef.h"

#include "TList.h"
#include "THashList.h"
#include "TList.h"

#include <map>
#include <memory>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>

using namespace o2;
using namespace o2::framework;
using namespace o2::framework::expressions;
using namespace o2::aod;

using MyBarrelTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA,
aod::TracksCov, aod::TracksAlice3, aod::TracksExtraA3,
using MyBarrelTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA,
aod::TracksCov, aod::TracksAlice3, aod::TracksExtraA3,
aod::UpgradeTofs, aod::UpgradeRichs, aod::UpgradeRichSignals,
aod::UpgradeTrkPids, aod::UpgradeTrkPidSignals,
aod::UpgradeTrkPids, aod::UpgradeTrkPidSignals,
aod::McTrackLabels>;

using MyEvents = soa::Join<aod::Collisions, aod::CollisionsAlice3, aod::McCollisionLabels>;
Expand All @@ -90,7 +89,7 @@ constexpr static uint32_t gkEventMcFillMap = VarManager::ObjTypes::CollisionMC;
constexpr static uint32_t gkTrackFillMapWithCov = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackDCA | VarManager::ObjTypes::TrackSelection | VarManager::ObjTypes::TrackCov | VarManager::ObjTypes::TrackPID;

struct Alice3DQTableMaker {

Produces<ReducedA3MCEvents> eventMC;
Produces<ReducedA3MCTracks> trackMC;

Expand All @@ -105,12 +104,11 @@ struct Alice3DQTableMaker {
Produces<ReducedA3TracksBarrelCov> trackBarrelCov;
Produces<ReducedA3TracksAssoc> trackBarrelAssoc;
Produces<ReducedA3TracksBarrelLabels> trackBarrelLabels;

Produces<ReducedA3PIDTOF> trackPIDTOF;
Produces<ReducedA3PIDRich> trackPIDRich;
Produces<ReducedA3PIDRichSignals> trackPIDRichSig;
Produces<ReducedA3PIDOT> trackPIDOT;


OutputObj<THashList> fOutputList{"output"};
OutputObj<TList> fStatsList{"Statistics"}; //! skimming statistics
Expand Down Expand Up @@ -150,16 +148,16 @@ struct Alice3DQTableMaker {
std::map<uint64_t, int> fLabelsMap;
std::map<uint64_t, int> fLabelsMapReversed;
std::map<uint64_t, uint16_t> fMCFlags;
std::map<uint32_t, uint32_t> fCollIndexMap; // key: old collision index, value: skimmed collision index
std::map<uint32_t, uint32_t> fTrackIndexMap; // key: old track global index, value: new track global index
std::map<uint32_t, uint32_t> fCollIndexMap; // key: old collision index, value: skimmed collision index
std::map<uint32_t, uint32_t> fTrackIndexMap; // key: old track global index, value: new track global index

void init(InitContext& context)
{
bool isProcessSkimmingEnabled = context.mOptions.get<bool>("processSkimming");

if(!isProcessSkimmingEnabled)
if (!isProcessSkimmingEnabled)
LOG(fatal) << "No process function was enabled ALICE 3 TableMaker";

VarManager::SetDefaultVarNames(); // Important that this is called before DefineCuts() !!!

DefineCuts();
Expand All @@ -177,17 +175,17 @@ struct Alice3DQTableMaker {
if (fDoDetailedQA) {
histClasses += "Event_BeforeCuts;";
}

if (fConfigHistOutput.fConfigQA) {
histClasses += "Event_AfterCuts;";
histClasses += "Event_MCTruth;";
}

if(isProcessSkimmingEnabled) {
if (isProcessSkimmingEnabled) {
if (fDoDetailedQA) {
histClasses += "TrackBarrel_BeforeCuts;";
}

if (fConfigHistOutput.fConfigQA) {
for (auto& cut : fTrackCuts) {
histClasses += Form("TrackBarrel_%s;", cut->GetName());
Expand Down Expand Up @@ -219,7 +217,7 @@ struct Alice3DQTableMaker {
}
}

for(auto& mcIt : fMCSignals) {
for (auto& mcIt : fMCSignals) {
if (fConfigHistOutput.fConfigQA) {
histClasses += Form("MCTruth_%s;", mcIt->GetName());
}
Expand All @@ -233,10 +231,9 @@ struct Alice3DQTableMaker {
}

DefineHistograms(histClasses);

TString addHistsStr = fConfigHistOutput.fConfigAddJSONHistograms.value;
if (fConfigHistOutput.fConfigQA && addHistsStr != "")
{
if (fConfigHistOutput.fConfigQA && addHistsStr != "") {
dqhistograms::AddHistogramsFromJSON(fHistMan, addHistsStr.Data());
}

Expand Down Expand Up @@ -434,7 +431,7 @@ struct Alice3DQTableMaker {

// Loop over collisions
for (const auto& collision : collisions) {

(reinterpret_cast<TH2I*>(fStatsList->At(0)))->Fill(1.0, static_cast<float>(o2::aod::evsel::kNsel));

VarManager::ResetValues(0, VarManager::kNEventWiseVariables);
Expand All @@ -444,7 +441,7 @@ struct Alice3DQTableMaker {
auto mcCollision = collision.template mcCollision_as<MyEventsMC>();
VarManager::FillEventAlice3<gkEventMcFillMap>(mcCollision);
}

if (fDoDetailedQA) {
fHistMan->FillHistClass("Event_BeforeCuts", VarManager::fgValues);
}
Expand All @@ -459,9 +456,9 @@ struct Alice3DQTableMaker {
// Fill historams after event cuts
fHistMan->FillHistClass("Event_AfterCuts", VarManager::fgValues);

event(collision.posX(), collision.posY(), collision.posZ(), collision.numContrib(),
event(collision.posX(), collision.posY(), collision.posZ(), collision.numContrib(),
collision.collisionTime(), collision.collisionTimeRes(), collision.multDensity());

eventVtxCov(collision.covXX(), collision.covXY(), collision.covXZ(), collision.covYY(), collision.covYZ(), collision.covZZ(), collision.chi2());
eventMClabels(collision.mcCollisionId(), collision.mcMask());
eventInfo(collision.globalIndex());
Expand Down Expand Up @@ -489,7 +486,7 @@ struct Alice3DQTableMaker {
for (const auto& assoc : assocs) {

auto track = assoc.template track_as<MyBarrelTracks>();

if (fCollIndexMap.find(track.collisionId()) == fCollIndexMap.end()) {
continue;
}
Expand Down Expand Up @@ -534,12 +531,12 @@ struct Alice3DQTableMaker {

// NOTE: trackBarrelInfo stores the index of the collision as in AO2D (for use in some cases where the analysis on skims is done
// in workflows where the original AO2Ds are also present)
//trackBarrelInfo(track.collisionId(), collision.posX(), collision.posY(), collision.posZ(), track.globalIndex());
// trackBarrelInfo(track.collisionId(), collision.posX(), collision.posY(), collision.posZ(), track.globalIndex());
trackBasic(reducedEventIdx, trackFilteringTag, track.pt(), track.eta(), track.phi(), track.sign(), 0);

trackBarrel(track.x(), track.alpha(), track.y(), track.z(), track.snp(), track.tgl(), track.signed1Pt(),
track.flags(), track.itsClusterMap(), track.itsChi2NCl(),
track.isReconstructed(), track.nSiliconHits(), track.nTPCHits(), track.length(), track.dcaXY(),
track.isReconstructed(), track.nSiliconHits(), track.nTPCHits(), track.length(), track.dcaXY(),
track.dcaZ());

if constexpr (static_cast<bool>(gkTrackFillMapWithCov & VarManager::ObjTypes::TrackCov)) {
Expand All @@ -549,26 +546,26 @@ struct Alice3DQTableMaker {
}

if constexpr (static_cast<bool>(gkTrackFillMapWithCov & VarManager::ObjTypes::TrackPID)) {

trackPIDTOF(track.tofEventTime(), track.tofEventTimeErr(),
track.nSigmaElectronInnerTOF(), track.nSigmaMuonInnerTOF(), track.nSigmaPionInnerTOF(),
track.nSigmaKaonInnerTOF(), track.nSigmaProtonInnerTOF(), track.nSigmaDeuteronInnerTOF(),
track.nSigmaKaonInnerTOF(), track.nSigmaProtonInnerTOF(), track.nSigmaDeuteronInnerTOF(),
track.nSigmaTritonInnerTOF(), track.nSigmaHelium3InnerTOF(), track.nSigmaAlphaInnerTOF(),
track.innerTOFTrackTimeReco(), track.innerTOFTrackLengthReco(),
track.nSigmaElectronOuterTOF(), track.nSigmaMuonOuterTOF(), track.nSigmaPionOuterTOF(),
track.nSigmaKaonOuterTOF(), track.nSigmaProtonOuterTOF(), track.nSigmaDeuteronOuterTOF(),
track.nSigmaKaonOuterTOF(), track.nSigmaProtonOuterTOF(), track.nSigmaDeuteronOuterTOF(),
track.nSigmaTritonOuterTOF(), track.nSigmaHelium3OuterTOF(), track.nSigmaAlphaOuterTOF(),
track.outerTOFTrackTimeReco(), track.outerTOFTrackLengthReco());

trackPIDRich(track.nSigmaElectronRich(), track.nSigmaMuonRich(), track.nSigmaPionRich(),
track.nSigmaKaonRich(), track.nSigmaProtonRich(), track.nSigmaDeuteronRich(),
track.nSigmaTritonRich(), track.nSigmaHelium3Rich(), track.nSigmaAlphaRich());
trackPIDRichSig(track.hasSig(), track.hasSigInGas(),

trackPIDRichSig(track.hasSig(), track.hasSigInGas(),
track.hasSigEl(), track.hasSigMu(), track.hasSigPi(),
track.hasSigKa(), track.hasSigPr(), track.hasSigDe(),
track.hasSigTr(), track.hasSigHe3(), track.hasSigAl());

trackPIDOT(track.timeOverThresholdBarrel(),
track.nSigmaTrkEl(), track.nSigmaTrkMu(), track.nSigmaTrkPi(),
track.nSigmaTrkKa(), track.nSigmaTrkPr(), track.nSigmaTrkDe(),
Expand Down Expand Up @@ -626,7 +623,7 @@ struct Alice3DQTableMaker {
Preslice<MyBarrelTracks> perCollisionTracks = aod::track::collisionId;

void fullSkimming(MyEvents const& collisions,
MyBarrelTracks const& tracksBarrel, aod::TrackAssoc const& trackAssocs,
MyBarrelTracks const& tracksBarrel, aod::TrackAssoc const& trackAssocs,
MyEventsMC const& mcCollisions, aod::McParticles const& mcParticles)
{
eventMC.reserve(mcCollisions.size());
Expand All @@ -637,10 +634,10 @@ struct Alice3DQTableMaker {
eventVtxCov.reserve(collisions.size());
eventMClabels.reserve(collisions.size());
eventInfo.reserve(collisions.size());

skimCollisions(collisions);

if (fCollIndexMap.size() == 0)
if (fCollIndexMap.size() == 0)
return;

skimMCParticles(mcParticles, mcCollisions);
Expand All @@ -660,8 +657,7 @@ struct Alice3DQTableMaker {

if (fCollIndexMap.size() > 0) {

for (auto const& [origIdx, skimIdx] : fCollIndexMap)
{
for (auto const& [origIdx, skimIdx] : fCollIndexMap) {
auto collision = collisions.rawIteratorAt(origIdx);

if constexpr (static_cast<bool>(gkTrackFillMapWithCov)) {
Expand Down Expand Up @@ -732,7 +728,7 @@ struct Alice3DQTableMaker {
}

void processSkimming(MyEvents const& collisions,
MyBarrelTracks const& tracksBarrel, aod::TrackAssoc const& trackAssocs,
MyBarrelTracks const& tracksBarrel, aod::TrackAssoc const& trackAssocs,
MyEventsMC const& mcCollisions, aod::McParticles const& mcParticles)
{
fullSkimming(collisions, tracksBarrel, trackAssocs, mcCollisions, mcParticles);
Expand All @@ -744,6 +740,6 @@ struct Alice3DQTableMaker {
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
return WorkflowSpec{
adaptAnalysisTask<Alice3DQTableMaker>(cfgc)
};
}
adaptAnalysisTask<Alice3DQTableMaker>(cfgc)};
}
33 changes: 15 additions & 18 deletions ALICE3/Tasks/alice3-dq-efficiency.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,11 @@
#include "PWGDQ/DataModel/ReducedInfoTables.h"
#include "PWGDQ/DataModel/ReducedTablesAlice3.h"

#include "ALICE3/DataModel/OTFTOF.h"
#include "ALICE3/DataModel/OTFRICH.h"
#include "ALICE3/DataModel/OTFPIDTrk.h"
#include "ALICE3/DataModel/OTFRICH.h"
#include "ALICE3/DataModel/OTFTOF.h"
#include "ALICE3/DataModel/collisionAlice3.h"
#include "ALICE3/DataModel/tracksAlice3.h"

#include "Common/Core/TableHelper.h"

#include "DataFormatsParameters/GRPMagField.h"
Expand Down Expand Up @@ -111,7 +110,7 @@ DECLARE_SOA_TABLE(EventCuts, "AOD", "DQANAEVCUTS", dqanalysisflags::IsEventSelec
DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", dqanalysisflags::MixingHash); //! joinable to ReducedEvents
DECLARE_SOA_TABLE(BarrelTrackCuts, "AOD", "DQANATRKCUTS", dqanalysisflags::IsBarrelSelected); //! joinable to ReducedA3TracksAssoc
DECLARE_SOA_TABLE(BarrelAmbiguities, "AOD", "DQBARRELAMB", dqanalysisflags::BarrelAmbiguityInBunch, dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to ReducedBarrelTracks
DECLARE_SOA_TABLE(Prefilter, "AOD", "DQPREFILTER", dqanalysisflags::IsBarrelSelectedPrefilter);//! joinable to ReducedA3TracksAssoc
DECLARE_SOA_TABLE(Prefilter, "AOD", "DQPREFILTER", dqanalysisflags::IsBarrelSelectedPrefilter); //! joinable to ReducedA3TracksAssoc

DECLARE_SOA_TABLE(JPsieeCandidates, "AOD", "DQPSEUDOPROPER", dqanalysisflags::Massee, dqanalysisflags::Ptee, dqanalysisflags::Etaee, dqanalysisflags::Rapee, dqanalysisflags::Phiee, dqanalysisflags::Lxyee, dqanalysisflags::LxyeePoleMass, dqanalysisflags::Lzee, dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, dqanalysisflags::MultiplicityFT0A, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0M, dqanalysisflags::MultiplicityNContrib);
DECLARE_SOA_TABLE(OniaMCTruth, "AOD", "MCTRUTHONIA", dqanalysisflags::OniaPt, dqanalysisflags::OniaEta, dqanalysisflags::OniaY, dqanalysisflags::OniaPhi, dqanalysisflags::OniaVz, dqanalysisflags::OniaVtxZ, dqanalysisflags::MultiplicityFT0A, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0M, dqanalysisflags::MultiplicityNContrib);
Expand All @@ -128,16 +127,16 @@ using MyEventsVtxCovSelected = soa::Join<aod::ReducedA3Events, aod::ReducedA3Eve
using MyBarrelAssocs = soa::Join<aod::ReducedA3TracksAssoc, aod::BarrelTrackCuts>;
using MyBarrelAssocsPrefilter = soa::Join<aod::ReducedA3TracksAssoc, aod::BarrelTrackCuts, aod::Prefilter>;

using MyBarrelTracks = soa::Join<aod::ReducedA3Tracks, aod::ReducedA3TracksBarrel,
aod::ReducedA3PIDTOF, aod::ReducedA3PIDRich, aod::ReducedA3PIDRichSignals,
using MyBarrelTracks = soa::Join<aod::ReducedA3Tracks, aod::ReducedA3TracksBarrel,
aod::ReducedA3PIDTOF, aod::ReducedA3PIDRich, aod::ReducedA3PIDRichSignals,
aod::ReducedA3PIDOT, aod::ReducedA3TracksBarrelLabels>;

using MyBarrelTracksWithCov = soa::Join<aod::ReducedA3Tracks, aod::ReducedA3TracksBarrel, aod::ReducedA3TracksBarrelCov,
aod::ReducedA3PIDTOF, aod::ReducedA3PIDRich, aod::ReducedA3PIDRichSignals,
using MyBarrelTracksWithCov = soa::Join<aod::ReducedA3Tracks, aod::ReducedA3TracksBarrel, aod::ReducedA3TracksBarrelCov,
aod::ReducedA3PIDTOF, aod::ReducedA3PIDRich, aod::ReducedA3PIDRichSignals,
aod::ReducedA3PIDOT, aod::ReducedA3TracksBarrelLabels>;

using MyBarrelTracksWithCovWithAmbiguities = soa::Join<aod::ReducedA3Tracks, aod::ReducedA3TracksBarrel, aod::ReducedA3TracksBarrelCov,
aod::ReducedA3PIDTOF, aod::ReducedA3PIDRich, aod::ReducedA3PIDRichSignals,
aod::ReducedA3PIDTOF, aod::ReducedA3PIDRich, aod::ReducedA3PIDRichSignals,
aod::ReducedA3PIDOT, aod::BarrelAmbiguities, aod::ReducedA3TracksBarrelLabels>;

constexpr static uint32_t gkEventFillMap = VarManager::ObjTypes::ReducedEvent;
Expand Down Expand Up @@ -167,7 +166,7 @@ struct AnalysisEventSelection {

AnalysisCompositeCut* fEventCut;

std::map<int64_t, bool> fSelMap; // key: reduced event global index, value: event selection decision
std::map<int64_t, bool> fSelMap; // key: reduced event global index, value: event selection decision

void init(o2::framework::InitContext& context)
{
Expand Down Expand Up @@ -964,7 +963,7 @@ struct AnalysisSameEventPairing {
}
}
}

// Add histogram classes for each specified MCsignal at the generator level
// TODO: create a std::vector of hist classes to be used at Fill time, to avoid using Form in the process function
TString sigGenNamesStr = fConfigMC.genSignals.value;
Expand Down Expand Up @@ -1034,7 +1033,7 @@ struct AnalysisSameEventPairing {
bool isCorrectAssoc_leg2 = false;
dielectronList.reserve(1);
dielectronsExtraList.reserve(1);

if (fConfigOptions.flatTables.value) {
dielectronAllList.reserve(1);
}
Expand Down Expand Up @@ -1109,8 +1108,8 @@ struct AnalysisSameEventPairing {
}*/
if (!fConfigMC.skimSignalOnly || (fConfigMC.skimSignalOnly && mcDecision > 0)) {
dielectronList(event.globalIndex(), VarManager::fgValues[VarManager::kMass],
VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi],
t1.sign() + t2.sign(), twoTrackFilter, mcDecision);
VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi],
t1.sign() + t2.sign(), twoTrackFilter, mcDecision);
}

// Fill histograms
Expand Down Expand Up @@ -1641,7 +1640,7 @@ struct AnalysisAsymmetricPairing {
Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast<uint32_t>(0);

PresliceUnsorted<MyBarrelAssocs> trackAssocsPerCollision = aod::reducedA3track_association::reducedA3eventId;
//PresliceUnsorted<aod::ReducedA3TracksAssoc> trackAssocsPerCollision = aod::reducedA3track_association::reducedA3eventId;
// PresliceUnsorted<aod::ReducedA3TracksAssoc> trackAssocsPerCollision = aod::reducedA3track_association::reducedA3eventId;

// Partitions for triplets and asymmetric pairs
Partition<MyBarrelAssocs> legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegAFilterMask) > static_cast<uint32_t>(0);
Expand Down Expand Up @@ -2497,8 +2496,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
adaptAnalysisTask<AnalysisTrackSelection>(cfgc),
adaptAnalysisTask<AnalysisPrefilterSelection>(cfgc),
adaptAnalysisTask<AnalysisSameEventPairing>(cfgc),
adaptAnalysisTask<AnalysisAsymmetricPairing>(cfgc)
};
adaptAnalysisTask<AnalysisAsymmetricPairing>(cfgc)};
}

void DefineHistograms(HistogramManager* histMan, TString histClasses, const char* histGroups)
Expand All @@ -2523,7 +2521,6 @@ void DefineHistograms(HistogramManager* histMan, TString histClasses, const char
dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "two-collisions", histName);
}


// TODO: CHANGE TO PROPER PID

if ((classStr.Contains("Track") || classStr.Contains("Assoc")) && !classStr.Contains("Pairs")) {
Expand Down
Loading