CMS 3D CMS Logo

ReducedRecHitCollectionProducer.cc
Go to the documentation of this file.
2 
6 
9 
12 
16 
18 
19 #include <iostream>
20 
22  recHitsToken_ = consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("recHitsLabel"));
23 
25  edm::vector_transform(iConfig.getParameter<std::vector<edm::InputTag>>("interestingDetIdCollections"),
26  [this](edm::InputTag const& tag) { return consumes<DetIdCollection>(tag); });
27 
28  reducedHitsCollection_ = iConfig.getParameter<std::string>("reducedHitsCollection");
29 
30  //register your products
31  produces<EcalRecHitCollection>(reducedHitsCollection_);
32 }
33 
35 
36 // ------------ method called to produce the data ------------
38  using namespace edm;
39  using namespace std;
40 
41  if (interestingDetIdCollections_.empty()) {
42  edm::LogError("ReducedRecHitCollectionProducer") << "VInputTag collections empty";
43  return;
44  }
45 
47  iEvent.getByToken(interestingDetIdCollections_[0], detIds);
48  std::vector<DetId> xtalsToStore((*detIds).size());
49  std::copy((*detIds).begin(), (*detIds).end(), xtalsToStore.begin());
50 
51  //Merging DetIds from different collections
52  for (unsigned int t = 1; t < interestingDetIdCollections_.size(); ++t) {
54  iEvent.getByToken(interestingDetIdCollections_[t], detId);
55  if (!detId.isValid()) {
56  Labels labels;
57  labelsForToken(interestingDetIdCollections_[t], labels);
58  edm::LogError("MissingInput") << "no reason to skip detid from : (" << labels.module << ", "
59  << labels.productInstance << ", " << labels.process << ")" << std::endl;
60  continue;
61  }
62 
63  for (unsigned int ii = 0; ii < (*detId).size(); ii++) {
64  if (std::find(xtalsToStore.begin(), xtalsToStore.end(), (*detId)[ii]) == xtalsToStore.end())
65  xtalsToStore.push_back((*detId)[ii]);
66  }
67  }
68 
69  Handle<EcalRecHitCollection> recHitsHandle;
70  iEvent.getByToken(recHitsToken_, recHitsHandle);
71  if (!recHitsHandle.isValid()) {
72  edm::LogError("ReducedRecHitCollectionProducer") << "RecHit collection not found";
73  return;
74  }
75 
76  //Create empty output collections
77  auto miniRecHitCollection = std::make_unique<EcalRecHitCollection>();
78 
79  for (unsigned int iCry = 0; iCry < xtalsToStore.size(); iCry++) {
80  EcalRecHitCollection::const_iterator iRecHit = recHitsHandle->find(xtalsToStore[iCry]);
81  if ((iRecHit != recHitsHandle->end()) &&
82  (miniRecHitCollection->find(xtalsToStore[iCry]) == miniRecHitCollection->end()))
83  miniRecHitCollection->push_back(*iRecHit);
84  }
85 
86  std::sort(xtalsToStore.begin(), xtalsToStore.end());
87  std::unique(xtalsToStore.begin(), xtalsToStore.end());
88 
89  // std::cout << "New Collection " << reducedHitsCollection_ << " size is " << miniRecHitCollection->size() << " original is " << recHitsHandle->size() << std::endl;
90  iEvent.put(std::move(miniRecHitCollection), reducedHitsCollection_);
91 }
SummaryClient_cfi.labels
labels
Definition: SummaryClient_cfi.py:61
edm::SortedCollection< EcalRecHit >::const_iterator
std::vector< EcalRecHit >::const_iterator const_iterator
Definition: SortedCollection.h:80
MessageLogger.h
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
ESHandle.h
ReducedRecHitCollectionProducer::~ReducedRecHitCollectionProducer
~ReducedRecHitCollectionProducer() override
Definition: ReducedRecHitCollectionProducer.cc:34
BasicCluster.h
edm
HLT enums.
Definition: AlignableModifier.h:19
EBDetId.h
EEDetId.h
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
edm::Handle
Definition: AssociativeIterator.h:50
ReducedRecHitCollectionProducer::ReducedRecHitCollectionProducer
ReducedRecHitCollectionProducer(const edm::ParameterSet &)
ctor
Definition: ReducedRecHitCollectionProducer.cc:21
BasicClusterFwd.h
GlobalPosition_Frontier_DevDB_cff.tag
tag
Definition: GlobalPosition_Frontier_DevDB_cff.py:11
ReducedRecHitCollectionProducer.h
ReducedRecHitCollectionProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
producer
Definition: ReducedRecHitCollectionProducer.cc:37
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::vector_transform
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
edm::ParameterSet
Definition: ParameterSet.h:47
ReducedRecHitCollectionProducer::recHitsToken_
edm::EDGetTokenT< EcalRecHitCollection > recHitsToken_
Definition: ReducedRecHitCollectionProducer.h:43
edm::SortedCollection::end
const_iterator end() const
Definition: SortedCollection.h:267
CaloTopologyRecord.h
iEvent
int iEvent
Definition: GenABIO.cc:224
ReducedRecHitCollectionProducer::reducedHitsCollection_
std::string reducedHitsCollection_
Definition: ReducedRecHitCollectionProducer.h:45
edm::EventSetup
Definition: EventSetup.h:57
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
CaloTopology.h
CaloSubdetectorTopology.h
edm::SortedCollection::find
iterator find(key_type k)
Definition: SortedCollection.h:240
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
tier0.unique
def unique(seq, keepstr=True)
Definition: tier0.py:24
transform.h
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
cuy.ii
ii
Definition: cuy.py:590
edm::InputTag
Definition: InputTag.h:15
ReducedRecHitCollectionProducer::interestingDetIdCollections_
std::vector< edm::EDGetTokenT< DetIdCollection > > interestingDetIdCollections_
Definition: ReducedRecHitCollectionProducer.h:44