Skip to content

Commit b2371f7

Browse files
authored
Merge branch 'AliceO2Group:master' into master
2 parents f79e12e + 9f0027b commit b2371f7

File tree

24 files changed

+1779
-1122
lines changed

24 files changed

+1779
-1122
lines changed

ALICE3/Tasks/alice3-lutmaker.cxx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ using namespace framework::expressions;
2525
void customize(std::vector<o2::framework::ConfigParamSpec>& workflowOptions)
2626
{
2727
std::vector<ConfigParamSpec> options{
28-
{"lut-el", VariantType::Int, 1, {"LUT input for the Electron PDG code"}},
29-
{"lut-mu", VariantType::Int, 1, {"LUT input for the Muon PDG code"}},
28+
{"lut-el", VariantType::Int, 0, {"LUT input for the Electron PDG code"}},
29+
{"lut-mu", VariantType::Int, 0, {"LUT input for the Muon PDG code"}},
3030
{"lut-pi", VariantType::Int, 1, {"LUT input for the Pion PDG code"}},
31-
{"lut-ka", VariantType::Int, 1, {"LUT input for the Kaon PDG code"}},
32-
{"lut-pr", VariantType::Int, 1, {"LUT input for the Proton PDG code"}},
31+
{"lut-ka", VariantType::Int, 0, {"LUT input for the Kaon PDG code"}},
32+
{"lut-pr", VariantType::Int, 0, {"LUT input for the Proton PDG code"}},
3333
{"lut-tr", VariantType::Int, 0, {"LUT input for the Triton PDG code"}},
3434
{"lut-de", VariantType::Int, 0, {"LUT input for the Deuteron PDG code"}},
3535
{"lut-he", VariantType::Int, 0, {"LUT input for the Helium3 PDG code"}}};
@@ -153,6 +153,7 @@ struct Alice3LutMaker {
153153
histos.add("QA/CovMat_sigmaSnp", "sigmaSnp" + commonTitle, kTH3F, {axisPt, axisEta, axissigmaSnp});
154154
histos.add("QA/CovMat_sigmaTgl", "sigmaTgl" + commonTitle, kTH3F, {axisPt, axisEta, axissigmaTgl});
155155
histos.add("QA/CovMat_sigma1Pt", "sigma1Pt" + commonTitle, kTH3F, {axisPt, axisEta, axissigma1Pt});
156+
histos.add("QA/sigma1Pt", "sigma1Pt" + commonTitle, kTH3F, {axisPt, axisEta, axissigma1Pt});
156157
histos.add("QA/CovMat_rhoZY", "rhoZY" + commonTitle, kTH3F, {axisPt, axisEta, axisrhoZY});
157158
histos.add("QA/CovMat_rhoSnpY", "rhoSnpY" + commonTitle, kTH3F, {axisPt, axisEta, axisrhoSnpY});
158159
histos.add("QA/CovMat_rhoSnpZ", "rhoSnpZ" + commonTitle, kTH3F, {axisPt, axisEta, axisrhoSnpZ});
@@ -262,6 +263,7 @@ struct Alice3LutMaker {
262263
histos.fill(HIST("QA/CovMat_sigmaSnp"), mcParticle.pt(), mcParticle.eta(), track.sigmaSnp());
263264
histos.fill(HIST("QA/CovMat_sigmaTgl"), mcParticle.pt(), mcParticle.eta(), track.sigmaTgl());
264265
histos.fill(HIST("QA/CovMat_sigma1Pt"), mcParticle.pt(), mcParticle.eta(), track.sigma1Pt());
266+
histos.fill(HIST("QA/sigma1Pt"), mcParticle.pt(), mcParticle.eta(), std::abs(track.signed1Pt()) - 1. / mcParticle.pt());
265267
histos.fill(HIST("QA/CovMat_rhoZY"), mcParticle.pt(), mcParticle.eta(), track.rhoZY());
266268
histos.fill(HIST("QA/CovMat_rhoSnpY"), mcParticle.pt(), mcParticle.eta(), track.rhoSnpY());
267269
histos.fill(HIST("QA/CovMat_rhoSnpZ"), mcParticle.pt(), mcParticle.eta(), track.rhoSnpZ());

CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
/PWGEM @alibuild @feisenhu @dsekihat @ivorobye
3939
/PWGEM/Dilepton @alibuild @mikesas @rbailhac @dsekihat @ivorobye @feisenhu @hscheid
4040
/PWGEM/PhotonMeson @alibuild @mikesas @rbailhac @m-c-danisch @novitzky @mhemmer-cern @dsekihat
41-
/PWGHF @alibuild @vkucera @fcolamar @fgrosa @fcatalan92 @mfaggin @mmazzilli @deepathoms @NicoleBastid @hahassan7 @jpxrk @apalasciano @zhangbiao-phy @gluparel
41+
/PWGHF @alibuild @vkucera @fcolamar @fgrosa @fcatalan92 @mfaggin @mmazzilli @deepathoms @NicoleBastid @hahassan7 @jpxrk @apalasciano @zhangbiao-phy @gluparel @stefanopolitano
4242
# PWG-LF
4343
/PWGLF @alibuild @sustripathy @skundu692
4444
/PWGLF/DataModel @alibuild @sustripathy @skundu692 @gbencedi @abmodak @fmazzasc @maciacco @dmallick2 @smaff92 @ercolessi @romainschotter

Common/Core/fwdtrackUtilities.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ enum class propagationPoint : int {
4242
kToRabs = 2,
4343
};
4444
using SMatrix55 = ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepSym<double, 5>>;
45+
using SMatrix55Std = ROOT::Math::SMatrix<double, 5>;
4546
using SMatrix5 = ROOT::Math::SVector<double, 5>;
4647

4748
/// propagate fwdtrack to a certain point.
@@ -98,6 +99,48 @@ o2::dataformats::GlobalFwdTrack propagateMuon(TFwdTrack const& muon, TCollision
9899

99100
return propmuon;
100101
}
102+
103+
template <typename TFwdTrack, typename TMFTTrack>
104+
o2::dataformats::GlobalFwdTrack refitGlobalMuonCov(TFwdTrack const& muon, TMFTTrack const& mft)
105+
{
106+
auto muonCov = muon.getCovariances();
107+
auto mftCov = mft.getCovariances();
108+
109+
SMatrix55Std jacob = ROOT::Math::SMatrixIdentity();
110+
auto tl = muon.getTgl();
111+
auto invQPt = muon.getInvQPt();
112+
jacob(4, 3) = tl / (invQPt * std::sqrt(1 + tl * tl));
113+
jacob(4, 4) = -std::sqrt(1 + tl * tl) / (invQPt * invQPt);
114+
115+
auto covQP = ROOT::Math::Similarity(jacob, muonCov);
116+
mftCov(4, 0) = 0;
117+
mftCov(4, 1) = 0;
118+
mftCov(4, 2) = 0;
119+
mftCov(4, 3) = 0;
120+
121+
mftCov(0, 4) = 0;
122+
mftCov(1, 4) = 0;
123+
mftCov(2, 4) = 0;
124+
mftCov(3, 4) = 0;
125+
mftCov(4, 4) = covQP(4, 4);
126+
127+
SMatrix55Std jacobInv = ROOT::Math::SMatrixIdentity();
128+
auto qp = std::sqrt(1 + tl * tl) / invQPt;
129+
auto tlMFT = mft.getTgl();
130+
jacobInv(4, 3) = tlMFT / (qp * std::sqrt(1 + tlMFT * tlMFT));
131+
jacobInv(4, 4) = -std::sqrt(1 + tlMFT * tlMFT) / (qp * qp);
132+
auto globalCov = ROOT::Math::Similarity(jacobInv, mftCov);
133+
134+
auto invQPtGlob = std::sqrt(1 + tlMFT * tlMFT) / qp;
135+
136+
o2::dataformats::GlobalFwdTrack globalTrack;
137+
globalTrack.setParameters(mft.getParameters());
138+
globalTrack.setInvQPt(invQPtGlob);
139+
globalTrack.setCovariances(globalCov);
140+
141+
return globalTrack;
142+
}
143+
101144
} // namespace fwdtrackutils
102145
} // namespace o2::aod
103146

Common/Tasks/centralityStudy.cxx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ struct centralityStudy {
132132
ConfigurableAxis axisMultPVContributors{"axisMultPVContributors", {200, 0, 6000}, "Number of PV Contributors"};
133133
ConfigurableAxis axisMultGlobalTracks{"axisMultGlobalTracks", {500, 0, 5000}, "Number of global tracks"};
134134
ConfigurableAxis axisMultMFTTracks{"axisMultMFTTracks", {500, 0, 5000}, "Number of MFT tracks"};
135+
ConfigurableAxis axisMultMCCounts{"axisMultMCCounts", {1000, 0, 5000}, "N_{ch}"};
135136

136137
ConfigurableAxis axisTrackOccupancy{"axisTrackOccupancy", {50, 0, 5000}, "Track occupancy"};
137138
ConfigurableAxis axisFT0COccupancy{"axisFT0COccupancy", {50, 0, 80000}, "FT0C occupancy"};
@@ -242,12 +243,19 @@ struct centralityStudy {
242243
}
243244

244245
if (doprocessCollisionsWithResolutionStudy) {
246+
// histograms with detector signals
245247
histos.add("hImpactParameterVsFT0A", "hImpactParameterVsFT0A", kTH2F, {axisMultFT0A, axisImpactParameter});
246248
histos.add("hImpactParameterVsFT0C", "hImpactParameterVsFT0C", kTH2F, {axisMultFT0C, axisImpactParameter});
247249
histos.add("hImpactParameterVsFT0M", "hImpactParameterVsFT0M", kTH2F, {axisMultFT0M, axisImpactParameter});
248250
histos.add("hImpactParameterVsFV0A", "hImpactParameterVsFV0A", kTH2F, {axisMultFV0A, axisImpactParameter});
249251
histos.add("hImpactParameterVsNMFTTracks", "hImpactParameterVsNMFTTracks", kTH2F, {axisMultMFTTracks, axisImpactParameter});
250252
histos.add("hImpactParameterVsNTPV", "hImpactParameterVsNTPV", kTH2F, {axisMultPVContributors, axisImpactParameter});
253+
254+
// histograms with actual MC counts in each region
255+
histos.add("hImpactParameterVsMCFT0A", "hImpactParameterVsMCFT0A", kTH2F, {axisMultMCCounts, axisImpactParameter});
256+
histos.add("hImpactParameterVsMCFT0C", "hImpactParameterVsMCFT0C", kTH2F, {axisMultMCCounts, axisImpactParameter});
257+
histos.add("hImpactParameterVsMCFT0M", "hImpactParameterVsMCFT0M", kTH2F, {axisMultMCCounts, axisImpactParameter});
258+
histos.add("hImpactParameterVsMCFV0A", "hImpactParameterVsMCFV0A", kTH2F, {axisMultMCCounts, axisImpactParameter});
251259
}
252260

253261
if (doOccupancyStudyVsRawValues2d) {
@@ -696,6 +704,11 @@ struct centralityStudy {
696704
histos.fill(HIST("hImpactParameterVsFV0A"), multFV0A, mcCollision.impactParameter());
697705
histos.fill(HIST("hImpactParameterVsNMFTTracks"), mftNtracks, mcCollision.impactParameter());
698706
histos.fill(HIST("hImpactParameterVsNTPV"), multNTracksPV, mcCollision.impactParameter());
707+
708+
histos.fill(HIST("hImpactParameterVsMCFT0A"), mcCollision.multMCFT0A(), mcCollision.impactParameter());
709+
histos.fill(HIST("hImpactParameterVsMCFT0C"), mcCollision.multMCFT0C(), mcCollision.impactParameter());
710+
histos.fill(HIST("hImpactParameterVsMCFT0M"), (mcCollision.multMCFT0A() + mcCollision.multMCFT0C()), mcCollision.impactParameter());
711+
histos.fill(HIST("hImpactParameterVsMCFV0A"), mcCollision.multMCFV0A(), mcCollision.impactParameter());
699712
}
700713
}
701714

PWGCF/Flow/Tasks/flowTask.cxx

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "Framework/RunningWorkflowInfo.h"
3737
#include "Framework/runDataProcessing.h"
3838
#include <CCDB/BasicCCDBManager.h>
39+
#include <DataFormatsParameters/GRPMagField.h>
3940

4041
#include "TList.h"
4142
#include <TF1.h>
@@ -141,6 +142,13 @@ struct FlowTask {
141142
TF1* fMultMultV0ACutHigh = nullptr;
142143
TF1* fT0AV0AMean = nullptr;
143144
TF1* fT0AV0ASigma = nullptr;
145+
// for TPC sector boundary
146+
O2_DEFINE_CONFIGURABLE(cfgShowTPCsectorOverlap, bool, true, "Draw TPC sector overlap")
147+
O2_DEFINE_CONFIGURABLE(cfgRejectionTPCsectorOverlap, bool, false, "rejection for TPC sector overlap")
148+
O2_DEFINE_CONFIGURABLE(cfgMagnetField, std::string, "GLO/Config/GRPMagField", "CCDB path to Magnet field object")
149+
ConfigurableAxis axisPhiMod{"axisPhiMod", {100, 0, constants::math::PI / 9}, "fmod(#varphi,#pi/9)"};
150+
TF1* fPhiCutLow = nullptr;
151+
TF1* fPhiCutHigh = nullptr;
144152
} cfgFuncParas;
145153

146154
ConfigurableAxis axisPtHist{"axisPtHist", {100, 0., 10.}, "pt axis for histograms"};
@@ -283,6 +291,8 @@ struct FlowTask {
283291
registry.add("hEta", "#eta distribution", {HistType::kTH1D, {axisEta}});
284292
registry.add("hPt", "p_{T} distribution before cut", {HistType::kTH1D, {axisPtHist}});
285293
registry.add("hPtRef", "p_{T} distribution after cut", {HistType::kTH1D, {axisPtHist}});
294+
registry.add("pt_phi_bef", "before cut;p_{T};#phi_{modn}", {HistType::kTH2D, {axisPt, cfgFuncParas.axisPhiMod}});
295+
registry.add("pt_phi_aft", "after cut;p_{T};#phi_{modn}", {HistType::kTH2D, {axisPt, cfgFuncParas.axisPhiMod}});
286296
registry.add("hChi2prTPCcls", "#chi^{2}/cluster for the TPC track segment", {HistType::kTH1D, {{100, 0., 5.}}});
287297
registry.add("hChi2prITScls", "#chi^{2}/cluster for the ITS track", {HistType::kTH1D, {{100, 0., 50.}}});
288298
registry.add("hnTPCClu", "Number of found TPC clusters", {HistType::kTH1D, {{100, 40, 180}}});
@@ -501,6 +511,11 @@ struct FlowTask {
501511
cfgFuncParas.fT0AV0ASigma->SetParameters(463.4144, 6.796509e-02, -9.097136e-07, 7.971088e-12, -2.600581e-17);
502512
}
503513

514+
if (cfgFuncParas.cfgShowTPCsectorOverlap) {
515+
cfgFuncParas.fPhiCutLow = new TF1("fPhiCutLow", "0.06/x+pi/18.0-0.06", 0, 100);
516+
cfgFuncParas.fPhiCutHigh = new TF1("fPhiCutHigh", "0.1/x+pi/18.0+0.06", 0, 100);
517+
}
518+
504519
if (cfgTrackDensityCorrUse) {
505520
std::vector<double> pTEffBins = {0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.4, 1.8, 2.2, 2.6, 3.0};
506521
hFindPtBin = new TH1D("hFindPtBin", "hFindPtBin", pTEffBins.size() - 1, &pTEffBins[0]);
@@ -730,12 +745,49 @@ struct FlowTask {
730745
return 1;
731746
}
732747

748+
int getMagneticField(uint64_t timestamp)
749+
{
750+
static o2::parameters::GRPMagField* grpo = nullptr;
751+
if (grpo == nullptr) {
752+
grpo = ccdb->getForTimeStamp<o2::parameters::GRPMagField>(cfgFuncParas.cfgMagnetField, timestamp);
753+
if (grpo == nullptr) {
754+
LOGF(fatal, "GRP object not found in %s for timestamp %llu", cfgFuncParas.cfgMagnetField.value.c_str(), timestamp);
755+
return 0;
756+
}
757+
LOGF(info, "Retrieved GRP from %s for timestamp %llu with magnetic field of %d kG", cfgFuncParas.cfgMagnetField.value.c_str(), timestamp, grpo->getNominalL3Field());
758+
}
759+
return grpo->getNominalL3Field();
760+
}
761+
733762
template <typename TTrack>
734763
bool trackSelected(TTrack track)
735764
{
736765
return ((track.tpcNClsFound() >= cfgCutTPCclu) && (track.tpcNClsCrossedRows() >= cfgCutTPCCrossedRows) && (track.itsNCls() >= cfgCutITSclu));
737766
}
738767

768+
template <typename TTrack>
769+
bool rejectionTPCoverlap(TTrack track, const int field)
770+
{
771+
double phimodn = track.phi();
772+
if (field < 0) // for negative polarity field
773+
phimodn = o2::constants::math::TwoPI - phimodn;
774+
if (track.sign() < 0) // for negative charge
775+
phimodn = o2::constants::math::TwoPI - phimodn;
776+
if (phimodn < 0)
777+
LOGF(warning, "phi < 0: %g", phimodn);
778+
779+
float middle = o2::constants::math::TwoPI / 18.0;
780+
phimodn += middle; // to center gap in the middle
781+
phimodn = fmod(phimodn, o2::constants::math::TwoPI / 9.0);
782+
registry.fill(HIST("pt_phi_bef"), track.pt(), phimodn);
783+
if (cfgFuncParas.cfgRejectionTPCsectorOverlap) {
784+
if (phimodn < cfgFuncParas.fPhiCutHigh->Eval(track.pt()) && phimodn > cfgFuncParas.fPhiCutLow->Eval(track.pt()))
785+
return false; // reject track
786+
}
787+
registry.fill(HIST("pt_phi_aft"), track.pt(), phimodn);
788+
return true;
789+
}
790+
739791
void initHadronicRate(aod::BCsWithTimestamps::iterator const& bc)
740792
{
741793
if (mRunNumber == bc.runNumber()) {
@@ -844,9 +896,14 @@ struct FlowTask {
844896
// track weights
845897
float weff = 1, wacc = 1;
846898
double nTracksCorrected = 0;
899+
int magnetfield = 0;
847900
float independent = cent;
848901
if (cfgUseNch)
849902
independent = static_cast<float>(tracks.size());
903+
if (cfgFuncParas.cfgShowTPCsectorOverlap) {
904+
// magnet field dependence cut
905+
magnetfield = getMagneticField(bc.timestamp());
906+
}
850907

851908
double psi2Est = 0, psi3Est = 0, psi4Est = 0;
852909
float wEPeff = 1;
@@ -879,6 +936,8 @@ struct FlowTask {
879936
for (const auto& track : tracks) {
880937
if (!trackSelected(track))
881938
continue;
939+
if (cfgFuncParas.cfgShowTPCsectorOverlap && !rejectionTPCoverlap(track, magnetfield))
940+
continue;
882941
bool withinPtPOI = (cfgCutPtPOIMin < track.pt()) && (track.pt() < cfgCutPtPOIMax); // within POI pT range
883942
bool withinPtRef = (cfgCutPtRefMin < track.pt()) && (track.pt() < cfgCutPtRefMax); // within RF pT range
884943
if (cfgOutputNUAWeights) {

PWGHF/D2H/TableProducer/dataCreatorCharmHadPiReduced.cxx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,7 +1241,7 @@ struct HfDataCreatorCharmHadPiReduced {
12411241
trackParCov1.propagateTo(secondaryVertexCharm[0], bz);
12421242
df2.getTrack(0).getPxPyPzGlo(pVec0);
12431243
df2.getTrack(1).getPxPyPzGlo(pVec1);
1244-
pVecCharm = RecoDecay::pVec(pVec0, pVec1);
1244+
pVecCharm = RecoDecay::pVec(pVec0, pVec1, pVec2);
12451245
trackParCovCharmHad = df2.createParentTrackParCov();
12461246
trackParCovCharmHad.setAbsCharge(0); // to be sure
12471247
}
@@ -1279,14 +1279,18 @@ struct HfDataCreatorCharmHadPiReduced {
12791279
}
12801280

12811281
// reject pi D with same sign as D
1282-
if constexpr (decChannel == DecayChannel::B0ToDminusPi || decChannel == DecayChannel::BsToDsminusPi || decChannel == DecayChannel::LbToLcplusPi || decChannel == DecayChannel::B0ToDstarPi) { // D∓ → π∓ K± π∓ and Ds∓ → K∓ K± π∓ and Lc∓ → p∓ K± π∓ and D*+ → D0 π+
1282+
if constexpr (decChannel == DecayChannel::B0ToDminusPi || decChannel == DecayChannel::BsToDsminusPi || decChannel == DecayChannel::LbToLcplusPi) { // D∓ → π∓ K± π∓ and Ds∓ → K∓ K± π∓ and Lc∓ → p∓ K± π∓
12831283
if (trackPion.sign() * charmHadDauTracks[0].sign() > 0) {
12841284
continue;
12851285
}
12861286
} else if constexpr (decChannel == DecayChannel::BplusToD0barPi) { // D0(bar) → K± π∓
12871287
if (!((candC.isSelD0() >= hfflagConfigurations.selectionFlagD0 && trackPion.sign() < 0) || (candC.isSelD0bar() >= hfflagConfigurations.selectionFlagD0bar && trackPion.sign() > 0))) {
12881288
continue;
12891289
}
1290+
} else if constexpr (decChannel == DecayChannel::B0ToDstarPi) { // D*+ → D0 π+
1291+
if (trackPion.sign() * charmHadDauTracks.back().sign() > 0) {
1292+
continue;
1293+
}
12901294
}
12911295

12921296
// apply selections on pion tracks

PWGHF/D2H/Tasks/taskB0Reduced.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ DECLARE_SOA_COLUMN(FlagWrongCollision, flagWrongCollision, int8_t);
101101
} // namespace hf_cand_b0_lite
102102

103103
DECLARE_SOA_TABLE(HfRedCandB0Lites, "AOD", "HFREDCANDB0LITE", //! Table with some B0 properties
104-
// B meson features hf_cand_b0_lite::M,
104+
// B meson features
105105
hf_cand_b0_lite::M,
106106
hf_cand_b0_lite::Pt,
107107
hf_cand_b0_lite::Eta,
@@ -616,7 +616,7 @@ struct HfTaskB0Reduced {
616616
candidate.decayLengthXY(),
617617
candidate.decayLengthNormalised(),
618618
candidate.decayLengthXYNormalised(),
619-
candidate.impactParameterProngSqSum(),
619+
candidate.impactParameterProduct(),
620620
candidate.maxNormalisedDeltaIP(),
621621
candidateMlScoreSig,
622622
candidate.isSelB0ToDPi(),
@@ -644,12 +644,12 @@ struct HfTaskB0Reduced {
644644
prong0MlScorePrompt,
645645
prong0MlScoreNonprompt,
646646
// pion features
647-
candidate.ptProng1(),
647+
candidate.ptProng2(),
648648
std::abs(RecoDecay::eta(prongBachPi.pVector())),
649649
prongBachPi.itsNCls(),
650650
prongBachPi.tpcNClsCrossedRows(),
651651
prongBachPi.tpcChi2NCl(),
652-
candidate.impactParameter1(),
652+
candidate.impactParameter2(),
653653
prongBachPi.tpcNSigmaPi(),
654654
prongBachPi.tofNSigmaPi(),
655655
prongBachPi.tpcTofNSigmaPi(),

0 commit comments

Comments
 (0)