CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
pflow::importers::TrackFromParentImporter< Collection, Adaptor > Class Template Reference

#include <TrackFromParentImporter.h>

Inheritance diagram for pflow::importers::TrackFromParentImporter< Collection, Adaptor >:
BlockElementImporterBase

Public Member Functions

void importToBlock (const edm::Event &, ElementList &) const override
 
 TrackFromParentImporter (const edm::ParameterSet &conf, edm::ConsumesCollector &sumes)
 
- Public Member Functions inherited from BlockElementImporterBase
 BlockElementImporterBase (const edm::ParameterSet &conf, edm::ConsumesCollector &sumes)
 
 BlockElementImporterBase (const BlockElementImporterBase &)=delete
 
const std::string & name () const
 
BlockElementImporterBaseoperator= (const BlockElementImporterBase &)=delete
 
virtual void updateEventSetup (const edm::EventSetup &)
 

Private Attributes

edm::EDGetTokenT< Collection > _src
 

Additional Inherited Members

- Public Types inherited from BlockElementImporterBase
typedef std::vector
< std::unique_ptr
< reco::PFBlockElement > > 
ElementList
 

Detailed Description

template<class Collection, class Adaptor = noop::ParentCollectionAdaptor<Collection>>
class pflow::importers::TrackFromParentImporter< Collection, Adaptor >

Definition at line 31 of file TrackFromParentImporter.h.

Constructor & Destructor Documentation

template<class Collection , class Adaptor = noop::ParentCollectionAdaptor<Collection>>
pflow::importers::TrackFromParentImporter< Collection, Adaptor >::TrackFromParentImporter ( const edm::ParameterSet conf,
edm::ConsumesCollector sumes 
)
inline

Definition at line 33 of file TrackFromParentImporter.h.

34  :
35  BlockElementImporterBase(conf,sumes),
36  _src(sumes.consumes<Collection>(conf.getParameter<edm::InputTag>("source"))) {}
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
BlockElementImporterBase(const edm::ParameterSet &conf, edm::ConsumesCollector &sumes)

Member Function Documentation

template<class Collection , class Adaptor >
void pflow::importers::TrackFromParentImporter< Collection, Adaptor >::importToBlock ( const edm::Event e,
BlockElementImporterBase::ElementList elems 
) const
overridevirtual

Implements BlockElementImporterBase.

Definition at line 48 of file TrackFromParentImporter.h.

References a, HLT_25ns14e33_v1_cff::distance, edm::Event::getByToken(), NULL, and reco::PFBlockElement::TRACK.

49  {
51  edm::Handle<Collection> pfparents;
52  e.getByToken(_src,pfparents);
53  elems.reserve(elems.size() + 2*pfparents->size());
54  // setup our elements so that all the SCs are grouped together
55  auto TKs_end = std::partition(elems.begin(),elems.end(),
56  [](const ElementType& a){
57  return a->type() == reco::PFBlockElement::TRACK;
58  });
59  // insert tracks into the element list, updating tracks that exist already
60  auto bpar = pfparents->cbegin();
61  auto epar = pfparents->cend();
62  edm::Ref<Collection> parentRef;
63  reco::PFBlockElement* trkElem = NULL;
64  for( auto pfparent = bpar; pfparent != epar; ++pfparent ) {
65  if( Adaptor::check_importable(*pfparent) ) {
66  parentRef = edm::Ref<Collection>(pfparents,std::distance(bpar,pfparent));
67  const auto& pftracks = Adaptor::get_track_refs(*pfparent);
68  for( const auto& pftrack : pftracks ) {
69  auto tk_elem = std::find_if(elems.begin(),TKs_end,
70  [&](const ElementType& a){
71  return ( a->trackRef() ==
72  pftrack->trackRef() );
73  });
74  if( tk_elem != TKs_end ) { // if found flag the track, otherwise import
75  Adaptor::set_element_info(tk_elem->get(),parentRef);
76  } else {
77  trkElem = new reco::PFBlockElementTrack(pftrack);
78  Adaptor::set_element_info(trkElem,parentRef);
79  TKs_end = elems.insert(TKs_end,ElementType(trkElem));
80  ++TKs_end;
81  }
82  }
83  }
84  }// loop on tracking coming from common parent
85  elems.shrink_to_fit();
86  }
Abstract base class for a PFBlock element (track, cluster...)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
#define NULL
Definition: scimark2.h:8
Container::value_type value_type
double a
Definition: hdecay.h:121

Member Data Documentation

template<class Collection , class Adaptor = noop::ParentCollectionAdaptor<Collection>>
edm::EDGetTokenT<Collection> pflow::importers::TrackFromParentImporter< Collection, Adaptor >::_src
private

Definition at line 42 of file TrackFromParentImporter.h.