43 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer, char>> track_wdhs;
45 track_wdhs.emplace_back(wdhk, ctx);
49 std::vector<SG::ReadDecorHandle<xAOD::JetContainer, std::vector<char>>> jet_rdhs;
51 jet_rdhs.emplace_back(rdhk, ctx);
58 for (
const auto track: *tracks) {
59 for (
auto& wdh: track_wdhs) {
69 for (
const auto jet: *jets) {
70 auto irdh = jet_rdhs.begin();
71 auto iwdh = track_wdhs.begin();
72 for (; irdh != jet_rdhs.end() && iwdh != track_wdhs.end(); ++irdh, ++iwdh) {
73 std::vector<char> values = (*irdh)(*jet);
74 auto& trackLinks = trackLinks_rdh(*
jet);
75 if (values.size() != trackLinks.size()) {
76 throw std::logic_error(
"Track aux task output size " + std::to_string(values.size()) +
" doesn't match the size of track list " + std::to_string(trackLinks.size()));
78 std::vector<ElementLink<xAOD::TrackParticleContainer>>
::const_iterator it = trackLinks.begin();
79 std::vector<char>::const_iterator ival = values.begin();
80 for (; it != trackLinks.end() && ival != values.end(); ++it, ++ival) {
81 (*iwdh)(***it) = *ival;
86 return StatusCode::SUCCESS;