Skip to content

Commit 90d0794

Browse files
AnkyyadavAnkur YadavalibuildAnkur YadavAnkur Yadav
authored
[PWGDQ] Fill q-vector tables for all PbPb process functions in tableMaker_withAssoc (#15741)
Co-authored-by: Ankur Yadav <ankur@LOCALHOST.local> Co-authored-by: ALICE Action Bot <alibuild@cern.ch> Co-authored-by: Ankur Yadav <ankur@MacBook-Pro-2.local> Co-authored-by: Ankur Yadav <ankur.yadav@cern.ch>
1 parent b8c9f40 commit 90d0794

2 files changed

Lines changed: 85 additions & 21 deletions

File tree

PWGDQ/TableProducer/tableMaker_withAssoc.cxx

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,6 @@ struct TableMaker {
187187
Produces<ReducedEventsExtended> eventExtended;
188188
Produces<ReducedEventsVtxCov> eventVtxCov;
189189
Produces<ReducedEventsInfo> eventInfo;
190-
Produces<ReducedEventsQvectorCentr> eventQvectorCentr;
191-
Produces<ReducedEventsQvectorCentrExtra> eventQvectorCentrExtra;
192190
Produces<ReducedZdcs> zdc;
193191
Produces<ReducedFITs> fit;
194192
Produces<ReducedEventsMultPV> multPV;
@@ -209,6 +207,12 @@ struct TableMaker {
209207
Produces<ReducedMFTsExtra> mftTrackExtra;
210208
Produces<ReducedMFTAssoc> mftAssoc;
211209

210+
// Q-vector related tables, to be filled only if the user selects the corresponding option; since they are not needed for the skimming, we keep them in a separate group to avoid filling them when not needed
211+
struct : ProducesGroup {
212+
Produces<ReducedEventsQvectorCentr> eventQvectorCentr;
213+
Produces<ReducedEventsQvectorCentrExtra> eventQvectorCentrExtra;
214+
} qvecGroup;
215+
212216
OutputObj<THashList> fOutputList{"output"}; //! the histogram manager output list
213217
OutputObj<TList> fStatsList{"Statistics"}; //! skimming statistics
214218

@@ -289,6 +293,11 @@ struct TableMaker {
289293
Configurable<bool> fConfigSaveElectronSample{"cfgSaveElectronSample", false, "If true, only save electron sample"};
290294
} fConfigPostCalibTPC;
291295

296+
//
297+
struct : ConfigurableGroup {
298+
Configurable<bool> fConfigQvectCalibAvailable{"cfgQvectCalibAvailable", false, "If true, qvector calibration objects are available in CCDB for this run"};
299+
} fConfigQvector;
300+
292301
struct : ConfigurableGroup {
293302
// Track related options
294303
Configurable<bool> fPropTrack{"cfgPropTrack", true, "Propagate tracks to associated collision to recalculate DCA and momentum vector"};
@@ -1179,11 +1188,12 @@ struct TableMaker {
11791188
eventInfo(collision.globalIndex());
11801189

11811190
if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionQvectCentr) > 0) {
1182-
eventQvectorCentr(collision.qvecFT0ARe(), collision.qvecFT0AIm(), collision.qvecFT0CRe(), collision.qvecFT0CIm(), collision.qvecFT0MRe(), collision.qvecFT0MIm(), collision.qvecFV0ARe(), collision.qvecFV0AIm(), collision.qvecTPCposRe(), collision.qvecTPCposIm(), collision.qvecTPCnegRe(), collision.qvecTPCnegIm(),
1183-
collision.sumAmplFT0A(), collision.sumAmplFT0C(), collision.sumAmplFT0M(), collision.sumAmplFV0A(), collision.nTrkTPCpos(), collision.nTrkTPCneg());
1184-
eventQvectorCentrExtra(collision.qvecTPCallRe(), collision.qvecTPCallIm(), collision.nTrkTPCall());
1191+
if (fConfigQvector.fConfigQvectCalibAvailable) {
1192+
qvecGroup.eventQvectorCentr(collision.qvecFT0ARe(), collision.qvecFT0AIm(), collision.qvecFT0CRe(), collision.qvecFT0CIm(), collision.qvecFT0MRe(), collision.qvecFT0MIm(), collision.qvecFV0ARe(), collision.qvecFV0AIm(), collision.qvecTPCposRe(), collision.qvecTPCposIm(), collision.qvecTPCnegRe(), collision.qvecTPCnegIm(),
1193+
collision.sumAmplFT0A(), collision.sumAmplFT0C(), collision.sumAmplFT0M(), collision.sumAmplFV0A(), collision.nTrkTPCpos(), collision.nTrkTPCneg());
1194+
qvecGroup.eventQvectorCentrExtra(collision.qvecTPCallRe(), collision.qvecTPCallIm(), collision.nTrkTPCall());
1195+
}
11851196
}
1186-
11871197
if constexpr ((TEventFillMap & VarManager::ObjTypes::Zdc) > 0) {
11881198
if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0) {
11891199
// The DQRapidityGapFilter contains the index of the bc we want to get ZDC info from
@@ -1918,33 +1928,33 @@ struct TableMaker {
19181928
}
19191929

19201930
// produce the full DQ skimmed data model typically for Pb-Pb (with centrality), no subscribtion to the DQ event filter
1921-
void processPbPb(MyEventsWithCentAndMults const& collisions, MyBCs const& bcs,
1931+
void processPbPb(MyEventsWithCentAndMultsQvect const& collisions, MyBCs const& bcs,
19221932
MyBarrelTracksWithCov const& tracksBarrel,
19231933
MyMuonsWithCov const& muons, MFTTracks const& mftTracks,
19241934
TrackAssoc const& trackAssocs, FwdTrackAssoc const& fwdTrackAssocs,
1925-
MFTTrackAssoc const& mftAssocs)
1935+
MFTTrackAssoc const& mftAssocs, aod::FT0s& ft0s, aod::FV0As& fv0as, aod::FDDs& fdds)
19261936
{
1927-
fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, gkMuonFillMapWithCov, gkMFTFillMap>(collisions, bcs, nullptr, tracksBarrel, muons, mftTracks, trackAssocs, fwdTrackAssocs, mftAssocs, nullptr, nullptr, nullptr, nullptr);
1937+
fullSkimming<gkEventFillMapWithCentAndMultsQvect, gkTrackFillMapWithCov, gkMuonFillMapWithCov, gkMFTFillMap>(collisions, bcs, nullptr, tracksBarrel, muons, mftTracks, trackAssocs, fwdTrackAssocs, mftAssocs, nullptr, ft0s, fv0as, fdds);
19281938
}
19291939

19301940
// produce the barrel only DQ skimmed data model typically for Pb-Pb (with centrality), no subscribtion to the DQ event filter
1931-
void processPbPbBarrelOnly(MyEventsWithCentAndMults const& collisions, MyBCs const& bcs,
1941+
void processPbPbBarrelOnly(MyEventsWithCentAndMultsQvect const& collisions, MyBCs const& bcs,
19321942
MyBarrelTracksWithCov const& tracksBarrel,
1933-
TrackAssoc const& trackAssocs)
1943+
TrackAssoc const& trackAssocs, aod::FT0s& ft0s, aod::FV0As& fv0as, aod::FDDs& fdds)
19341944
{
19351945
computeOccupancyEstimators(collisions, tracksPosWithCov, tracksNegWithCov, presliceWithCov, bcs);
19361946
computeCollMergingTag(collisions, tracksBarrel, presliceWithCov);
1937-
fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, 0u, 0u>(collisions, bcs, nullptr, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
1947+
fullSkimming<gkEventFillMapWithCentAndMultsQvect, gkTrackFillMapWithCov, 0u, 0u>(collisions, bcs, nullptr, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, nullptr, ft0s, fv0as, fdds);
19381948
}
19391949

19401950
// produce the barrel only DQ skimmed data model typically for Pb-Pb (with centrality), no TOF
1941-
void processPbPbBarrelOnlyNoTOF(MyEventsWithCentAndMults const& collisions, MyBCs const& bcs,
1951+
void processPbPbBarrelOnlyNoTOF(MyEventsWithCentAndMultsQvect const& collisions, MyBCs const& bcs,
19421952
MyBarrelTracksWithCovNoTOF const& tracksBarrel,
1943-
TrackAssoc const& trackAssocs)
1953+
TrackAssoc const& trackAssocs, aod::FT0s& ft0s, aod::FV0As& fv0as, aod::FDDs& fdds)
19441954
{
19451955
computeOccupancyEstimators(collisions, tracksPosWithCovNoTOF, tracksNegWithCovNoTOF, presliceWithCovNoTOF, bcs);
19461956
computeCollMergingTag(collisions, tracksBarrel, presliceWithCovNoTOF);
1947-
fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapNoTOF, 0u, 0u>(collisions, bcs, nullptr, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
1957+
fullSkimming<gkEventFillMapWithCentAndMultsQvect, gkTrackFillMapNoTOF, 0u, 0u>(collisions, bcs, nullptr, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, nullptr, ft0s, fv0as, fdds);
19481958
}
19491959

19501960
// produce the barrel-only DQ skimmed data model typically for UPC Pb-Pb (no centrality), subscribe to the DQ rapidity gap event filter (filter-PbPb)
@@ -1958,23 +1968,23 @@ struct TableMaker {
19581968
}
19591969

19601970
// produce the barrel only DQ skimmed data model typically for Pb-Pb (with centrality), no subscribtion to the DQ event filter
1961-
void processPbPbBarrelOnlyWithV0Bits(MyEventsWithCentAndMults const& collisions, MyBCs const& bcs,
1971+
void processPbPbBarrelOnlyWithV0Bits(MyEventsWithCentAndMultsQvect const& collisions, MyBCs const& bcs,
19621972
MyBarrelTracksWithV0Bits const& tracksBarrel,
1963-
TrackAssoc const& trackAssocs)
1973+
TrackAssoc const& trackAssocs, aod::FT0s& ft0s, aod::FV0As& fv0as, aod::FDDs& fdds)
19641974
{
19651975
computeOccupancyEstimators(collisions, tracksPos, tracksNeg, preslice, bcs);
19661976
computeCollMergingTag(collisions, tracksBarrel, preslice);
1967-
fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithV0Bits, 0u, 0u>(collisions, bcs, nullptr, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
1977+
fullSkimming<gkEventFillMapWithCentAndMultsQvect, gkTrackFillMapWithV0Bits, 0u, 0u>(collisions, bcs, nullptr, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, nullptr, ft0s, fv0as, fdds);
19681978
}
19691979

19701980
// produce the barrel only DQ skimmed data model typically for Pb-Pb (with centrality), no subscribtion to the DQ event filter
1971-
void processPbPbBarrelOnlyWithV0BitsNoTOF(MyEventsWithCentAndMults const& collisions, MyBCs const& bcs,
1981+
void processPbPbBarrelOnlyWithV0BitsNoTOF(MyEventsWithCentAndMultsQvect const& collisions, MyBCs const& bcs,
19721982
MyBarrelTracksWithV0BitsNoTOF const& tracksBarrel,
1973-
TrackAssoc const& trackAssocs)
1983+
TrackAssoc const& trackAssocs, aod::FT0s& ft0s, aod::FV0As& fv0as, aod::FDDs& fdds)
19741984
{
19751985
computeOccupancyEstimators(collisions, tracksPosNoTOF, tracksNegNoTOF, presliceNoTOF, bcs);
19761986
computeCollMergingTag(collisions, tracksBarrel, presliceNoTOF);
1977-
fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithV0BitsNoTOF, 0u, 0u>(collisions, bcs, nullptr, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
1987+
fullSkimming<gkEventFillMapWithCentAndMultsQvect, gkTrackFillMapWithV0BitsNoTOF, 0u, 0u>(collisions, bcs, nullptr, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, nullptr, ft0s, fv0as, fdds);
19781988
}
19791989

19801990
// produce the muon only DQ skimmed data model typically for Pb-Pb (with centrality), no subscribtion to the DQ event filter

PWGDQ/Tasks/dqFlow.cxx

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,53 @@ struct DQEventQvector {
353353
// }
354354
}
355355

356+
// Templated function instantianed for all of the process functions
357+
template <uint32_t TEventFillMap, typename TEvent, typename TFT0s>
358+
void runFillQvectorFromCentralFWWithFT0CCumulants(TEvent const& collision, TFT0s const& /*ft0s*/)
359+
{
360+
VarManager::ResetValues(0, VarManager::kNVars);
361+
VarManager::FillEvent<TEventFillMap>(collision);
362+
363+
float S11C = collision.sumAmplFT0C();
364+
float S12C = 0.f;
365+
float S21C = S11C * S11C;
366+
367+
// Compute sum of squares of amplitudes from FT0C for flow analysis
368+
if (collision.has_foundFT0()) {
369+
auto ft0 = collision.foundFT0();
370+
auto const& ampC = ft0.amplitudeC();
371+
for (auto amp : ampC) {
372+
if (amp > 0.f) {
373+
S12C += amp * amp;
374+
}
375+
}
376+
}
377+
VarManager::FillQVectorFromCentralFW(collision);
378+
std::complex<double> Q21C(collision.qvecFT0CRe() * S11C, collision.qvecFT0CIm() * S11C);
379+
380+
// Fill necessary quantities for cumulant calculations with weighted Q-vectors
381+
float M11REF = S21C - S12C;
382+
float CORR2REF = (norm(Q21C) - S12C) / M11REF;
383+
CORR2REF = std::isnan(M11REF) || std::isinf(M11REF) || std::isnan(CORR2REF) || std::isinf(CORR2REF) ? 0 : CORR2REF;
384+
M11REF = std::isnan(M11REF) || std::isinf(M11REF) || std::isnan(CORR2REF) || std::isinf(CORR2REF) ? 0 : M11REF;
385+
386+
if (fConfigQA) {
387+
fHistMan->FillHistClass("Event_BeforeCuts_centralFW", VarManager::fgValues);
388+
if (fEventCut->IsSelected(VarManager::fgValues)) {
389+
fHistMan->FillHistClass("Event_AfterCuts_centralFW", VarManager::fgValues);
390+
}
391+
}
392+
393+
if (fEventCut->IsSelected(VarManager::fgValues)) {
394+
// temporarily removed --> this table is filled in the table-maker directly
395+
// eventQvectorCentr(collision.qvecFT0ARe(), collision.qvecFT0AIm(), collision.qvecFT0CRe(), collision.qvecFT0CIm(), collision.qvecFT0MRe(), collision.qvecFT0MIm(), collision.qvecFV0ARe(), collision.qvecFV0AIm(), collision.qvecTPCposRe(), collision.qvecTPCposIm(), collision.qvecTPCnegRe(), collision.qvecTPCnegIm(),
396+
// collision.sumAmplFT0A(), collision.sumAmplFT0C(), collision.sumAmplFT0M(), collision.sumAmplFV0A(), collision.nTrkTPCpos(), collision.nTrkTPCneg());
397+
// eventQvectorCentrExtra(collision.qvecTPCallRe(), collision.qvecTPCallIm(), collision.nTrkTPCall());
398+
eventRefFlow(M11REF, -9999, -9999, CORR2REF, -9999, -9999, VarManager::fgValues[VarManager::kCentFT0C]);
399+
eventQvectorExtra(-9999, -9999, -9999, -9999, S11C, S12C, -9999, -9999);
400+
}
401+
}
402+
356403
// Templated function instantianed for all of the process functions
357404
template <uint32_t TEventFillMap, uint32_t TTrackFillMap, typename TEvent, typename TTracks>
358405
void runFillQvector(TEvent const& collision, MyBcs const&, TTracks const& tracks1, aod::Zdcs const&)
@@ -576,6 +623,12 @@ struct DQEventQvector {
576623
runFillQvectorFromCentralFW<gkEventFillMapRun3>(collisions);
577624
}
578625

626+
// Process to fill Q vector using barrel tracks in a reduced event table for barrel/muon tracks flow related analyses Run 3
627+
void processCentralQvectorWithFT0CCumulants(MyEventsWithCentQvectRun3::iterator const& collision, aod::FT0s const& ft0s)
628+
{
629+
runFillQvectorFromCentralFWWithFT0CCumulants<gkEventFillMapRun3>(collision, ft0s);
630+
}
631+
579632
// Process to fill Q vector using forward tracks in a reduced event table for barrel/muon tracks flow related analyses Run 3
580633
void processForwardQvector(MyEventsWithCentRun3::iterator const& collisions, MyBcs const& bcs, soa::Filtered<aod::MFTTracks> const& tracks, aod::Zdcs const& zdcs)
581634
{
@@ -592,6 +645,7 @@ struct DQEventQvector {
592645
PROCESS_SWITCH(DQEventQvector, processBarrelQvector, "Run q-vector task on barrel tracks for Run3", false);
593646
PROCESS_SWITCH(DQEventQvector, processAllQvector, "Run q-vector task on barrel tracks for Run3 and using central q-vector", false);
594647
PROCESS_SWITCH(DQEventQvector, processCentralQvector, "Run q-vector task using central q-vector", false);
648+
PROCESS_SWITCH(DQEventQvector, processCentralQvectorWithFT0CCumulants, "Run q-vector task using central q-vector with FT0C cumulants", false);
595649
PROCESS_SWITCH(DQEventQvector, processForwardQvector, "Run q-vector task on forward tracks for Run3", false);
596650
PROCESS_SWITCH(DQEventQvector, processDummy, "Dummy function", false);
597651
};

0 commit comments

Comments
 (0)