28 return StatusCode::SUCCESS;
34 return StatusCode::SUCCESS;
41 ATH_MSG_ERROR(
"Tool is attempting to write a StoreGate key " <<
m_sgName <<
" which already exists. Please use a different key");
42 return StatusCode::FAILURE;
44 std::unique_ptr<std::vector<float> > masses(
new std::vector<float>());
48 return StatusCode::SUCCESS;
57 masses->push_back(0.0);
58 return StatusCode::FAILURE;
63 bool from2Collections(
false);
67 particles2=particleHdl2.
cptr();
68 from2Collections =
true;
74 unsigned int nEntries =
entries.size();
75 unsigned int nEntries2 = entries2.size();
78 if (!from2Collections) {
79 if ( (particles->size() != nEntries) || (particles->size() != nEntries2) || (nEntries!=nEntries2) ) {
80 ATH_MSG_ERROR(
"Branch sizes incompatible - returning zero. Check your selection strings.");
81 masses->push_back(0.0);
82 return StatusCode::FAILURE;
85 if (from2Collections) {
86 if ( (particles->size() != nEntries) || (particles2->
size() != nEntries2) ) {
87 ATH_MSG_ERROR(
"Branch sizes incompatible - returning zero. Check your selection strings.");
88 masses->push_back(0.0);
89 return StatusCode::FAILURE;
94 unsigned int outerIt, innerIt;
95 std::vector<std::pair<int, int> > pairs;
97 if (!from2Collections) {
98 for (outerIt=0; outerIt<nEntries; ++outerIt) {
99 for (innerIt=outerIt+1; innerIt<nEntries; ++innerIt) {
100 pairs.push_back({
static_cast<int>(outerIt),
static_cast<int>(innerIt)});
104 for (
const auto & [first, second]: pairs) {
105 if ( (
entries[first]==1 && entries2[second]==1) || (entries2[first]==1 &&
entries[second]==1) ) {
107 ((*particles)[second])->p4().Vect(),
110 masses->push_back(mass);
116 if (from2Collections) {
117 for (outerIt=0; outerIt<nEntries; ++outerIt) {
118 if (
entries[outerIt]==0)
continue;
119 for (innerIt=0; innerIt<nEntries2; ++innerIt) {
120 if (entries2[innerIt]==0)
continue;
121 pairs.push_back({
static_cast<int>(outerIt),
static_cast<int>(innerIt)});
125 for (
const auto & [first, second]: pairs) {
127 ((*particles2)[second])->p4().Vect(),
130 masses->push_back(mass);
134 return StatusCode::SUCCESS;
139 TLorentzVector p1(v1, M1 > 0 ? std::hypot(M1, v1.Mag()) : v1.Mag());
140 TLorentzVector p2(v2, M2 > 0 ? std::hypot(M2, v2.Mag()) : v2.Mag());
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
size_type size() const noexcept
Returns the number of elements in the collection.
const_pointer_type cptr()
Dereference the pointer.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
bool contains(const std::string &s, const std::string ®x)
does a string contain the substring
@ kInvariantMassToolParser1
@ kInvariantMassToolParser2
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.