Skip to content

Commit 2aa8e7e

Browse files
committed
Add timestamp, centrality and evSelection to inter-calib table
1 parent 5e260bb commit 2aa8e7e

2 files changed

Lines changed: 122 additions & 18 deletions

File tree

Common/DataModel/ZDCInterCalib.h

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,21 @@ namespace o2::aod
2222
{
2323
namespace znoutput
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 ZN // o2-linter: disable=name/o2-column
38+
DECLARE_SOA_COLUMN(Timestamp, timestamp, uint64_t); //! Timestamp // o2-linter: disable=name/o2-column
39+
DECLARE_SOA_COLUMN(SelectionBits, selectionBits, uint8_t); //! Selection Flags // o2-linter: disable=name/o2-column
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/zdc-task-intercalib.cxx

Lines changed: 103 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ using namespace o2::framework::expressions;
3535
using namespace o2::aod::evsel;
3636

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

4040
struct ZDCCalibTower {
4141

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

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

70165
void process(ColEvSels const& cols, BCsRun3 const& /*bcs*/, aod::Zdcs const& /*zdcs*/)
@@ -75,6 +170,10 @@ struct ZDCCalibTower {
75170
if (foundBC.has_zdc()) {
76171
const auto& zdc = foundBC.zdc();
77172

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

@@ -127,7 +226,7 @@ struct ZDCCalibTower {
127226
registry.get<TH1>(HIST("ZNCpm3"))->Fill(pmqZNC[2]);
128227
registry.get<TH1>(HIST("ZNCpm4"))->Fill(pmqZNC[3]);
129228
registry.get<TH1>(HIST("ZNCsumq"))->Fill(sumZNC);
130-
}
229+
}
131230
if (isZNAhit) {
132231
for (int it = 0; it < 4; it++) {
133232
pmqZNA[it] = (zdc.energySectorZNA())[it];
@@ -142,7 +241,7 @@ struct ZDCCalibTower {
142241
registry.get<TH1>(HIST("ZNAsumq"))->Fill(sumZNA);
143242
}
144243
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);
244+
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);
146245
}
147246
}
148247
}
@@ -152,4 +251,4 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) // o2-linter: disab
152251
{
153252
return WorkflowSpec{
154253
adaptAnalysisTask<ZDCCalibTower>(cfgc)};
155-
}
254+
}

0 commit comments

Comments
 (0)