CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
pat::PATPhotonProducer Class Reference

Produces the pat::Photon. More...

#include "PhysicsTools/PatAlgos/interface/PATPhotonProducer.h"

Inheritance diagram for pat::PATPhotonProducer:
edm::stream::EDProducer<>

Public Member Functions

 PATPhotonProducer (const edm::ParameterSet &iConfig)
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
 ~PATPhotonProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Types

typedef std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
 
typedef std::pair< pat::IsolationKeys, edm::InputTagIsolationLabel
 
typedef std::vector< IsolationLabelIsolationLabels
 
typedef std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
 
typedef std::pair< std::string, edm::InputTagNameTag
 

Private Member Functions

template<typename T >
void readIsolationLabels (const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T > > > &tokens)
 

Private Attributes

bool addEfficiencies_
 
bool addGenMatch_
 
bool addPFClusterIso_
 
bool addPhotonID_
 
bool addPuppiIsolation_
 
bool addResolutions_
 
edm::EDGetTokenT< reco::BeamSpotbeamLineToken_
 
const CaloGeometryecalGeometry_
 
edm::EDGetTokenT< edm::ValueMap< float > > ecalPFClusterIsoT_
 
const CaloTopologyecalTopology_
 
pat::helper::EfficiencyLoader efficiencyLoader_
 
edm::EDGetTokenT< reco::GsfElectronCollectionelectronToken_
 
bool embedBasicClusters_
 
bool embedGenMatch_
 
bool embedPreshowerClusters_
 
bool embedRecHits_
 
bool embedSeedCluster_
 
bool embedSuperCluster_
 
GreaterByEt< PhotoneTComparator_
 
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
 
edm::EDGetTokenT< edm::ValueMap< float > > hcalPFClusterIsoT_
 
edm::EDGetTokenT< reco::ConversionCollectionhConversionsToken_
 
IsolationLabels isoDepositLabels_
 
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
 
IsolationLabels isolationValueLabels_
 
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
 
pat::helper::MultiIsolator isolator_
 
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
 
std::vector< NameTagphotIDSrcs_
 
std::vector< edm::EDGetTokenT< edm::ValueMap< Bool_t > > > photIDTokens_
 
edm::EDGetTokenT< edm::View< reco::Photon > > photonToken_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
 
edm::InputTag reducedBarrelRecHitCollection_
 
edm::EDGetTokenT< EcalRecHitCollectionreducedBarrelRecHitCollectionToken_
 
edm::InputTag reducedEndcapRecHitCollection_
 
edm::EDGetTokenT< EcalRecHitCollectionreducedEndcapRecHitCollectionToken_
 
pat::helper::KinResolutionsLoader resolutionLoader_
 
bool saveRegressionData_
 
pat::PATUserDataHelper< pat::PhotonuserDataHelper_
 
bool useUserData_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Produces the pat::Photon.

The PATPhotonProducer produces the analysis-level pat::Photon starting from a collection of objects of PhotonType.

Author
Steven Lowette
Version
Id
PATPhotonProducer.h,v 1.19 2009/06/25 23:49:35 gpetrucc Exp

Definition at line 50 of file PATPhotonProducer.h.

Member Typedef Documentation

Definition at line 89 of file PATPhotonProducer.h.

Definition at line 91 of file PATPhotonProducer.h.

Definition at line 92 of file PATPhotonProducer.h.

typedef std::vector<edm::Handle<edm::ValueMap<double> > > pat::PATPhotonProducer::IsolationValueMaps
private

Definition at line 90 of file PATPhotonProducer.h.

typedef std::pair<std::string, edm::InputTag> pat::PATPhotonProducer::NameTag
private

Definition at line 117 of file PATPhotonProducer.h.

Constructor & Destructor Documentation

PATPhotonProducer::PATPhotonProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 32 of file PATPhotonProducer.cc.

References addEfficiencies_, addGenMatch_, addPFClusterIso_, addPhotonID_, addPuppiIsolation_, addResolutions_, beamLineToken_, ecalPFClusterIsoT_, efficiencyLoader_, electronToken_, embedBasicClusters_, embedGenMatch_, embedPreshowerClusters_, embedRecHits_, embedSeedCluster_, embedSuperCluster_, Exception, edm::ParameterSet::existsAs(), genMatchTokens_, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNamesForType(), hcalPFClusterIsoT_, hConversionsToken_, isoDepositLabels_, isoDepositTokens_, isolationValueLabels_, isolationValueTokens_, names, photIDSrcs_, photIDTokens_, photonToken_, PUPPIIsolation_charged_hadrons_, PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_photons_, readIsolationLabels(), reducedBarrelRecHitCollection_, reducedBarrelRecHitCollectionToken_, reducedEndcapRecHitCollection_, reducedEndcapRecHitCollectionToken_, resolutionLoader_, saveRegressionData_, GlobalPosition_Frontier_DevDB_cff::tag, userDataHelper_, useUserData_, and edm::vector_transform().

33  : isolator_(iConfig.exists("userIsolation") ? iConfig.getParameter<edm::ParameterSet>("userIsolation")
35  consumesCollector(),
36  false),
37  useUserData_(iConfig.exists("userData")) {
38  // initialize the configurables
39  photonToken_ = consumes<edm::View<reco::Photon>>(iConfig.getParameter<edm::InputTag>("photonSource"));
40  electronToken_ = consumes<reco::GsfElectronCollection>(iConfig.getParameter<edm::InputTag>("electronSource"));
41  hConversionsToken_ = consumes<reco::ConversionCollection>(iConfig.getParameter<edm::InputTag>("conversionSource"));
42  beamLineToken_ = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamLineSrc"));
43  embedSuperCluster_ = iConfig.getParameter<bool>("embedSuperCluster");
44  embedSeedCluster_ = iConfig.getParameter<bool>("embedSeedCluster");
45  embedBasicClusters_ = iConfig.getParameter<bool>("embedBasicClusters");
46  embedPreshowerClusters_ = iConfig.getParameter<bool>("embedPreshowerClusters");
47  embedRecHits_ = iConfig.getParameter<bool>("embedRecHits");
48  reducedBarrelRecHitCollection_ = iConfig.getParameter<edm::InputTag>("reducedBarrelRecHitCollection");
49  reducedBarrelRecHitCollectionToken_ = mayConsume<EcalRecHitCollection>(reducedBarrelRecHitCollection_);
50  reducedEndcapRecHitCollection_ = iConfig.getParameter<edm::InputTag>("reducedEndcapRecHitCollection");
51  reducedEndcapRecHitCollectionToken_ = mayConsume<EcalRecHitCollection>(reducedEndcapRecHitCollection_);
52  // MC matching configurables
53  addGenMatch_ = iConfig.getParameter<bool>("addGenMatch");
54  if (addGenMatch_) {
55  embedGenMatch_ = iConfig.getParameter<bool>("embedGenMatch");
56  if (iConfig.existsAs<edm::InputTag>("genParticleMatch")) {
58  iConfig.getParameter<edm::InputTag>("genParticleMatch")));
59  } else {
61  iConfig.getParameter<std::vector<edm::InputTag>>("genParticleMatch"),
62  [this](edm::InputTag const &tag) { return consumes<edm::Association<reco::GenParticleCollection>>(tag); });
63  }
64  }
65  // Efficiency configurables
66  addEfficiencies_ = iConfig.getParameter<bool>("addEfficiencies");
67  if (addEfficiencies_) {
69  pat::helper::EfficiencyLoader(iConfig.getParameter<edm::ParameterSet>("efficiencies"), consumesCollector());
70  }
71  // PFCluster Isolation maps
72  addPuppiIsolation_ = iConfig.getParameter<bool>("addPuppiIsolation");
73  if (addPuppiIsolation_) {
75  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationChargedHadrons"));
77  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationNeutralHadrons"));
79  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationPhotons"));
80  }
81  addPFClusterIso_ = iConfig.getParameter<bool>("addPFClusterIso");
82  if (addPFClusterIso_) {
83  ecalPFClusterIsoT_ = consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("ecalPFClusterIsoMap"));
84  auto hcPFC = iConfig.getParameter<edm::InputTag>("hcalPFClusterIsoMap");
85  if (not hcPFC.label().empty())
86  hcalPFClusterIsoT_ = consumes<edm::ValueMap<float>>(hcPFC);
87  }
88 
89  // photon ID configurables
90  addPhotonID_ = iConfig.getParameter<bool>("addPhotonID");
91  if (addPhotonID_) {
92  // it might be a single photon ID
93  if (iConfig.existsAs<edm::InputTag>("photonIDSource")) {
94  photIDSrcs_.push_back(NameTag("", iConfig.getParameter<edm::InputTag>("photonIDSource")));
95  }
96  // or there might be many of them
97  if (iConfig.existsAs<edm::ParameterSet>("photonIDSources")) {
98  // please don't configure me twice
99  if (!photIDSrcs_.empty()) {
100  throw cms::Exception("Configuration")
101  << "PATPhotonProducer: you can't specify both 'photonIDSource' and 'photonIDSources'\n";
102  }
103  // read the different photon ID names
104  edm::ParameterSet idps = iConfig.getParameter<edm::ParameterSet>("photonIDSources");
105  std::vector<std::string> names = idps.getParameterNamesForType<edm::InputTag>();
106  for (std::vector<std::string>::const_iterator it = names.begin(), ed = names.end(); it != ed; ++it) {
107  photIDSrcs_.push_back(NameTag(*it, idps.getParameter<edm::InputTag>(*it)));
108  }
109  }
110  // but in any case at least once
111  if (photIDSrcs_.empty())
112  throw cms::Exception("Configuration") << "PATPhotonProducer: id addPhotonID is true, you must specify either:\n"
113  << "\tInputTag photonIDSource = <someTag>\n"
114  << "or\n"
115  << "\tPSet photonIDSources = { \n"
116  << "\t\tInputTag <someName> = <someTag> // as many as you want \n "
117  << "\t}\n";
118  }
120  photIDSrcs_, [this](NameTag const &tag) { return mayConsume<edm::ValueMap<Bool_t>>(tag.second); });
121  // Resolution configurables
122  addResolutions_ = iConfig.getParameter<bool>("addResolutions");
123  if (addResolutions_) {
125  }
126  // Check to see if the user wants to add user data
127  if (useUserData_) {
129  PATUserDataHelper<Photon>(iConfig.getParameter<edm::ParameterSet>("userData"), consumesCollector());
130  }
131  // produces vector of photons
132  produces<std::vector<Photon>>();
133 
134  // read isoDeposit labels, for direct embedding
135  readIsolationLabels(iConfig, "isoDeposits", isoDepositLabels_, isoDepositTokens_);
136  // read isolation value labels, for direct embedding
138 
139  saveRegressionData_ = iConfig.getParameter<bool>("saveRegressionData");
140 }
T getParameter(std::string const &) const
Assists in assimilating all pat::UserData into pat objects.
pat::PATUserDataHelper< pat::Photon > userDataHelper_
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:160
std::pair< std::string, edm::InputTag > NameTag
std::vector< edm::EDGetTokenT< edm::ValueMap< Bool_t > > > photIDTokens_
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
edm::EDGetTokenT< edm::View< reco::Photon > > photonToken_
bool exists(std::string const &parameterName) const
checks if a parameter exists
edm::EDGetTokenT< edm::ValueMap< float > > ecalPFClusterIsoT_
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
pat::helper::KinResolutionsLoader resolutionLoader_
edm::EDGetTokenT< edm::ValueMap< float > > hcalPFClusterIsoT_
const std::string names[nVars_]
edm::InputTag reducedEndcapRecHitCollection_
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:168
IsolationLabels isoDepositLabels_
IsolationLabels isolationValueLabels_
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
pat::helper::EfficiencyLoader efficiencyLoader_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
std::vector< NameTag > photIDSrcs_
pat::helper::MultiIsolator isolator_
void readIsolationLabels(const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T > > > &tokens)
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
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
edm::InputTag reducedBarrelRecHitCollection_
edm::EDGetTokenT< reco::ConversionCollection > hConversionsToken_
edm::EDGetTokenT< reco::GsfElectronCollection > electronToken_
PATPhotonProducer::~PATPhotonProducer ( )
override

Definition at line 142 of file PATPhotonProducer.cc.

142 {}

Member Function Documentation

void PATPhotonProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 476 of file PATPhotonProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addNode(), edm::ParameterSetDescription::addOptional(), DEFINE_FWK_MODULE, pat::helper::KinResolutionsLoader::fillDescription(), pat::PATUserDataHelper< ObjectType >::fillDescription(), edm::ParameterSetDescription::ifValue(), HLT_2018_cff::InputTag, or, edm::ParameterSetDescription::setAllowAnything(), edm::ParameterSetDescription::setComment(), and edm::ParameterDescriptionNode::setComment().

476  {
478  iDesc.setComment("PAT photon producer module");
479 
480  // input source
481  iDesc.add<edm::InputTag>("photonSource", edm::InputTag("no default"))->setComment("input collection");
482  iDesc.add<edm::InputTag>("electronSource", edm::InputTag("no default"))->setComment("input collection");
483  iDesc.add<edm::InputTag>("conversionSource", edm::InputTag("allConversions"))->setComment("input collection");
484 
485  iDesc.add<edm::InputTag>("reducedBarrelRecHitCollection", edm::InputTag("reducedEcalRecHitsEB"));
486  iDesc.add<edm::InputTag>("reducedEndcapRecHitCollection", edm::InputTag("reducedEcalRecHitsEE"));
487 
488  iDesc.ifValue(
489  edm::ParameterDescription<bool>("addPFClusterIso", false, true),
491  "ecalPFClusterIsoMap", edm::InputTag("photonEcalPFClusterIsolationProducer"), true) and
493  "hcalPFClusterIsoMap", edm::InputTag("photonHcalPFClusterIsolationProducer"), true)) or
494  false >> (edm::ParameterDescription<edm::InputTag>("ecalPFClusterIsoMap", edm::InputTag(""), true) and
495  edm::ParameterDescription<edm::InputTag>("hcalPFClusterIsoMap", edm::InputTag(""), true)));
496 
497  iDesc.ifValue(
498  edm::ParameterDescription<bool>("addPuppiIsolation", false, true),
500  "puppiIsolationChargedHadrons", edm::InputTag("egmPhotonPUPPIIsolation", "h+-DR030-"), true) and
502  "puppiIsolationNeutralHadrons", edm::InputTag("egmPhotonPUPPIIsolation", "h0-DR030-"), true) and
504  "puppiIsolationPhotons", edm::InputTag("egmPhotonPUPPIIsolation", "gamma-DR030-"), true)) or
505  false >> edm::EmptyGroupDescription());
506 
507  iDesc.add<bool>("embedSuperCluster", true)->setComment("embed external super cluster");
508  iDesc.add<bool>("embedSeedCluster", true)->setComment("embed external seed cluster");
509  iDesc.add<bool>("embedBasicClusters", true)->setComment("embed external basic clusters");
510  iDesc.add<bool>("embedPreshowerClusters", true)->setComment("embed external preshower clusters");
511  iDesc.add<bool>("embedRecHits", true)->setComment("embed external RecHits");
512 
513  // MC matching configurables
514  iDesc.add<bool>("addGenMatch", true)->setComment("add MC matching");
515  iDesc.add<bool>("embedGenMatch", false)->setComment("embed MC matched MC information");
516  std::vector<edm::InputTag> emptySourceVector;
517  iDesc
518  .addNode(edm::ParameterDescription<edm::InputTag>("genParticleMatch", edm::InputTag(), true) xor
519  edm::ParameterDescription<std::vector<edm::InputTag>>("genParticleMatch", emptySourceVector, true))
520  ->setComment("input with MC match information");
521 
523 
524  // photon ID configurables
525  iDesc.add<bool>("addPhotonID", true)->setComment("add photon ID variables");
526  edm::ParameterSetDescription photonIDSourcesPSet;
527  photonIDSourcesPSet.setAllowAnything();
528  iDesc
529  .addNode(edm::ParameterDescription<edm::InputTag>("photonIDSource", edm::InputTag(), true) xor
530  edm::ParameterDescription<edm::ParameterSetDescription>("photonIDSources", photonIDSourcesPSet, true))
531  ->setComment("input with photon ID variables");
532 
533  // IsoDeposit configurables
534  edm::ParameterSetDescription isoDepositsPSet;
535  isoDepositsPSet.addOptional<edm::InputTag>("tracker");
536  isoDepositsPSet.addOptional<edm::InputTag>("ecal");
537  isoDepositsPSet.addOptional<edm::InputTag>("hcal");
538  isoDepositsPSet.addOptional<edm::InputTag>("pfAllParticles");
539  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedHadrons");
540  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedAll");
541  isoDepositsPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
542  isoDepositsPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
543  isoDepositsPSet.addOptional<edm::InputTag>("pfPhotons");
544  isoDepositsPSet.addOptional<std::vector<edm::InputTag>>("user");
545  iDesc.addOptional("isoDeposits", isoDepositsPSet);
546 
547  // isolation values configurables
548  edm::ParameterSetDescription isolationValuesPSet;
549  isolationValuesPSet.addOptional<edm::InputTag>("tracker");
550  isolationValuesPSet.addOptional<edm::InputTag>("ecal");
551  isolationValuesPSet.addOptional<edm::InputTag>("hcal");
552  isolationValuesPSet.addOptional<edm::InputTag>("pfAllParticles");
553  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedHadrons");
554  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedAll");
555  isolationValuesPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
556  isolationValuesPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
557  isolationValuesPSet.addOptional<edm::InputTag>("pfPhotons");
558  isolationValuesPSet.addOptional<std::vector<edm::InputTag>>("user");
559  iDesc.addOptional("isolationValues", isolationValuesPSet);
560 
561  // Efficiency configurables
562  edm::ParameterSetDescription efficienciesPSet;
563  efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
564  iDesc.add("efficiencies", efficienciesPSet);
565  iDesc.add<bool>("addEfficiencies", false);
566 
567  // Check to see if the user wants to add user data
568  edm::ParameterSetDescription userDataPSet;
570  iDesc.addOptional("userData", userDataPSet);
571 
572  edm::ParameterSetDescription isolationPSet;
573  isolationPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
574  iDesc.add("userIsolation", isolationPSet);
575 
576  iDesc.addNode(edm::ParameterDescription<edm::InputTag>("beamLineSrc", edm::InputTag(), true))
577  ->setComment("input with high level selection");
578 
579  iDesc.add<bool>("saveRegressionData", true)->setComment("save regression input variables");
580 
581  descriptions.add("PATPhotonProducer", iDesc);
582 }
void setComment(std::string const &value)
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T >> cases)
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
void setAllowAnything()
allow any parameter label/value pairs
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
static void fillDescription(edm::ParameterSetDescription &iDesc)
void setComment(std::string const &value)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void PATPhotonProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 144 of file PATPhotonProducer.cc.

References addGenMatch_, pat::PATObject< ObjectType >::addGenParticleRef(), addPFClusterIso_, addPhotonID_, addPuppiIsolation_, Reference_intrackfit_cff::barrel, beamLineToken_, pat::helper::MultiIsolator::beginEvent(), EcalRegressionData::C1, EcalRegressionData::C2, EcalRegressionData::C3, CandIsolatorFromDeposits_cfi::deposits, EcalRegressionData::e2nd(), EcalRegressionData::e3x3(), EcalRegressionData::eBottom(), DetId::Ecal, EcalBarrel, EcalEndcap, ecalGeometry_, ecalPFClusterIsoT_, ecalTopology_, efficiencyLoader_, electronToken_, EcalRegressionData::eLeft(), EcalRegressionData::eMax(), pat::Photon::embedBasicClusters(), embedBasicClusters_, embedGenMatch_, pat::PATObject< ObjectType >::embedGenParticle(), pat::Photon::embedPreshowerClusters(), embedPreshowerClusters_, pat::Photon::embedRecHits(), embedRecHits_, pat::Photon::embedSeedCluster(), embedSeedCluster_, pat::Photon::embedSuperCluster(), embedSuperCluster_, pat::helper::EfficiencyLoader::enabled(), pat::helper::KinResolutionsLoader::enabled(), pat::helper::MultiIsolator::enabled(), edm::SortedCollection< T, SORT >::end(), pat::helper::MultiIsolator::endEvent(), EcalRegressionData::eRight(), eTComparator_, EcalRegressionData::eTop(), pat::helper::MultiIsolator::fill(), EcalRegressionData::fill(), edm::SortedCollection< T, SORT >::find(), dqmdumpme::first, genMatchTokens_, edm::EventSetup::get(), edm::Event::getByToken(), reco::Photon::getPflowIsolationVariables(), CaloTopology::getSubdetectorTopology(), CaloSubdetectorTopology::getWindow(), ConversionTools::hasMatchedPromptElectron(), reco::Photon::hasPixelSeed(), hcalPFClusterIsoT_, hConversionsToken_, mps_fire::i, photons_cff::ids, training_settings::idx, isoDepositLabels_, isoDepositTokens_, isolationValueLabels_, electronProducer_cff::isolationValues, isolationValueTokens_, isolator_, isolatorTmpStorage_, edm::EventBase::isRealData(), edm::EDGetTokenT< T >::isUninitialized(), edm::HandleBase::isValid(), dqmiolumiharvest::j, EcalRegressionData::maxSubClusDR(), EcalRegressionData::maxSubClusDRDEta(), EcalRegressionData::maxSubClusDRDPhi(), EcalRegressionData::maxSubClusDRRawEnergy(), eostools::move(), dqmiodumpmetadata::n, pat::helper::EfficiencyLoader::newEvent(), pat::helper::KinResolutionsLoader::newEvent(), photIDSrcs_, photIDTokens_, BPHMonitor_cfi::photons, photonToken_, reco::BeamSpot::position(), edm::Handle< T >::product(), PUPPIIsolation_charged_hadrons_, PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_photons_, edm::SortedCollection< T, SORT >::push_back(), edm::Event::put(), FastTrackerRecHitMaskProducer_cfi::recHits, reducedBarrelRecHitCollectionToken_, reducedEndcapRecHitCollectionToken_, resolutionLoader_, saveRegressionData_, SurveyInfoScenario_cff::seed, EcalRegressionData::seedCrysEtaOrX(), EcalRegressionData::seedCrysIEtaOrIX(), EcalRegressionData::seedCrysIPhiOrIY(), EcalRegressionData::seedCrysPhiOrY(), pat::Photon::setCryEta(), pat::Photon::setCryPhi(), pat::Photon::setE2nd(), pat::Photon::setE3x3(), pat::Photon::setEBottom(), pat::helper::EfficiencyLoader::setEfficiencies(), pat::Photon::setELeft(), pat::Photon::setEMax(), pat::Photon::setERight(), pat::Photon::setETop(), pat::Photon::setHasPixelSeed(), pat::Photon::setIEta(), pat::Photon::setIPhi(), pat::Photon::setIsoDeposit(), pat::Photon::setIsolation(), pat::Photon::setIsolationPUPPI(), pat::Photon::setMaxDR(), pat::Photon::setMaxDRDEta(), pat::Photon::setMaxDRDPhi(), pat::Photon::setMaxDRRawEnergy(), pat::Photon::setPassElectronVeto(), reco::Photon::setPflowIsolationVariables(), pat::Photon::setPhotonIDs(), pat::helper::KinResolutionsLoader::setResolutions(), pat::Photon::setSee(), pat::Photon::setSeedEnergy(), pat::Photon::setSep(), pat::Photon::setSpp(), pat::Photon::setSubClusDEta1(), pat::Photon::setSubClusDEta2(), pat::Photon::setSubClusDEta3(), pat::Photon::setSubClusDPhi1(), pat::Photon::setSubClusDPhi2(), pat::Photon::setSubClusDPhi3(), pat::Photon::setSubClusRawE1(), pat::Photon::setSubClusRawE2(), pat::Photon::setSubClusRawE3(), EcalRegressionData::sigmaIEtaIEta(), EcalRegressionData::sigmaIEtaIPhi(), EcalRegressionData::sigmaIPhiIPhi(), edm::SortedCollection< T, SORT >::size(), edm::SortedCollection< T, SORT >::sort(), EcalRegressionData::subClusDEta(), EcalRegressionData::subClusDPhi(), EcalRegressionData::subClusRawEnergy(), reco::Photon::PflowIsolationVariables::sumEcalClusterEt, reco::Photon::PflowIsolationVariables::sumHcalClusterEt, reco::Photon::superCluster(), tier0::unique(), userDataHelper_, and useUserData_.

144  {
145  // switch off embedding (in unschedules mode)
146  if (iEvent.isRealData()) {
147  addGenMatch_ = false;
148  embedGenMatch_ = false;
149  }
150 
151  edm::ESHandle<CaloTopology> theCaloTopology;
152  iSetup.get<CaloTopologyRecord>().get(theCaloTopology);
153  ecalTopology_ = &(*theCaloTopology);
154 
155  edm::ESHandle<CaloGeometry> theCaloGeometry;
156  iSetup.get<CaloGeometryRecord>().get(theCaloGeometry);
157  ecalGeometry_ = &(*theCaloGeometry);
158 
159  // Get the vector of Photon's from the event
161  iEvent.getByToken(photonToken_, photons);
162 
163  // for conversion veto selection
165  iEvent.getByToken(hConversionsToken_, hConversions);
166 
167  // Get the collection of electrons from the event
169  iEvent.getByToken(electronToken_, hElectrons);
170 
171  // Get the beamspot
172  edm::Handle<reco::BeamSpot> beamSpotHandle;
173  iEvent.getByToken(beamLineToken_, beamSpotHandle);
174 
175  EcalClusterLazyTools lazyTools(
177 
178  // prepare the MC matching
179  std::vector<edm::Handle<edm::Association<reco::GenParticleCollection>>> genMatches(genMatchTokens_.size());
180  if (addGenMatch_) {
181  for (size_t j = 0, nd = genMatchTokens_.size(); j < nd; ++j) {
182  iEvent.getByToken(genMatchTokens_[j], genMatches[j]);
183  }
184  }
185 
186  if (isolator_.enabled())
187  isolator_.beginEvent(iEvent, iSetup);
188 
190  efficiencyLoader_.newEvent(iEvent);
192  resolutionLoader_.newEvent(iEvent, iSetup);
193 
195  for (size_t j = 0, nd = isoDepositTokens_.size(); j < nd; ++j) {
196  iEvent.getByToken(isoDepositTokens_[j], deposits[j]);
197  }
198 
200  for (size_t j = 0; j < isolationValueTokens_.size(); ++j) {
202  }
203 
204  // prepare ID extraction
205  std::vector<edm::Handle<edm::ValueMap<Bool_t>>> idhandles;
206  std::vector<pat::Photon::IdPair> ids;
207  if (addPhotonID_) {
208  idhandles.resize(photIDSrcs_.size());
209  ids.resize(photIDSrcs_.size());
210  for (size_t i = 0; i < photIDSrcs_.size(); ++i) {
211  iEvent.getByToken(photIDTokens_[i], idhandles[i]);
212  ids[i].first = photIDSrcs_[i].first;
213  }
214  }
215 
216  //value maps for puppi isolation
217  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_charged_hadrons;
218  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_neutral_hadrons;
219  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_photons;
220  if (addPuppiIsolation_) {
221  iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons);
222  iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons);
223  iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons);
224  }
225 
226  // loop over photons
227  std::vector<Photon> *PATPhotons = new std::vector<Photon>();
228  for (edm::View<reco::Photon>::const_iterator itPhoton = photons->begin(); itPhoton != photons->end(); itPhoton++) {
229  // construct the Photon from the ref -> save ref to original object
230  unsigned int idx = itPhoton - photons->begin();
231  edm::RefToBase<reco::Photon> photonRef = photons->refAt(idx);
232  edm::Ptr<reco::Photon> photonPtr = photons->ptrAt(idx);
233  Photon aPhoton(photonRef);
234  auto phoPtr = photons->ptrAt(idx);
235  if (embedSuperCluster_)
236  aPhoton.embedSuperCluster();
237  if (embedSeedCluster_)
238  aPhoton.embedSeedCluster();
240  aPhoton.embedBasicClusters();
242  aPhoton.embedPreshowerClusters();
243 
244  std::vector<DetId> selectedCells;
245  bool barrel = itPhoton->isEB();
246  //loop over sub clusters
247  if (embedBasicClusters_) {
248  for (reco::CaloCluster_iterator clusIt = itPhoton->superCluster()->clustersBegin();
249  clusIt != itPhoton->superCluster()->clustersEnd();
250  ++clusIt) {
251  //get seed (max energy xtal)
252  DetId seed = lazyTools.getMaximum(**clusIt).first;
253  //get all xtals in 5x5 window around the seed
254  std::vector<DetId> dets5x5 =
257  selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
258 
259  //get all xtals belonging to cluster
260  for (const std::pair<DetId, float> &hit : (*clusIt)->hitsAndFractions()) {
261  selectedCells.push_back(hit.first);
262  }
263  }
264  }
265 
266  //remove duplicates
267  std::sort(selectedCells.begin(), selectedCells.end());
268  std::unique(selectedCells.begin(), selectedCells.end());
269 
270  // Retrieve the corresponding RecHits
271 
272  edm::Handle<EcalRecHitCollection> recHitsEBHandle;
273  iEvent.getByToken(reducedBarrelRecHitCollectionToken_, recHitsEBHandle);
274  edm::Handle<EcalRecHitCollection> recHitsEEHandle;
275  iEvent.getByToken(reducedEndcapRecHitCollectionToken_, recHitsEEHandle);
276 
277  //orginal code would throw an exception via the handle not being valid but now it'll just have a null pointer error
278  //should have little effect, if its not barrel or endcap, something very bad has happened elsewhere anyways
279  const EcalRecHitCollection *recHits = nullptr;
280  if (photonRef->superCluster()->seed()->hitsAndFractions().at(0).first.subdetId() == EcalBarrel)
281  recHits = recHitsEBHandle.product();
282  else if (photonRef->superCluster()->seed()->hitsAndFractions().at(0).first.subdetId() == EcalEndcap)
283  recHits = recHitsEEHandle.product();
284 
285  EcalRecHitCollection selectedRecHits;
286 
287  unsigned nSelectedCells = selectedCells.size();
288  for (unsigned icell = 0; icell < nSelectedCells; ++icell) {
289  EcalRecHitCollection::const_iterator it = recHits->find(selectedCells[icell]);
290  if (it != recHits->end()) {
291  selectedRecHits.push_back(*it);
292  }
293  }
294  selectedRecHits.sort();
295  if (embedRecHits_)
296  aPhoton.embedRecHits(&selectedRecHits);
297 
298  // store the match to the generated final state muons
299  if (addGenMatch_) {
300  for (size_t i = 0, n = genMatches.size(); i < n; ++i) {
301  reco::GenParticleRef genPhoton = (*genMatches[i])[photonRef];
302  aPhoton.addGenParticleRef(genPhoton);
303  }
304  if (embedGenMatch_)
305  aPhoton.embedGenParticle();
306  }
307 
308  if (efficiencyLoader_.enabled()) {
309  efficiencyLoader_.setEfficiencies(aPhoton, photonRef);
310  }
311 
312  if (resolutionLoader_.enabled()) {
314  }
315 
316  // here comes the extra functionality
317  if (isolator_.enabled()) {
318  isolator_.fill(*photons, idx, isolatorTmpStorage_);
319  typedef pat::helper::MultiIsolator::IsolationValuePairs IsolationValuePairs;
320  // better to loop backwards, so the vector is resized less times
321  for (IsolationValuePairs::const_reverse_iterator it = isolatorTmpStorage_.rbegin(),
322  ed = isolatorTmpStorage_.rend();
323  it != ed;
324  ++it) {
325  aPhoton.setIsolation(it->first, it->second);
326  }
327  }
328 
329  for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
330  aPhoton.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[photonRef]);
331  }
332 
333  for (size_t j = 0; j < isolationValues.size(); ++j) {
334  aPhoton.setIsolation(isolationValueLabels_[j].first, (*isolationValues[j])[photonRef]);
335  }
336 
337  // add photon ID info
338  if (addPhotonID_) {
339  for (size_t i = 0; i < photIDSrcs_.size(); ++i) {
340  ids[i].second = (*idhandles[i])[photonRef];
341  }
342  aPhoton.setPhotonIDs(ids);
343  }
344 
345  if (useUserData_) {
346  userDataHelper_.add(aPhoton, iEvent, iSetup);
347  }
348 
349  // set conversion veto selection
350  bool passelectronveto = false;
351  if (hConversions.isValid()) {
352  // this is recommended method
353  passelectronveto = !ConversionTools::hasMatchedPromptElectron(
354  photonRef->superCluster(), *hElectrons, *hConversions, beamSpotHandle->position());
355  }
356  aPhoton.setPassElectronVeto(passelectronveto);
357 
358  // set electron veto using pixel seed (not recommended but many analysis groups are still using since it is powerful method to remove electrons)
359  aPhoton.setHasPixelSeed(photonRef->hasPixelSeed());
360 
361  // set seed energy
362  aPhoton.setSeedEnergy(photonRef->superCluster()->seed()->energy());
363 
364  // set input variables for regression energy correction
365  if (saveRegressionData_) {
366  EcalRegressionData ecalRegData;
367  ecalRegData.fill(*(photonRef->superCluster()),
368  recHitsEBHandle.product(),
369  recHitsEEHandle.product(),
372  -1);
373 
374  aPhoton.setEMax(ecalRegData.eMax());
375  aPhoton.setE2nd(ecalRegData.e2nd());
376  aPhoton.setE3x3(ecalRegData.e3x3());
377  aPhoton.setETop(ecalRegData.eTop());
378  aPhoton.setEBottom(ecalRegData.eBottom());
379  aPhoton.setELeft(ecalRegData.eLeft());
380  aPhoton.setERight(ecalRegData.eRight());
381  aPhoton.setSee(ecalRegData.sigmaIEtaIEta());
382  aPhoton.setSep(
383  ecalRegData.sigmaIEtaIPhi() * ecalRegData.sigmaIEtaIEta() *
384  ecalRegData
385  .sigmaIPhiIPhi()); //there is a conflict on what sigmaIEtaIPhi actually is, regression and ID have it differently, this may change in later releases
386  aPhoton.setSpp(ecalRegData.sigmaIPhiIPhi());
387 
388  aPhoton.setMaxDR(ecalRegData.maxSubClusDR());
389  aPhoton.setMaxDRDPhi(ecalRegData.maxSubClusDRDPhi());
390  aPhoton.setMaxDRDEta(ecalRegData.maxSubClusDRDEta());
391  aPhoton.setMaxDRRawEnergy(ecalRegData.maxSubClusDRRawEnergy());
392  aPhoton.setSubClusRawE1(ecalRegData.subClusRawEnergy(EcalRegressionData::SubClusNr::C1));
393  aPhoton.setSubClusRawE2(ecalRegData.subClusRawEnergy(EcalRegressionData::SubClusNr::C2));
394  aPhoton.setSubClusRawE3(ecalRegData.subClusRawEnergy(EcalRegressionData::SubClusNr::C3));
395  aPhoton.setSubClusDPhi1(ecalRegData.subClusDPhi(EcalRegressionData::SubClusNr::C1));
396  aPhoton.setSubClusDPhi2(ecalRegData.subClusDPhi(EcalRegressionData::SubClusNr::C2));
397  aPhoton.setSubClusDPhi3(ecalRegData.subClusDPhi(EcalRegressionData::SubClusNr::C3));
398  aPhoton.setSubClusDEta1(ecalRegData.subClusDEta(EcalRegressionData::SubClusNr::C1));
399  aPhoton.setSubClusDEta2(ecalRegData.subClusDEta(EcalRegressionData::SubClusNr::C2));
400  aPhoton.setSubClusDEta3(ecalRegData.subClusDEta(EcalRegressionData::SubClusNr::C3));
401 
402  aPhoton.setCryPhi(ecalRegData.seedCrysPhiOrY());
403  aPhoton.setCryEta(ecalRegData.seedCrysEtaOrX());
404  aPhoton.setIEta(ecalRegData.seedCrysIEtaOrIX());
405  aPhoton.setIPhi(ecalRegData.seedCrysIPhiOrIY());
406  } else {
407  aPhoton.setEMax(0);
408  aPhoton.setE2nd(0);
409  aPhoton.setE3x3(0);
410  aPhoton.setETop(0);
411  aPhoton.setEBottom(0);
412  aPhoton.setELeft(0);
413  aPhoton.setERight(0);
414  aPhoton.setSee(0);
415  aPhoton.setSep(0);
416  aPhoton.setSpp(0);
417 
418  aPhoton.setMaxDR(0);
419  aPhoton.setMaxDRDPhi(0);
420  aPhoton.setMaxDRDEta(0);
421  aPhoton.setMaxDRRawEnergy(0);
422  aPhoton.setSubClusRawE1(0);
423  aPhoton.setSubClusRawE2(0);
424  aPhoton.setSubClusRawE3(0);
425  aPhoton.setSubClusDPhi1(0);
426  aPhoton.setSubClusDPhi2(0);
427  aPhoton.setSubClusDPhi3(0);
428  aPhoton.setSubClusDEta1(0);
429  aPhoton.setSubClusDEta2(0);
430  aPhoton.setSubClusDEta3(0);
431 
432  aPhoton.setCryPhi(0);
433  aPhoton.setCryEta(0);
434  aPhoton.setIEta(0);
435  aPhoton.setIPhi(0);
436  }
437 
438  if (addPuppiIsolation_)
439  aPhoton.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[phoPtr],
440  (*PUPPIIsolation_neutral_hadrons)[phoPtr],
441  (*PUPPIIsolation_photons)[phoPtr]);
442  else
443  aPhoton.setIsolationPUPPI(-999., -999., -999.);
444 
445  // Get PFCluster Isolation
446  if (addPFClusterIso_) {
447  reco::Photon::PflowIsolationVariables newPFIsol = aPhoton.getPflowIsolationVariables();
448  edm::Handle<edm::ValueMap<float>> ecalPFClusterIsoMapH;
449  iEvent.getByToken(ecalPFClusterIsoT_, ecalPFClusterIsoMapH);
450  newPFIsol.sumEcalClusterEt = (*ecalPFClusterIsoMapH)[photonRef];
451  edm::Handle<edm::ValueMap<float>> hcalPFClusterIsoMapH;
453  iEvent.getByToken(hcalPFClusterIsoT_, hcalPFClusterIsoMapH);
454  newPFIsol.sumHcalClusterEt = (*hcalPFClusterIsoMapH)[photonRef];
455  } else {
456  newPFIsol.sumHcalClusterEt = -999.;
457  }
458  aPhoton.setPflowIsolationVariables(newPFIsol);
459  }
460 
461  // add the Photon to the vector of Photons
462  PATPhotons->push_back(aPhoton);
463  }
464 
465  // sort Photons in ET
466  std::sort(PATPhotons->begin(), PATPhotons->end(), eTComparator_);
467 
468  // put genEvt object in Event
469  std::unique_ptr<std::vector<Photon>> myPhotons(PATPhotons);
470  iEvent.put(std::move(myPhotons));
471  if (isolator_.enabled())
473 }
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
float sigmaIPhiIPhi() const
void newEvent(const edm::Event &event)
To be called for each new event, reads in the ValueMaps for efficiencies.
const std::vector< float > & subClusRawEnergy() const
pat::PATUserDataHelper< pat::Photon > userDataHelper_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
float maxSubClusDRRawEnergy() const
float maxSubClusDRDEta() const
Definition: Photon.py:1
edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
std::vector< edm::EDGetTokenT< edm::ValueMap< Bool_t > > > photIDTokens_
void fill(const reco::SuperCluster &superClus, const EcalRecHitCollection *ebRecHits, const EcalRecHitCollection *eeRecHits, const CaloGeometry *geom, const CaloTopology *topology, const reco::VertexCollection *vertices)
static bool hasMatchedPromptElectron(const reco::SuperClusterRef &sc, const reco::GsfElectronCollection &eleCol, const reco::ConversionCollection &convCol, const math::XYZPoint &beamspot, bool allowCkfMatch=true, float lxyMin=2.0, float probMin=1e-6, unsigned int nHitsBeforeVtxMax=0)
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
edm::EDGetTokenT< edm::View< reco::Photon > > photonToken_
std::vector< EcalRecHit >::const_iterator const_iterator
float eLeft() const
edm::EDGetTokenT< edm::ValueMap< float > > ecalPFClusterIsoT_
void push_back(T const &t)
float seedCrysPhiOrY() const
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
pat::helper::KinResolutionsLoader resolutionLoader_
float sigmaIEtaIEta() const
edm::EDGetTokenT< edm::ValueMap< float > > hcalPFClusterIsoT_
GreaterByEt< Photon > eTComparator_
const CaloGeometry * ecalGeometry_
float sigmaIEtaIPhi() const
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
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:62
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
bool enabled() const
True if it has a non null configuration.
Definition: MultiIsolator.h:55
IsolationLabels isoDepositLabels_
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup)
const CaloTopology * ecalTopology_
float seedCrysIPhiOrIY() const
IsolationLabels isolationValueLabels_
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
pat::helper::EfficiencyLoader efficiencyLoader_
void newEvent(const edm::Event &event, const edm::EventSetup &setup)
To be called for each new event, reads in the EventSetup object.
float maxSubClusDR() const
def unique(seq, keepstr=True)
Definition: tier0.py:24
float seedCrysIEtaOrIX() const
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
float maxSubClusDRDPhi() const
std::vector< NameTag > photIDSrcs_
bool isValid() const
Definition: HandleBase.h:70
pat::helper::MultiIsolator isolator_
float seedCrysEtaOrX() const
const_iterator end() const
Definition: DetId.h:17
std::vector< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
Definition: MultiIsolator.h:17
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
T const * product() const
Definition: Handle.h:69
bool hasPixelSeed() const
Bool flagging photons having a non-zero size vector of Ref to electornPixel seeds.
Definition: Photon.h:75
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
const CaloSubdetectorTopology * getSubdetectorTopology(const DetId &id) const
access the subdetector Topology for the given subdetector directly
Definition: CaloTopology.cc:17
const std::vector< float > & subClusDEta() const
iterator find(key_type k)
const std::vector< float > & subClusDPhi() const
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
size_type size() const
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
float eRight() const
T get() const
Definition: EventSetup.h:73
bool isUninitialized() const
Definition: EDGetToken.h:70
const Point & position() const
position
Definition: BeamSpot.h:59
edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
def move(src, dest)
Definition: eostools.py:511
float eBottom() const
edm::EDGetTokenT< reco::ConversionCollection > hConversionsToken_
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
Definition: MultiIsolator.h:84
edm::EDGetTokenT< reco::GsfElectronCollection > electronToken_
template<typename T >
void pat::PATPhotonProducer::readIsolationLabels ( const edm::ParameterSet iConfig,
const char *  psetName,
IsolationLabels labels,
std::vector< edm::EDGetTokenT< edm::ValueMap< T > > > &  tokens 
)
private

fill the labels vector from the contents of the parameter set, for the isodeposit or isolation values embedding

Definition at line 137 of file PATPhotonProducer.h.

References pat::EcalIso, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), pat::HcalIso, crabWrapper::key, label, pat::PfAllParticleIso, pat::PfChargedAllIso, pat::PfChargedHadronIso, pat::PfGammaIso, pat::PfNeutralHadronIso, pat::PfPUChargedHadronIso, pat::TrackIso, pat::UserBaseIso, and edm::vector_transform().

Referenced by PATPhotonProducer().

140  {
141  labels.clear();
142 
143  if (iConfig.exists(psetName)) {
144  edm::ParameterSet depconf = iConfig.getParameter<edm::ParameterSet>(psetName);
145 
146  if (depconf.exists("tracker"))
147  labels.push_back(std::make_pair(pat::TrackIso, depconf.getParameter<edm::InputTag>("tracker")));
148  if (depconf.exists("ecal"))
149  labels.push_back(std::make_pair(pat::EcalIso, depconf.getParameter<edm::InputTag>("ecal")));
150  if (depconf.exists("hcal"))
151  labels.push_back(std::make_pair(pat::HcalIso, depconf.getParameter<edm::InputTag>("hcal")));
152  if (depconf.exists("pfAllParticles")) {
153  labels.push_back(std::make_pair(pat::PfAllParticleIso, depconf.getParameter<edm::InputTag>("pfAllParticles")));
154  }
155  if (depconf.exists("pfChargedHadrons")) {
156  labels.push_back(
157  std::make_pair(pat::PfChargedHadronIso, depconf.getParameter<edm::InputTag>("pfChargedHadrons")));
158  }
159  if (depconf.exists("pfChargedAll")) {
160  labels.push_back(std::make_pair(pat::PfChargedAllIso, depconf.getParameter<edm::InputTag>("pfChargedAll")));
161  }
162  if (depconf.exists("pfPUChargedHadrons")) {
163  labels.push_back(
164  std::make_pair(pat::PfPUChargedHadronIso, depconf.getParameter<edm::InputTag>("pfPUChargedHadrons")));
165  }
166  if (depconf.exists("pfNeutralHadrons")) {
167  labels.push_back(
168  std::make_pair(pat::PfNeutralHadronIso, depconf.getParameter<edm::InputTag>("pfNeutralHadrons")));
169  }
170  if (depconf.exists("pfPhotons")) {
171  labels.push_back(std::make_pair(pat::PfGammaIso, depconf.getParameter<edm::InputTag>("pfPhotons")));
172  }
173  if (depconf.exists("user")) {
174  std::vector<edm::InputTag> userdeps = depconf.getParameter<std::vector<edm::InputTag> >("user");
175  std::vector<edm::InputTag>::const_iterator it = userdeps.begin(), ed = userdeps.end();
177  for (; it != ed; ++it, ++key) {
178  labels.push_back(std::make_pair(pat::IsolationKeys(key), *it));
179  }
180  }
181 
182  tokens = edm::vector_transform(
183  labels, [this](IsolationLabel const& label) { return consumes<edm::ValueMap<T> >(label.second); });
184  }
185  tokens = edm::vector_transform(
186  labels, [this](IsolationLabel const& label) { return consumes<edm::ValueMap<T> >(label.second); });
187 }
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
IsolationKeys
Enum defining isolation keys.
Definition: Isolation.h:9
char const * label
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
std::pair< pat::IsolationKeys, edm::InputTag > IsolationLabel

Member Data Documentation

bool pat::PATPhotonProducer::addEfficiencies_
private

Definition at line 110 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer().

bool pat::PATPhotonProducer::addGenMatch_
private

Definition at line 82 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::addPFClusterIso_
private

Definition at line 77 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::addPhotonID_
private

Definition at line 116 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::addPuppiIsolation_
private

Definition at line 78 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::addResolutions_
private

Definition at line 113 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer().

edm::EDGetTokenT<reco::BeamSpot> pat::PATPhotonProducer::beamLineToken_
private

Definition at line 64 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

const CaloGeometry* pat::PATPhotonProducer::ecalGeometry_
private

Definition at line 129 of file PATPhotonProducer.h.

Referenced by produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATPhotonProducer::ecalPFClusterIsoT_
private

Definition at line 79 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

const CaloTopology* pat::PATPhotonProducer::ecalTopology_
private

Definition at line 128 of file PATPhotonProducer.h.

Referenced by produce().

pat::helper::EfficiencyLoader pat::PATPhotonProducer::efficiencyLoader_
private

Definition at line 111 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::EDGetTokenT<reco::GsfElectronCollection> pat::PATPhotonProducer::electronToken_
private

Definition at line 62 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::embedBasicClusters_
private

Definition at line 68 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::embedGenMatch_
private

Definition at line 83 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::embedPreshowerClusters_
private

Definition at line 69 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::embedRecHits_
private

Definition at line 70 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::embedSeedCluster_
private

Definition at line 67 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::embedSuperCluster_
private

Definition at line 66 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

GreaterByEt<Photon> pat::PATPhotonProducer::eTComparator_
private

Definition at line 87 of file PATPhotonProducer.h.

Referenced by produce().

std::vector<edm::EDGetTokenT<edm::Association<reco::GenParticleCollection> > > pat::PATPhotonProducer::genMatchTokens_
private

Definition at line 84 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATPhotonProducer::hcalPFClusterIsoT_
private

Definition at line 80 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::EDGetTokenT<reco::ConversionCollection> pat::PATPhotonProducer::hConversionsToken_
private

Definition at line 63 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

IsolationLabels pat::PATPhotonProducer::isoDepositLabels_
private

Definition at line 99 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

std::vector<edm::EDGetTokenT<edm::ValueMap<IsoDeposit> > > pat::PATPhotonProducer::isoDepositTokens_
private

Definition at line 96 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

IsolationLabels pat::PATPhotonProducer::isolationValueLabels_
private

Definition at line 100 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

std::vector<edm::EDGetTokenT<edm::ValueMap<double> > > pat::PATPhotonProducer::isolationValueTokens_
private

Definition at line 97 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

pat::helper::MultiIsolator pat::PATPhotonProducer::isolator_
private

Definition at line 94 of file PATPhotonProducer.h.

Referenced by produce().

pat::helper::MultiIsolator::IsolationValuePairs pat::PATPhotonProducer::isolatorTmpStorage_
private

Definition at line 95 of file PATPhotonProducer.h.

Referenced by produce().

std::vector<NameTag> pat::PATPhotonProducer::photIDSrcs_
private

Definition at line 118 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

std::vector<edm::EDGetTokenT<edm::ValueMap<Bool_t> > > pat::PATPhotonProducer::photIDTokens_
private

Definition at line 119 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::EDGetTokenT<edm::View<reco::Photon> > pat::PATPhotonProducer::photonToken_
private

Definition at line 61 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATPhotonProducer::PUPPIIsolation_charged_hadrons_
private

Definition at line 123 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATPhotonProducer::PUPPIIsolation_neutral_hadrons_
private

Definition at line 124 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATPhotonProducer::PUPPIIsolation_photons_
private

Definition at line 125 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::InputTag pat::PATPhotonProducer::reducedBarrelRecHitCollection_
private

Definition at line 72 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer().

edm::EDGetTokenT<EcalRecHitCollection> pat::PATPhotonProducer::reducedBarrelRecHitCollectionToken_
private

Definition at line 73 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

edm::InputTag pat::PATPhotonProducer::reducedEndcapRecHitCollection_
private

Definition at line 74 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer().

edm::EDGetTokenT<EcalRecHitCollection> pat::PATPhotonProducer::reducedEndcapRecHitCollectionToken_
private

Definition at line 75 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

pat::helper::KinResolutionsLoader pat::PATPhotonProducer::resolutionLoader_
private

Definition at line 114 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::saveRegressionData_
private

Definition at line 131 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

pat::PATUserDataHelper<pat::Photon> pat::PATPhotonProducer::userDataHelper_
private

Definition at line 126 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().

bool pat::PATPhotonProducer::useUserData_
private

Definition at line 121 of file PATPhotonProducer.h.

Referenced by PATPhotonProducer(), and produce().