CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
GsfElectronBaseProducer.cc
Go to the documentation of this file.
1 
3 
5 
14 
22 
23 
24 #include <iostream>
25 
26 using namespace reco;
27 
29  {
30  // input collections
31  desc.add<edm::InputTag>("previousGsfElectronsTag",edm::InputTag("ecalDrivenGsfElectrons")) ;
32  desc.add<edm::InputTag>("gsfElectronCoresTag",edm::InputTag("gsfElectronCores")) ;
33  desc.add<edm::InputTag>("hcalTowers",edm::InputTag("towerMaker")) ;
34  desc.add<edm::InputTag>("reducedBarrelRecHitCollectionTag",edm::InputTag("ecalRecHit","EcalRecHitsEB")) ;
35  desc.add<edm::InputTag>("reducedEndcapRecHitCollectionTag",edm::InputTag("ecalRecHit","EcalRecHitsEE")) ;
36  //desc.add<edm::InputTag>("pfMvaTag",edm::InputTag("pfElectronTranslator:pf")) ;
37  desc.add<edm::InputTag>("seedsTag",edm::InputTag("ecalDrivenElectronSeeds")) ;
38  desc.add<edm::InputTag>("beamSpotTag",edm::InputTag("offlineBeamSpot")) ;
39 
40  // backward compatibility mechanism for ctf tracks
41  desc.add<bool>("ctfTracksCheck",true) ;
42  desc.add<edm::InputTag>("ctfTracksTag",edm::InputTag("generalTracks")) ;
43 
44  // steering
45  desc.add<bool>("applyPreselection",false) ;
46  desc.add<bool>("applyEtaCorrection",false) ;
47  desc.add<bool>("applyAmbResolution",false) ;
48  desc.add<unsigned>("ambSortingStrategy",1) ;
49  desc.add<unsigned>("ambClustersOverlapStrategy",1) ;
50  //desc.add<bool>("addPflowElectrons",true) ;
51 
52 // // preselection parameters (ecal driven electrons)
53 // desc.add<bool>("seedFromTEC",true) ;
54 // desc.add<double>("minSCEtBarrel",4.0) ;
55 // desc.add<double>("minSCEtEndcaps",4.0) ;
56 // desc.add<double>("minEOverPBarrel",0.0) ;
57 // desc.add<double>("maxEOverPBarrel",999999999.) ;
58 // desc.add<double>("minEOverPEndcaps",0.0) ;
59 // desc.add<double>("maxEOverPEndcaps",999999999.) ;
60 // desc.add<double>("maxDeltaEtaBarrel",0.02) ;
61 // desc.add<double>("maxDeltaEtaEndcaps",0.02) ;
62 // desc.add<double>("maxDeltaPhiBarrel",0.15) ;
63 // desc.add<double>("maxDeltaPhiEndcaps",0.15) ;
64 // desc.add<double>("hOverEConeSize",0.15) ;
65 // desc.add<double>("hOverEPtMin",0.) ;
66 // desc.add<double>("maxHOverEBarrel",0.15) ;
67 // desc.add<double>("maxHOverEEndcaps",0.15) ;
68 // desc.add<double>("maxHBarrel",0.0) ;
69 // desc.add<double>("maxHEndcaps",0.0) ;
70 // desc.add<double>("maxSigmaIetaIetaBarrel",999999999.) ;
71 // desc.add<double>("maxSigmaIetaIetaEndcaps",999999999.) ;
72 // desc.add<double>("maxFbremBarrel",999999999.) ;
73 // desc.add<double>("maxFbremEndcaps",999999999.) ;
74 // desc.add<bool>("isBarrel",false) ;
75 // desc.add<bool>("isEndcaps",false) ;
76 // desc.add<bool>("isFiducial",false) ;
77 // desc.add<double>("maxTIP",999999999.) ;
78 // desc.add<double>("minMVA",-0.4) ;
79 //
80 // // preselection parameters (tracker driven only electrons)
81 // desc.add<double>("minSCEtBarrelPflow",0.0) ;
82 // desc.add<double>("minSCEtEndcapsPflow",0.0) ;
83 // desc.add<double>("minEOverPBarrelPflow",0.0) ;
84 // desc.add<double>("maxEOverPBarrelPflow",999999999.) ;
85 // desc.add<double>("minEOverPEndcapsPflow",0.0) ;
86 // desc.add<double>("maxEOverPEndcapsPflow",999999999.) ;
87 // desc.add<double>("maxDeltaEtaBarrelPflow",999999999.) ;
88 // desc.add<double>("maxDeltaEtaEndcapsPflow",999999999.) ;
89 // desc.add<double>("maxDeltaPhiBarrelPflow",999999999.) ;
90 // desc.add<double>("maxDeltaPhiEndcapsPflow",999999999.) ;
91 // desc.add<double>("hOverEConeSizePflow",0.15) ;
92 // desc.add<double>("hOverEPtMinPflow",0.) ;
93 // desc.add<double>("maxHOverEBarrelPflow",999999999.) ;
94 // desc.add<double>("maxHOverEEndcapsPflow",999999999.) ;
95 // desc.add<double>("maxHBarrelPflow",0.0) ;
96 // desc.add<double>("maxHEndcapsPflow",0.0) ;
97 // desc.add<double>("maxSigmaIetaIetaBarrelPflow",999999999.) ;
98 // desc.add<double>("maxSigmaIetaIetaEndcapsPflow",999999999.) ;
99 // desc.add<double>("maxFbremBarrelPflow",999999999.) ;
100 // desc.add<double>("maxFbremEndcapsPflow",999999999.) ;
101 // desc.add<bool>("isBarrelPflow",false) ;
102 // desc.add<bool>("isEndcapsPflow",false) ;
103 // desc.add<bool>("isFiducialPflow",false) ;
104 // desc.add<double>("maxTIPPflow",999999999.) ;
105 // desc.add<double>("minMVAPflow",-0.4) ;
106 
107  // Isolation algos configuration
108  desc.add<double>("intRadiusBarrelTk",0.015) ;
109  desc.add<double>("intRadiusEndcapTk",0.015) ;
110  desc.add<double>("stripBarrelTk",0.015) ;
111  desc.add<double>("stripEndcapTk",0.015) ;
112  desc.add<double>("ptMinTk",0.7) ;
113  desc.add<double>("maxVtxDistTk",0.2) ;
114  desc.add<double>("maxDrbTk",999999999.) ;
115  desc.add<double>("intRadiusHcal",0.15) ;
116  desc.add<double>("etMinHcal",0.0) ;
117  desc.add<double>("intRadiusEcalBarrel",3.0) ;
118  desc.add<double>("intRadiusEcalEndcaps",3.0) ;
119  desc.add<double>("jurassicWidth",1.5) ;
120  desc.add<double>("etMinBarrel",0.0) ;
121  desc.add<double>("eMinBarrel",0.08) ;
122  desc.add<double>("etMinEndcaps",0.1) ;
123  desc.add<double>("eMinEndcaps",0.0) ;
124  desc.add<bool>("vetoClustered",false) ;
125  desc.add<bool>("useNumCrystals",true) ;
126  desc.add<int>("severityLevelCut",4) ;
127  desc.add<double>("severityRecHitThreshold",5.0) ;
128  desc.add<double>("spikeIdThreshold",0.95) ;
129  desc.add<std::string>("spikeIdString","kSwissCrossBordersIncluded") ;
130  desc.add<std::vector<int> >("recHitFlagsToBeExcluded") ;
131 
132  edm::ParameterSetDescription descNested ;
133  descNested.add<std::string>("propagatorAlongTISE","PropagatorWithMaterial") ;
134  descNested.add<std::string>("propagatorOppositeTISE","PropagatorWithMaterialOpposite") ;
135  desc.add<edm::ParameterSetDescription>("TransientInitialStateEstimatorParameters",descNested) ;
136 
137  // Corrections
138  desc.add<std::string>("superClusterErrorFunction","EcalClusterEnergyUncertainty") ;
139  }
140 
142  : pfTranslatorParametersChecked_(false),
143  ecalSeedingParametersChecked_(false)
144  {
145  produces<GsfElectronCollection>();
146 
147  inputCfg_.previousGsfElectrons = cfg.getParameter<edm::InputTag>("previousGsfElectronsTag");
148  inputCfg_.gsfElectronCores = cfg.getParameter<edm::InputTag>("gsfElectronCoresTag");
149  inputCfg_.hcalTowersTag = cfg.getParameter<edm::InputTag>("hcalTowers") ;
150  //inputCfg_.tracks_ = cfg.getParameter<edm::InputTag>("tracks");
151  inputCfg_.reducedBarrelRecHitCollection = cfg.getParameter<edm::InputTag>("reducedBarrelRecHitCollectionTag") ;
152  inputCfg_.reducedEndcapRecHitCollection = cfg.getParameter<edm::InputTag>("reducedEndcapRecHitCollectionTag") ;
153  inputCfg_.pfMVA = cfg.getParameter<edm::InputTag>("pfMvaTag") ;
154  inputCfg_.ctfTracks = cfg.getParameter<edm::InputTag>("ctfTracksTag");
155  inputCfg_.seedsTag = cfg.getParameter<edm::InputTag>("seedsTag"); // used to check config consistency with seeding
156  inputCfg_.beamSpotTag = cfg.getParameter<edm::InputTag>("beamSpotTag") ;
157 
158  strategyCfg_.applyPreselection = cfg.getParameter<bool>("applyPreselection") ;
159  strategyCfg_.applyEtaCorrection = cfg.getParameter<bool>("applyEtaCorrection") ;
160  strategyCfg_.applyAmbResolution = cfg.getParameter<bool>("applyAmbResolution") ;
161  strategyCfg_.ambSortingStrategy = cfg.getParameter<unsigned>("ambSortingStrategy") ;
162  strategyCfg_.ambClustersOverlapStrategy = cfg.getParameter<unsigned>("ambClustersOverlapStrategy") ;
163  strategyCfg_.addPflowElectrons = cfg.getParameter<bool>("addPflowElectrons") ;
164  strategyCfg_.ctfTracksCheck = cfg.getParameter<bool>("ctfTracksCheck");
165 
166  cutsCfg_.minSCEtBarrel = cfg.getParameter<double>("minSCEtBarrel") ;
167  cutsCfg_.minSCEtEndcaps = cfg.getParameter<double>("minSCEtEndcaps") ;
168  cutsCfg_.maxEOverPBarrel = cfg.getParameter<double>("maxEOverPBarrel") ;
169  cutsCfg_.maxEOverPEndcaps = cfg.getParameter<double>("maxEOverPEndcaps") ;
170  cutsCfg_.minEOverPBarrel = cfg.getParameter<double>("minEOverPBarrel") ;
171  cutsCfg_.minEOverPEndcaps = cfg.getParameter<double>("minEOverPEndcaps") ;
172 
173  // H/E
174  cutsCfg_.maxHOverEBarrel = cfg.getParameter<double>("maxHOverEBarrel") ;
175  cutsCfg_.maxHOverEEndcaps = cfg.getParameter<double>("maxHOverEEndcaps") ;
176  cutsCfg_.maxHBarrel = cfg.getParameter<double>("maxHBarrel") ;
177  cutsCfg_.maxHEndcaps = cfg.getParameter<double>("maxHEndcaps") ;
178 
179  cutsCfg_.maxDeltaEtaBarrel = cfg.getParameter<double>("maxDeltaEtaBarrel") ;
180  cutsCfg_.maxDeltaEtaEndcaps = cfg.getParameter<double>("maxDeltaEtaEndcaps") ;
181  cutsCfg_.maxDeltaPhiBarrel = cfg.getParameter<double>("maxDeltaPhiBarrel") ;
182  cutsCfg_.maxDeltaPhiEndcaps = cfg.getParameter<double>("maxDeltaPhiEndcaps") ;
183  cutsCfg_.maxDeltaPhiBarrel = cfg.getParameter<double>("maxDeltaPhiBarrel") ;
184  cutsCfg_.maxDeltaPhiEndcaps = cfg.getParameter<double>("maxDeltaPhiEndcaps") ;
185  cutsCfg_.maxDeltaPhiBarrel = cfg.getParameter<double>("maxDeltaPhiBarrel") ;
186  cutsCfg_.maxDeltaPhiEndcaps = cfg.getParameter<double>("maxDeltaPhiEndcaps") ;
187  cutsCfg_.maxSigmaIetaIetaBarrel = cfg.getParameter<double>("maxSigmaIetaIetaBarrel") ;
188  cutsCfg_.maxSigmaIetaIetaEndcaps = cfg.getParameter<double>("maxSigmaIetaIetaEndcaps") ;
189  cutsCfg_.maxFbremBarrel = cfg.getParameter<double>("maxFbremBarrel") ;
190  cutsCfg_.maxFbremEndcaps = cfg.getParameter<double>("maxFbremEndcaps") ;
191  cutsCfg_.isBarrel = cfg.getParameter<bool>("isBarrel") ;
192  cutsCfg_.isEndcaps = cfg.getParameter<bool>("isEndcaps") ;
193  cutsCfg_.isFiducial = cfg.getParameter<bool>("isFiducial") ;
194  cutsCfg_.minMVA = cfg.getParameter<double>("minMVA") ;
195  cutsCfg_.maxTIP = cfg.getParameter<double>("maxTIP") ;
196  cutsCfg_.seedFromTEC = cfg.getParameter<bool>("seedFromTEC") ;
197 
198  cutsCfgPflow_.minSCEtBarrel = cfg.getParameter<double>("minSCEtBarrelPflow") ;
199  cutsCfgPflow_.minSCEtEndcaps = cfg.getParameter<double>("minSCEtEndcapsPflow") ;
200  cutsCfgPflow_.maxEOverPBarrel = cfg.getParameter<double>("maxEOverPBarrelPflow") ;
201  cutsCfgPflow_.maxEOverPEndcaps = cfg.getParameter<double>("maxEOverPEndcapsPflow") ;
202  cutsCfgPflow_.minEOverPBarrel = cfg.getParameter<double>("minEOverPBarrelPflow") ;
203  cutsCfgPflow_.minEOverPEndcaps = cfg.getParameter<double>("minEOverPEndcapsPflow") ;
204 
205  // H/E
206  cutsCfgPflow_.maxHOverEBarrel = cfg.getParameter<double>("maxHOverEBarrelPflow") ;
207  cutsCfgPflow_.maxHOverEEndcaps = cfg.getParameter<double>("maxHOverEEndcapsPflow") ;
208  cutsCfgPflow_.maxHBarrel = cfg.getParameter<double>("maxHBarrelPflow") ;
209  cutsCfgPflow_.maxHEndcaps = cfg.getParameter<double>("maxHEndcapsPflow") ;
210 
211  cutsCfgPflow_.maxDeltaEtaBarrel = cfg.getParameter<double>("maxDeltaEtaBarrelPflow") ;
212  cutsCfgPflow_.maxDeltaEtaEndcaps = cfg.getParameter<double>("maxDeltaEtaEndcapsPflow") ;
213  cutsCfgPflow_.maxDeltaPhiBarrel = cfg.getParameter<double>("maxDeltaPhiBarrelPflow") ;
214  cutsCfgPflow_.maxDeltaPhiEndcaps = cfg.getParameter<double>("maxDeltaPhiEndcapsPflow") ;
215  cutsCfgPflow_.maxDeltaPhiBarrel = cfg.getParameter<double>("maxDeltaPhiBarrelPflow") ;
216  cutsCfgPflow_.maxDeltaPhiEndcaps = cfg.getParameter<double>("maxDeltaPhiEndcapsPflow") ;
217  cutsCfgPflow_.maxDeltaPhiBarrel = cfg.getParameter<double>("maxDeltaPhiBarrelPflow") ;
218  cutsCfgPflow_.maxDeltaPhiEndcaps = cfg.getParameter<double>("maxDeltaPhiEndcapsPflow") ;
219  cutsCfgPflow_.maxSigmaIetaIetaBarrel = cfg.getParameter<double>("maxSigmaIetaIetaBarrelPflow") ;
220  cutsCfgPflow_.maxSigmaIetaIetaEndcaps = cfg.getParameter<double>("maxSigmaIetaIetaEndcapsPflow") ;
221  cutsCfgPflow_.maxFbremBarrel = cfg.getParameter<double>("maxFbremBarrelPflow") ;
222  cutsCfgPflow_.maxFbremEndcaps = cfg.getParameter<double>("maxFbremEndcapsPflow") ;
223  cutsCfgPflow_.isBarrel = cfg.getParameter<bool>("isBarrelPflow") ;
224  cutsCfgPflow_.isEndcaps = cfg.getParameter<bool>("isEndcapsPflow") ;
225  cutsCfgPflow_.isFiducial = cfg.getParameter<bool>("isFiducialPflow") ;
226  cutsCfgPflow_.minMVA = cfg.getParameter<double>("minMVAPflow") ;
227  cutsCfgPflow_.maxTIP = cfg.getParameter<double>("maxTIPPflow") ;
228  cutsCfgPflow_.seedFromTEC = true ; // not applied for pflow
229 
230  // hcal helpers
231  hcalCfg_.hOverEConeSize = cfg.getParameter<double>("hOverEConeSize") ;
232  if (hcalCfg_.hOverEConeSize>0)
233  {
235  hcalCfg_.hcalTowers = cfg.getParameter<edm::InputTag>("hcalTowers") ;
236  hcalCfg_.hOverEPtMin = cfg.getParameter<double>("hOverEPtMin") ;
237  }
238  hcalCfgPflow_.hOverEConeSize = cfg.getParameter<double>("hOverEConeSizePflow") ;
240  {
242  hcalCfgPflow_.hcalTowers = cfg.getParameter<edm::InputTag>("hcalTowers") ;
243  hcalCfgPflow_.hOverEPtMin = cfg.getParameter<double>("hOverEPtMinPflow") ;
244  }
245 
246  // isolation
248  isoCfg.intRadiusBarrelTk = cfg.getParameter<double>("intRadiusBarrelTk") ;
249  isoCfg.intRadiusEndcapTk = cfg.getParameter<double>("intRadiusEndcapTk") ;
250  isoCfg.stripBarrelTk = cfg.getParameter<double>("stripBarrelTk") ;
251  isoCfg.stripEndcapTk = cfg.getParameter<double>("stripEndcapTk") ;
252  isoCfg.ptMinTk = cfg.getParameter<double>("ptMinTk") ;
253  isoCfg.maxVtxDistTk = cfg.getParameter<double>("maxVtxDistTk") ;
254  isoCfg.maxDrbTk = cfg.getParameter<double>("maxDrbTk") ;
255  isoCfg.intRadiusHcal = cfg.getParameter<double>("intRadiusHcal") ;
256  isoCfg.etMinHcal = cfg.getParameter<double>("etMinHcal") ;
257  isoCfg.intRadiusEcalBarrel = cfg.getParameter<double>("intRadiusEcalBarrel") ;
258  isoCfg.intRadiusEcalEndcaps = cfg.getParameter<double>("intRadiusEcalEndcaps") ;
259  isoCfg.jurassicWidth = cfg.getParameter<double>("jurassicWidth") ;
260  isoCfg.etMinBarrel = cfg.getParameter<double>("etMinBarrel") ;
261  isoCfg.eMinBarrel = cfg.getParameter<double>("eMinBarrel") ;
262  isoCfg.etMinEndcaps = cfg.getParameter<double>("etMinEndcaps") ;
263  isoCfg.eMinEndcaps = cfg.getParameter<double>("eMinEndcaps") ;
264  isoCfg.vetoClustered = cfg.getParameter<bool>("vetoClustered") ;
265  isoCfg.useNumCrystals = cfg.getParameter<bool>("useNumCrystals") ;
266 
267  // spike removal configuration
269  spikeCfg.severityLevelCut = cfg.getParameter<int>("severityLevelCut") ;
270  spikeCfg.severityRecHitThreshold = cfg.getParameter<double>("severityRecHitThreshold") ;
271  spikeCfg.spikeIdThreshold = cfg.getParameter<double>("spikeIdThreshold") ;
272  std::string spikeIdString = cfg.getParameter<std::string>("spikeIdString") ;
273  if (!spikeIdString.compare("kE1OverE9")) spikeCfg.spikeId = EcalSeverityLevelAlgo::kE1OverE9 ;
274  else if(!spikeIdString.compare("kSwissCross")) spikeCfg.spikeId = EcalSeverityLevelAlgo::kSwissCross ;
275  else if(!spikeIdString.compare("kSwissCrossBordersIncluded")) spikeCfg.spikeId = EcalSeverityLevelAlgo::kSwissCrossBordersIncluded ;
276  else
277  {
279  edm::LogWarning("GsfElectronAlgo|SpikeRemovalForIsolation")
280  << "Cannot find the requested method. kSwissCross set instead." ;
281  }
282  spikeCfg.recHitFlagsToBeExcluded = cfg.getParameter<std::vector<int> >("recHitFlagsToBeExcluded") ;
283 
284  // function for corrector
285  EcalClusterFunctionBaseClass * superClusterErrorFunction = 0 ;
286  std::string superClusterErrorFunctionName
287  = cfg.getParameter<std::string>("superClusterErrorFunction") ;
288  if (superClusterErrorFunctionName!="")
289  {
290  superClusterErrorFunction
291  = EcalClusterFunctionFactory::get()->create(superClusterErrorFunctionName,cfg) ;
292  }
293 
294  // create algo
295  algo_ = new GsfElectronAlgo
296  ( inputCfg_, strategyCfg_,
297  cutsCfg_,cutsCfgPflow_,
298  hcalCfg_,hcalCfgPflow_,
299  isoCfg,spikeCfg,
300  superClusterErrorFunction ) ;
301  }
302 
304  { delete algo_ ; }
305 
307  {
308  // check configuration
310  {
313  event.getByLabel(inputCfg_.pfMVA,pfMva) ;
314  checkPfTranslatorParameters(pfMva.provenance()->psetID()) ;
315  }
317  {
320  event.getByLabel(inputCfg_.seedsTag,seeds) ;
321  if (!seeds.isValid())
322  {
323  edm::LogWarning("GsfElectronAlgo|UnreachableSeedsProvenance")
324  <<"Cannot check consistency of parameters with ecal seeding ones,"
325  <<" because the original collection of seeds is not any more available." ;
326  }
327  else
328  {
330  }
331  }
332 
333  // init the algo
334  algo_->checkSetup(setup) ;
335  algo_->beginEvent(event) ;
336  }
337 
339  {
340  // all electrons
341  algo_->displayInternalElectrons("GsfElectronAlgo Info (before preselection)") ;
342 
343  // preselection
345  {
347  algo_->displayInternalElectrons("GsfElectronAlgo Info (after preselection)") ;
348  }
349 
350  // ambiguity
353  {
355  algo_->displayInternalElectrons("GsfElectronAlgo Info (after amb. solving)") ;
356  }
357 
358  // final filling
359  std::auto_ptr<GsfElectronCollection> finalCollection( new GsfElectronCollection ) ;
360  algo_->copyElectrons(*finalCollection) ;
361  event.put(finalCollection) ;
362  }
363 
365  {
366  algo_->endEvent() ;
367  }
368 
370  {
372  edm::pset::Registry::instance()->getMapped(psetid,pset) ;
373  edm::ParameterSet mvaBlock = pset.getParameter<edm::ParameterSet>("MVACutBlock") ;
374  double pfTranslatorMinMva = mvaBlock.getParameter<double>("MVACut") ;
375  double pfTranslatorUndefined = -99. ;
376  if (strategyCfg_.applyPreselection&&(cutsCfgPflow_.minMVA<pfTranslatorMinMva))
377  {
378  // For pure tracker seeded electrons, if MVA is under translatorMinMva, there is no supercluster
379  // of any kind available, so GsfElectronCoreProducer has already discarded the electron.
380  edm::LogWarning("GsfElectronAlgo|MvaCutTooLow")
381  <<"Parameter minMVAPflow will have no effect on purely tracker seeded electrons."
382  <<" It is inferior to the cut already applied by PFlow translator." ;
383  }
384  if (strategyCfg_.applyPreselection&&(cutsCfg_.minMVA<pfTranslatorMinMva))
385  {
386  // For ecal seeded electrons, there is a cluster and GsfElectronCoreProducer has kept all electrons,
387  // but when MVA is under translatorMinMva, the translator has not stored the supercluster and
388  // forced the MVA value to translatorUndefined
389  if (cutsCfg_.minMVA>pfTranslatorUndefined)
390  {
391  edm::LogWarning("GsfElectronAlgo|IncompletePflowInformation")
392  <<"Parameter minMVA is inferior to the cut applied by PFlow translator."
393  <<" Some ecal (and eventually tracker) seeded electrons may lack their MVA value and PFlow supercluster." ;
394  }
395  else
396  {
397  // the MVA value has been forced to translatorUndefined, inferior minMVAPflow
398  // so the cut actually applied is the PFlow one
399  throw cms::Exception("GsfElectronAlgo|BadMvaCut")
400  <<"Parameter minMVA is inferior to the lowest possible value."
401  <<" Every electron will be blessed whatever other criteria." ;
402  }
403  }
404  }
405 
407  {
409  edm::pset::Registry::instance()->getMapped(psetid,pset) ;
410  edm::ParameterSet seedConfiguration = pset.getParameter<edm::ParameterSet>("SeedConfiguration") ;
411  edm::ParameterSet orderedHitsFactoryPSet = seedConfiguration.getParameter<edm::ParameterSet>("OrderedHitsFactoryPSet") ;
412  //edm::ParameterSet seedParameters = seedConfiguration.getParameter<edm::ParameterSet>("ecalDrivenElectronSeedsParameters") ;
413 
414  if (seedConfiguration.getParameter<bool>("applyHOverECut"))
415  {
416  if ((hcalCfg_.hOverEConeSize!=0)&&(hcalCfg_.hOverEConeSize!=seedConfiguration.getParameter<double>("hOverEConeSize")))
417  { edm::LogWarning("GsfElectronAlgo|InconsistentParameters") <<"The H/E cone size ("<<hcalCfg_.hOverEConeSize<<") is different from ecal seeding ("<<seedConfiguration.getParameter<double>("hOverEConeSize")<<")." ; }
418  if (cutsCfg_.maxHOverEBarrel<seedConfiguration.getParameter<double>("maxHOverEBarrel"))
419  { edm::LogWarning("GsfElectronAlgo|InconsistentParameters") <<"The max barrel H/E is lower than during ecal seeding." ; }
420  if (cutsCfg_.maxHOverEEndcaps<seedConfiguration.getParameter<double>("maxHOverEEndcaps"))
421  { edm::LogWarning("GsfElectronAlgo|InconsistentParameters") <<"The max endcaps H/E is lower than during ecal seeding." ; }
422  }
423 
424  if (cutsCfg_.minSCEtBarrel<seedConfiguration.getParameter<double>("SCEtCut"))
425  { edm::LogWarning("GsfElectronAlgo|InconsistentParameters") <<"The minimum super-cluster Et in barrel is lower than during ecal seeding." ; }
426  if (cutsCfg_.minSCEtEndcaps<seedConfiguration.getParameter<double>("SCEtCut"))
427  { edm::LogWarning("GsfElectronAlgo|InconsistentParameters") <<"The minimum super-cluster Et in endcaps is lower than during ecal seeding." ; }
428  }
429 
430 
T getParameter(std::string const &) const
void checkEcalSeedingParameters(edm::ParameterSetID const &)
static void fillDescription(edm::ParameterSetDescription &)
void beginEvent(edm::Event &)
bool getMapped(key_type const &k, value_type &result) const
GsfElectronBaseProducer(const edm::ParameterSet &)
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
ParameterSetID psetID() const
Definition: Provenance.cc:56
GsfElectronAlgo::InputTagsConfiguration inputCfg_
GsfElectronAlgo::CutsConfiguration cutsCfg_
tuple pset
Definition: CrabTask.py:85
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
bool isValid() const
Definition: HandleBase.h:76
ElectronHcalHelper::Configuration hcalCfg_
ElectronHcalHelper::Configuration hcalCfgPflow_
void checkPfTranslatorParameters(edm::ParameterSetID const &)
GsfElectronAlgo::StrategyConfiguration strategyCfg_
void beginEvent(edm::Event &, const edm::EventSetup &)
void removeAmbiguousElectrons()
void displayInternalElectrons(const std::string &title) const
void removeNotPreselectedElectrons()
static ThreadSafeRegistry * instance()
void copyElectrons(reco::GsfElectronCollection &)
void setAmbiguityData(bool ignoreNotPreselected=true)
T get(const Candidate &c)
Definition: component.h:56
GsfElectronAlgo::CutsConfiguration cutsCfgPflow_
Provenance const * provenance() const
Definition: HandleBase.h:84
void checkSetup(const edm::EventSetup &)