CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PATPhotonProducer.cc
Go to the documentation of this file.
1 //
2 //
3 
9 
15 
18 
21 
22 #include "TVector2.h"
24 
25 #include <memory>
26 
27 using namespace pat;
28 
30  isolator_(iConfig.exists("userIsolation") ? iConfig.getParameter<edm::ParameterSet>("userIsolation") : edm::ParameterSet(), consumesCollector(), false) ,
31  useUserData_(iConfig.exists("userData"))
32 {
33  // initialize the configurables
34  photonToken_ = consumes<edm::View<reco::Photon> >(iConfig.getParameter<edm::InputTag>("photonSource"));
35  electronToken_ = consumes<reco::GsfElectronCollection>(edm::InputTag("gedGsfElectrons"));
36  hConversionsToken_ = consumes<reco::ConversionCollection>(edm::InputTag("allConversions"));
37  beamLineToken_ = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamLineSrc"));
38  embedSuperCluster_ = iConfig.getParameter<bool>("embedSuperCluster");
39  embedSeedCluster_ = iConfig.getParameter<bool>( "embedSeedCluster" );
40  embedBasicClusters_ = iConfig.getParameter<bool>( "embedBasicClusters" );
41  embedPreshowerClusters_ = iConfig.getParameter<bool>( "embedPreshowerClusters" );
42  embedRecHits_ = iConfig.getParameter<bool>( "embedRecHits" );
43  reducedBarrelRecHitCollection_ = iConfig.getParameter<edm::InputTag>("reducedBarrelRecHitCollection");
44  reducedBarrelRecHitCollectionToken_ = mayConsume<EcalRecHitCollection>(reducedBarrelRecHitCollection_);
45  reducedEndcapRecHitCollection_ = iConfig.getParameter<edm::InputTag>("reducedEndcapRecHitCollection");
46  reducedEndcapRecHitCollectionToken_ = mayConsume<EcalRecHitCollection>(reducedEndcapRecHitCollection_);
47  // MC matching configurables
48  addGenMatch_ = iConfig.getParameter<bool>( "addGenMatch" );
49  if (addGenMatch_) {
50  embedGenMatch_ = iConfig.getParameter<bool>( "embedGenMatch" );
51  if (iConfig.existsAs<edm::InputTag>("genParticleMatch")) {
53  }
54  else {
55  genMatchTokens_ = edm::vector_transform(iConfig.getParameter<std::vector<edm::InputTag> >( "genParticleMatch" ), [this](edm::InputTag const & tag){return consumes<edm::Association<reco::GenParticleCollection> >(tag);});
56  }
57  }
58  // Efficiency configurables
59  addEfficiencies_ = iConfig.getParameter<bool>("addEfficiencies");
60  if (addEfficiencies_) {
61  efficiencyLoader_ = pat::helper::EfficiencyLoader(iConfig.getParameter<edm::ParameterSet>("efficiencies"), consumesCollector());
62  }
63  // photon ID configurables
64  addPhotonID_ = iConfig.getParameter<bool>( "addPhotonID" );
65  if (addPhotonID_) {
66  // it might be a single photon ID
67  if (iConfig.existsAs<edm::InputTag>("photonIDSource")) {
68  photIDSrcs_.push_back(NameTag("", iConfig.getParameter<edm::InputTag>("photonIDSource")));
69  }
70  // or there might be many of them
71  if (iConfig.existsAs<edm::ParameterSet>("photonIDSources")) {
72  // please don't configure me twice
73  if (!photIDSrcs_.empty()){
74  throw cms::Exception("Configuration") << "PATPhotonProducer: you can't specify both 'photonIDSource' and 'photonIDSources'\n";
75  }
76  // read the different photon ID names
77  edm::ParameterSet idps = iConfig.getParameter<edm::ParameterSet>("photonIDSources");
78  std::vector<std::string> names = idps.getParameterNamesForType<edm::InputTag>();
79  for (std::vector<std::string>::const_iterator it = names.begin(), ed = names.end(); it != ed; ++it) {
80  photIDSrcs_.push_back(NameTag(*it, idps.getParameter<edm::InputTag>(*it)));
81  }
82  }
83  // but in any case at least once
84  if (photIDSrcs_.empty()) throw cms::Exception("Configuration") <<
85  "PATPhotonProducer: id addPhotonID is true, you must specify either:\n" <<
86  "\tInputTag photonIDSource = <someTag>\n" << "or\n" <<
87  "\tPSet photonIDSources = { \n" <<
88  "\t\tInputTag <someName> = <someTag> // as many as you want \n " <<
89  "\t}\n";
90  }
91  photIDTokens_ = edm::vector_transform(photIDSrcs_, [this](NameTag const & tag){return mayConsume<edm::ValueMap<Bool_t> >(tag.second);});
92  // Resolution configurables
93  addResolutions_ = iConfig.getParameter<bool>("addResolutions");
94  if (addResolutions_) {
95  resolutionLoader_ = pat::helper::KinResolutionsLoader(iConfig.getParameter<edm::ParameterSet>("resolutions"));
96  }
97  // Check to see if the user wants to add user data
98  if ( useUserData_ ) {
99  userDataHelper_ = PATUserDataHelper<Photon>(iConfig.getParameter<edm::ParameterSet>("userData"), consumesCollector());
100  }
101  // produces vector of photons
102  produces<std::vector<Photon> >();
103 
104  // read isoDeposit labels, for direct embedding
105  readIsolationLabels(iConfig, "isoDeposits", isoDepositLabels_, isoDepositTokens_);
106  // read isolation value labels, for direct embedding
107  readIsolationLabels(iConfig, "isolationValues", isolationValueLabels_, isolationValueTokens_);
108 
109 }
110 
111 PATPhotonProducer::~PATPhotonProducer() {
112 }
113 
115 {
116  // switch off embedding (in unschedules mode)
117  if (iEvent.isRealData()){
118  addGenMatch_ = false;
119  embedGenMatch_ = false;
120  }
121 
122  edm::ESHandle<CaloTopology> theCaloTopology;
123  iSetup.get<CaloTopologyRecord>().get(theCaloTopology);
124  ecalTopology_ = & (*theCaloTopology);
125 
126  // Get the vector of Photon's from the event
128  iEvent.getByToken(photonToken_, photons);
129 
130  edm::InputTag reducedEBRecHitCollection(std::string("reducedEcalRecHitsEB"));
131  edm::InputTag reducedEERecHitCollection(std::string("reducedEcalRecHitsEE"));
133 
134  // Get calo geometry
135  edm::ESHandle<CaloGeometry> theCaloGeometry;
136  iSetup.get<CaloGeometryRecord>().get(theCaloGeometry);
137  ecalGeometry_ = & (*theCaloGeometry);
138 
139  // for conversion veto selection
141  iEvent.getByToken(hConversionsToken_, hConversions);
142 
143  // Get the collection of electrons from the event
145  iEvent.getByToken(electronToken_, hElectrons);
146 
147  // Get the beamspot
148  edm::Handle<reco::BeamSpot> beamSpotHandle;
149  iEvent.getByToken(beamLineToken_, beamSpotHandle);
150 
151  // prepare the MC matching
152  std::vector<edm::Handle<edm::Association<reco::GenParticleCollection> > >genMatches(genMatchTokens_.size());
153  if (addGenMatch_) {
154  for (size_t j = 0, nd = genMatchTokens_.size(); j < nd; ++j) {
155  iEvent.getByToken(genMatchTokens_[j], genMatches[j]);
156  }
157  }
158 
159  if (isolator_.enabled()) isolator_.beginEvent(iEvent,iSetup);
160 
162  if (resolutionLoader_.enabled()) resolutionLoader_.newEvent(iEvent, iSetup);
163 
164  IsoDepositMaps deposits(isoDepositTokens_.size());
165  for (size_t j = 0, nd = isoDepositTokens_.size(); j < nd; ++j) {
166  iEvent.getByToken(isoDepositTokens_[j], deposits[j]);
167  }
168 
169  IsolationValueMaps isolationValues(isolationValueTokens_.size());
170  for (size_t j = 0; j<isolationValueTokens_.size(); ++j) {
171  iEvent.getByToken(isolationValueTokens_[j], isolationValues[j]);
172  }
173 
174 
175  // prepare ID extraction
176  std::vector<edm::Handle<edm::ValueMap<Bool_t> > > idhandles;
177  std::vector<pat::Photon::IdPair> ids;
178  if (addPhotonID_) {
179  idhandles.resize(photIDSrcs_.size());
180  ids.resize(photIDSrcs_.size());
181  for (size_t i = 0; i < photIDSrcs_.size(); ++i) {
182  iEvent.getByToken(photIDTokens_[i], idhandles[i]);
183  ids[i].first = photIDSrcs_[i].first;
184  }
185  }
186 
187  // loop over photons
188  std::vector<Photon> * PATPhotons = new std::vector<Photon>();
189  for (edm::View<reco::Photon>::const_iterator itPhoton = photons->begin(); itPhoton != photons->end(); itPhoton++) {
190  // construct the Photon from the ref -> save ref to original object
191  unsigned int idx = itPhoton - photons->begin();
192  edm::RefToBase<reco::Photon> photonRef = photons->refAt(idx);
193  edm::Ptr<reco::Photon> photonPtr = photons->ptrAt(idx);
194  Photon aPhoton(photonRef);
195  if (embedSuperCluster_) aPhoton.embedSuperCluster();
196  if (embedSeedCluster_) aPhoton.embedSeedCluster();
199 
200  std::vector<DetId> selectedCells;
201  bool barrel = itPhoton->isEB();
202  //loop over sub clusters
203  if (embedBasicClusters_) {
204  for (reco::CaloCluster_iterator clusIt = itPhoton->superCluster()->clustersBegin(); clusIt!=itPhoton->superCluster()->clustersEnd(); ++clusIt) {
205  //get seed (max energy xtal)
206  DetId seed = lazyTools.getMaximum(**clusIt).first;
207  //get all xtals in 5x5 window around the seed
208  std::vector<DetId> dets5x5 = (barrel) ? ecalTopology_->getSubdetectorTopology(DetId::Ecal,EcalBarrel)->getWindow(seed,5,5):
210  selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
211 
212  //get all xtals belonging to cluster
213  for (const std::pair<DetId, float> &hit : (*clusIt)->hitsAndFractions()) {
214  selectedCells.push_back(hit.first);
215  }
216  }
217  }
218 
219  //remove duplicates
220  std::sort(selectedCells.begin(),selectedCells.end());
221  std::unique(selectedCells.begin(),selectedCells.end());
222 
223  // Retrieve the corresponding RecHits
224 
226  float cryPhi, cryEta, thetatilt, phitilt;
227  int ieta, iphi;
228 
229  switch( photonRef->superCluster()->seed()->hitsAndFractions().at(0).first.subdetId() ) {
230  case EcalBarrel:
231  {
233  ecl_.localCoordsEB( *photonRef->superCluster()->seed(), *ecalGeometry_, cryEta, cryPhi, ieta, iphi, thetatilt, phitilt);
234  }
235  break;
236  case EcalEndcap:
237  {
239  }
240  break;
241  default:
242  edm::LogError("PFECALSuperClusterProducer::calculateRegressedEnergy") << "Supercluster seed is either EB nor EE!" << std::endl;
243  }
244 
245  EcalRecHitCollection selectedRecHits;
246  const EcalRecHitCollection *recHits = rechitsH.product();
247 
248  unsigned nSelectedCells = selectedCells.size();
249  for (unsigned icell = 0 ; icell < nSelectedCells ; ++icell) {
250  EcalRecHitCollection::const_iterator it = recHits->find( selectedCells[icell] );
251  if ( it != recHits->end() ) {
252  selectedRecHits.push_back(*it);
253  }
254  }
255  selectedRecHits.sort();
256  if (embedRecHits_) aPhoton.embedRecHits(& selectedRecHits);
257 
258  // store the match to the generated final state muons
259  if (addGenMatch_) {
260  for(size_t i = 0, n = genMatches.size(); i < n; ++i) {
261  reco::GenParticleRef genPhoton = (*genMatches[i])[photonRef];
262  aPhoton.addGenParticleRef(genPhoton);
263  }
264  if (embedGenMatch_) aPhoton.embedGenParticle();
265  }
266 
267  if (efficiencyLoader_.enabled()) {
268  efficiencyLoader_.setEfficiencies( aPhoton, photonRef );
269  }
270 
271  if (resolutionLoader_.enabled()) {
273  }
274 
275  // here comes the extra functionality
276  if (isolator_.enabled()) {
277  isolator_.fill(*photons, idx, isolatorTmpStorage_);
278  typedef pat::helper::MultiIsolator::IsolationValuePairs IsolationValuePairs;
279  // better to loop backwards, so the vector is resized less times
280  for (IsolationValuePairs::const_reverse_iterator it = isolatorTmpStorage_.rbegin(), ed = isolatorTmpStorage_.rend(); it != ed; ++it) {
281  aPhoton.setIsolation(it->first, it->second);
282  }
283  }
284 
285  for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
286  aPhoton.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[photonRef]);
287  }
288 
289  for (size_t j = 0; j<isolationValues.size(); ++j) {
290  aPhoton.setIsolation(isolationValueLabels_[j].first,(*isolationValues[j])[photonRef]);
291  }
292 
293  // add photon ID info
294  if (addPhotonID_) {
295  for (size_t i = 0; i < photIDSrcs_.size(); ++i) {
296  ids[i].second = (*idhandles[i])[photonRef];
297  }
298  aPhoton.setPhotonIDs(ids);
299  }
300 
301  if ( useUserData_ ) {
302  userDataHelper_.add( aPhoton, iEvent, iSetup );
303  }
304 
305  // set conversion veto selection
306  bool passelectronveto = false;
307  if( hConversions.isValid()){
308  // this is recommended method
309  passelectronveto = !ConversionTools::hasMatchedPromptElectron(photonRef->superCluster(), hElectrons, hConversions, beamSpotHandle->position());
310  }
311  aPhoton.setPassElectronVeto( passelectronveto );
312 
313  // set electron veto using pixel seed (not recommended but many analysis groups are still using since it is powerful method to remove electrons)
314  aPhoton.setHasPixelSeed( photonRef->hasPixelSeed() );
315 
316  // set seed energy
317  aPhoton.setSeedEnergy( photonRef->superCluster()->seed()->energy() );
318 
319  // prepare input variables for regression energy correction
320  float maxDR=999., maxDRDPhi=999., maxDRDEta=999., maxDRRawEnergy=0.;
321  float subClusRawE[3], subClusDPhi[3], subClusDEta[3];
322  memset(subClusRawE,0,3*sizeof(float));
323  memset(subClusDPhi,0,3*sizeof(float));
324  memset(subClusDEta,0,3*sizeof(float));
325  size_t iclus=0;
326  for( auto clus = photonRef->superCluster()->clustersBegin()+1; clus != photonRef->superCluster()->clustersEnd(); ++clus ) {
327  const float this_deta = (*clus)->eta() - photonRef->superCluster()->seed()->eta();
328  const float this_dphi = TVector2::Phi_mpi_pi((*clus)->phi() - photonRef->superCluster()->seed()->phi());
329  const float this_dr = std::hypot(this_deta,this_dphi);
330  if(this_dr > maxDR || maxDR == 999.0f) {
331  maxDR = this_dr;
332  maxDRDEta = this_deta;
333  maxDRDPhi = this_dphi;
334  maxDRRawEnergy = (*clus)->energy();
335  }
336  if( iclus++ < 3 ) {
337  subClusRawE[iclus] = (*clus)->energy();
338  subClusDEta[iclus] = this_deta;
339  subClusDPhi[iclus] = this_dphi;
340  }
341  }
342 
343  const float eMax = EcalClusterTools::eMax( *photonRef->superCluster()->seed(), &*rechitsH );
344  const float e2nd = EcalClusterTools::e2nd( *photonRef->superCluster()->seed(), &*rechitsH );
345  const float e3x3 = EcalClusterTools::e3x3( *photonRef->superCluster()->seed(), &*rechitsH, ecalTopology_ );
346  const float eTop = EcalClusterTools::eTop( *photonRef->superCluster()->seed(), &*rechitsH, ecalTopology_ );
347  const float eBottom = EcalClusterTools::eBottom( *photonRef->superCluster()->seed(), &*rechitsH, ecalTopology_ );
348  const float eLeft = EcalClusterTools::eLeft( *photonRef->superCluster()->seed(), &*rechitsH, ecalTopology_ );
349  const float eRight = EcalClusterTools::eRight( *photonRef->superCluster()->seed(), &*rechitsH, ecalTopology_ );
350  std::vector<float> vCov = EcalClusterTools::localCovariances( *photonRef->superCluster()->seed(), &*rechitsH, ecalTopology_ );
351  const float see = (isnan(vCov[0]) ? 0. : sqrt(vCov[0]));
352  const float spp = (isnan(vCov[2]) ? 0. : sqrt(vCov[2]));
353  const float sep = vCov[1];
354 
355  // set input variables for regression energy correction
356  aPhoton.setEMax( eMax );
357  aPhoton.setE2nd( e2nd );
358  aPhoton.setE3x3( e3x3 );
359  aPhoton.setETop( eTop );
360  aPhoton.setEBottom( eBottom );
361  aPhoton.setELeft( eLeft );
362  aPhoton.setERight( eRight );
363  aPhoton.setSee( see );
364  aPhoton.setSpp( spp );
365  aPhoton.setSep( sep );
366 
367  aPhoton.setMaxDR( maxDR );
368  aPhoton.setMaxDRDPhi( maxDRDPhi );
369  aPhoton.setMaxDRDEta( maxDRDEta );
370  aPhoton.setMaxDRRawEnergy( maxDRRawEnergy );
371  aPhoton.setSubClusRawE1( subClusRawE[0] );
372  aPhoton.setSubClusRawE2( subClusRawE[1] );
373  aPhoton.setSubClusRawE3( subClusRawE[2] );
374  aPhoton.setSubClusDPhi1( subClusDPhi[0] );
375  aPhoton.setSubClusDPhi2( subClusDPhi[1] );
376  aPhoton.setSubClusDPhi3( subClusDPhi[2] );
377  aPhoton.setSubClusDEta1( subClusDEta[0] );
378  aPhoton.setSubClusDEta2( subClusDEta[1] );
379  aPhoton.setSubClusDEta3( subClusDEta[2] );
380 
381  aPhoton.setCryPhi( cryPhi );
382  aPhoton.setCryEta( cryEta );
383  aPhoton.setIEta( ieta );
384  aPhoton.setIPhi( iphi );
385 
386  // add the Photon to the vector of Photons
387  PATPhotons->push_back(aPhoton);
388  }
389 
390  // sort Photons in ET
391  std::sort(PATPhotons->begin(), PATPhotons->end(), eTComparator_);
392 
393  // put genEvt object in Event
394  std::auto_ptr<std::vector<Photon> > myPhotons(PATPhotons);
395  iEvent.put(myPhotons);
397 
398 }
399 
400 // ParameterSet description for module
402 {
404  iDesc.setComment("PAT photon producer module");
405 
406  // input source
407  iDesc.add<edm::InputTag>("photonSource", edm::InputTag("no default"))->setComment("input collection");
408 
409  iDesc.add<edm::InputTag>("reducedBarrelRecHitCollection", edm::InputTag("reducedEcalRecHitsEB"));
410  iDesc.add<edm::InputTag>("reducedEndcapRecHitCollection", edm::InputTag("reducedEcalRecHitsEE"));
411 
412  iDesc.add<bool>("embedSuperCluster", true)->setComment("embed external super cluster");
413  iDesc.add<bool>("embedSeedCluster", true)->setComment("embed external seed cluster");
414  iDesc.add<bool>("embedBasicClusters", true)->setComment("embed external basic clusters");
415  iDesc.add<bool>("embedPreshowerClusters", true)->setComment("embed external preshower clusters");
416  iDesc.add<bool>("embedRecHits", true)->setComment("embed external RecHits");
417 
418  iDesc.add<edm::InputTag>("electronSource", edm::InputTag("no default"))->setComment("input collection");
419 
420  // MC matching configurables
421  iDesc.add<bool>("addGenMatch", true)->setComment("add MC matching");
422  iDesc.add<bool>("embedGenMatch", false)->setComment("embed MC matched MC information");
423  std::vector<edm::InputTag> emptySourceVector;
424  iDesc.addNode( edm::ParameterDescription<edm::InputTag>("genParticleMatch", edm::InputTag(), true) xor
425  edm::ParameterDescription<std::vector<edm::InputTag> >("genParticleMatch", emptySourceVector, true)
426  )->setComment("input with MC match information");
427 
429 
430  // photon ID configurables
431  iDesc.add<bool>("addPhotonID",true)->setComment("add photon ID variables");
432  edm::ParameterSetDescription photonIDSourcesPSet;
433  photonIDSourcesPSet.setAllowAnything();
434  iDesc.addNode( edm::ParameterDescription<edm::InputTag>("photonIDSource", edm::InputTag(), true) xor
435  edm::ParameterDescription<edm::ParameterSetDescription>("photonIDSources", photonIDSourcesPSet, true)
436  )->setComment("input with photon ID variables");
437 
438  // IsoDeposit configurables
439  edm::ParameterSetDescription isoDepositsPSet;
440  isoDepositsPSet.addOptional<edm::InputTag>("tracker");
441  isoDepositsPSet.addOptional<edm::InputTag>("ecal");
442  isoDepositsPSet.addOptional<edm::InputTag>("hcal");
443  isoDepositsPSet.addOptional<edm::InputTag>("pfAllParticles");
444  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedHadrons");
445  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedAll");
446  isoDepositsPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
447  isoDepositsPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
448  isoDepositsPSet.addOptional<edm::InputTag>("pfPhotons");
449  isoDepositsPSet.addOptional<std::vector<edm::InputTag> >("user");
450  iDesc.addOptional("isoDeposits", isoDepositsPSet);
451 
452  // isolation values configurables
453  edm::ParameterSetDescription isolationValuesPSet;
454  isolationValuesPSet.addOptional<edm::InputTag>("tracker");
455  isolationValuesPSet.addOptional<edm::InputTag>("ecal");
456  isolationValuesPSet.addOptional<edm::InputTag>("hcal");
457  isolationValuesPSet.addOptional<edm::InputTag>("pfAllParticles");
458  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedHadrons");
459  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedAll");
460  isolationValuesPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
461  isolationValuesPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
462  isolationValuesPSet.addOptional<edm::InputTag>("pfPhotons");
463  isolationValuesPSet.addOptional<std::vector<edm::InputTag> >("user");
464  iDesc.addOptional("isolationValues", isolationValuesPSet);
465 
466  // Efficiency configurables
467  edm::ParameterSetDescription efficienciesPSet;
468  efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
469  iDesc.add("efficiencies", efficienciesPSet);
470  iDesc.add<bool>("addEfficiencies", false);
471 
472  // Check to see if the user wants to add user data
473  edm::ParameterSetDescription userDataPSet;
475  iDesc.addOptional("userData", userDataPSet);
476 
477  edm::ParameterSetDescription isolationPSet;
478  isolationPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
479  iDesc.add("userIsolation", isolationPSet);
480 
481  iDesc.addNode( edm::ParameterDescription<edm::InputTag>("beamLineSrc", edm::InputTag(), true)
482  )->setComment("input with high level selection");
483 
484  descriptions.add("PATPhotonProducer", iDesc);
485 
486 }
487 
489 
virtual void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
T getParameter(std::string const &) const
void setSpp(float s)
Definition: Photon.h:253
void setComment(std::string const &value)
Assists in assimilating all pat::UserData into pat objects.
int i
Definition: DBlmapReader.cc:9
Analysis-level Photon class.
Definition: Photon.h:47
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:81
void setIEta(float i)
Definition: Photon.h:295
pat::PATUserDataHelper< pat::Photon > userDataHelper_
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:184
void setSubClusDPhi3(float s)
Definition: Photon.h:278
static const HistoName names[]
void setE2nd(float e)
Definition: Photon.h:238
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
void setAllowAnything()
allow any parameter label/value pairs
void setSee(float s)
Definition: Photon.h:251
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
std::vector< edm::EDGetTokenT< edm::ValueMap< Bool_t > > > photIDTokens_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void setMaxDRRawEnergy(float m)
Definition: Photon.h:264
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
void embedBasicClusters()
method to store the electron&#39;s basic clusters
Definition: Photon.cc:251
static bool hasMatchedPromptElectron(const reco::SuperClusterRef &sc, const edm::Handle< reco::GsfElectronCollection > &eleCol, const edm::Handle< reco::ConversionCollection > &convCol, const math::XYZPoint &beamspot, float lxyMin=2.0, float probMin=1e-6, unsigned int nHitsBeforeVtxMax=0)
edm::EDGetTokenT< edm::View< reco::Photon > > photonToken_
std::vector< EcalRecHit >::const_iterator const_iterator
void setSubClusDPhi2(float s)
Definition: Photon.h:276
void push_back(T const &t)
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
reco::SuperClusterRef superCluster() const
Ref to SuperCluster.
Definition: Photon.cc:58
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
double Phi_mpi_pi(double x)
Definition: JetUtil.h:24
void embedSuperCluster()
method to store the photon&#39;s supercluster internally
Definition: Photon.cc:233
pat::helper::KinResolutionsLoader resolutionLoader_
GreaterByEt< Photon > eTComparator_
const CaloGeometry * ecalGeometry_
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
void setIPhi(float i)
Definition: Photon.h:293
void setResolutions(pat::PATObject< T > &obj) const
Sets the efficiencies for this object, using the reference to the original objects.
bool isRealData() const
Definition: EventBase.h:60
edm::InputTag reducedEndcapRecHitCollection_
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
static void fillDescription(edm::ParameterSetDescription &iDesc)
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:192
bool enabled() const
True if it has a non null configuration.
Definition: MultiIsolator.h:50
IsolationLabels isoDepositLabels_
void setIsolation(IsolationKeys key, float value)
Definition: Photon.h:168
void setComment(std::string const &value)
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
void setELeft(float e)
Definition: Photon.h:246
void setIsoDeposit(IsolationKeys key, const IsoDeposit &dep)
Sets the IsoDeposit associated with some key; if it is already existent, it is overwritten.
Definition: Photon.h:208
int iEvent
Definition: GenABIO.cc:243
void setEMax(float e)
Definition: Photon.h:236
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup)
const CaloTopology * ecalTopology_
void setERight(float e)
Definition: Photon.h:248
IsolationLabels isolationValueLabels_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
bool isnan(float x)
Definition: math.h:13
void setMaxDRDEta(float m)
Definition: Photon.h:262
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
void embedGenParticle()
Definition: PATObject.h:677
pat::helper::EfficiencyLoader efficiencyLoader_
T sqrt(T t)
Definition: SSEVec.h:48
void setPhotonIDs(const std::vector< IdPair > &ids)
Definition: Photon.h:110
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void setPassElectronVeto(bool flag)
Definition: Photon.h:225
void setETop(float e)
Definition: Photon.h:242
int j
Definition: DBlmapReader.cc:9
void embedSeedCluster()
method to store the electron&#39;s seedcluster internally
Definition: Photon.cc:242
double f[11][100]
void embedPreshowerClusters()
method to store the electron&#39;s preshower clusters
Definition: Photon.cc:263
void setSeedEnergy(float e)
Definition: Photon.h:233
void setSubClusDPhi1(float s)
Definition: Photon.h:274
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::vector< NameTag > photIDSrcs_
bool first
Definition: L1TdeRCT.cc:79
bool isValid() const
Definition: HandleBase.h:76
void setSubClusDEta1(float s)
Definition: Photon.h:281
std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
pat::helper::MultiIsolator isolator_
void setCryEta(float c)
Definition: Photon.h:290
const_iterator end() const
Definition: DetId.h:18
void addGenParticleRef(const reco::GenParticleRef &ref)
Definition: PATObject.h:661
void setCryPhi(float c)
Definition: Photon.h:288
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
void setHasPixelSeed(bool flag)
Definition: Photon.h:228
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.
void setSubClusDEta2(float s)
Definition: Photon.h:283
void setMaxDR(float m)
Definition: Photon.h:258
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
bool hasPixelSeed() const
Bool flagging photons having a non-zero size vector of Ref to electornPixel seeds.
Definition: Photon.h:75
const T & get() const
Definition: EventSetup.h:55
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
void setSubClusRawE2(float s)
Definition: Photon.h:269
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const CaloSubdetectorTopology * getSubdetectorTopology(const DetId &id) const
access the subdetector Topology for the given subdetector directly
Definition: CaloTopology.cc:26
void localCoordsEB(const reco::CaloCluster &bclus, const edm::EventSetup &es, float &etacry, float &phicry, int &ieta, int &iphi, float &thetatilt, float &phitilt) const
void setEBottom(float e)
Definition: Photon.h:244
std::vector< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
Definition: MultiIsolator.h:16
void setMaxDRDPhi(float m)
Definition: Photon.h:260
iterator find(key_type k)
void setSubClusDEta3(float s)
Definition: Photon.h:285
size_type size() const
void setSubClusRawE1(float s)
Definition: Photon.h:267
PATPhotonProducer(const edm::ParameterSet &iConfig)
void setSubClusRawE3(float s)
Definition: Photon.h:271
volatile std::atomic< bool > shutdown_flag false
edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
void newEvent(const edm::Event &event, const edm::EventSetup &setup) const
To be called for each new event, reads in the EventSetup object.
edm::InputTag reducedBarrelRecHitCollection_
void embedRecHits(const EcalRecHitCollection *rechits)
method to store the RecHits internally - can be called from the PATElectronProducer ...
Definition: Photon.cc:275
void newEvent(const edm::Event &event) const
To be called for each new event, reads in the ValueMaps for efficiencies.
void setE3x3(float e)
Definition: Photon.h:240
edm::EDGetTokenT< reco::ConversionCollection > hConversionsToken_
void setSep(float s)
Definition: Photon.h:255
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
Definition: MultiIsolator.h:82
Produces the pat::Photon.
edm::EDGetTokenT< reco::GsfElectronCollection > electronToken_