CMS 3D CMS Logo

EgammaIsoHcalDetIdCollectionProducer.cc
Go to the documentation of this file.
2 
5 
8 
10  hcalHitSelector_(iConfig.getParameter<edm::ParameterSet>("hitSelection"))
11 {
12 
13  recHitsToken_ =
14  consumes<HBHERecHitCollection>(iConfig.getParameter< edm::InputTag > ("recHitsLabel"));
15  elesToken_ =
16  consumes<reco::GsfElectronCollection>(iConfig.getParameter< edm::InputTag >("elesLabel"));
17 
18  phosToken_ =
19  consumes<reco::PhotonCollection>(iConfig.getParameter< edm::InputTag >("phosLabel"));
20 
22  consumes<reco::SuperClusterCollection>(iConfig.getParameter< edm::InputTag >("superClustersLabel"));
23 
24  minSCEt_ = iConfig.getParameter<double>("minSCEt");
25  minEleEt_ = iConfig.getParameter<double>("minEleEt");
26  minPhoEt_ = iConfig.getParameter<double>("minPhoEt");
27 
28 
29  interestingDetIdCollection_ = iConfig.getParameter<std::string>("interestingDetIdCollection");
30 
31  //register your products
32  produces< DetIdCollection > (interestingDetIdCollection_) ;
33 }
34 
36 {
38  desc.add<edm::InputTag>("recHitsLabel",edm::InputTag("hbhereco"));
39  desc.add<edm::InputTag>("elesLabel",edm::InputTag("gedGsfElectrons"));
40  desc.add<edm::InputTag>("phosLabel",edm::InputTag("gedPhotons"));
41  desc.add<edm::InputTag>("superClustersLabel",edm::InputTag("particleFlowEGamma"));
42  desc.add<double>("minSCEt",20);
43  desc.add<double>("minEleEt",20);
44  desc.add<double>("minPhoEt",20);
45  desc.add<std::string>("interestingDetIdCollection","");
47  descriptions.add(("interestingGedEgammaIsoHCALDetId"), desc);
48 }
49 
50 
52 {
53  hcalHitSelector_.setup(iSetup);
54 }
55 
56 // ------------ method called to produce the data ------------
57 void
59  const edm::EventSetup& iSetup)
60 {
62  iEvent.getByToken(superClustersToken_, superClusters);
63 
65  iEvent.getByToken(elesToken_,eles);
66 
68  iEvent.getByToken(phosToken_,phos);
69 
71  iEvent.getByToken(recHitsToken_,recHits);
72 
73  std::vector<DetId> indexToStore;
74  indexToStore.reserve(100);
75 
76  if(eles.isValid() && recHits.isValid()){
77  for(auto& ele : *eles){
78  float scEt = ele.superCluster()->energy()*std::sin(ele.superCluster()->position().theta());
79  if(scEt > minEleEt_ || ele.et()> minEleEt_){
80  hcalHitSelector_.addDetIds(*ele.superCluster(),*recHits,indexToStore);
81  }
82  }
83  }
84  if(phos.isValid() && recHits.isValid()){
85  for(auto& pho : *phos){
86  float scEt = pho.superCluster()->energy()*std::sin(pho.superCluster()->position().theta());
87  if(scEt > minPhoEt_ || pho.et()> minPhoEt_){
88  hcalHitSelector_.addDetIds(*pho.superCluster(),*recHits,indexToStore);
89  }
90  }
91  }
92  if(superClusters.isValid() && recHits.isValid()){
93  for(auto& sc : *superClusters){
94  float scEt = sc.energy()*std::sin(sc.position().theta());
95  if(scEt > minSCEt_){
96  hcalHitSelector_.addDetIds(sc,*recHits,indexToStore);
97  }
98  }
99  }
100 
101  //unify the vector
102  std::sort(indexToStore.begin(),indexToStore.end());
103  std::unique(indexToStore.begin(),indexToStore.end());
104 
105  auto detIdCollection = std::make_unique<DetIdCollection>(indexToStore);
106 
107  iEvent.put(std::move(detIdCollection), interestingDetIdCollection_ );
108 
109 }
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
void setup(const edm::EventSetup &iSetup)
void produce(edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< reco::SuperClusterCollection > superClustersToken_
void beginRun(edm::Run const &, const edm::EventSetup &) final
int iEvent
Definition: GenABIO.cc:224
def unique(seq, keepstr=True)
Definition: tier0.py:25
edm::EDGetTokenT< HBHERecHitCollection > recHitsToken_
float energy() const
Energy. Note this is taken from the first SimTrack only.
Definition: SimCluster.h:104
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isValid() const
Definition: HandleBase.h:74
static edm::ParameterSetDescription makePSetDescription()
float theta() const
Momentum polar angle. Note this is taken from the first SimTrack only.
Definition: SimCluster.h:144
edm::EDGetTokenT< reco::GsfElectronCollection > elesToken_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void addDetIds(const reco::SuperCluster &superClus, const HBHERecHitCollection &recHits, CollType &detIdsToStore) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
HLT enums.
edm::EDGetTokenT< reco::PhotonCollection > phosToken_
def move(src, dest)
Definition: eostools.py:511
Definition: Run.h:45