Skip to content

Commit 090f148

Browse files
authored
[PWGCF] Add FIT gain information (AliceO2Group#15888)
1 parent 7b0a84a commit 090f148

3 files changed

Lines changed: 74 additions & 14 deletions

File tree

PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020

2121
#include "Common/DataModel/Multiplicity.h"
2222

23-
#include "Framework/ASoA.h"
24-
#include "Framework/AnalysisDataModel.h"
23+
#include <Framework/ASoA.h>
24+
#include <Framework/AnalysisDataModel.h>
25+
26+
#include <cstdint>
2527

2628
namespace o2::aod
2729
{
@@ -143,6 +145,7 @@ DECLARE_SOA_COLUMN(Eta, eta, float);
143145
DECLARE_SOA_COLUMN(Phi, phi, float);
144146
DECLARE_SOA_COLUMN(ChannelID, channelID, int);
145147
DECLARE_SOA_COLUMN(Amplitude, amplitude, float);
148+
DECLARE_SOA_COLUMN(GainAmplitude, gainAmplitude, float);
146149
DECLARE_SOA_COLUMN(InvMass, invMass, float);
147150
DECLARE_SOA_COLUMN(IdPos, idPos, int64_t);
148151
DECLARE_SOA_COLUMN(IdNeg, idNeg, int64_t);
@@ -176,6 +179,7 @@ DECLARE_SOA_TABLE(LRFt0aTracks, "AOD", "LRFT0ATRACK",
176179
lrcorrtrktable::LRCollisionId,
177180
lrcorrtrktable::ChannelID,
178181
lrcorrtrktable::Amplitude,
182+
lrcorrtrktable::GainAmplitude,
179183
lrcorrtrktable::Eta,
180184
lrcorrtrktable::Phi);
181185
using LRFt0aTrack = LRFt0aTracks::iterator;
@@ -185,6 +189,7 @@ DECLARE_SOA_TABLE(LRFt0cTracks, "AOD", "LRFT0CTRACK",
185189
lrcorrtrktable::LRCollisionId,
186190
lrcorrtrktable::ChannelID,
187191
lrcorrtrktable::Amplitude,
192+
lrcorrtrktable::GainAmplitude,
188193
lrcorrtrktable::Eta,
189194
lrcorrtrktable::Phi);
190195
using LRFt0cTrack = LRFt0cTracks::iterator;
@@ -231,6 +236,7 @@ DECLARE_SOA_TABLE(UpcLRFt0aTracks, "AOD", "UPCLRFT0ATRACK",
231236
lrcorrtrktable::UpcLRCollisionId,
232237
lrcorrtrktable::ChannelID,
233238
lrcorrtrktable::Amplitude,
239+
lrcorrtrktable::GainAmplitude,
234240
lrcorrtrktable::Eta,
235241
lrcorrtrktable::Phi);
236242
using UpcLRFt0aTrack = UpcLRFt0aTracks::iterator;
@@ -240,6 +246,7 @@ DECLARE_SOA_TABLE(UpcLRFt0cTracks, "AOD", "UPCLRFT0CTRACK",
240246
lrcorrtrktable::UpcLRCollisionId,
241247
lrcorrtrktable::ChannelID,
242248
lrcorrtrktable::Amplitude,
249+
lrcorrtrktable::GainAmplitude,
243250
lrcorrtrktable::Eta,
244251
lrcorrtrktable::Phi);
245252
using UpcLRFt0cTrack = UpcLRFt0cTracks::iterator;

PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ using namespace o2::constants::math;
7575

7676
auto static constexpr CintZero = 0;
7777
auto static constexpr KminFt0cCell = 96;
78+
auto static constexpr TotFt0Channels = 208;
7879
AxisSpec axisEvent{15, 0.5, 15.5, "#Event", "EventAxis"};
7980
auto static constexpr KminCharge = 3.0f;
8081
static constexpr std::string_view species[] = {"Pi", "Ka", "Pr", "K0s", "L0s"};
@@ -141,6 +142,8 @@ struct LongrangeMaker {
141142
Configurable<float> cfigFt0aEtaMin{"cfigFt0aEtaMin", 3.5f, "Minimum FT0A eta cut"};
142143
Configurable<float> cfigFt0cEtaMax{"cfigFt0cEtaMax", -2.1f, "Maximum FT0C eta cut"};
143144
Configurable<float> cfigFt0cEtaMin{"cfigFt0cEtaMin", -3.3f, "Minimum FT0C eta cut"};
145+
Configurable<bool> useGainCallib{"useGainCallib", true, "use gain calibration"};
146+
Configurable<std::string> ConfGainPath{"ConfGainPath", "Analysis/EventPlane/GainEq/FT0", "Path to gain calibration"};
144147
} cfgfittrksel;
145148

146149
struct : ConfigurableGroup {
@@ -303,6 +306,9 @@ struct LongrangeMaker {
303306
using MftTrkTable = aod::MFTTracks;
304307
using BCs = soa::Join<aod::BCsWithTimestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
305308

309+
int currentRunNumber = -999;
310+
int lastRunNumber = -999;
311+
std::vector<float> ft0gainvalues{};
306312
void processData(CollTable::iterator const& col, TrksTable const& tracks,
307313
aod::FT0s const&, MftTrkTable const& mfttracks,
308314
soa::SmallGroups<aod::BestCollisionsFwd3d> const& besttracks,
@@ -311,11 +317,20 @@ struct LongrangeMaker {
311317
if (!isEventSelected(col)) {
312318
return;
313319
}
314-
315320
auto multiplicity = countNTracks(tracks);
316321
auto centrality = selColCent(col);
317322
auto bc = col.bc_as<aod::BCsWithTimestamps>();
318-
323+
currentRunNumber = bc.runNumber();
324+
if (cfgfittrksel.useGainCallib && (currentRunNumber != lastRunNumber)) {
325+
const auto ft0GainObj = ccdb->getForTimeStamp<std::vector<float>>(cfgfittrksel.ConfGainPath.value, bc.timestamp());
326+
if (!ft0GainObj) {
327+
for (auto i{0u}; i < TotFt0Channels; i++) {
328+
ft0gainvalues.push_back(1.);
329+
}
330+
} else {
331+
ft0gainvalues = *(ft0GainObj);
332+
}
333+
}
319334
lrcollision(bc.runNumber(), col.posZ(), multiplicity, centrality, bc.timestamp());
320335

321336
// track loop
@@ -339,14 +354,22 @@ struct LongrangeMaker {
339354
float ampl = ft0.amplitudeA()[iCh];
340355
auto phi = getPhiFT0(chanelid, 0);
341356
auto eta = getEtaFT0(chanelid, 0);
342-
lrft0atracks(lrcollision.lastIndex(), chanelid, ampl, eta, phi);
357+
auto gainampl = 1.0;
358+
if (cfgfittrksel.useGainCallib) {
359+
gainampl = ampl / ft0gainvalues[chanelid];
360+
}
361+
lrft0atracks(lrcollision.lastIndex(), chanelid, ampl, gainampl, eta, phi);
343362
}
344363
for (std::size_t iCh = 0; iCh < ft0.channelC().size(); iCh++) {
345364
auto chanelid = ft0.channelC()[iCh] + KminFt0cCell;
346365
float ampl = ft0.amplitudeC()[iCh];
347366
auto phi = getPhiFT0(chanelid, 1);
348367
auto eta = getEtaFT0(chanelid, 1);
349-
lrft0ctracks(lrcollision.lastIndex(), chanelid, ampl, eta, phi);
368+
auto gainampl = 1.0;
369+
if (cfgfittrksel.useGainCallib) {
370+
gainampl = ampl / ft0gainvalues[chanelid];
371+
}
372+
lrft0ctracks(lrcollision.lastIndex(), chanelid, ampl, gainampl, eta, phi);
350373
}
351374
}
352375

@@ -404,6 +427,7 @@ struct LongrangeMaker {
404427
v0.pt(), v0.eta(), v0.phi(), massV0, aod::lrcorrtrktable::kSpALambda);
405428
} // end of Lambda and Anti-Lambda processing
406429
}
430+
lastRunNumber = currentRunNumber;
407431
} // process function
408432

409433
void processUpc(CollTable::iterator const& col, BCs const& bcs,
@@ -468,14 +492,14 @@ struct LongrangeMaker {
468492
float ampl = ft0.amplitudeA()[iCh];
469493
auto phi = getPhiFT0(chanelid, 0);
470494
auto eta = getEtaFT0(chanelid, 0);
471-
upclrft0atracks(upclrcollision.lastIndex(), chanelid, ampl, eta, phi);
495+
upclrft0atracks(upclrcollision.lastIndex(), chanelid, ampl, ampl, eta, phi);
472496
}
473497
for (std::size_t iCh = 0; iCh < ft0.channelC().size(); iCh++) {
474498
auto chanelid = ft0.channelC()[iCh] + KminFt0cCell;
475499
float ampl = ft0.amplitudeC()[iCh];
476500
auto phi = getPhiFT0(chanelid, 1);
477501
auto eta = getEtaFT0(chanelid, 1);
478-
upclrft0ctracks(upclrcollision.lastIndex(), chanelid, ampl, eta, phi);
502+
upclrft0ctracks(upclrcollision.lastIndex(), chanelid, ampl, ampl, eta, phi);
479503
}
480504
}
481505

@@ -567,6 +591,17 @@ struct LongrangeMaker {
567591
auto multiplicity = countNTracks(recTracksPart);
568592
auto centrality = selColCent(RecCol);
569593
auto bc = RecCol.bc_as<aod::BCsWithTimestamps>();
594+
currentRunNumber = bc.runNumber();
595+
if (cfgfittrksel.useGainCallib && (currentRunNumber != lastRunNumber)) {
596+
const auto ft0GainObj = ccdb->getForTimeStamp<std::vector<float>>(cfgfittrksel.ConfGainPath.value, bc.timestamp());
597+
if (!ft0GainObj) {
598+
for (auto i{0u}; i < TotFt0Channels; i++) {
599+
ft0gainvalues.push_back(1.);
600+
}
601+
} else {
602+
ft0gainvalues = *(ft0GainObj);
603+
}
604+
}
570605
lrcollision(bc.runNumber(), RecCol.posZ(), multiplicity, centrality, bc.timestamp());
571606
lrcollisionMcLabel(RecCol.mcCollisionId());
572607

@@ -596,14 +631,22 @@ struct LongrangeMaker {
596631
float ampl = ft0.amplitudeA()[iCh];
597632
auto phi = getPhiFT0(chanelid, 0);
598633
auto eta = getEtaFT0(chanelid, 0);
599-
lrft0atracks(lrcollision.lastIndex(), chanelid, ampl, eta, phi);
634+
auto gainampl = 1.0;
635+
if (cfgfittrksel.useGainCallib) {
636+
gainampl = ampl / ft0gainvalues[chanelid];
637+
}
638+
lrft0atracks(lrcollision.lastIndex(), chanelid, ampl, gainampl, eta, phi);
600639
}
601640
for (std::size_t iCh = 0; iCh < ft0.channelC().size(); iCh++) {
602641
auto chanelid = ft0.channelC()[iCh] + KminFt0cCell;
603642
float ampl = ft0.amplitudeC()[iCh];
604643
auto phi = getPhiFT0(chanelid, 1);
605644
auto eta = getEtaFT0(chanelid, 1);
606-
lrft0ctracks(lrcollision.lastIndex(), chanelid, ampl, eta, phi);
645+
auto gainampl = 1.0;
646+
if (cfgfittrksel.useGainCallib) {
647+
gainampl = ampl / ft0gainvalues[chanelid];
648+
}
649+
lrft0ctracks(lrcollision.lastIndex(), chanelid, ampl, gainampl, eta, phi);
607650
}
608651
}
609652

@@ -653,6 +696,7 @@ struct LongrangeMaker {
653696
if (cfgmfttrksel.cfigMftEtaMin < particle.eta() && particle.eta() < cfgmfttrksel.cfigMftEtaMax)
654697
lrmftmctracks(lrmccollision.lastIndex(), particle.pt(), particle.eta(), particle.phi());
655698
}
699+
lastRunNumber = currentRunNumber;
656700
}
657701
}
658702

PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ struct LongrangecorrDerived {
8383
ConfigurableAxis axisInvMass{"axisInvMass", {VARIABLE_WIDTH, 1.7, 1.75, 1.8, 1.85, 1.9, 1.95, 2.0}, "invariant mass axis"};
8484
ConfigurableAxis axisInvMassQA{"axisInvMassQA", {20, 0.45, 0.55}, "invariant mass axis for QA"};
8585
ConfigurableAxis axisAmplitude{"axisAmplitude", {5000, 0, 10000}, "FT0 amplitude"};
86+
ConfigurableAxis axisChannel{"axisChannel", {208, 0, 208}, "FT0 channel"};
8687
ConfigurableAxis axisMultME{"axisMultME", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 1000}, "Mixing bins - multiplicity"};
8788
ConfigurableAxis axisVtxZME{"axisVtxZME", {VARIABLE_WIDTH, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10}, "Mixing bins - z-vertex"};
8889

@@ -170,6 +171,9 @@ struct LongrangecorrDerived {
170171
histos.add("Assoc_etavsphi", "Assoc_etavsphi", kTH2D, {axisPhi, axisEtaAssoc});
171172
histos.add("Assoc_pt", "Assoc_pt", kTH1D, {axisPtAssoc});
172173
histos.add("Assoc_amp", "Assoc_amp", kTH1D, {axisAmplitude});
174+
histos.add("Assoc_amp_gaincorrected", "Assoc_amp_gaincorrected", kTH1D, {axisAmplitude});
175+
histos.add("Channel_vs_Assoc_amp", "Channel_vs_Assoc_amp", kTH2D, {axisChannel, axisAmplitude});
176+
histos.add("Channel_vs_Assoc_amp_gaincorrected", "Channel_vs_Assoc_amp_gaincorrected", kTH2D, {axisChannel, axisAmplitude});
173177

174178
histos.add("deltaEta_deltaPhi_same", "", kTH2D, {axisDeltaPhi, axisDeltaEta});
175179
histos.add("deltaEta_deltaPhi_mixed", "", kTH2D, {axisDeltaPhi, axisDeltaEta});
@@ -205,6 +209,9 @@ struct LongrangecorrDerived {
205209
histos.fill(HIST("Assoc_phi"), track.phi());
206210
if constexpr (std::experimental::is_detected<HasFt0, TTrack>::value) {
207211
histos.fill(HIST("Assoc_amp"), track.amplitude());
212+
histos.fill(HIST("Channel_vs_Assoc_amp"), track.channelID(), track.amplitude());
213+
histos.fill(HIST("Assoc_amp_gaincorrected"), track.gainAmplitude());
214+
histos.fill(HIST("Channel_vs_Assoc_amp_gaincorrected"), track.channelID(), track.gainAmplitude());
208215
} else {
209216
histos.fill(HIST("Assoc_pt"), track.pt());
210217
}
@@ -260,23 +267,25 @@ struct LongrangecorrDerived {
260267
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight);
261268
}
262269
}
270+
auto ampl = 1.0f;
263271
for (auto const& assoTrack : assocs) {
264272
if constexpr (std::experimental::is_detected<HasFt0, typename TAssocs::iterator>::value) {
265273
if (isApplyAmpCut && (assoTrack.amplitude() < cfgLowAmpCut))
266274
continue;
275+
ampl *= assoTrack.gainAmplitude();
267276
}
268277
float deltaPhi = RecoDecay::constrainAngle(triggerTrack.phi() - assoTrack.phi(), -PIHalf);
269278
float deltaEta = triggerTrack.eta() - assoTrack.eta();
270279
if (!mixing) {
271280
fillAssocTrackQA(assoTrack);
272-
histos.fill(HIST("deltaEta_deltaPhi_same"), deltaPhi, deltaEta);
281+
histos.fill(HIST("deltaEta_deltaPhi_same"), deltaPhi, deltaEta, eventWeight * ampl);
273282
} else {
274-
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta);
283+
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * ampl);
275284
}
276285
if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
277-
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight);
286+
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * ampl);
278287
} else {
279-
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight);
288+
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * ampl);
280289
}
281290
} // associated tracks
282291
} // trigger tracks

0 commit comments

Comments
 (0)