CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FastElectronSeedProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: ElectronProducers
4 // Class: FastElectronSeedProducer
5 //
13 //
14 // Original Author: Patrick Janot
15 //
16 //
17 
18 // user include files
21 
25 
29 
33 
40 
42 
43 #include <iostream>
44 
46  : matcher_(0), caloGeomCacheId_(0), hcalIso_(0), /*doubleConeSel_(0),*/ mhbhe_(0)
47  {
48  edm::ParameterSet pset = iConfig.getParameter<edm::ParameterSet>("SeedConfiguration");
49  SCEtCut_=pset.getParameter<double>("SCEtCut");
50  maxHOverE_=pset.getParameter<double>("maxHOverE");
51  hOverEConeSize_=pset.getParameter<double>("hOverEConeSize");
52  hOverEHBMinE_=pset.getParameter<double>("hOverEHBMinE");
53  hOverEHFMinE_=pset.getParameter<double>("hOverEHFMinE");
54  fromTrackerSeeds_=pset.getParameter<bool>("fromTrackerSeeds");
55  initialSeeds_=pset.getParameter<edm::InputTag>("initialSeeds");
56 
58  iConfig.getParameter<double>("pTMin"),
59  iConfig.getParameter<edm::InputTag>("beamSpot"));
60 
61  // get labels from config'
62  clusters_[0]=iConfig.getParameter<edm::InputTag>("barrelSuperClusters");
63  clusters_[1]=iConfig.getParameter<edm::InputTag>("endcapSuperClusters");
64  simTracks_=iConfig.getParameter<edm::InputTag>("simTracks");
65  trackerHits_=iConfig.getParameter<edm::InputTag>("trackerHits");
66  hcalRecHits_= pset.getParameter<edm::InputTag>("hcalRecHits");
67 
68  //register your products
69  produces<reco::ElectronSeedCollection>();
70 
71 }
72 
73 
75  {
76  // do anything here that needs to be done at desctruction time
77  // (e.g. close files, deallocate resources etc.)
78  delete matcher_ ;
79  delete mhbhe_ ;
80  //delete doubleConeSel_ ;
81  delete hcalIso_ ;
82  }
83 
84 void
86  {
87  // get calo geometry
89  {
90  es.get<CaloGeometryRecord>().get(caloGeom_);
91  caloGeomCacheId_=es.get<CaloGeometryRecord>().cacheIdentifier();
92  }
93 
94 // // The H/E calculator
95 // calc_=HoECalculator(caloGeom_);
96 
97  matcher_->setupES(es) ;
98 
99  }
100 
101 void
103 {
104  LogDebug("FastElectronSeedProducer")<<"[FastElectronSeedProducer::produce] entering " ;
105 
106  // get initial TrajectorySeeds if necessary
107  if (fromTrackerSeeds_) {
108 
110  e.getByLabel(initialSeeds_, hSeeds);
111  initialSeedColl_ = const_cast<TrajectorySeedCollection *> (hSeeds.product());
112 
113  } else {
114 
115  initialSeedColl_=0;// not needed in this case
116 
117  }
118 
120 
121  // Get the Monte Carlo truth (SimTracks)
123  e.getByLabel(simTracks_,theSTC);
124  const edm::SimTrackContainer* theSimTracks = &(*theSTC);
125 
126  // Get the collection of Tracker RecHits
128  e.getByLabel(trackerHits_, theRHC);
129  const SiTrackerGSMatchedRecHit2DCollection* theGSRecHits = &(*theRHC);
130 
131  //Retrieve tracker topology from geometry
133  iSetup.get<IdealGeometryRecord>().get(tTopoHand);
134  const TrackerTopology *tTopo=tTopoHand.product();
135 
136 
137  // get Hcal Rechit collection
139  delete mhbhe_ ;
140  if (e.getByLabel(hcalRecHits_,hbhe))
141  { mhbhe_= new HBHERecHitMetaCollection(*hbhe) ; }
142  else
143  { mhbhe_ = 0 ; }
144 
145  // define cone for H/E
146 // delete doubleConeSel_;
147 // doubleConeSel_ = new CaloDualConeSelector(0.,hOverEConeSize_,caloGeom_.product(),DetId::Hcal) ;
148 
149  // HCAL iso deposits
150  delete hcalIso_ ;
152 
153  // Get the two supercluster collections
154  for (unsigned int i=0; i<2; i++) {
155 
156  // invoke algorithm
158  e.getByLabel(clusters_[i],clusters);
159  reco::SuperClusterRefVector clusterRefs;
160  filterClusters(clusters,/*mhbhe_,*/clusterRefs) ;
161  matcher_->run(e,clusterRefs,theGSRecHits,theSimTracks,initialSeedColl_,tTopo,*seeds);
162 
163  }
164 
165  // Save event content
166  std::auto_ptr<reco::ElectronSeedCollection> pSeeds(seeds) ;
167  e.put(pSeeds);
168 
169 }
170 
171 
172 void
175  //HBHERecHitMetaCollection * mhbhe,
176  reco::SuperClusterRefVector & sclRefs )
177  {
178  // filter the superclusters
179  // - with EtCut
180  // - with HoE using calo cone
181  for (unsigned int i=0;i<superClusters->size();++i)
182  {
183  const reco::SuperCluster & scl=(*superClusters)[i] ;
184  if (scl.energy()/cosh(scl.eta())>SCEtCut_)
185  {
186 // //double HoE=calc_(&scl,mhbhe);
187 // double HoE = 0. ;
188 // double hcalE = 0. ;
189 // if (mhbhe_)
190 // {
191 // math::XYZPoint caloPos = scl.position() ;
192 // GlobalPoint pclu(caloPos.x(),caloPos.y(),caloPos.z()) ;
193 // std::auto_ptr<CaloRecHitMetaCollectionV> chosen
194 // = doubleConeSel_->select(pclu,*mhbhe_) ;
195 // CaloRecHitMetaCollectionV::const_iterator i ;
196 // for ( i = chosen->begin () ; i != chosen->end () ; ++i )
197 // {
198 // double hcalHit_E = i->energy() ;
199 // if ( i->detid().subdetId()==HcalBarrel && hcalHit_E > hOverEHBMinE_)
200 // { hcalE += hcalHit_E ; } //HB case
201 // //if ( i->detid().subdetId()==HcalBarrel)
202 // // { std::cout << "[ElectronSeedProducer] HcalBarrel: hcalHit_E, hOverEHBMinE_ " << hcalHit_E << " " << hOverEHBMinE_ << std::endl; }
203 // if ( i->detid().subdetId()==HcalEndcap && hcalHit_E > hOverEHFMinE_)
204 // { hcalE += hcalHit_E ; } //HF case
205 // //if ( i->detid().subdetId()==HcalEndcap)
206 // // { std::cout << "[ElectronSeedProducer] HcalEndcap: hcalHit_E, hOverEHFMinE_ " << hcalHit_E << " " << hOverEHFMinE_ << std::endl; }
207 // }
208 // }
209 // HoE = hcalE/scl.energy() ;
210  //double hcalE = hcalHelper_->hcalESum(scl), HoE = hcalE/scl.energy() ;
211  double newHcalE = hcalIso_->getHcalESum(&scl), newHoE = newHcalE/scl.energy() ;
212  //std::cout << "[ElectronSeedProducer] HoE, maxHOverE_ " << newHoE << " " << HoE << " " << maxHOverE_ << std::endl ;
213  if (newHoE<=maxHOverE_)
214  { sclRefs.push_back(edm::Ref<reco::SuperClusterCollection>(superClusters,i)) ; }
215  }
216  }
217 
218  LogDebug("ElectronSeedProducer")<<"Filtered out "
219  <<sclRefs.size()<<" superclusters from "<<superClusters->size() ;
220  }
#define LogDebug(id)
T getParameter(std::string const &) const
unsigned long long cacheIdentifier() const
int i
Definition: DBlmapReader.cc:9
void setupES(const edm::EventSetup &setup)
FastElectronSeedGenerator * matcher_
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:160
edm::ESHandle< CaloGeometry > caloGeom_
EgammaHcalIsolation * hcalIso_
std::vector< TrajectorySeed > TrajectorySeedCollection
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:94
virtual void beginRun(edm::Run const &run, const edm::EventSetup &es) override
double energy() const
cluster energy
Definition: CaloCluster.h:120
SimpleCaloRecHitMetaCollection< HBHERecHitCollection > HBHERecHitMetaCollection
virtual void produce(edm::Event &e, const edm::EventSetup &c) override
std::vector< ElectronSeed > ElectronSeedCollection
collection of ElectronSeed objects
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
void run(edm::Event &e, const reco::SuperClusterRefVector &sclRefs, const SiTrackerGSMatchedRecHit2DCollection *theGSRecHits, const edm::SimTrackContainer *theSimTracks, TrajectorySeedCollection *seeds, const TrackerTopology *tTopo, reco::ElectronSeedCollection &out)
const T & get() const
Definition: EventSetup.h:55
TrajectorySeedCollection * initialSeedColl_
T const * product() const
Definition: ESHandle.h:62
FastElectronSeedProducer(const edm::ParameterSet &conf)
T const * product() const
Definition: Handle.h:74
void filterClusters(const edm::Handle< reco::SuperClusterCollection > &superClusters, reco::SuperClusterRefVector &sclRefs)
HBHERecHitMetaCollection * mhbhe_
void push_back(value_type const &ref)
Add a Ref&lt;C, T&gt; to the RefVector.
Definition: RefVector.h:64
size_type size() const
Size of the RefVector.
Definition: RefVector.h:89
std::vector< SimTrack > SimTrackContainer
Definition: Run.h:36