Skip to content

Commit ad9a2f5

Browse files
[PWGLF] Fix derived data production + adapt analysis task (#7373)
* Fix derived data production + adapt analysis task * Fix duplicate entries + rework the processGenerated logic + add histo for event loss estimation * Fix (unsorted) preslice + fix double MC particle association * Enable all event selections in MC + add MC information on mother particle * Add histograms for event loss estimation * Add option to access casc. mom. info at prim. vtx * Remove obsolote event selections * Remove debugging "printf" * Please consider the following formating changes * Please consider the following formatting changes * Please consider the following formatting changes * Please consider the following formatting changes * Please consider the following warning fixes * Please consider the following warning fixes
1 parent 57854fb commit ad9a2f5

8 files changed

Lines changed: 617 additions & 154 deletions

File tree

PWGLF/DataModel/LFStrangenessTables.h

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "Common/DataModel/Multiplicity.h"
2121
#include "Common/DataModel/Centrality.h"
2222
#include "Common/DataModel/Qvectors.h"
23+
#include "Common/DataModel/McCollisionExtra.h"
2324
#include "PWGLF/DataModel/EPCalibrationTables.h"
2425

2526
namespace o2::aod
@@ -294,6 +295,9 @@ DECLARE_SOA_COLUMN(PzPosMC, pzPosMC, float); //! V0 positive
294295
DECLARE_SOA_COLUMN(PxNegMC, pxNegMC, float); //! V0 positive daughter px (GeV/c)
295296
DECLARE_SOA_COLUMN(PyNegMC, pyNegMC, float); //! V0 positive daughter py (GeV/c)
296297
DECLARE_SOA_COLUMN(PzNegMC, pzNegMC, float); //! V0 positive daughter pz (GeV/c)
298+
DECLARE_SOA_COLUMN(PxMC, pxMC, float); //! V0 px (GeV/c)
299+
DECLARE_SOA_COLUMN(PyMC, pyMC, float); //! V0 py (GeV/c)
300+
DECLARE_SOA_COLUMN(PzMC, pzMC, float); //! V0 pz (GeV/c)
297301

298302
//______________________________________________________
299303
// Binned content for generated particles: derived data
@@ -464,6 +468,22 @@ DECLARE_SOA_DYNAMIC_COLUMN(IsPhotonTPConly, isPhotonTPConly, //! is tpc-only pho
464468
[](uint8_t V0Type) -> bool { return V0Type & (1 << 1); });
465469
DECLARE_SOA_DYNAMIC_COLUMN(IsCollinear, isCollinear, //! is collinear V0
466470
[](uint8_t V0Type) -> bool { return V0Type & (1 << 2); });
471+
472+
DECLARE_SOA_DYNAMIC_COLUMN(RapidityMC, rapidityMC, //! rapidity (0:K0, 1:L, 2:Lbar)
473+
[](float PxMC, float PyMC, float PzMC, int value) -> float {
474+
if (value == 0)
475+
return RecoDecay::y(std::array{PxMC, PyMC, PzMC}, o2::constants::physics::MassKaonNeutral);
476+
if (value == 1 || value == 2)
477+
return RecoDecay::y(std::array{PxMC, PyMC, PzMC}, o2::constants::physics::MassLambda);
478+
return 0.0f;
479+
});
480+
481+
DECLARE_SOA_DYNAMIC_COLUMN(NegativePtMC, negativeptMC, //! negative daughter pT
482+
[](float pxnegMC, float pynegMC) -> float { return RecoDecay::sqrtSumOfSquares(pxnegMC, pynegMC); });
483+
DECLARE_SOA_DYNAMIC_COLUMN(PositivePtMC, positiveptMC, //! positive daughter pT
484+
[](float pxposMC, float pyposMC) -> float { return RecoDecay::sqrtSumOfSquares(pxposMC, pyposMC); });
485+
DECLARE_SOA_DYNAMIC_COLUMN(PtMC, ptMC, //! V0 pT
486+
[](float pxMC, float pyMC) -> float { return RecoDecay::sqrtSumOfSquares(pxMC, pyMC); });
467487
} // namespace v0data
468488

469489
DECLARE_SOA_TABLE(V0Indices, "AOD", "V0INDEX", //! index table when using AO2Ds
@@ -666,6 +686,19 @@ DECLARE_SOA_TABLE_VERSIONED(V0MCCores_001, "AOD", "V0MCCORE", 1, //! debug infor
666686
v0data::PxPosMC, v0data::PyPosMC, v0data::PzPosMC,
667687
v0data::PxNegMC, v0data::PyNegMC, v0data::PzNegMC);
668688

689+
DECLARE_SOA_TABLE_VERSIONED(V0MCCores_002, "AOD", "V0MCCORE", 2, //! debug information
690+
v0data::ParticleIdMC, //! MC properties of the V0 for posterior analysis
691+
v0data::PDGCode, v0data::PDGCodeMother,
692+
v0data::PDGCodePositive, v0data::PDGCodeNegative,
693+
v0data::IsPhysicalPrimary, v0data::XMC, v0data::YMC, v0data::ZMC,
694+
v0data::PxPosMC, v0data::PyPosMC, v0data::PzPosMC,
695+
v0data::PxNegMC, v0data::PyNegMC, v0data::PzNegMC,
696+
v0data::PxMC, v0data::PyMC, v0data::PzMC,
697+
v0data::RapidityMC<v0data::PxMC, v0data::PyMC, v0data::PzMC>,
698+
v0data::NegativePtMC<v0data::PxNegMC, v0data::PyNegMC>,
699+
v0data::PositivePtMC<v0data::PxPosMC, v0data::PyPosMC>,
700+
v0data::PtMC<v0data::PxMC, v0data::PyMC, v0data::PzMC>);
701+
669702
DECLARE_SOA_TABLE(StoredV0MCCores_000, "AOD", "V0MCCORE", //! MC properties of the V0 for posterior analysis
670703
v0data::PDGCode, v0data::PDGCodeMother,
671704
v0data::PDGCodePositive, v0data::PDGCodeNegative,
@@ -683,6 +716,16 @@ DECLARE_SOA_TABLE_VERSIONED(StoredV0MCCores_001, "AOD", "V0MCCORE", 1, //! debug
683716
v0data::PxNegMC, v0data::PyNegMC, v0data::PzNegMC,
684717
o2::soa::Marker<1>);
685718

719+
DECLARE_SOA_TABLE_VERSIONED(StoredV0MCCores_002, "AOD", "V0MCCORE", 2, //! debug information
720+
v0data::ParticleIdMC, //! MC properties of the V0 for posterior analysis
721+
v0data::PDGCode, v0data::PDGCodeMother,
722+
v0data::PDGCodePositive, v0data::PDGCodeNegative,
723+
v0data::IsPhysicalPrimary, v0data::XMC, v0data::YMC, v0data::ZMC,
724+
v0data::PxPosMC, v0data::PyPosMC, v0data::PzPosMC,
725+
v0data::PxNegMC, v0data::PyNegMC, v0data::PzNegMC,
726+
v0data::PxMC, v0data::PyMC, v0data::PzMC,
727+
o2::soa::Marker<1>);
728+
686729
DECLARE_SOA_TABLE(V0MCCollRefs, "AOD", "V0MCCOLLREF", //! refers MC candidate back to proper MC Collision
687730
o2::soa::Index<>, v0data::StraMCCollisionId, o2::soa::Marker<2>);
688731

@@ -696,8 +739,8 @@ DECLARE_SOA_TABLE(V0MCMothers, "AOD", "V0MCMOTHER", //! optional table for MC mo
696739
DECLARE_SOA_TABLE(StoredV0MCMothers, "AOD1", "V0MCMOTHER", //! optional table for MC mothers
697740
o2::soa::Index<>, v0data::MotherMCPartId, o2::soa::Marker<1>);
698741

699-
using V0MCCores = V0MCCores_001;
700-
using StoredV0MCCores = StoredV0MCCores_001;
742+
using V0MCCores = V0MCCores_002;
743+
using StoredV0MCCores = StoredV0MCCores_002;
701744

702745
using V0Index = V0Indices::iterator;
703746
using V0Core = V0Cores::iterator;
@@ -708,6 +751,7 @@ using V0fCDatas = soa::Join<V0fCIndices, V0fCTrackXs, V0fCCores>;
708751
using V0fCData = V0fCDatas::iterator;
709752
using V0MCDatas = soa::Join<V0MCCores, V0MCMothers>;
710753
using V0MCData = V0MCDatas::iterator;
754+
using V0MCCore = V0MCCores::iterator;
711755

712756
// definitions of indices for interlink tables
713757
namespace v0data
@@ -997,6 +1041,24 @@ DECLARE_SOA_DYNAMIC_COLUMN(BachelorEta, bacheloreta, //! bachelor daughter eta
9971041
[](float PxPos, float PyPos, float PzPos) -> float { return RecoDecay::eta(std::array{PxPos, PyPos, PzPos}); });
9981042
DECLARE_SOA_DYNAMIC_COLUMN(BachelorPhi, bachelorphi, //! bachelor daughter phi
9991043
[](float PxPos, float PyPos) -> float { return RecoDecay::phi(PxPos, PyPos); });
1044+
1045+
DECLARE_SOA_DYNAMIC_COLUMN(RapidityMC, rapidityMC, //! rapidity (0, 1: Xi; 2, 3: Omega)
1046+
[](float PxMC, float PyMC, float PzMC, int value) -> float {
1047+
if (value == 0 || value == 1)
1048+
return RecoDecay::y(std::array{PxMC, PyMC, PzMC}, o2::constants::physics::MassXiMinus);
1049+
if (value == 2 || value == 3)
1050+
return RecoDecay::y(std::array{PxMC, PyMC, PzMC}, o2::constants::physics::MassOmegaMinus);
1051+
return 0.0f;
1052+
});
1053+
1054+
DECLARE_SOA_DYNAMIC_COLUMN(NegativePtMC, negativeptMC, //! negative daughter pT
1055+
[](float pxNegMC, float pyNegMC) -> float { return RecoDecay::sqrtSumOfSquares(pxNegMC, pyNegMC); });
1056+
DECLARE_SOA_DYNAMIC_COLUMN(PositivePtMC, positiveptMC, //! positive daughter pT
1057+
[](float pxPosMC, float pyPosMC) -> float { return RecoDecay::sqrtSumOfSquares(pxPosMC, pyPosMC); });
1058+
DECLARE_SOA_DYNAMIC_COLUMN(BachelorPtMC, bachelorptMC, //! bachelor daughter pT
1059+
[](float pxBachMC, float pyBachMC) -> float { return RecoDecay::sqrtSumOfSquares(pxBachMC, pyBachMC); });
1060+
DECLARE_SOA_DYNAMIC_COLUMN(PtMC, ptMC, //! cascade pT
1061+
[](float pxMC, float pyMC) -> float { return RecoDecay::sqrtSumOfSquares(pxMC, pyMC); });
10001062
} // namespace cascdata
10011063

10021064
//______________________________________________________
@@ -1190,7 +1252,12 @@ DECLARE_SOA_TABLE(CascMCCores, "AOD", "CASCMCCORE", //! bachelor-baryon correlat
11901252
cascdata::PxPosMC, cascdata::PyPosMC, cascdata::PzPosMC,
11911253
cascdata::PxNegMC, cascdata::PyNegMC, cascdata::PzNegMC,
11921254
cascdata::PxBachMC, cascdata::PyBachMC, cascdata::PzBachMC,
1193-
cascdata::PxMC, cascdata::PyMC, cascdata::PzMC);
1255+
cascdata::PxMC, cascdata::PyMC, cascdata::PzMC,
1256+
cascdata::RapidityMC<cascdata::PxMC, cascdata::PyMC, cascdata::PzMC>,
1257+
cascdata::NegativePtMC<cascdata::PxNegMC, cascdata::PyNegMC>,
1258+
cascdata::PositivePtMC<cascdata::PxPosMC, cascdata::PyPosMC>,
1259+
cascdata::BachelorPtMC<cascdata::PxBachMC, cascdata::PyBachMC>,
1260+
cascdata::PtMC<cascdata::PxMC, cascdata::PyMC>);
11941261

11951262
namespace cascdata
11961263
{

PWGLF/TableProducer/Strangeness/Converters/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,9 @@ o2physics_add_dpl_workflow(strarawcentsconverter2v4
2727
o2physics_add_dpl_workflow(v0coresconverter
2828
SOURCES v0coresconverter.cxx
2929
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
30+
COMPONENT_NAME Analysis)
31+
32+
o2physics_add_dpl_workflow(v0coresconverter2
33+
SOURCES v0coresconverter2.cxx
34+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
3035
COMPONENT_NAME Analysis)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
#include "Framework/runDataProcessing.h"
12+
#include "Framework/AnalysisTask.h"
13+
#include "Framework/AnalysisDataModel.h"
14+
#include "PWGLF/DataModel/LFStrangenessTables.h"
15+
16+
using namespace o2;
17+
using namespace o2::framework;
18+
19+
// Converts V0 version 001 to 002
20+
struct v0coresconverter2 {
21+
Produces<aod::V0MCCores_002> v0MCCores_002;
22+
23+
void process(aod::V0MCCores_001 const& v0MCCores_001)
24+
{
25+
for (auto& values : v0MCCores_001) {
26+
v0MCCores_002(0,
27+
values.pdgCode(),
28+
values.pdgCodeMother(),
29+
values.pdgCodePositive(),
30+
values.pdgCodeNegative(),
31+
values.isPhysicalPrimary(),
32+
values.xMC(),
33+
values.yMC(),
34+
values.zMC(),
35+
values.pxPosMC(),
36+
values.pyPosMC(),
37+
values.pzPosMC(),
38+
values.pxNegMC(),
39+
values.pyNegMC(),
40+
values.pzNegMC(),
41+
values.pxPosMC() + values.pxNegMC(),
42+
values.pyPosMC() + values.pyNegMC(),
43+
values.pzPosMC() + values.pzNegMC());
44+
}
45+
}
46+
};
47+
48+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
49+
{
50+
return WorkflowSpec{
51+
adaptAnalysisTask<v0coresconverter2>(cfgc)};
52+
}

PWGLF/TableProducer/Strangeness/cascadebuilder.cxx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ struct cascadeBuilder {
194194
Configurable<bool> kfDoDCAFitterPreMinimV0{"kfDoDCAFitterPreMinimV0", true, "KF: do DCAFitter pre-optimization before KF fit to include material corrections for V0"};
195195
Configurable<bool> kfDoDCAFitterPreMinimCasc{"kfDoDCAFitterPreMinimCasc", true, "KF: do DCAFitter pre-optimization before KF fit to include material corrections for Xi"};
196196

197+
// for using cascade momentum at prim. vtx
198+
Configurable<bool> useCascadeMomentumAtPrimVtx{"useCascadeMomentumAtPrimVtx", false, "if enabled, store cascade momentum at prim. vtx instead of decay point (= default)"};
197199
// for topo var QA
198200
struct : ConfigurableGroup {
199201
ConfigurableAxis axisTopoVarPointingAngle{"axisConfigurations.axisTopoVarPointingAngle", {50, 0.0, 1.0}, "pointing angle"};
@@ -1090,6 +1092,13 @@ struct cascadeBuilder {
10901092
o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, lCascadeTrack, 2.f, matCorrCascade, &dcaInfo);
10911093
cascadecandidate.cascDCAxy = dcaInfo[0];
10921094
cascadecandidate.cascDCAz = dcaInfo[1];
1095+
if (useCascadeMomentumAtPrimVtx) {
1096+
lCascadeTrack.getPxPyPzGlo(cascadecandidate.cascademom);
1097+
} else {
1098+
cascadecandidate.cascademom[0] = cascadecandidate.bachP[0] + cascadecandidate.v0mompos[0] + cascadecandidate.v0momneg[0];
1099+
cascadecandidate.cascademom[1] = cascadecandidate.bachP[1] + cascadecandidate.v0mompos[1] + cascadecandidate.v0momneg[1];
1100+
cascadecandidate.cascademom[2] = cascadecandidate.bachP[2] + cascadecandidate.v0mompos[2] + cascadecandidate.v0momneg[2];
1101+
}
10931102

10941103
// Calculate masses a priori
10951104
cascadecandidate.mXi = RecoDecay::m(array{array{cascadecandidate.bachP[0], cascadecandidate.bachP[1], cascadecandidate.bachP[2]}, array{v0.pxpos() + v0.pxneg(), v0.pypos() + v0.pyneg(), v0.pzpos() + v0.pzneg()}}, array{o2::constants::physics::MassPionCharged, o2::constants::physics::MassLambda});
@@ -1555,9 +1564,7 @@ struct cascadeBuilder {
15551564
cascadecandidate.v0mompos[0], cascadecandidate.v0mompos[1], cascadecandidate.v0mompos[2],
15561565
cascadecandidate.v0momneg[0], cascadecandidate.v0momneg[1], cascadecandidate.v0momneg[2],
15571566
cascadecandidate.bachP[0], cascadecandidate.bachP[1], cascadecandidate.bachP[2],
1558-
cascadecandidate.bachP[0] + cascadecandidate.v0mompos[0] + cascadecandidate.v0momneg[0], // <--- redundant but ok
1559-
cascadecandidate.bachP[1] + cascadecandidate.v0mompos[1] + cascadecandidate.v0momneg[1], // <--- redundant but ok
1560-
cascadecandidate.bachP[2] + cascadecandidate.v0mompos[2] + cascadecandidate.v0momneg[2], // <--- redundant but ok
1567+
cascadecandidate.cascademom[0], cascadecandidate.cascademom[1], cascadecandidate.cascademom[2],
15611568
cascadecandidate.v0dcadau, cascadecandidate.dcacascdau,
15621569
cascadecandidate.v0dcapostopv, cascadecandidate.v0dcanegtopv,
15631570
cascadecandidate.bachDCAxy, cascadecandidate.cascDCAxy, cascadecandidate.cascDCAz); // <--- no corresponding stratrack information available

PWGLF/TableProducer/Strangeness/cascademcbuilder.cxx

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ struct cascademcbuilder {
7676
int pdgCodeNegative;
7777
int pdgCodeBachelor;
7878
bool isPhysicalPrimary;
79+
int processPositive = -1;
80+
int processNegative = -1;
81+
int processBachelor = -1;
7982
std::array<float, 3> xyz;
8083
std::array<float, 3> lxyz;
8184
std::array<float, 3> posP;
@@ -89,8 +92,6 @@ struct cascademcbuilder {
8992
mcCascinfo thisInfo;
9093
//*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
9194

92-
void init(InitContext const&) {}
93-
9495
template <typename TCascadeTable, typename TMCParticleTable>
9596
void generateCascadeMCinfo(TCascadeTable cascTable, TMCParticleTable mcParticles)
9697
{
@@ -142,6 +143,9 @@ struct cascademcbuilder {
142143
thisInfo.bachP[0] = lMCBachTrack.px();
143144
thisInfo.bachP[1] = lMCBachTrack.py();
144145
thisInfo.bachP[2] = lMCBachTrack.pz();
146+
thisInfo.processPositive = lMCPosTrack.getProcess();
147+
thisInfo.processNegative = lMCNegTrack.getProcess();
148+
thisInfo.processBachelor = lMCBachTrack.getProcess();
145149

146150
// Step 1: check if the mother is the same, go up a level
147151
if (lMCNegTrack.has_mothers() && lMCPosTrack.has_mothers()) {
@@ -194,8 +198,8 @@ struct cascademcbuilder {
194198
thisInfo.label, thisInfo.motherLabel);
195199

196200
// Mark mcParticle as recoed (no searching necessary afterwards)
197-
if (thisInfo.motherLabel > -1) {
198-
mcParticleIsReco[thisInfo.motherLabel] = true;
201+
if (thisInfo.label > -1) {
202+
mcParticleIsReco[thisInfo.label] = true;
199203
}
200204

201205
if (populateCascMCCoresSymmetric) {
@@ -216,10 +220,7 @@ struct cascademcbuilder {
216220
// step 1: check if this element is already provided in the table
217221
// using the packedIndices variable calculated above
218222
for (uint32_t ii = 0; ii < mcCascinfos.size(); ii++) {
219-
if (
220-
thisInfo.mcParticlePositive == mcCascinfos[ii].mcParticlePositive && mcCascinfos[ii].mcParticlePositive > 0 &&
221-
thisInfo.mcParticleNegative == mcCascinfos[ii].mcParticleNegative && mcCascinfos[ii].mcParticleNegative > 0 &&
222-
thisInfo.mcParticleBachelor == mcCascinfos[ii].mcParticleBachelor && mcCascinfos[ii].mcParticleBachelor > 0) {
223+
if (thisInfo.label == mcCascinfos[ii].label && mcCascinfos[ii].label > -1) {
223224
thisCascMCCoreIndex = ii;
224225
break; // this exists already in list
225226
}
@@ -272,6 +273,54 @@ struct cascademcbuilder {
272273
thisInfo.momentum[0] = mcParticle.px();
273274
thisInfo.momentum[1] = mcParticle.py();
274275
thisInfo.momentum[2] = mcParticle.pz();
276+
thisInfo.label = mcParticle.globalIndex();
277+
278+
if (mcParticle.has_daughters()) {
279+
auto const& daughters = mcParticle.template daughters_as<aod::McParticles>();
280+
for (auto& dau : daughters) {
281+
if (dau.getProcess() != 4) // check whether the daughter comes from a decay
282+
continue;
283+
284+
if (TMath::Abs(dau.pdgCode()) == 211 || TMath::Abs(dau.pdgCode()) == 321) {
285+
thisInfo.pdgCodeBachelor = dau.pdgCode();
286+
thisInfo.bachP[0] = dau.px();
287+
thisInfo.bachP[1] = dau.py();
288+
thisInfo.bachP[2] = dau.pz();
289+
thisInfo.xyz[0] = dau.vx();
290+
thisInfo.xyz[1] = dau.vy();
291+
thisInfo.xyz[2] = dau.vz();
292+
thisInfo.mcParticleBachelor = dau.globalIndex();
293+
}
294+
if (TMath::Abs(dau.pdgCode()) == 2212) {
295+
thisInfo.pdgCodeV0 = dau.pdgCode();
296+
297+
for (auto& v0Dau : dau.template daughters_as<aod::McParticles>()) {
298+
if (v0Dau.getProcess() != 4)
299+
continue;
300+
301+
if (v0Dau.pdgCode() > 0) {
302+
thisInfo.pdgCodePositive = v0Dau.pdgCode();
303+
thisInfo.processPositive = v0Dau.getProcess();
304+
thisInfo.posP[0] = v0Dau.px();
305+
thisInfo.posP[1] = v0Dau.py();
306+
thisInfo.posP[2] = v0Dau.pz();
307+
thisInfo.lxyz[0] = v0Dau.vx();
308+
thisInfo.lxyz[1] = v0Dau.vy();
309+
thisInfo.lxyz[2] = v0Dau.vz();
310+
thisInfo.mcParticlePositive = v0Dau.globalIndex();
311+
}
312+
if (v0Dau.pdgCode() < 0) {
313+
thisInfo.pdgCodeNegative = v0Dau.pdgCode();
314+
thisInfo.processNegative = v0Dau.getProcess();
315+
thisInfo.negP[0] = v0Dau.px();
316+
thisInfo.negP[1] = v0Dau.py();
317+
thisInfo.negP[2] = v0Dau.pz();
318+
thisInfo.mcParticleNegative = v0Dau.globalIndex();
319+
}
320+
}
321+
}
322+
}
323+
}
275324

276325
// if I got here, it means this MC particle was not recoed and is of interest. Add it please
277326
mcCascinfos.push_back(thisInfo);

0 commit comments

Comments
 (0)