Skip to content

Commit

Permalink
Fill big collision table. (#2989)
Browse files Browse the repository at this point in the history
* Fill big collision table.

* Fix Clang format.

---------

Co-authored-by: Mattia Faggin <[email protected]>
Co-authored-by: Mattia Faggin <[email protected]>
  • Loading branch information
3 people authored Jul 6, 2023
1 parent bc2a508 commit bccdb5c
Show file tree
Hide file tree
Showing 2 changed files with 168 additions and 6 deletions.
51 changes: 51 additions & 0 deletions DPG/Tasks/AOTTrack/qaEventTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,25 @@ namespace dpgcollision
{
DECLARE_SOA_INDEX_COLUMN(BC, bc);
DECLARE_SOA_COLUMN(IsEventReject, isEventReject, int);
DECLARE_SOA_COLUMN(IsEventSelected, isEventSelected, int);
DECLARE_SOA_COLUMN(RunNumber, runNumber, int);
DECLARE_SOA_COLUMN(NumContrib, numContrib, int);
DECLARE_SOA_COLUMN(NumTracksAll, numTracksAll, int);
DECLARE_SOA_COLUMN(NumTracksFiltered, numTracksFiltered, int);
DECLARE_SOA_COLUMN(GlobalBcInRun, globalBcInRun, int);
DECLARE_SOA_COLUMN(Ft0PosZ, ft0PosZ, int);
DECLARE_SOA_COLUMN(SignalFT0A, signalFT0A, int);
DECLARE_SOA_COLUMN(SignalFT0C, signalFT0C, int);
DECLARE_SOA_COLUMN(SignalFT0M, signalFT0M, int);
DECLARE_SOA_COLUMN(SignalV0A, signalV0A, int);
DECLARE_SOA_COLUMN(CollIDMC, collIDMC, float);
DECLARE_SOA_COLUMN(PosXMC, posXMC, float);
DECLARE_SOA_COLUMN(PosYMC, posYMC, float);
DECLARE_SOA_COLUMN(PosZMC, posZMC, float);
DECLARE_SOA_COLUMN(CollisionTimeMC, collisionTimeMC, float);
DECLARE_SOA_COLUMN(DpgCounterCollision, dpgCounterCollision, int);
DECLARE_SOA_COLUMN(DpgCounterDF, dpgCounterDF, int);
DECLARE_SOA_COLUMN(IsFakeCollision, isFakeCollision, int);
} // namespace dpgcollision

DECLARE_SOA_TABLE(DPGCollisions, "AOD", "DPGCollisions", //! Table of the DPG collisions
Expand All @@ -40,6 +57,40 @@ DECLARE_SOA_TABLE(DPGCollisions, "AOD", "DPGCollisions", //! Table of the DPG co
dpgcollision::RunNumber,
dpgcollision::NumContrib);

DECLARE_SOA_TABLE(DPGCollsBig, "AOD", "DPGCollsBig", //! Big table of the DPG collisions
dpgcollision::IsEventSelected,
dpgcollision::RunNumber,
collision::PosX,
collision::PosY,
collision::PosZ,
collision::CovXX,
collision::CovXY,
collision::CovXZ,
collision::CovYY,
collision::CovYZ,
collision::CovZZ,
dpgcollision::NumContrib,
dpgcollision::NumTracksAll,
dpgcollision::NumTracksFiltered,
collision::Chi2,
dpgcollision::GlobalBcInRun,
dpgcollision::Ft0PosZ,
dpgcollision::SignalFT0A,
dpgcollision::SignalFT0C,
dpgcollision::SignalFT0M,
dpgcollision::SignalV0A,
collision::CollisionTime,
collision::CollisionTimeRes,
dpgcollision::DpgCounterCollision, /// counter to give a unique ID to each collision
dpgcollision::DpgCounterDF, /// counter to give a unique ID to data each dataframe
/// MC info
dpgcollision::CollIDMC, /// unique only if combined with DF counter (dpgcollision::DpgCounterDF)
dpgcollision::PosXMC,
dpgcollision::PosYMC,
dpgcollision::PosZMC,
dpgcollision::CollisionTimeMC,
dpgcollision::IsFakeCollision); /// -1: unknown (data); 0: not fake; 1: fake (== it does not correspond to any MC collision)

namespace dpgtrack
{
DECLARE_SOA_INDEX_COLUMN(DPGCollision, dpgCollision); //! Index to move from track to collision
Expand Down
123 changes: 117 additions & 6 deletions DPG/Tasks/AOTTrack/qaEventTrackLiteProducer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "Common/Core/trackUtilities.h"
#include "Common/DataModel/EventSelection.h"
#include "Common/DataModel/TrackSelectionTables.h"
#include "Common/DataModel/Multiplicity.h"
#include "Common/Core/TrackSelection.h"
#include "Common/Core/TrackSelectionDefaults.h"
#include "Common/TableProducer/PID/pidTOFBase.h"
Expand All @@ -39,6 +40,7 @@ using namespace o2::dataformats;
struct qaEventTrackLiteProducer {
// Tables to produce
Produces<o2::aod::DPGCollisions> tableCollisions;
Produces<o2::aod::DPGCollsBig> tableCollsBig;
Produces<o2::aod::DPGTracks> tableTracks;
Produces<o2::aod::DPGRecoParticles> tableRecoParticles;
Produces<o2::aod::DPGNonRecoParticles> tableNonRecoParticles;
Expand Down Expand Up @@ -90,16 +92,29 @@ struct qaEventTrackLiteProducer {
((trackSelection.node() == 5) && requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks));

Preslice<aod::McParticles> perMcCollision = aod::mcparticle::mcCollisionId;
Preslice<aod::Tracks> perRecoCollision = aod::track::collisionId;
Preslice<TrackTableData> perRecoCollision = aod::track::collisionId;

int counterColl;
int counterDF;

void init(InitContext const&)
{
if (doprocessTableData == true && doprocessTableMC == true) {
LOGF(fatal, "Cannot enable processTableData and processTableMC at the same time. Please choose one.");
}
if (doprocessTableData == false && doprocessTableMC == false) {
LOGF(fatal, "No process function enabled. Enable either processTableData or processTableMC");
// if (doprocessTableData == true && doprocessTableMC == true && doprocessTableDataCollsBig == true && processTableMCCollsBig == true) {
// LOGF(fatal, "Cannot enable processTableData, processTableMC, doprocessTableDataCollsBig and processTableMCCollsBig at the same time. Please choose one.");
// }
// if (doprocessTableData == false && doprocessTableMC == false && doprocessTableDataCollsBig == false && processTableMCCollsBig == false) {
// LOGF(fatal, "No process function enabled. Enable one of them.");
// }
int howManyProcesses = static_cast<int>(doprocessTableData) + static_cast<int>(doprocessTableMC) + static_cast<int>(doprocessTableDataCollsBig) + static_cast<int>(doprocessTableMCCollsBig);
if (howManyProcesses > 1) {
LOGF(fatal, "%d process functions enabled. Enable only one of them!", howManyProcesses);
} else if (howManyProcesses == 0) {
LOGF(fatal, "No process function enabled. Enable one of them.");
}

/// for studies with collision table
counterColl = 0;
counterDF = 0;
}

// Function to select tracks
Expand Down Expand Up @@ -278,6 +293,102 @@ struct qaEventTrackLiteProducer {
}
}
}

//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
/// Table filling for offline collision monitoring ///
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
using BCsWithRun3Matchings = soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse>;
using CollsBigTable = soa::Join<CollisionTableData, aod::Mults>;
using CollsBigTableMC = soa::Join<CollsBigTable, aod::McCollisionLabels>;

template <bool IS_MC, typename COLLS, typename MCCOLLS, typename TFILT, typename TALL>
void fillCollsBigTable(COLLS& collisions, MCCOLLS& mcCollisions, TFILT& tracksFiltered, TALL& tracksAll, soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse> const& bcs, aod::FT0s const& ft0s)
{
if (fractionOfSampledEvents < 1.f && (static_cast<float>(rand()) / static_cast<float>(RAND_MAX)) > fractionOfSampledEvents) { // Skip events that are not sampled
return;
}
if (nTableEventCounter > targetNumberOfEvents) { // Skip events if target is reached
return;
}
for (auto& collision : collisions) {

const auto tracksFilteredPerColl = tracksFiltered.sliceBy(perRecoCollision, collision.globalIndex());
const auto tracksAllPerColl = tracksAll.sliceBy(perRecoCollision, collision.globalIndex());

const auto& bc = collision.template bc_as<BCsWithRun3Matchings>();
int collIDMC = -1;
float posXMC = -9999.;
float posYMC = -9999.;
float posZMC = -9999.;
float collTimeMC = -9999.;
int isFakeCollision = -1;
if constexpr (IS_MC) {
if (!collision.has_mcCollision()) {
isFakeCollision = 1;
} else {
isFakeCollision = 0;
const auto& mcCollision = collision.mcCollision();
collIDMC = mcCollision.globalIndex();
posXMC = mcCollision.posX();
posYMC = mcCollision.posY();
posZMC = mcCollision.posZ();
collTimeMC = mcCollision.t();
}
}

tableCollsBig((isRun3 ? collision.sel8() : collision.sel7()),
bc.runNumber(),
collision.posX(), collision.posY(), collision.posZ(),
collision.covXX(), collision.covXY(), collision.covXZ(), collision.covYY(), collision.covYZ(), collision.covZZ(),
collision.numContrib(), tracksAllPerColl.size(), tracksFilteredPerColl.size(),
collision.chi2(),
bc.globalBC(),
bc.has_ft0() ? bc.ft0().posZ() : -999.,
collision.multFT0A(), collision.multFT0C(), collision.multFT0M(), collision.multFV0A(),
collision.collisionTime(), collision.collisionTimeRes(),
counterColl, counterDF,
collIDMC,
posXMC, posYMC, posZMC,
collTimeMC,
isFakeCollision);

/// update the collision global counter
counterColl++;
}
}

/// Processing data
void processTableDataCollsBig(CollsBigTable const& collisions,
soa::Filtered<TrackTableData> const& tracksFiltered,
TrackTableData const& tracksAll,
BCsWithRun3Matchings const& bcs, aod::FT0s const& ft0s)
{

fillCollsBigTable<false>(collisions, collisions, tracksFiltered, tracksAll, bcs, ft0s);

/// We are at the end of the process, which is run once per DF
/// Let's update the DF counter
counterDF++;
}
PROCESS_SWITCH(qaEventTrackLiteProducer, processTableDataCollsBig, "Process data for big collision table producing", false);

/// Processing MC
void processTableMCCollsBig(CollsBigTableMC const& collisions,
aod::McCollisions const& mcCollisions,
soa::Filtered<TrackTableData> const& tracksFiltered,
TrackTableData const& tracksAll,
BCsWithRun3Matchings const& bcs, aod::FT0s const& ft0s)
{

fillCollsBigTable<true>(collisions, mcCollisions, tracksFiltered, tracksAll, bcs, ft0s);

/// We are at the end of the process, which is run once per DF
/// Let's update the DF counter
counterDF++;
}
PROCESS_SWITCH(qaEventTrackLiteProducer, processTableMCCollsBig, "Process MC for big collision table producing", false);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down

0 comments on commit bccdb5c

Please sign in to comment.