IDTPM2::IFinder< T > Node1 IDTPM2::IFinder< T >   + ~IFinder() + findAncestor() + predicate() Node2 IDTPM2::GenericAncestorFinder < T, PdgIdHelper< T > > - m_predicate + GenericAncestorFinder() + predicate() + findAncestor() Node1->Node2 Node4 IDTPM2::GenericAncestorFinder < T, bool(*)(const T *) > - m_predicate + GenericAncestorFinder() + predicate() + findAncestor() Node1->Node4 Node5 IDTPM2::GenericAncestorFinder < T, Predicate > - m_predicate + GenericAncestorFinder() + predicate() Node1->Node5 Node7 IDTPM2::HadronAncestorFinder< T > - m_predicate + HadronAncestorFinder() + predicate() Node1->Node7 Node3 IDTPM2::PdgAncestorFinder< T >   + PdgAncestorFinder() Node2->Node3 Node6 IDTPM2::PredicateAncestor Finder< T, P >   + PredicateAncestorFinder() Node5->Node6