Skip to content

Commit 3d0a2f1

Browse files
authored
Merge branch 'AliceO2Group:master' into NetChargeFluctuations3
2 parents 60776c0 + f65c6af commit 3d0a2f1

11 files changed

Lines changed: 693 additions & 310 deletions

File tree

ALICE3/TableProducer/OTF/onTheFlyTracker.cxx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1731,6 +1731,7 @@ struct OnTheFlyTracker {
17311731
trackParCov.getSigmaTgl2(), trackParCov.getSigma1PtY(), trackParCov.getSigma1PtZ(), trackParCov.getSigma1PtSnp(), trackParCov.getSigma1PtTgl(),
17321732
trackParCov.getSigma1Pt2());
17331733
tableMcTrackLabels(trackParCov.mcLabel, 0);
1734+
tableMcTrackWithDauLabels(trackParCov.mcLabel, 0);
17341735
tableTracksExtraA3(trackParCov.nSiliconHits, trackParCov.nTPCHits, trackParCov.trackType);
17351736

17361737
// populate extra tables if required to do so
@@ -1955,6 +1956,12 @@ struct OnTheFlyTracker {
19551956
const bool longLivedToBeHandled = std::find(longLivedHandledPDGs.begin(), longLivedHandledPDGs.end(), std::abs(mcParticle.pdgCode())) != longLivedHandledPDGs.end();
19561957
const bool nucleiToBeHandled = std::find(nucleiPDGs.begin(), nucleiPDGs.end(), std::abs(mcParticle.pdgCode())) != nucleiPDGs.end();
19571958
const bool pdgsToBeHandled = longLivedToBeHandled || (enableNucleiSmearing && nucleiToBeHandled);
1959+
1960+
o2::upgrade::OTFParticle otfParticle(mcParticle);
1961+
if (otfParticle.hasNaN()) {
1962+
continue;
1963+
}
1964+
19581965
if (!pdgsToBeHandled) {
19591966
continue;
19601967
}

ALICE3/Tasks/alice3DecayerQa.cxx

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111
///
12-
/// \file alice3DecayerQA.cxx
12+
/// \file alice3DecayerQa.cxx
1313
///
1414
/// \brief QA task for otf decayer
1515
///
@@ -36,7 +36,7 @@
3636
using namespace o2;
3737
using namespace o2::framework;
3838

39-
struct Alice3DecayerQA {
39+
struct Alice3DecayerQa {
4040
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};
4141
SliceCache cache;
4242

@@ -68,6 +68,9 @@ struct Alice3DecayerQA {
6868
Partition<aod::McPartWithDaus> trueLambdas = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kLambda0);
6969
Partition<aod::McPartWithDaus> trueXiMinus = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kXiMinus);
7070

71+
static constexpr size_t NCascadeDaughters = 2;
72+
static constexpr size_t NV0Daughters = 2;
73+
7174
template <typename TParticle>
7275
float radius(const TParticle& particle) const
7376
{
@@ -106,20 +109,27 @@ struct Alice3DecayerQA {
106109
histos.add("MCWithDau/hE", "hE", kTH1D, {axes.axisPt});
107110

108111
// QA with daughters from Decayer
109-
histos.add("K0S/hGeneratedPt", "hGeneratedPt", kTH1D, {axes.axisPt});
110-
histos.add("K0S/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
111-
histos.add("K0S/hPosDauDecayRadius", "hPosDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
112-
histos.add("K0S/hNegDauDecayRadius", "hNegDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
113-
histos.add("Lambda/hGeneratedPt", "hGeneratedPt", kTH1D, {axes.axisPt});
114-
histos.add("Lambda/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
115-
histos.add("Lambda/hPosDauDecayRadius", "hPosDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
116-
histos.add("Lambda/hNegDauDecayRadius", "hNegDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
117-
histos.add("XiMinus/hGeneratedPt", "hGeneratedPt", kTH1D, {axes.axisPt});
118-
histos.add("XiMinus/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
119-
histos.add("XiMinus/hBachDauDecayRadius", "hBachDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
120-
histos.add("XiMinus/hV0DauDecayRadius", "hV0DauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
121-
histos.add("XiMinus/hPosDauDecayRadius", "hPosDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
122-
histos.add("XiMinus/hNegDauDecayRadius", "hNegDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
112+
histos.add("K0S/hGeneratedPt", "hGeneratedPt;#it{p}_{T} (GeV/#it{c})", kTH1D, {axes.axisPt});
113+
histos.add("K0S/hPosDauDecayRadius", "hPosDauDecayRadius;Decay radius 2D;#it{p}_{T} (GeV/#it{c})", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
114+
histos.add("K0S/hNegDauDecayRadius", "hNegDauDecayRadius;Decay radius 2D;#it{p}_{T} (GeV/#it{c})", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
115+
histos.add("Lambda/hGeneratedPt", "hGeneratedPt;#it{p}_{T} (GeV/#it{c})", kTH1D, {axes.axisPt});
116+
histos.add("Lambda/hPosDauDecayRadius", "hPosDauDecayRadius;Decay radius 2D;#it{p}_{T} (GeV/#it{c})", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
117+
histos.add("Lambda/hNegDauDecayRadius", "hNegDauDecayRadius;Decay radius 2D;#it{p}_{T} (GeV/#it{c})", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
118+
histos.add("XiMinus/hGeneratedPt", "hGeneratedPt;#it{p}_{T} (GeV/#it{c})", kTH1D, {axes.axisPt});
119+
histos.add("XiMinus/hBachDauDecayRadius", "hBachDauDecayRadius;Decay radius 2D;#it{p}_{T} (GeV/#it{c})", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
120+
histos.add("XiMinus/hV0DauDecayRadius", "hV0DauDecayRadius;Decay radius 2D;#it{p}_{T} (GeV/#it{c})", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
121+
histos.add("XiMinus/hPosDauDecayRadius", "hPosDauDecayRadius;Decay radius 2D;#it{p}_{T} (GeV/#it{c})", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
122+
histos.add("XiMinus/hNegDauDecayRadius", "hNegDauDecayRadius;Decay radius 2D;#it{p}_{T} (GeV/#it{c})", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
123+
124+
auto hCheckHasK0SDecayed = histos.add<TH1>("K0S/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
125+
hCheckHasK0SDecayed->GetXaxis()->SetBinLabel(1, "No");
126+
hCheckHasK0SDecayed->GetXaxis()->SetBinLabel(2, "Yes");
127+
auto hCheckHasLambdaDecayed = histos.add<TH1>("Lambda/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
128+
hCheckHasLambdaDecayed->GetXaxis()->SetBinLabel(1, "No");
129+
hCheckHasLambdaDecayed->GetXaxis()->SetBinLabel(2, "Yes");
130+
auto hCheckHasXiMinusDecayed = histos.add<TH1>("XiMinus/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
131+
hCheckHasXiMinusDecayed->GetXaxis()->SetBinLabel(1, "No");
132+
hCheckHasXiMinusDecayed->GetXaxis()->SetBinLabel(2, "Yes");
123133
}
124134

125135
void process(const aod::McCollision& collision, const aod::McPartWithDaus& particles)
@@ -152,9 +162,9 @@ struct Alice3DecayerQA {
152162
for (const auto& particle : trueK0ShortGrouped) {
153163
histos.fill(HIST("K0S/hGeneratedPt"), particle.pt());
154164
if (particle.has_daughters()) {
155-
histos.fill(HIST("K0S/hHasDecayed"), 0);
165+
histos.fill(HIST("K0S/hHasDecayed"), 1);
156166
auto daughters = particle.daughtersIds();
157-
if (daughters.size() == 2) {
167+
if (daughters.size() == NV0Daughters) {
158168
auto dau0 = particles.rawIteratorAt(daughters.front());
159169
auto dau1 = particles.rawIteratorAt(daughters.back());
160170

@@ -169,15 +179,15 @@ struct Alice3DecayerQA {
169179
}
170180
}
171181
} else {
172-
histos.fill(HIST("K0S/hHasDecayed"), 1);
182+
histos.fill(HIST("K0S/hHasDecayed"), 0);
173183
}
174184
}
175185
for (const auto& particle : trueLambdasGrouped) {
176186
histos.fill(HIST("Lambda/hGeneratedPt"), particle.pt());
177187
if (particle.has_daughters()) {
178-
histos.fill(HIST("Lambda/hHasDecayed"), 0);
188+
histos.fill(HIST("Lambda/hHasDecayed"), 1);
179189
auto daughters = particle.daughtersIds();
180-
if (daughters.size() == 2) {
190+
if (daughters.size() == NV0Daughters) {
181191
auto dau0 = particles.rawIteratorAt(daughters[0]);
182192
auto dau1 = particles.rawIteratorAt(daughters[1]);
183193

@@ -192,15 +202,15 @@ struct Alice3DecayerQA {
192202
}
193203
}
194204
} else {
195-
histos.fill(HIST("Lambda/hHasDecayed"), 1);
205+
histos.fill(HIST("Lambda/hHasDecayed"), 0);
196206
}
197207
}
198208
for (const auto& particle : trueXiMinusGrouped) {
199209
histos.fill(HIST("XiMinus/hGeneratedPt"), particle.pt());
200210
if (particle.has_daughters()) {
201-
histos.fill(HIST("XiMinus/hHasDecayed"), 0);
211+
histos.fill(HIST("XiMinus/hHasDecayed"), 1);
202212
auto daughters = particle.daughtersIds();
203-
if (daughters.size() == 2) {
213+
if (daughters.size() == NCascadeDaughters) {
204214
auto dau0 = particles.rawIteratorAt(daughters.front());
205215
auto dau1 = particles.rawIteratorAt(daughters.back());
206216

@@ -216,7 +226,7 @@ struct Alice3DecayerQA {
216226
// Lambda -> p pi-
217227
if (v0.has_daughters()) {
218228
auto v0daughters = v0.daughtersIds();
219-
if (v0daughters.size() == 2) {
229+
if (v0daughters.size() == NV0Daughters) {
220230
auto v0dau0 = particles.rawIteratorAt(v0daughters.front());
221231
auto v0dau1 = particles.rawIteratorAt(v0daughters.back());
222232
const bool lambdaDecay = (v0dau0.pdgCode() == PDG_t::kProton && v0dau1.pdgCode() == PDG_t::kPiMinus) ||
@@ -232,7 +242,7 @@ struct Alice3DecayerQA {
232242
}
233243
}
234244
} else {
235-
histos.fill(HIST("XiMinus/hHasDecayed"), 1);
245+
histos.fill(HIST("XiMinus/hHasDecayed"), 0);
236246
}
237247
}
238248

@@ -266,10 +276,10 @@ struct Alice3DecayerQA {
266276
}
267277
}
268278

269-
PROCESS_SWITCH(Alice3DecayerQA, process, "fill MC-with-dau histograms", true);
279+
PROCESS_SWITCH(Alice3DecayerQa, process, "fill MC-with-dau histograms", true);
270280
};
271281

272282
WorkflowSpec defineDataProcessing(ConfigContext const& ctx)
273283
{
274-
return WorkflowSpec{adaptAnalysisTask<Alice3DecayerQA>(ctx)};
284+
return WorkflowSpec{adaptAnalysisTask<Alice3DecayerQa>(ctx)};
275285
}

Common/TableProducer/propagationServiceV2.cxx

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,26 +109,29 @@ struct propagationServiceV2 {
109109
strangenessBuilderModule.init(baseOpts, v0BuilderOpts, cascadeBuilderOpts, preSelectOpts, histos, initContext);
110110
}
111111

112-
// Load MatLUT once (needs rectifyPtrFromFile, kept manual), set B-field per run from
113-
// GRPMagField CCDB column, and refresh mMeanVtx pointer every call (pointer into current
114-
// BC table, valid only for the duration of this process() invocation).
112+
// Load MatLUT once (needs rectifyPtrFromFile, kept manual), set B-field and mean vertex
113+
// once per run from GRPMagField/MeanVertex CCDB columns.
115114
template <typename TBC>
116115
void initCCDB(TBC const& bc0)
117116
{
117+
if (ccdbLoader.runNumber != bc0.runNumber()) {
118+
LOG(info) << "Setting B-field to current " << bc0.grpMagField().getL3Current() << " A for run " << bc0.runNumber() << " from GRPMagField CCDB column";
119+
o2::base::Propagator::initFieldFromGRP(&bc0.grpMagField());
120+
ccdbLoader.mMeanVtx = &bc0.meanVertex();
121+
ccdbLoader.runNumber = bc0.runNumber();
122+
} else {
123+
// Verify the CCDB column buffer has not been replaced mid-run.
124+
// The deserialised pointer must be stable for the lifetime of a run.
125+
if (&bc0.meanVertex() != ccdbLoader.mMeanVtx) {
126+
LOG(fatal) << "MeanVertex CCDB column pointer changed within run " << bc0.runNumber() << " — unexpected buffer replacement";
127+
}
128+
}
118129
if (!ccdbLoader.lut) {
119130
LOG(info) << "Loading material look-up table for run: " << bc0.runNumber();
120131
ccdbLoader.lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(
121132
ccdb->template getForRun<o2::base::MatLayerCylSet>(standardCCDBLoaderConfigurables.lutPath.value, bc0.runNumber()));
122133
o2::base::Propagator::Instance()->setMatLUT(ccdbLoader.lut);
123134
}
124-
// Always refresh: pointer into current BC table, invalidated after process() returns
125-
ccdbLoader.mMeanVtx = &bc0.meanVertex();
126-
if (ccdbLoader.runNumber != bc0.runNumber()) {
127-
const auto& grpmag = bc0.grpMagField(); // from declarative CCDB column
128-
LOG(info) << "Setting B-field to current " << grpmag.getL3Current() << " A for run " << bc0.runNumber() << " from GRPMagField CCDB column";
129-
o2::base::Propagator::initFieldFromGRP(&grpmag);
130-
ccdbLoader.runNumber = bc0.runNumber();
131-
}
132135
}
133136

134137
void processRealData(soa::Join<aod::Collisions, aod::EvSels> const& collisions, aod::V0s const& v0s, aod::Cascades const& cascades, aod::TrackedCascades const& trackedCascades, FullTracksExtIU const& tracks, BCsWithCCDB const& bcs)

Common/Tasks/centralityQa.cxx

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ using namespace o2::framework;
2828
struct CentralityQa {
2929
Configurable<int> nBins{"nBins", 1050, "number of bins"};
3030
Configurable<bool> INELgtZERO{"INELgtZERO", 1, "0 - no, 1 - yes"};
31+
Configurable<float> vertexZcut{"vertexZcut", 10, "vertex-Z position cut (absolute value in cm)"};
3132
OutputObj<TH1F> hCentRun2V0M{TH1F("hCentRun2V0M", "V0M", nBins, 0, 105.)};
3233
OutputObj<TH1F> hCentRun2V0A{TH1F("hCentRun2V0A", "V0A", nBins, 0, 105.)};
3334
OutputObj<TH1F> hCentRun2SPDTks{TH1F("hCentRun2SPDTks", "SPD Tracklets", nBins, 0, 105.)};
@@ -115,8 +116,12 @@ struct CentralityQa {
115116
if (INELgtZERO && col.multNTracksPVeta1() < 1) {
116117
return;
117118
}
118-
if (!col.sel8())
119+
if (!col.sel8()) {
119120
return;
121+
}
122+
if (std::abs(col.posZ()) > vertexZcut) {
123+
return;
124+
}
120125
LOGF(debug, "centFV0A=%.0f", col.centFV0A());
121126
hCentFV0A->Fill(col.centFV0A());
122127
hCentProfileFV0A->Fill(col.centFV0A(), col.multNTracksPVetaHalf());
@@ -128,8 +133,12 @@ struct CentralityQa {
128133
if (INELgtZERO && col.multNTracksPVeta1() < 1) {
129134
return;
130135
}
131-
if (!col.sel8())
136+
if (!col.sel8()) {
137+
return;
138+
}
139+
if (std::abs(col.posZ()) > vertexZcut) {
132140
return;
141+
}
133142
LOGF(debug, "centFT0M=%.0f", col.centFT0M());
134143
hCentFT0M->Fill(col.centFT0M());
135144
hCentProfileFT0M->Fill(col.centFT0M(), col.multNTracksPVetaHalf());
@@ -141,8 +150,12 @@ struct CentralityQa {
141150
if (INELgtZERO && col.multNTracksPVeta1() < 1) {
142151
return;
143152
}
144-
if (!col.sel8())
153+
if (!col.sel8()) {
154+
return;
155+
}
156+
if (std::abs(col.posZ()) > vertexZcut) {
145157
return;
158+
}
146159
hCentFT0A->Fill(col.centFT0A());
147160
hCentProfileFT0A->Fill(col.centFT0A(), col.multNTracksPVetaHalf());
148161
}
@@ -153,8 +166,12 @@ struct CentralityQa {
153166
if (INELgtZERO && col.multNTracksPVeta1() < 1) {
154167
return;
155168
}
156-
if (!col.sel8())
169+
if (!col.sel8()) {
157170
return;
171+
}
172+
if (std::abs(col.posZ()) > vertexZcut) {
173+
return;
174+
}
158175
hCentFT0C->Fill(col.centFT0C());
159176
hCentProfileFT0C->Fill(col.centFT0C(), col.multNTracksPVetaHalf());
160177
}
@@ -165,8 +182,12 @@ struct CentralityQa {
165182
if (INELgtZERO && col.multNTracksPVeta1() < 1) {
166183
return;
167184
}
168-
if (!col.sel8())
185+
if (!col.sel8()) {
186+
return;
187+
}
188+
if (std::abs(col.posZ()) > vertexZcut) {
169189
return;
190+
}
170191
hCentFDDM->Fill(col.centFDDM());
171192
hCentProfileFDDM->Fill(col.centFDDM(), col.multNTracksPVetaHalf());
172193
}
@@ -177,8 +198,12 @@ struct CentralityQa {
177198
if (INELgtZERO && col.multNTracksPVeta1() < 1) {
178199
return;
179200
}
180-
if (!col.sel8())
201+
if (!col.sel8()) {
202+
return;
203+
}
204+
if (std::abs(col.posZ()) > vertexZcut) {
181205
return;
206+
}
182207
hCentNTPV->Fill(col.centNTPV());
183208
hCentProfileNTPV->Fill(col.centNTPV(), col.multNTracksPVetaHalf());
184209
}

Common/Tasks/centralityStudypp.cxx

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -329,40 +329,46 @@ struct centralityStudypp {
329329
float multNTracksGlobal = collision.multNTracksGlobal();
330330
float mftNtracks = collision.mftNtracks();
331331
float multNTracksPV = collision.multNTracksPV();
332+
332333
if (applyVertexZEqualization) {
333334
float epsilon = 1e-2; // average value after which this collision will be disregarded
334-
multFV0A = -1.0f;
335-
multFT0A = -1.0f;
336-
multFT0C = -1.0f;
337-
multFDDA = -1.0f;
338-
multFDDC = -1.0f;
339-
multNTracksGlobal = -1.0f;
340-
mftNtracks = -1.0f;
341-
multNTracksPV = -1.0f;
342-
343-
if (hVtxZFV0A->Interpolate(collision.multPVz()) > epsilon) {
344-
multFV0A = hVtxZFV0A->Interpolate(0.0) * collision.multFV0A() / hVtxZFV0A->Interpolate(collision.multPVz());
345-
}
346-
if (hVtxZFT0A->Interpolate(collision.multPVz()) > epsilon) {
347-
multFT0A = hVtxZFT0A->Interpolate(0.0) * collision.multFT0A() / hVtxZFT0A->Interpolate(collision.multPVz());
348-
}
349-
if (hVtxZFT0C->Interpolate(collision.multPVz()) > epsilon) {
350-
multFT0C = hVtxZFT0C->Interpolate(0.0) * collision.multFT0C() / hVtxZFT0C->Interpolate(collision.multPVz());
351-
}
352-
if (hVtxZFDDA->Interpolate(collision.multPVz()) > epsilon) {
353-
multFDDA = hVtxZFDDA->Interpolate(0.0) * collision.multFDDA() / hVtxZFDDA->Interpolate(collision.multPVz());
354-
}
355-
if (hVtxZFDDC->Interpolate(collision.multPVz()) > epsilon) {
356-
multFDDC = hVtxZFDDC->Interpolate(0.0) * collision.multFDDC() / hVtxZFDDC->Interpolate(collision.multPVz());
357-
}
358-
if (hVtxZNGlobals->Interpolate(collision.multPVz()) > epsilon) {
359-
multNTracksGlobal = hVtxZNGlobals->Interpolate(0.0) * collision.multNTracksGlobal() / hVtxZNGlobals->Interpolate(collision.multPVz());
360-
}
361-
if (hVtxZMFT->Interpolate(collision.multPVz()) > epsilon) {
362-
mftNtracks = hVtxZMFT->Interpolate(0.0) * collision.mftNtracks() / hVtxZMFT->Interpolate(collision.multPVz());
363-
}
364-
if (hVtxZNTracks->Interpolate(collision.multPVz()) > epsilon) {
365-
multNTracksPV = hVtxZNTracks->Interpolate(0.0) * collision.multNTracksPV() / hVtxZNTracks->Interpolate(collision.multPVz());
335+
float maxVertexZ = 15.0f; // max value for any equalization attempt
336+
337+
// same defaults as multCentTable in case of unhealthy signals
338+
multFV0A = 0.0f;
339+
multFT0A = 0.0f;
340+
multFT0C = 0.0f;
341+
multFDDA = 0.0f;
342+
multFDDC = 0.0f;
343+
multNTracksGlobal = 0.0f;
344+
mftNtracks = 0.0f;
345+
multNTracksPV = 0.0f;
346+
347+
if (std::abs(collision.multPVz()) < maxVertexZ) { // operate consistently vs multCentTable
348+
if (hVtxZFV0A->Interpolate(collision.multPVz()) > epsilon && collision.multFV0A() > -1.0f) {
349+
multFV0A = hVtxZFV0A->Interpolate(0.0) * collision.multFV0A() / hVtxZFV0A->Interpolate(collision.multPVz());
350+
}
351+
if (hVtxZFT0A->Interpolate(collision.multPVz()) > epsilon && collision.multFT0A() > -1.0f) {
352+
multFT0A = hVtxZFT0A->Interpolate(0.0) * collision.multFT0A() / hVtxZFT0A->Interpolate(collision.multPVz());
353+
}
354+
if (hVtxZFT0C->Interpolate(collision.multPVz()) > epsilon && collision.multFT0C() > -1.0f) {
355+
multFT0C = hVtxZFT0C->Interpolate(0.0) * collision.multFT0C() / hVtxZFT0C->Interpolate(collision.multPVz());
356+
}
357+
if (hVtxZFDDA->Interpolate(collision.multPVz()) > epsilon && collision.multFDDA() > -1.0f) {
358+
multFDDA = hVtxZFDDA->Interpolate(0.0) * collision.multFDDA() / hVtxZFDDA->Interpolate(collision.multPVz());
359+
}
360+
if (hVtxZFDDC->Interpolate(collision.multPVz()) > epsilon && collision.multFDDC() > -1.0f) {
361+
multFDDC = hVtxZFDDC->Interpolate(0.0) * collision.multFDDC() / hVtxZFDDC->Interpolate(collision.multPVz());
362+
}
363+
if (hVtxZNGlobals->Interpolate(collision.multPVz()) > epsilon && collision.multNTracksGlobal() > -1.0f) {
364+
multNTracksGlobal = hVtxZNGlobals->Interpolate(0.0) * collision.multNTracksGlobal() / hVtxZNGlobals->Interpolate(collision.multPVz());
365+
}
366+
if (hVtxZMFT->Interpolate(collision.multPVz()) > epsilon && collision.mftNtracks() > -1.0f) {
367+
mftNtracks = hVtxZMFT->Interpolate(0.0) * collision.mftNtracks() / hVtxZMFT->Interpolate(collision.multPVz());
368+
}
369+
if (hVtxZNTracks->Interpolate(collision.multPVz()) > epsilon && collision.multNTracksPV() > -1.0f) {
370+
multNTracksPV = hVtxZNTracks->Interpolate(0.0) * collision.multNTracksPV() / hVtxZNTracks->Interpolate(collision.multPVz());
371+
}
366372
}
367373
}
368374

0 commit comments

Comments
 (0)