Skip to content

Commit 831f016

Browse files
cnkosteralibuild
andauthored
[Common] Add timestamp, centrality and evSelection to inter-calib table (#11457)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent e6cfe89 commit 831f016

File tree

3 files changed

+129
-26
lines changed

3 files changed

+129
-26
lines changed

Common/DataModel/ZDCInterCalib.h

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,23 @@
2020

2121
namespace o2::aod
2222
{
23-
namespace znoutput
23+
namespace znoutput // o2-linter: disable=name/workflow-file
2424
{
25-
DECLARE_SOA_COLUMN(ZNApmc, commonPMZNA, float); //! PMC ZNA // o2-linter: disable=name/o2-column
26-
DECLARE_SOA_COLUMN(ZNApm1, ZNAPM1, float); //! PM1 ZNA // o2-linter: disable=name/o2-column
27-
DECLARE_SOA_COLUMN(ZNApm2, ZNAPM2, float); //! PM2 ZNA // o2-linter: disable=name/o2-column
28-
DECLARE_SOA_COLUMN(ZNApm3, ZNAPM3, float); //! PM3 ZNA // o2-linter: disable=name/o2-column
29-
DECLARE_SOA_COLUMN(ZNApm4, ZNAPM4, float); //! PM4 ZNA // o2-linter: disable=name/o2-column
30-
DECLARE_SOA_COLUMN(ZNAtdc, ZNATDC, float); //! TDC ZNA // o2-linter: disable=name/o2-column
31-
DECLARE_SOA_COLUMN(ZNCpmc, commonPMZNC, float); //! PMC ZNC // o2-linter: disable=name/o2-column
32-
DECLARE_SOA_COLUMN(ZNCpm1, ZNCPM1, float); //! PM1 ZNC // o2-linter: disable=name/o2-column
33-
DECLARE_SOA_COLUMN(ZNCpm2, ZNCPM2, float); //! PM2 ZNC // o2-linter: disable=name/o2-column
34-
DECLARE_SOA_COLUMN(ZNCpm3, ZNCPM3, float); //! PM3 ZNC // o2-linter: disable=name/o2-column
35-
DECLARE_SOA_COLUMN(ZNCpm4, ZNCPM4, float); //! PM4 ZNC // o2-linter: disable=name/o2-column
36-
DECLARE_SOA_COLUMN(ZNCtdc, ZNCTDC, float); //! TDC ZNC // o2-linter: disable=name/o2-column
37-
25+
DECLARE_SOA_COLUMN(ZNApmc, commonPMZNA, float); //! PMC ZNA // o2-linter: disable=name/o2-column
26+
DECLARE_SOA_COLUMN(ZNApm1, ZNAPM1, float); //! PM1 ZNA // o2-linter: disable=name/o2-column
27+
DECLARE_SOA_COLUMN(ZNApm2, ZNAPM2, float); //! PM2 ZNA // o2-linter: disable=name/o2-column
28+
DECLARE_SOA_COLUMN(ZNApm3, ZNAPM3, float); //! PM3 ZNA // o2-linter: disable=name/o2-column
29+
DECLARE_SOA_COLUMN(ZNApm4, ZNAPM4, float); //! PM4 ZNA // o2-linter: disable=name/o2-column
30+
DECLARE_SOA_COLUMN(ZNAtdc, ZNATDC, float); //! TDC ZNA // o2-linter: disable=name/o2-column
31+
DECLARE_SOA_COLUMN(ZNCpmc, commonPMZNC, float); //! PMC ZNC // o2-linter: disable=name/o2-column
32+
DECLARE_SOA_COLUMN(ZNCpm1, ZNCPM1, float); //! PM1 ZNC // o2-linter: disable=name/o2-column
33+
DECLARE_SOA_COLUMN(ZNCpm2, ZNCPM2, float); //! PM2 ZNC // o2-linter: disable=name/o2-column
34+
DECLARE_SOA_COLUMN(ZNCpm3, ZNCPM3, float); //! PM3 ZNC // o2-linter: disable=name/o2-column
35+
DECLARE_SOA_COLUMN(ZNCpm4, ZNCPM4, float); //! PM4 ZNC // o2-linter: disable=name/o2-column
36+
DECLARE_SOA_COLUMN(ZNCtdc, ZNCTDC, float); //! TDC ZNC // o2-linter: disable=name/o2-column
37+
DECLARE_SOA_COLUMN(Centrality, centrality, float); //! Centrality
38+
DECLARE_SOA_COLUMN(Timestamp, timestamp, uint64_t); //! Timestamp
39+
DECLARE_SOA_COLUMN(SelectionBits, selectionBits, uint8_t); //! Selection Flags
3840
} // namespace znoutput
3941

4042
DECLARE_SOA_TABLE(ZDCInterCalib, "AOD", "ZDCIC", o2::soa::Index<>,
@@ -49,7 +51,10 @@ DECLARE_SOA_TABLE(ZDCInterCalib, "AOD", "ZDCIC", o2::soa::Index<>,
4951
znoutput::ZNCpm2,
5052
znoutput::ZNCpm3,
5153
znoutput::ZNCpm4,
52-
znoutput::ZNCtdc);
54+
znoutput::ZNCtdc,
55+
znoutput::Centrality,
56+
znoutput::Timestamp,
57+
znoutput::SelectionBits);
5358
} // namespace o2::aod
5459

5560
#endif // COMMON_DATAMODEL_ZDCINTERCALIB_H_

Common/TableProducer/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ o2physics_add_dpl_workflow(match-mft-ft0
125125
O2::DetectorsBase O2::DetectorsCommonDataFormats
126126
COMPONENT_NAME Analysis)
127127

128-
o2physics_add_dpl_workflow(zdc-task-intercalib
129-
SOURCES zdc-task-intercalib.cxx
128+
o2physics_add_dpl_workflow(zdc-task-inter-calib
129+
SOURCES zdcTaskInterCalib.cxx
130130
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
131131
COMPONENT_NAME Analysis)
132132

Common/TableProducer/zdc-task-intercalib.cxx renamed to Common/TableProducer/zdcTaskInterCalib.cxx

Lines changed: 107 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,10 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111

12-
/// \file zdc-task-intercalib.cxx
12+
/// \file zdcTaskInterCalib.cxx
1313
/// \brief Task for ZDC tower inter-calibration
1414
/// \author chiara.oppedisano@cern.ch
1515

16-
// o2-linter: disable=name/workflow-file
17-
// o2-linter: disable=name/file-cpp
1816
#include "Framework/AnalysisTask.h"
1917
#include "Framework/AnalysisDataModel.h"
2018
#include "Framework/HistogramRegistry.h"
@@ -35,9 +33,9 @@ using namespace o2::framework::expressions;
3533
using namespace o2::aod::evsel;
3634

3735
using BCsRun3 = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
38-
using ColEvSels = soa::Join<aod::Collisions, aod::EvSels>;
36+
using ColEvSels = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs>;
3937

40-
struct ZDCCalibTower {
38+
struct ZdcTaskInterCalib {
4139

4240
Produces<aod::ZDCInterCalib> zTab;
4341

@@ -48,9 +46,32 @@ struct ZDCCalibTower {
4846
Configurable<bool> tdcCut{"tdcCut", false, "Flag for TDC cut"};
4947
Configurable<float> tdcZNmincut{"tdcZNmincut", -2.5, "Min ZN TDC cut"};
5048
Configurable<float> tdcZNmaxcut{"tdcZNmaxcut", -2.5, "Max ZN TDC cut"};
49+
// Event selections
50+
Configurable<bool> cfgEvSelSel8{"cfgEvSelSel8", true, "Event selection: sel8"};
51+
Configurable<float> cfgEvSelVtxZ{"cfgEvSelVtxZ", 10, "Event selection: zVtx"};
52+
Configurable<bool> cfgEvSelsDoOccupancySel{"cfgEvSelsDoOccupancySel", true, "Event selection: do occupancy selection"};
53+
Configurable<float> cfgEvSelsMaxOccupancy{"cfgEvSelsMaxOccupancy", 10000, "Event selection: set max occupancy"};
54+
Configurable<bool> cfgEvSelsNoSameBunchPileupCut{"cfgEvSelsNoSameBunchPileupCut", true, "Event selection: no same bunch pileup cut"};
55+
Configurable<bool> cfgEvSelsIsGoodZvtxFT0vsPV{"cfgEvSelsIsGoodZvtxFT0vsPV", true, "Event selection: is good ZVTX FT0 vs PV"};
56+
Configurable<bool> cfgEvSelsNoCollInTimeRangeStandard{"cfgEvSelsNoCollInTimeRangeStandard", true, "Event selection: no collision in time range standard"};
57+
Configurable<bool> cfgEvSelsIsVertexITSTPC{"cfgEvSelsIsVertexITSTPC", true, "Event selection: is vertex ITSTPC"};
58+
Configurable<bool> cfgEvSelsIsGoodITSLayersAll{"cfgEvSelsIsGoodITSLayersAll", true, "Event selection: is good ITS layers all"};
5159
//
5260
HistogramRegistry registry{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject};
5361

62+
enum SelectionCriteria {
63+
evSel_zvtx,
64+
evSel_sel8,
65+
evSel_occupancy,
66+
evSel_kNoSameBunchPileup,
67+
evSel_kIsGoodZvtxFT0vsPV,
68+
evSel_kNoCollInTimeRangeStandard,
69+
evSel_kIsVertexITSTPC,
70+
evSel_kIsGoodITSLayersAll,
71+
evSel_allEvents,
72+
nEventSelections
73+
};
74+
5475
void init(InitContext const&)
5576
{
5677
registry.add("ZNApmc", "ZNApmc; ZNA PMC; Entries", {HistType::kTH1F, {{nBins, -0.5, maxZN}}});
@@ -65,16 +86,93 @@ struct ZDCCalibTower {
6586
registry.add("ZNCpm4", "ZNCpm4; ZNC PM4; Entries", {HistType::kTH1F, {{nBins, -0.5, maxZN}}});
6687
registry.add("ZNAsumq", "ZNAsumq; ZNA uncalib. sum PMQ; Entries", {HistType::kTH1F, {{nBins, -0.5, maxZN}}});
6788
registry.add("ZNCsumq", "ZNCsumq; ZNC uncalib. sum PMQ; Entries", {HistType::kTH1F, {{nBins, -0.5, maxZN}}});
89+
90+
registry.add("hEventCount", "Number of Event; Cut; #Events Passed Cut", {HistType::kTH1D, {{nEventSelections, 0, nEventSelections}}});
91+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_allEvents + 1, "All events");
92+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_zvtx + 1, "vtxZ");
93+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_sel8 + 1, "Sel8");
94+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_occupancy + 1, "kOccupancy");
95+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_kNoSameBunchPileup + 1, "kNoSameBunchPileup");
96+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_kIsGoodZvtxFT0vsPV + 1, "kIsGoodZvtxFT0vsPV");
97+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_kNoCollInTimeRangeStandard + 1, "kNoCollInTimeRangeStandard");
98+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_kIsVertexITSTPC + 1, "kIsVertexITSTPC");
99+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_kIsGoodITSLayersAll + 1, "kkIsGoodITSLayersAll");
100+
}
101+
102+
template <typename TCollision>
103+
uint8_t eventSelected(TCollision collision)
104+
{
105+
uint8_t selectionBits = 0;
106+
bool selected;
107+
108+
registry.fill(HIST("hEventCount"), evSel_allEvents);
109+
110+
selected = std::fabs(collision.posZ()) < cfgEvSelVtxZ;
111+
if (selected) {
112+
selectionBits |= (uint8_t)(0x1u << evSel_zvtx);
113+
registry.fill(HIST("hEventCount"), evSel_zvtx);
114+
}
115+
116+
selected = collision.sel8();
117+
if (selected) {
118+
selectionBits |= (uint8_t)(0x1u << evSel_sel8);
119+
registry.fill(HIST("hEventCount"), evSel_sel8);
120+
}
121+
122+
auto occupancy = collision.trackOccupancyInTimeRange();
123+
selected = occupancy <= cfgEvSelsMaxOccupancy;
124+
if (selected) {
125+
selectionBits |= (uint8_t)(0x1u << evSel_occupancy);
126+
registry.fill(HIST("hEventCount"), evSel_occupancy);
127+
}
128+
129+
selected = collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup);
130+
if (selected) {
131+
selectionBits |= (uint8_t)(0x1u << evSel_kNoSameBunchPileup);
132+
registry.fill(HIST("hEventCount"), evSel_kNoSameBunchPileup);
133+
}
134+
135+
selected = collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV);
136+
if (selected) {
137+
selectionBits |= (uint8_t)(0x1u << evSel_kIsGoodZvtxFT0vsPV);
138+
registry.fill(HIST("hEventCount"), evSel_kIsGoodZvtxFT0vsPV);
139+
}
140+
141+
selected = collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard);
142+
if (selected) {
143+
selectionBits |= (uint8_t)(0x1u << evSel_kNoCollInTimeRangeStandard);
144+
registry.fill(HIST("hEventCount"), evSel_kNoCollInTimeRangeStandard);
145+
}
146+
147+
selected = collision.selection_bit(o2::aod::evsel::kIsVertexITSTPC);
148+
if (selected) {
149+
selectionBits |= (uint8_t)(0x1u << evSel_kIsVertexITSTPC);
150+
registry.fill(HIST("hEventCount"), evSel_kIsVertexITSTPC);
151+
}
152+
153+
selected = collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll);
154+
if (selected) {
155+
selectionBits |= (uint8_t)(0x1u << evSel_kIsGoodITSLayersAll);
156+
registry.fill(HIST("hEventCount"), evSel_kIsGoodITSLayersAll);
157+
}
158+
159+
return selectionBits;
68160
}
69161

70162
void process(ColEvSels const& cols, BCsRun3 const& /*bcs*/, aod::Zdcs const& /*zdcs*/)
71163
{
72164
// collision-based event selection
165+
int nTowers = 4; // number of ZDC towers
166+
73167
for (auto const& collision : cols) {
74168
const auto& foundBC = collision.foundBC_as<BCsRun3>();
75169
if (foundBC.has_zdc()) {
76170
const auto& zdc = foundBC.zdc();
77171

172+
uint8_t evSelection = eventSelected(collision);
173+
174+
float centrality = collision.centFT0C();
175+
78176
// To assure that ZN have a genuine signal (tagged by the relative TDC)
79177
// we can check that the amplitude is >0 or that ADC is NOT very negative (-inf)
80178

@@ -117,7 +215,7 @@ struct ZDCCalibTower {
117215
};
118216
//
119217
if (isZNChit) {
120-
for (int it = 0; it < 4; it++) {
218+
for (int it = 0; it < nTowers; it++) {
121219
pmqZNC[it] = (zdc.energySectorZNC())[it];
122220
sumZNC += pmqZNC[it];
123221
}
@@ -129,7 +227,7 @@ struct ZDCCalibTower {
129227
registry.get<TH1>(HIST("ZNCsumq"))->Fill(sumZNC);
130228
}
131229
if (isZNAhit) {
132-
for (int it = 0; it < 4; it++) {
230+
for (int it = 0; it < nTowers; it++) {
133231
pmqZNA[it] = (zdc.energySectorZNA())[it];
134232
sumZNA += pmqZNA[it];
135233
}
@@ -142,7 +240,7 @@ struct ZDCCalibTower {
142240
registry.get<TH1>(HIST("ZNAsumq"))->Fill(sumZNA);
143241
}
144242
if (isZNAhit || isZNChit)
145-
zTab(pmcZNA, pmqZNA[0], pmqZNA[1], pmqZNA[2], pmqZNA[3], tdcZNC, pmcZNC, pmqZNC[0], pmqZNC[1], pmqZNC[2], pmqZNC[3], tdcZNA);
243+
zTab(pmcZNA, pmqZNA[0], pmqZNA[1], pmqZNA[2], pmqZNA[3], tdcZNC, pmcZNC, pmqZNC[0], pmqZNC[1], pmqZNC[2], pmqZNC[3], tdcZNA, centrality, foundBC.timestamp(), evSelection);
146244
}
147245
}
148246
}
@@ -151,5 +249,5 @@ struct ZDCCalibTower {
151249
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) // o2-linter: disable=name/file-cpp
152250
{
153251
return WorkflowSpec{
154-
adaptAnalysisTask<ZDCCalibTower>(cfgc)};
252+
adaptAnalysisTask<ZdcTaskInterCalib>(cfgc)};
155253
}

0 commit comments

Comments
 (0)