34 {
35
36
37 int headIndex = pHead->
index();
38 particleMask[headIndex] = true;
39
40
43
46 int decayIndex = decayVtx->
index();
47 vertexMask[decayIndex] = true;
48 unsigned int nParents = decayVtx->nIncomingParticles();
49 unsigned int nChildren = decayVtx->nOutgoingParticles();
50
51
52 bool isHadVtx = true;
53 for (
unsigned int i=0;
i<nParents; ++
i) {
54 if (decayVtx->incomingParticle(i)==nullptr) continue;
55 int idabs = std::abs(decayVtx->incomingParticle(i)->pdgId());
56 isHadVtx = isHadVtx && (idabs<6 || idabs==21);
57 }
58 for (
unsigned int i=0;
i<nChildren; ++
i) {
59 if (decayVtx->outgoingParticle(i)==nullptr) continue;
60 int idabs = std::abs(decayVtx->outgoingParticle(i)->pdgId());
61 isHadVtx = isHadVtx && ((idabs>=80 && idabs<1000000) ||
62 idabs>9000000);
63 }
64
65 if( !isHadVtx || keepHadVtx ){
66
67 for (
unsigned int i=0;
i<nChildren; ++
i) {
68 if (decayVtx->outgoingParticle(i)==nullptr) continue;
69 int childIndex = decayVtx->outgoingParticle(i)->index();
71 }
72 }
73 }
74
77 int prodIndex = prodVtx->
index();
78 vertexMask[prodIndex] = true;
79 unsigned int nParents = prodVtx->nIncomingParticles();
80 unsigned int nSiblings = prodVtx->nOutgoingParticles();
81 unsigned int nChildren = nSiblings;
82
83
84 bool isHadVtx = true;
85 for (
unsigned int i=0;
i<nParents; ++
i) {
86 if (prodVtx->incomingParticle(i)==nullptr) continue;
87 int idabs = std::abs(prodVtx->incomingParticle(i)->pdgId());
88 isHadVtx = isHadVtx && (idabs<6 || idabs==21);
89 }
90 for (
unsigned int i=0;
i<nChildren; ++
i) {
91 if (prodVtx->outgoingParticle(i)==nullptr) continue;
92 int idabs = std::abs(prodVtx->outgoingParticle(i)->pdgId());
93 isHadVtx = isHadVtx && ((idabs>=80 && idabs<1000000) ||
94 idabs>9000000);
95 }
96
97 if( !isHadVtx || keepHadVtx ){
98
99 for (
unsigned int i=0;
i<nParents; ++
i) {
100 if (prodVtx->incomingParticle(i)==nullptr) continue;
101 int parentIndex = prodVtx->incomingParticle(i)->index();
102 particleMask[parentIndex] = true;
103 }
104
105 for (
unsigned int i=0;
i<nSiblings; ++
i) {
106 if (prodVtx->outgoingParticle(i)==nullptr) continue;
107 int siblingIndex = prodVtx->outgoingParticle(i)->index();
108 particleMask[siblingIndex] = true;
109 }
110 }
111 }
112 return;
113 }