49 using namespace reco ;
53 applyHOverECut_(
true), hcalHelper_(0),
54 caloGeom_(0), caloGeomCacheId_(0), caloTopo_(0), caloTopoCacheId_(0)
108 if (prefilteredSeeds_) {
117 produces<ElectronSeedCollection>() ;
134 LogDebug(
"ElectronSeedProducer") <<
"[ElectronSeedProducer::produce] entering " ;
175 for (
unsigned int i=0;
i<2;
i++) {
179 std::vector<float> hoe1s, hoe2s ;
187 std::auto_ptr<ElectronSeedCollection> pSeeds(seeds) ;
188 ElectronSeedCollection::iterator is ;
189 for ( is=pSeeds->begin() ; is!=pSeeds->end() ; is++ ) {
194 << (*is).nHits() <<
" hits"
195 <<
", charge " << (*is).getCharge()
196 <<
" and cluster energy " << superCluster->energy()
197 <<
" PID "<<superCluster.
id() ;
214 std::vector<float> & hoe1s, std::vector<float> & hoe2s )
216 for (
unsigned int i=0;
i<superClusters->size();++
i)
220 if (scl.
energy()/cosh(sclEta)>SCEtCut_)
225 double had1, had2, had, scle ;
226 bool HoeVeto =
false ;
227 if (applyHOverECut_==
true)
229 had1 = hcalHelper_->hcalESumDepth1(scl);
230 had2 = hcalHelper_->hcalESumDepth2(scl);
233 int detector = scl.
seed()->hitsAndFractions()[0].first.subdetId() ;
234 if (detector==
EcalBarrel && (had<maxHBarrel_ || had/scle<maxHOverEBarrel_)) HoeVeto=
true;
235 else if (detector==
EcalEndcap && (had<maxHEndcaps_ || had/scle<maxHOverEEndcaps_)) HoeVeto=
true;
239 hoe1s.push_back(had1/scle) ;
240 hoe2s.push_back(had2/scle) ;
251 LogDebug(
"ElectronSeedProducer")<<
"Filtered out "<<sclRefs.
size()<<
" superclusters from "<<superClusters->size() ;
258 for (
unsigned int i=0 ;
i<sclRefs.
size() ; ++
i )
260 seedFilter_->seeds(event,setup,sclRefs[
i],theInitialSeedColl) ;
261 LogDebug(
"ElectronSeedProducer")<<
"Number of Seeds: "<<theInitialSeedColl->size() ;
268 desc.
add<
edm::InputTag>(
"endcapSuperClusters",
edm::InputTag(
"particleFlowSuperClusterECAL",
"particleFlowSuperClusterECALEndcapWithPreshower"));
271 psd1.
add<
unsigned int>(
"maxElement", 0);
277 psd2.
add<
double>(
"deltaPhiRegion", 0.4);
278 psd2.
add<
double>(
"originHalfLength", 15.0);
279 psd2.
add<
bool>(
"useZInVertex",
true);
280 psd2.
add<
double>(
"deltaEtaRegion", 0.1);
281 psd2.
add<
double>(
"ptMin", 1.5 );
282 psd2.
add<
double>(
"originRadius", 0.2);
286 psd0.
add<
double>(
"PhiMax2B",0.002);
287 psd0.
add<
double>(
"hOverEPtMin",0.0);
288 psd0.
add<
double>(
"PhiMax2F",0.003);
289 psd0.
add<
bool>(
"searchInTIDTEC",
true);
290 psd0.
add<
double>(
"pPhiMax1",0.125);
291 psd0.
add<
double>(
"HighPtThreshold",35.0);
292 psd0.
add<
double>(
"r2MinF",-0.15);
293 psd0.
add<
double>(
"maxHBarrel",0.0);
294 psd0.
add<
double>(
"DeltaPhi1Low",0.23);
295 psd0.
add<
double>(
"DeltaPhi1High",0.08);
296 psd0.
add<
double>(
"ePhiMin1",-0.125);
298 psd0.
add<
double>(
"LowPtThreshold",5.0);
299 psd0.
add<
double>(
"maxHOverEBarrel",0.15);
300 psd0.
add<
bool>(
"dynamicPhiRoad",
true);
301 psd0.
add<
double>(
"ePhiMax1",0.075);
303 psd0.
add<
double>(
"SizeWindowENeg",0.675);
304 psd0.
add<
double>(
"nSigmasDeltaZ1",5.0);
305 psd0.
add<
double>(
"rMaxI",0.2);
306 psd0.
add<
double>(
"maxHEndcaps",0.0);
307 psd0.
add<
bool>(
"preFilteredSeeds",
false);
308 psd0.
add<
double>(
"r2MaxF",0.15);
309 psd0.
add<
double>(
"hOverEConeSize",0.15);
310 psd0.
add<
double>(
"pPhiMin1",-0.075);
312 psd0.
add<
double>(
"deltaZ1WithVertex",25.0);
313 psd0.
add<
double>(
"SCEtCut",0.0);
314 psd0.
add<
double>(
"z2MaxB",0.09);
315 psd0.
add<
bool>(
"fromTrackerSeeds",
true);
317 psd0.
add<
double>(
"z2MinB",-0.09);
318 psd0.
add<
double>(
"rMinI",-0.2);
319 psd0.
add<
double>(
"maxHOverEEndcaps",0.15);
320 psd0.
add<
double>(
"hOverEHBMinE",0.7);
321 psd0.
add<
bool>(
"useRecoVertex",
false);
325 psd0.
add<
bool>(
"applyHOverECut",
true);
326 psd0.
add<
double>(
"DeltaPhi2F",0.012);
327 psd0.
add<
double>(
"PhiMin2F",-0.003);
328 psd0.
add<
double>(
"hOverEHFMinE",0.8);
329 psd0.
add<
double>(
"DeltaPhi2B",0.008);
330 psd0.
add<
double>(
"PhiMin2B",-0.002);
334 psd3.
add<
double>(
"SeedMomentumForBOFF",5.0);
335 psd3.
add<
double>(
"OriginTransverseErrorMultiplier",1.0);
336 psd3.
add<
double>(
"MinOneOverPtError",1.0);
339 psd3.
add<
bool>(
"forceKinematicWithRegionDirection",
false);
345 descriptions.
add(
"ecalDrivenElectronSeeds",desc);
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_
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::ESHandle< CaloTopology > caloTopo_
void filterClusters(const reco::BeamSpot &bs, const edm::Handle< reco::SuperClusterCollection > &superClusters, reco::SuperClusterRefVector &sclRefs, std::vector< float > &hoe1s, std::vector< float > &hoe2s)
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.
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)
std::unique_ptr< SeedFilter > seedFilter_
edm::ESHandle< CaloGeometry > caloGeom_
T const * product() const
ElectronSeedGenerator * matcher_
TrajectorySeedCollection * theInitialSeedColl
REF castTo() const
cast to a concrete type
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_
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
edm::EDGetTokenT< std::vector< reco::Vertex > > token_vtx
virtual void produce(edm::Event &, const edm::EventSetup &) overridefinal