CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SeedCombiner.cc
Go to the documentation of this file.
1 #include "SeedCombiner.h"
2 
7 
9 
13 
16 
20 
22 
24 
25 using namespace edm;
26 //using namespace reco;
27 
29  const edm::ParameterSet& cfg)
30  :
31  inputCollections_(cfg.getParameter<std::vector<edm::InputTag> >("seedCollections"))
32 {
33  produces<TrajectorySeedCollection>();
34  reKeing_=false;
35  if (cfg.exists("clusterRemovalInfos")){
36  clusterRemovalInfos_=cfg.getParameter<std::vector<edm::InputTag> >("clusterRemovalInfos");
37  if (clusterRemovalInfos_.size()!=0 && clusterRemovalInfos_.size()==inputCollections_.size()) reKeing_=true;
38  }
39 }
40 
41 
43 {
44 }
45 
46 
48 {
49  // Read inputs, and count total seeds
50  size_t ninputs = inputCollections_.size();
51  size_t nseeds = 0;
52  std::vector<Handle<TrajectorySeedCollection > > seedCollections(ninputs);
53  for (size_t i = 0; i < ninputs; ++i) {
54  ev.getByLabel(inputCollections_[i], seedCollections[i]);
55  nseeds += seedCollections[i]->size();
56  }
57 
58  // Prepare output collections, with the correct capacity
59  std::auto_ptr<TrajectorySeedCollection> result(new TrajectorySeedCollection());
60  result->reserve( nseeds );
61 
62  // Write into output collection
63  unsigned int iSC=0,iSC_max=seedCollections.size();
64  for (;iSC!=iSC_max;++iSC){
65  Handle<TrajectorySeedCollection> & collection=seedCollections[iSC];
66  if (reKeing_ && !(clusterRemovalInfos_[iSC]==edm::InputTag(""))){
68 
69  for (TrajectorySeedCollection::const_iterator iS=collection->begin();
70  iS!=collection->end();++iS){
71  TrajectorySeed::recHitContainer newRecHitContainer;
72  newRecHitContainer.reserve(iS->nHits());
73  TrajectorySeed::const_iterator iH=iS->recHits().first;
74  TrajectorySeed::const_iterator iH_end=iS->recHits().second;
75  //loop seed rechits, copy over and rekey.
76  for (;iH!=iH_end;++iH){
77  newRecHitContainer.push_back(*iH);
78  refSetter.reKey(&newRecHitContainer.back());
79  }
80  result->push_back(TrajectorySeed(iS->startingState(),
81  std::move(newRecHitContainer),
82  iS->direction()));
83  }
84  }else{
85  //just insert the new seeds as they are
86  result->insert(result->end(), collection->begin(), collection->end());
87  }
88  }
89 
90  // Save result into the event
91  ev.put(result);
92 }
SeedCombiner(const edm::ParameterSet &cfg)
Definition: SeedCombiner.cc:28
T getParameter(std::string const &) const
std::vector< edm::InputTag > clusterRemovalInfos_
Definition: SeedCombiner.h:22
int i
Definition: DBlmapReader.cc:9
reference back()
Definition: OwnVector.h:320
std::vector< edm::InputTag > inputCollections_
Definition: SeedCombiner.h:20
void reKey(TrackingRecHit *hit) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
void push_back(D *&d)
Definition: OwnVector.h:273
std::vector< TrajectorySeed > TrajectorySeedCollection
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:94
recHitContainer::const_iterator const_iterator
tuple result
Definition: query.py:137
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
virtual void produce(edm::Event &ev, const edm::EventSetup &es) override
Definition: SeedCombiner.cc:47
void reserve(size_t)
Definition: OwnVector.h:267