54 using namespace reco ;
58 applyHOverECut_(
true), hcalHelper_(0),
59 caloGeom_(0), caloGeomCacheId_(0), caloTopo_(0), caloTopoCacheId_(0)
127 if (prefilteredSeeds_) {
136 produces<ElectronSeedCollection>() ;
153 LogDebug(
"ElectronSeedProducer") <<
"[ElectronSeedProducer::produce] entering " ;
194 for (
unsigned int i=0;
i<2;
i++) {
198 std::vector<float> hoe1s, hoe2s ;
199 filterClusters(*theBeamSpot,clusters,clusterRefs,hoe1s,hoe2s,e, iSetup);
206 std::auto_ptr<ElectronSeedCollection> pSeeds(seeds) ;
207 ElectronSeedCollection::iterator is ;
208 for ( is=pSeeds->begin() ; is!=pSeeds->end() ; is++ ) {
213 << (*is).nHits() <<
" hits"
214 <<
", charge " << (*is).getCharge()
215 <<
" and cluster energy " << superCluster->energy()
216 <<
" PID "<<superCluster.
id() ;
233 std::vector<float> & hoe1s, std::vector<float> & hoe2s,
237 std::vector<float> sigmaIEtaIEtaEB_;
238 std::vector<float> sigmaIEtaIEtaEE_;
240 for (
unsigned int i=0;
i<superClusters->size();++
i)
244 if (scl.
energy()/cosh(sclEta)>SCEtCut_)
249 double had1, had2, had, scle ;
251 bool HoeVeto =
false ;
252 if (applyHOverECut_==
true)
254 had1 = hcalHelper_->hcalESumDepth1(scl);
255 had2 = hcalHelper_->hcalESumDepth2(scl);
258 int detector = scl.
seed()->hitsAndFractions()[0].first.subdetId() ;
259 if (detector==
EcalBarrel && (had<maxHBarrel_ || had/scle<maxHOverEBarrel_)) HoeVeto=
true;
260 else if (detector==
EcalEndcap && (had<maxHEndcaps_ || had/scle<maxHOverEEndcaps_)) HoeVeto=
true;
264 hoe1s.push_back(had1/scle) ;
265 hoe2s.push_back(had2/scle) ;
276 if (applySigmaIEtaIEtaCut_ ==
true)
280 int detector = scl.
seed()->hitsAndFractions()[0].first.subdetId() ;
281 if (detector==
EcalBarrel) sigmaIEtaIEtaEB_ .push_back(
isnan(vCov[0]) ? 0. :
sqrt(vCov[0]));
282 if (detector==
EcalEndcap) sigmaIEtaIEtaEE_ .push_back(
isnan(vCov[0]) ? 0. :
sqrt(vCov[0]));
285 LogDebug(
"ElectronSeedProducer")<<
"Filtered out "<<sclRefs.
size()<<
" superclusters from "<<superClusters->size() ;
292 for (
unsigned int i=0 ;
i<sclRefs.
size() ; ++
i )
294 seedFilter_->seeds(event,setup,sclRefs[
i],theInitialSeedColl) ;
295 LogDebug(
"ElectronSeedProducer")<<
"Number of Seeds: "<<theInitialSeedColl->size() ;
302 desc.
add<
edm::InputTag>(
"endcapSuperClusters",
edm::InputTag(
"particleFlowSuperClusterECAL",
"particleFlowSuperClusterECALEndcapWithPreshower"));
305 psd1.
add<
unsigned int>(
"maxElement", 0);
311 psd2.
add<
double>(
"deltaPhiRegion", 0.4);
312 psd2.
add<
double>(
"originHalfLength", 15.0);
313 psd2.
add<
bool>(
"useZInVertex",
true);
314 psd2.
add<
double>(
"deltaEtaRegion", 0.1);
315 psd2.
add<
double>(
"ptMin", 1.5 );
316 psd2.
add<
double>(
"originRadius", 0.2);
320 psd0.
add<
double>(
"PhiMax2B",0.002);
321 psd0.
add<
double>(
"hOverEPtMin",0.0);
322 psd0.
add<
double>(
"PhiMax2F",0.003);
323 psd0.
add<
bool>(
"searchInTIDTEC",
true);
324 psd0.
add<
double>(
"pPhiMax1",0.125);
325 psd0.
add<
double>(
"HighPtThreshold",35.0);
326 psd0.
add<
double>(
"r2MinF",-0.15);
327 psd0.
add<
double>(
"maxHBarrel",0.0);
328 psd0.
add<
double>(
"DeltaPhi1Low",0.23);
329 psd0.
add<
double>(
"DeltaPhi1High",0.08);
330 psd0.
add<
double>(
"ePhiMin1",-0.125);
332 psd0.
add<
double>(
"LowPtThreshold",5.0);
333 psd0.
add<
double>(
"maxHOverEBarrel",0.15);
334 psd0.
add<
double>(
"maxSigmaIEtaIEtaBarrel", 0.5);
335 psd0.
add<
double>(
"maxSigmaIEtaIEtaEndcaps", 0.5);
336 psd0.
add<
bool>(
"dynamicPhiRoad",
true);
337 psd0.
add<
double>(
"ePhiMax1",0.075);
339 psd0.
add<
double>(
"SizeWindowENeg",0.675);
340 psd0.
add<
double>(
"nSigmasDeltaZ1",5.0);
341 psd0.
add<
double>(
"rMaxI",0.2);
342 psd0.
add<
double>(
"maxHEndcaps",0.0);
343 psd0.
add<
bool>(
"preFilteredSeeds",
false);
344 psd0.
add<
double>(
"r2MaxF",0.15);
345 psd0.
add<
double>(
"hOverEConeSize",0.15);
346 psd0.
add<
double>(
"pPhiMin1",-0.075);
348 psd0.
add<
double>(
"deltaZ1WithVertex",25.0);
349 psd0.
add<
double>(
"SCEtCut",0.0);
350 psd0.
add<
double>(
"z2MaxB",0.09);
351 psd0.
add<
bool>(
"fromTrackerSeeds",
true);
353 psd0.
add<
double>(
"z2MinB",-0.09);
354 psd0.
add<
double>(
"rMinI",-0.2);
355 psd0.
add<
double>(
"maxHOverEEndcaps",0.15);
356 psd0.
add<
double>(
"hOverEHBMinE",0.7);
357 psd0.
add<
bool>(
"useRecoVertex",
false);
361 psd0.
add<
bool>(
"applyHOverECut",
true);
364 psd0.
add<
bool>(
"applySigmaIEtaIEtaCut",
false);
365 psd0.
add<
double>(
"DeltaPhi2F",0.012);
366 psd0.
add<
double>(
"PhiMin2F",-0.003);
367 psd0.
add<
double>(
"hOverEHFMinE",0.8);
368 psd0.
add<
double>(
"DeltaPhi2B",0.008);
369 psd0.
add<
double>(
"PhiMin2B",-0.002);
373 psd3.
add<
double>(
"SeedMomentumForBOFF",5.0);
374 psd3.
add<
double>(
"OriginTransverseErrorMultiplier",1.0);
375 psd3.
add<
double>(
"MinOneOverPtError",1.0);
378 psd3.
add<
bool>(
"forceKinematicWithRegionDirection",
false);
384 descriptions.
add(
"ecalDrivenElectronSeeds",desc);
void filterClusters(const reco::BeamSpot &bs, const edm::Handle< reco::SuperClusterCollection > &superClusters, reco::SuperClusterRefVector &sclRefs, std::vector< float > &hoe1s, std::vector< float > &hoe2s, edm::Event &e, const edm::EventSetup &setup)
T getParameter(std::string const &) const
unsigned long long cacheIdentifier() const
const math::XYZPoint & position() const
cluster centroid position
virtual void endRun(edm::Run const &, edm::EventSetup const &) overridefinal
edm::EDGetTokenT< reco::BeamSpot > token_bs
void readEvent(const edm::Event &)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void setupES(const edm::EventSetup &setup)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
virtual void beginRun(edm::Run const &, edm::EventSetup const &) overridefinal
unsigned long long caloGeomCacheId_
double maxSigmaIEtaIEtaBarrel_
edm::EDGetTokenT< std::vector< reco::Vertex > > filterVtxTag_
void checkSetup(const edm::EventSetup &)
edm::EDGetTokenT< TrajectorySeedCollection > initialSeeds_
void run(edm::Event &, const edm::EventSetup &setup, const reco::SuperClusterRefVector &, const std::vector< float > &hoe1s, const std::vector< float > &hoe2s, TrajectorySeedCollection *seeds, reco::ElectronSeedCollection &)
ProductID id() const
Accessor for product ID.
edm::EDGetTokenT< MeasurementTrackerEvent > token_measTrkEvt
edm::EDGetTokenT< EcalRecHitCollection > eeRecHitCollection_
edm::ESHandle< CaloTopology > caloTopo_
std::vector< TrajectorySeed > TrajectorySeedCollection
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
edm::EDGetTokenT< EcalRecHitCollection > ebRecHitCollection_
double maxSigmaIEtaIEtaEndcaps_
ElectronSeedProducer(const edm::ParameterSet &)
double energy() const
cluster energy
std::vector< ElectronSeed > ElectronSeedCollection
collection of ElectronSeed objects
ParameterDescriptionBase * add(U const &iLabel, T const &value)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
bool applySigmaIEtaIEtaCut_
std::unique_ptr< SeedFilter > seedFilter_
edm::ESHandle< CaloGeometry > caloGeom_
T const * product() const
ElectronSeedGenerator * matcher_
TrajectorySeedCollection * theInitialSeedColl
void add(std::string const &label, ParameterSetDescription const &psetDescription)
edm::EDGetTokenT< reco::SuperClusterCollection > superClusters_[2]
unsigned long long caloTopoCacheId_
edm::EDGetTokenT< reco::BeamSpot > token_bs
void filterSeeds(edm::Event &e, const edm::EventSetup &setup, reco::SuperClusterRefVector &sclRefs)
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
virtual ~ElectronSeedProducer()
size_type size() const
Size of the RefVector.
edm::EDGetTokenT< CaloTowerCollection > hcalTowers
const Point & position() const
position
const CaloClusterPtr & seed() const
seed BasicCluster
volatile std::atomic< bool > shutdown_flag false
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag_
edm::EDGetTokenT< std::vector< reco::Vertex > > token_vtx
ElectronHcalHelper * hcalHelper_
edm::EDGetTokenT< std::vector< reco::Vertex > > token_vtx
virtual void produce(edm::Event &, const edm::EventSetup &) overridefinal