Skip to content

Commit f3dd51e

Browse files
committed
Fixes for runtime errors
1 parent 8a186f8 commit f3dd51e

File tree

2 files changed

+43
-38
lines changed

2 files changed

+43
-38
lines changed

PWGLF/TableProducer/Nuspex/decay3bodybuilder.cxx

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ struct decay3bodyBuilder {
183183
std::string prefix = "mixingOpts";
184184
Configurable<int> n3bodyMixing{"n3bodyMixing", 0, "Number of decay3bodys to mix: 0 - value set to maximum bin entry in hDecay3BodyRadiusPhi, > 0 - manual setting"};
185185
Configurable<int> mixingType{"mixingType", 0, "0: mix V0 from one event with bachelor from another, 1: mix pion and bachelor from one event with proton from another, 1: mix proton and bachelor from one event with pion from another "};
186-
ConfigurableAxis bins3BodyRadius{"bins3BodyRadius", {VARIABLE_WIDTH, 0.0f, 2.0f, 4.0f, 7.0f, 10.0f, 14.0f, 18.0f, 22.0f, 30.0f, 40.0f}, "Mixing bins - 3body radius"};
187-
ConfigurableAxis bins3BodyPhi{"bins3BodyPhi", {VARIABLE_WIDTH, -180 * TMath::Pi() / 180, -120 * TMath::Pi() / 180, -60 * TMath::Pi() / 180, 0, 60 * TMath::Pi() / 180, 120 * TMath::Pi() / 180, 180 * TMath::Pi() / 180}, "Mixing bins - 3body phi (rad)"};
188-
ConfigurableAxis bins3BodyPhiDegree{"bins3BodyPhiDegree", {VARIABLE_WIDTH, -180, -120, -60, 0, 60, 120, 180}, "Mixing bins - 3body phi (degree)"};
189-
ConfigurableAxis bins3BodyPosZ{"bins3BodyPosZ", {VARIABLE_WIDTH, -500.0f, -200.0f, -100.0f, -70.0f, -60.0f, -50.0f, -40.0f, -35.0f, -30.0f, -25.0f, -20.0f, -15.0f, -13.0f, -10.0f, -8.0f, -6.0f, -4.0f, -2.0f, 0.0f, 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 13.0f, 15.0f, 20.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f, 60.0f, 70.0f, 100.0f, 200.0f, 500.0f}, "3body SV z position"};
186+
ConfigurableAxis bins3BodyRadius{"mixingOpts.bins3BodyRadius", {VARIABLE_WIDTH, 0.0f, 2.0f, 4.0f, 7.0f, 10.0f, 14.0f, 18.0f, 22.0f, 30.0f, 40.0f}, "Mixing bins - 3body radius"};
187+
ConfigurableAxis bins3BodyPhi{"mixingOpts.bins3BodyPhi", {VARIABLE_WIDTH, -180 * TMath::Pi() / 180, -120 * TMath::Pi() / 180, -60 * TMath::Pi() / 180, 0, 60 * TMath::Pi() / 180, 120 * TMath::Pi() / 180, 180 * TMath::Pi() / 180}, "Mixing bins - 3body phi (rad)"};
188+
ConfigurableAxis bins3BodyPhiDegree{"mixingOpts.bins3BodyPhiDegree", {VARIABLE_WIDTH, -180, -120, -60, 0, 60, 120, 180}, "Mixing bins - 3body phi (degree)"};
189+
ConfigurableAxis bins3BodyPosZ{"mixingOpts.bins3BodyPosZ", {VARIABLE_WIDTH, -500.0f, -200.0f, -100.0f, -70.0f, -60.0f, -50.0f, -40.0f, -35.0f, -30.0f, -25.0f, -20.0f, -15.0f, -13.0f, -10.0f, -8.0f, -6.0f, -4.0f, -2.0f, 0.0f, 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 13.0f, 15.0f, 20.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f, 60.0f, 70.0f, 100.0f, 200.0f, 500.0f}, "3body SV z position"};
190190
Configurable<bool> selectPVPosZ3bodyMixing{"selectPVPosZ3bodyMixing", true, "Select same pvPosZ events in case of 3body mixing"};
191191
Configurable<float> maxDeltaPVPosZ3bodyMixing{"maxDeltaPVPosZ3bodyMixing", 1., "max difference between PV z position in case of 3body mixing"};
192192
// SVertexer selections
@@ -464,14 +464,14 @@ struct decay3bodyBuilder {
464464
}
465465

466466
if (doprocessRealDataReduced3bodyMixing == true) {
467-
auto h3bodyCombinationCounter = registry.add<TH1>("EM/h3bodyCombinationCounter", "h3bodyCombinationCounter", HistType::kTH1D, {{4, 0.0f, 4.0f}});
467+
auto h3bodyCombinationCounter = registry.add<TH1>("Mixing/h3bodyCombinationCounter", "h3bodyCombinationCounter", HistType::kTH1D, {{4, 0.0f, 4.0f}});
468468
h3bodyCombinationCounter->GetXaxis()->SetBinLabel(1, "total");
469469
h3bodyCombinationCounter->GetXaxis()->SetBinLabel(2, "not same collision");
470470
h3bodyCombinationCounter->GetXaxis()->SetBinLabel(3, "collision VtxZ");
471471
h3bodyCombinationCounter->GetXaxis()->SetBinLabel(4, "bach sign/ID");
472472
h3bodyCombinationCounter->LabelsOption("v");
473-
registry.add("EM/hDecay3BodyRadiusPhi", "hDecay3BodyRadiusPhi", HistType::kTH2F, {mixingOpts.bins3BodyRadius, mixingOpts.bins3BodyPhi});
474-
registry.add("EM/hDecay3BodyPosZ", "hDecay3BodyPosZ", HistType::kTH1F, {mixingOpts.bins3BodyPosZ});
473+
registry.add("Mixing/hDecay3BodyRadiusPhi", "hDecay3BodyRadiusPhi", HistType::kTH2F, {mixingOpts.bins3BodyRadius, mixingOpts.bins3BodyPhi});
474+
registry.add("Mixing/hDecay3BodyPosZ", "hDecay3BodyPosZ", HistType::kTH1F, {mixingOpts.bins3BodyPosZ});
475475
}
476476
}
477477

@@ -652,8 +652,7 @@ struct decay3bodyBuilder {
652652
return; // don't do if no request for decay3bodys in place
653653
}
654654

655-
// prepare MC containers (not necessarily used)
656-
std::vector<mc3Bodyinfo> mc3BodyInfos; // Decay3bodyMCCore information
655+
// prepare MC container (not necessarily used)
657656
std::vector<bool> mcParticleIsReco;
658657

659658
// clear and reserve size for MC info vectors
@@ -983,7 +982,7 @@ struct decay3bodyBuilder {
983982
if (!mEnabledTables[kVtx3BodyDatas]) {
984983
return; // don't do if no request for decay3bodys in place
985984
}
986-
985+
987986
// Strictly upper index policy for decay3body objects binned by radius, phi
988987
for (const auto& [decay3body0, decay3body1] : selfPairCombinations(binningType, mixingOpts.n3bodyMixing, -1, decay3bodys)) {
989988
auto trackPos0 = decay3body0.template track0_as<TRedTracks>();
@@ -1007,13 +1006,13 @@ struct decay3bodyBuilder {
10071006
trackPion1 = trackPos1;
10081007
}
10091008

1010-
registry.fill(HIST("h3bodyCombinationCounter"), 0.5);
1009+
registry.fill(HIST("Mixing/h3bodyCombinationCounter"), 0.5);
10111010

10121011
// only combine if from different event
10131012
if (decay3body0.collisionId() == decay3body1.collisionId()) {
10141013
continue;
10151014
}
1016-
registry.fill(HIST("QA/EM/h3bodyCombinationCounter"), 1.5);
1015+
registry.fill(HIST("Mixing/h3bodyCombinationCounter"), 1.5);
10171016

10181017
// collision vertex selection
10191018
auto collision0 = decay3body0.template collision_as<TRedCollisions>();
@@ -1027,27 +1026,27 @@ struct decay3bodyBuilder {
10271026
if (mixingOpts.selectPVPosZ3bodyMixing && std::abs(collision0.posZ() - collision1.posZ()) > mixingOpts.maxDeltaPVPosZ3bodyMixing) {
10281027
continue;
10291028
}
1030-
registry.fill(HIST("QA/EM/h3bodyCombinationCounter"), 2.5);
1029+
registry.fill(HIST("Mixing/h3bodyCombinationCounter"), 2.5);
10311030

10321031
// Charge selections
10331032
// same magnetic fields --> mix matter with matter
1034-
if (std::signbit(magFieldCol0) == std::signbit(magFieldCol1)) {
1033+
if ((magFieldCol0/std::abs(magFieldCol0)) == (magFieldCol1/std::abs(magFieldCol1))) {
10351034
if (trackDeuteron0.sign() != trackDeuteron1.sign()) {
1036-
continue;
1037-
}
1035+
continue;
1036+
}
10381037
}
10391038
// opposite magnetic fields --> mix matter with anti-matter
1040-
if (std::signbit(magFieldCol0) != std::signbit(magFieldCol1)) {
1039+
if ((magFieldCol0/std::abs(magFieldCol0)) != (magFieldCol1/std::abs(magFieldCol1))) {
10411040
if (trackDeuteron0.sign() == trackDeuteron1.sign()) {
1042-
continue;
1043-
}
1041+
continue;
1042+
}
10441043
}
10451044

10461045
// don't mix 3body with itself
10471046
if ((trackDeuteron0.globalIndex() == trackDeuteron1.globalIndex()) || (trackProton0.globalIndex() == trackProton1.globalIndex()) || (trackPion0.globalIndex() == trackPion1.globalIndex())) {
10481047
continue;
10491048
}
1050-
registry.fill(HIST("QA/EM/h3bodyCombinationCounter"), 3.5);
1049+
registry.fill(HIST("Mixing/h3bodyCombinationCounter"), 3.5);
10511050

10521051
// candidate analysis
10531052
// mix deuteron
@@ -1300,29 +1299,29 @@ struct decay3bodyBuilder {
13001299
soa::Join<aod::RedDecay3Bodys, aod::Red3BodyInfo> const& decay3bodys,
13011300
aod::RedIUTracks const&)
13021301
{
1303-
auto xAxis = registry.get<TH2>(HIST("hDecay3BodyRadiusPhi"))->GetXaxis();
1304-
auto yAxis = registry.get<TH2>(HIST("hDecay3BodyRadiusPhi"))->GetYaxis();
1302+
auto xAxis = registry.get<TH2>(HIST("Mixing/hDecay3BodyRadiusPhi"))->GetXaxis();
1303+
auto yAxis = registry.get<TH2>(HIST("Mixing/hDecay3BodyRadiusPhi"))->GetYaxis();
13051304

13061305
for (const auto& decay3body : decay3bodys) {
13071306
int bin_Radius, bin_Phi;
13081307
if (decay3bodyBuilderOpts.useKFParticle) {
13091308
bin_Radius = xAxis->FindBin(decay3body.radiusKF());
13101309
bin_Phi = yAxis->FindBin(decay3body.phiKF());
1311-
registry.fill(HIST("hDecay3BodyPosZ"), decay3body.poszKF());
1310+
registry.fill(HIST("Mixing/hDecay3BodyPosZ"), decay3body.poszKF());
13121311
} else {
13131312
bin_Radius = xAxis->FindBin(decay3body.radiusDCA());
13141313
bin_Phi = yAxis->FindBin(decay3body.phiDCA());
1315-
registry.fill(HIST("hDecay3BodyPosZ"), decay3body.poszDCA());
1314+
registry.fill(HIST("Mixing/hDecay3BodyPosZ"), decay3body.poszDCA());
13161315
}
1317-
registry.fill(HIST("hDecay3BodyRadiusPhi"), xAxis->GetBinCenter(bin_Radius), yAxis->GetBinCenter(bin_Phi));
1316+
registry.fill(HIST("Mixing/hDecay3BodyRadiusPhi"), xAxis->GetBinCenter(bin_Radius), yAxis->GetBinCenter(bin_Phi));
13181317
}
13191318

13201319
if (decay3bodyBuilderOpts.useKFParticle) {
1321-
Binning3BodyKF binningOnRadPhi{{mixingOpts.bins3BodyRadius, mixingOpts.bins3BodyPhi}, true};
1322-
buildMixedCandidates<aod::RedCollisions, aod::RedIUTracks>(decay3bodys, binningOnRadPhi);
1320+
Binning3BodyKF binningOnRadPhiKF{{mixingOpts.bins3BodyRadius, mixingOpts.bins3BodyPhi}, true};
1321+
buildMixedCandidates<aod::RedCollisions, aod::RedIUTracks>(decay3bodys, binningOnRadPhiKF);
13231322
} else {
1324-
Binning3BodyDCAfitter binningOnRadPhi{{mixingOpts.bins3BodyRadius, mixingOpts.bins3BodyPhi}, true};
1325-
buildMixedCandidates<aod::RedCollisions, aod::RedIUTracks>(decay3bodys, binningOnRadPhi);
1323+
Binning3BodyDCAfitter binningOnRadPhiDCA{{mixingOpts.bins3BodyRadius, mixingOpts.bins3BodyPhi}, true};
1324+
buildMixedCandidates<aod::RedCollisions, aod::RedIUTracks>(decay3bodys, binningOnRadPhiDCA);
13261325
}
13271326
}
13281327

PWGLF/TableProducer/Nuspex/reduced3bodyCreator.cxx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ struct reduced3bodyCreator {
8888
o2::aod::pidtofgeneric::TofPidNewCollision<TrackExtPIDIUwithEvTimes::iterator> bachelorTOFPID;
8989

9090
Configurable<bool> event_sel8_selection{"event_sel8_selection", true, "event selection count post sel8 cut"};
91-
Configurable<bool> mc_event_selection{"mc_event_selection", true, "mc event selection count post kIsTriggerTVX and kNoTimeFrameBorder"};
9291
Configurable<bool> event_posZ_selection{"event_posZ_selection", true, "event selection count post poZ cut"};
9392
// CCDB options
9493
Configurable<std::string> ccdburl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
@@ -285,7 +284,7 @@ struct reduced3bodyCreator {
285284
//------------------------------------------------------------------
286285
// function to fit KFParticle 3body vertex
287286
template <typename TKFParticle>
288-
void fit3bodyVertex(TKFParticle& kfpProton, TKFParticle& kfpPion, TKFParticle& kfpDeuteron, TKFParticle& KFHt)
287+
bool fit3bodyVertex(TKFParticle& kfpProton, TKFParticle& kfpPion, TKFParticle& kfpDeuteron, TKFParticle& KFHt)
289288
{
290289
// Construct 3body vertex
291290
int nDaughters3body = 3;
@@ -295,9 +294,10 @@ struct reduced3bodyCreator {
295294
KFHt.Construct(Daughters3body, nDaughters3body);
296295
} catch (std::runtime_error& e) {
297296
LOG(debug) << "Failed to create Hyper triton 3-body vertex." << e.what();
298-
return;
297+
return false;
299298
}
300299
LOG(debug) << "Hypertriton vertex constructed.";
300+
return true;
301301
}
302302

303303
void process(ColwithEvTimesMultsCents const& collisions, TrackExtPIDIUwithEvTimes const&, aod::Decay3Bodys const& decay3bodys, aod::Tracked3Bodys const& tracked3bodys, aod::BCsWithTimestamps const&)
@@ -423,12 +423,18 @@ struct reduced3bodyCreator {
423423
kfpPion = createKFParticleFromTrackParCov(trackParCovPos, daughter0.sign(), constants::physics::MassPionCharged);
424424
}
425425
kfpDeuteron = createKFParticleFromTrackParCov(trackParCovBach, daughter2.sign(), constants::physics::MassDeuteron);
426-
// fit 3body vertex
426+
// fit 3body vertex and caclulate radius, phi, z position
427+
float radius, phi, posZ;
427428
KFParticle KFHt;
428-
fit3bodyVertex(kfpProton, kfpPion, kfpDeuteron, KFHt);
429-
// calculate radius and phi
430-
auto radius = std::hypot(KFHt.GetX(), KFHt.GetY());
431-
auto phi = RecoDecay::phi(KFHt.GetPx(), KFHt.GetPy());
429+
if (fit3bodyVertex(kfpProton, kfpPion, kfpDeuteron, KFHt)) {
430+
radius = std::hypot(KFHt.GetX(), KFHt.GetY());
431+
phi = std::atan2(KFHt.GetPx(), KFHt.GetPy());
432+
posZ = KFHt.GetZ();
433+
} else {
434+
radius = -999.;
435+
phi = -999.;
436+
posZ = -999.;
437+
}
432438

433439
// -------- get decay3body info with DCA fitter --------
434440
auto Track0 = getTrackParCov(daughter0);
@@ -457,7 +463,7 @@ struct reduced3bodyCreator {
457463
}
458464

459465
// fill 3body info table (KF and DCA fitter info)
460-
reduced3BodyInfo(radius, phi, KFHt.GetZ(), rVtx, phiVtx, zVtx, fTrackedClSizeVector[d3body.globalIndex()]);
466+
reduced3BodyInfo(radius, phi, posZ, rVtx, phiVtx, zVtx, fTrackedClSizeVector[d3body.globalIndex()]);
461467
} // end decay3body loop
462468

463469
registry.fill(HIST("hEventCounter"), 3.5, reducedCollisions.lastIndex() + 1);

0 commit comments

Comments
 (0)