53 {
54
55
58 deltaRs->push_back(0.0);
59 return StatusCode::FAILURE;
60 }
61 bool secondContainer(false);
63
64
66
68 if (secondContainer) {
69 SG::ReadHandle<xAOD::IParticleContainer> particleHdl2{
m_containerName2, ctx};
70 secondParticles=particleHdl2.
cptr();
71 }
72
73
74 std::vector<int>
entries, entries2;
78
81 return StatusCode::FAILURE;
82 }
83 unsigned int nEntries2(0);
84 if (secondContainer) {
86 else {entries2.assign(secondParticles->size(),1);}
87 nEntries2 = entries2.size();
88
89 if (secondParticles->size() != nEntries2 ) {
91 return StatusCode::FAILURE;
92 }
93 }
94
95
96 std::vector<std::pair<unsigned, unsigned>>
pairs;
97 if (!secondContainer) {
98 for (
unsigned outerIt=0; outerIt<
nEntries; ++outerIt) {
99 for (
unsigned innerIt=outerIt+1; innerIt<
nEntries; ++innerIt) {
101 pairs.emplace_back(outerIt, innerIt);
102 }
103 }
104 }
105 }
106
107 if (secondContainer) {
108 for (
unsigned coll1It=0; coll1It<
nEntries; ++coll1It) {
109 for (unsigned coll2It=0; coll2It<nEntries2; ++coll2It) {
110
111 if (
entries[coll1It]==1 && entries2[coll2It]==1) {
112 pairs.emplace_back(coll1It, coll2It);
113 }
114 }
115 }
116 }
117
118
119 for (const auto & [first, second] : pairs) {
120 if (!secondContainer) {
121 float phi1f = ((*particles)[
first])->p4().Phi();
float phi2f = ((*particles)[
second])->p4().Phi();
122 float eta1f = ((*particles)[
first])->p4().Eta();
float eta2f = ((*particles)[
second])->p4().Eta();
124 deltaRs->push_back(
deltaR);
125 }
126 if (secondContainer) {
127 float phi1f = ((*particles)[
first])->p4().Phi();
float phi2f = ((*secondParticles)[
second])->p4().Phi();
128 float eta1f = ((*particles)[
first])->p4().Eta();
float eta2f = ((*secondParticles)[
second])->p4().Eta();
130 deltaRs->push_back(
deltaR);
131 }
132 }
133
134 return StatusCode::SUCCESS;
135
136 }
#define ATH_MSG_WARNING(x)
const_pointer_type cptr()
Dereference the pointer.
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.