Skip to content
Open
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
6 changes: 4 additions & 2 deletions Common/DataModel/ZDCLightIons.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ DECLARE_SOA_COLUMN(CentralityFt0c, centralityFt0c, float); //! Centrality
DECLARE_SOA_COLUMN(CentralityFt0a, centralityFt0a, float); //! Centrality
DECLARE_SOA_COLUMN(CentralityFt0m, centralityFt0m, float); //! Centrality
DECLARE_SOA_COLUMN(Timestamp, timestamp, uint64_t); //! Timestamp
DECLARE_SOA_COLUMN(SelectionBits, selectionBits, uint8_t); //! Selection Flags
DECLARE_SOA_COLUMN(SelectionBits, selectionBits, uint8_t); //! Selection flags x collisions
DECLARE_SOA_COLUMN(BcMask, bcMask, uint8_t); //! Selection flags x BC
} // namespace zdclightions

DECLARE_SOA_TABLE(ZDCLightIons, "AOD", "ZDCTABLELIGHTIONS",
Expand Down Expand Up @@ -92,7 +93,8 @@ DECLARE_SOA_TABLE(ZDCLightIons, "AOD", "ZDCTABLELIGHTIONS",
zdclightions::CentralityFt0a,
zdclightions::CentralityFt0m,
zdclightions::Timestamp,
zdclightions::SelectionBits);
zdclightions::SelectionBits,
zdclightions::BcMask);
} // namespace o2::aod

#endif // COMMON_DATAMODEL_ZDCLIGHTIONS_H_
65 changes: 62 additions & 3 deletions Common/TableProducer/zdcTaskLightIons.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#include "Common/DataModel/EventSelection.h"
#include "Common/DataModel/ZDCLightIons.h"

#include <CCDB/BasicCCDBManager.h>
#include <DataFormatsParameters/GRPLHCIFData.h>
#include <Framework/AnalysisDataModel.h>
#include <Framework/AnalysisHelpers.h>
#include <Framework/AnalysisTask.h>
Expand All @@ -32,6 +34,8 @@
#include <TH2.h>

#include <cstdint>
#include <map>
#include <string>

using namespace o2;
using namespace o2::aod;
Expand All @@ -45,6 +49,14 @@ using ColEvSels = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0As, aod::C
struct ZdcTaskLightIons {

Produces<aod::ZDCLightIons> zdcTableLI;
Service<o2::ccdb::BasicCCDBManager> ccdb;
static const int nBCsPerOrbit = o2::constants::lhc::LHCMaxBunches;
std::bitset<nBCsPerOrbit> beamPatternA;
std::bitset<nBCsPerOrbit> beamPatternC;
std::bitset<nBCsPerOrbit> bcPatternB;
std::bitset<nBCsPerOrbit> bcPatternA;
std::bitset<nBCsPerOrbit> bcPatternC;
std::bitset<nBCsPerOrbit> bcPatternE;

// Configurable parameters
Configurable<int> nBinsTiming{"nBinsTiming", 200, "n bins for debunching histo"};
Expand Down Expand Up @@ -78,6 +90,14 @@ struct ZdcTaskLightIons {
nEventSelections
};

enum bcMaskBits {
bcMask_beamB,
bcMask_beamA,
bcMask_beamC,
bcMask_beamE,
nBits
};

void init(InitContext const&)
{
registry.add("zdcDebunchHist", "ZN sum vs. diff; ZNA-ZNC (ns); ZNA+ZNC (ns)", {HistType::kTH2D, {{nBinsTiming, -20., 20.}, {nBinsTiming, -20., 20.}}});
Expand Down Expand Up @@ -158,9 +178,46 @@ struct ZdcTaskLightIons {

void processZDCBC(BCsRun3 const& bcs, aod::Zdcs const& /*zdcs*/)
{
auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance();
uint64_t timeStamp = bcs.iteratorAt(0).timestamp();
std::map<std::string, std::string> metadata;
// use getSpecific to set metadata to avoid crashes related to specific run number
auto grplhcif = ccdbMgr.getSpecific<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", timeStamp, metadata);
// auto grplhcif = ccdb->getForTimeStamp<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", timeStamp);
if (grplhcif == nullptr) {
LOG(fatal) << "GRPLHCIFData not in database, timestamp:" << timeStamp;
}

beamPatternA = grplhcif->getBunchFilling().getBeamPattern(0);
beamPatternC = grplhcif->getBunchFilling().getBeamPattern(1);
bcPatternB = grplhcif->getBunchFilling().getBCPattern();
bcPatternA = beamPatternA & ~beamPatternC;
bcPatternC = ~beamPatternA & beamPatternC;
bcPatternE = ~beamPatternA & ~beamPatternC;

for (const auto& bc : bcs) {

if (bc.has_zdc()) {

// int64_t timestamp = bc.timestamp();
auto timestampFromSOR = (bc.timestamp() - grplhcif->getFillNumberTime()) / 1e3; // Convert to seconds

int bcInOrbit = bc.globalBC() % nBCsPerOrbit;

uint8_t maskSel = 0;
if (bcPatternB[bcInOrbit]) {
maskSel |= (uint8_t)(0x1u << bcMask_beamB);
}
if (bcPatternA[bcInOrbit]) {
maskSel |= (uint8_t)(0x1u << bcMask_beamA);
}
if (bcPatternC[bcInOrbit]) {
maskSel |= (uint8_t)(0x1u << bcMask_beamC);
}
if (bcPatternE[bcInOrbit]) {
maskSel |= (uint8_t)(0x1u << bcMask_beamE);
}

auto tdcZNA = bc.zdc().timeZNA();
auto tdcZNC = bc.zdc().timeZNC();
auto tdcZPA = bc.zdc().timeZPA();
Expand Down Expand Up @@ -225,8 +282,9 @@ struct ZdcTaskLightIons {
-1, -1, -1,
-1.,
-1, -1, -1,
bc.timestamp(),
-1);
timestampFromSOR,
0,
maskSel);
}
}
}
Expand Down Expand Up @@ -333,7 +391,8 @@ struct ZdcTaskLightIons {
zv,
centralityFT0C, centralityFT0A, centralityFT0M,
foundBC.timestamp(),
evSelection);
evSelection,
0);
}
}
}
Expand Down
Loading
Loading