CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Attributes | Static Private Attributes
citk::PFIsolationSumProducerForPUPPI Class Reference
Inheritance diagram for citk::PFIsolationSumProducerForPUPPI:
edm::stream::EDProducer<>

Public Member Functions

void beginLuminosityBlock (const edm::LuminosityBlock &, const edm::EventSetup &) final
 
 PFIsolationSumProducerForPUPPI (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) final
 
 ~PFIsolationSumProducerForPUPPI () 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 edm::View< reco::CandidateCandView
 
typedef std::vector< std::unique_ptr< IsolationConeDefinitionBase > > IsoTypes
 
typedef std::unordered_map< std::string, int > TypeMap
 

Private Attributes

edm::EDGetTokenT< CandView_isolate_with
 
std::array< IsoTypes, kNPFTypes_isolation_types
 
std::array< std::vector< std::string >, kNPFTypes_product_names
 
edm::EDGetTokenT< CandView_to_isolate
 
const TypeMap _typeMap
 
edm::Handle< edm::ValueMap< float > > puppiValueMap
 
edm::EDGetTokenT< edm::ValueMap< float > > puppiValueMapToken_
 
bool usePUPPINoLepton
 
bool useValueMapForPUPPI = true
 

Static Private Attributes

static unsigned kNPFTypes = 8
 

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

Definition at line 26 of file CITKPFIsolationSumProducerForPUPPI.cc.

Member Typedef Documentation

Definition at line 43 of file CITKPFIsolationSumProducerForPUPPI.cc.

typedef std::vector<std::unique_ptr<IsolationConeDefinitionBase> > citk::PFIsolationSumProducerForPUPPI::IsoTypes
private

Definition at line 42 of file CITKPFIsolationSumProducerForPUPPI.cc.

typedef std::unordered_map<std::string, int> citk::PFIsolationSumProducerForPUPPI::TypeMap
private

Definition at line 41 of file CITKPFIsolationSumProducerForPUPPI.cc.

Constructor & Destructor Documentation

citk::PFIsolationSumProducerForPUPPI::PFIsolationSumProducerForPUPPI ( const edm::ParameterSet c)

Definition at line 62 of file CITKPFIsolationSumProducerForPUPPI.cc.

References _isolate_with, _isolation_types, _product_names, _to_isolate, _typeMap, HltBtagPostValidation_cff::c, HLT_2018_cff::coneSize, Exception, timingPdfMaker::get, edm::InputTag::label(), eostools::move(), Skims_PA_cff::name, unpackData-CaloStage2::pname, puppiValueMapToken_, AlCaHLTBitMon_QueryRunRegistry::string, usePUPPINoLepton, and useValueMapForPUPPI.

63  : _typeMap({{"h+", 1}, {"h0", 5}, {"gamma", 4}, {"electron", 2}, {"muon", 3}, {"HFh", 6}, {"HFgamma", 7}}) {
64  _to_isolate = consumes<CandView>(c.getParameter<edm::InputTag>("srcToIsolate"));
65  _isolate_with = consumes<CandView>(c.getParameter<edm::InputTag>("srcForIsolationCone"));
66  if (!c.getParameter<edm::InputTag>("puppiValueMap").label().empty()) {
67  puppiValueMapToken_ = mayConsume<edm::ValueMap<float>>(
68  c.getParameter<edm::InputTag>("puppiValueMap")); //getting token for puppiValueMap
69  useValueMapForPUPPI = true;
70  } else {
71  useValueMapForPUPPI = false;
72  usePUPPINoLepton = c.getParameter<bool>("usePUPPINoLepton");
73  }
74  const std::vector<edm::ParameterSet>& isoDefs = c.getParameterSetVector("isolationConeDefinitions");
75  for (const auto& isodef : isoDefs) {
76  const std::string& name = isodef.getParameter<std::string>("isolationAlgo");
77  const float coneSize = isodef.getParameter<double>("coneSize");
78  char buf[50];
79  std::sprintf(buf, "DR%.2f", coneSize);
80  std::string coneName(buf);
81  auto decimal = coneName.find('.');
82  if (decimal != std::string::npos)
83  coneName.erase(decimal, 1);
84  const std::string& isotype = isodef.getParameter<std::string>("isolateAgainst");
85  auto theisolator = CITKIsolationConeDefinitionFactory::get()->create(name, isodef);
86  theisolator->setConsumes(consumesCollector());
87  const auto thetype = _typeMap.find(isotype);
88  if (thetype == _typeMap.end()) {
89  throw cms::Exception("InvalidIsolationType") << "Isolation type: " << isotype << " is not available in the "
90  << "list of allowed isolations!.";
91  }
92  const std::string dash("-");
93  std::string pname = isotype + dash + coneName + dash + theisolator->additionalCode();
94  _product_names[thetype->second].emplace_back(pname);
95  produces<edm::ValueMap<float>>(pname);
96  _isolation_types[thetype->second].emplace_back(std::move(theisolator));
97  }
98  }
T getParameter(std::string const &) const
VParameterSet const & getParameterSetVector(std::string const &name) const
std::array< std::vector< std::string >, kNPFTypes > _product_names
edm::EDGetTokenT< edm::ValueMap< float > > puppiValueMapToken_
std::string const & label() const
Definition: InputTag.h:36
def move(src, dest)
Definition: eostools.py:511
citk::PFIsolationSumProducerForPUPPI::~PFIsolationSumProducerForPUPPI ( )
inlineoverride

Definition at line 30 of file CITKPFIsolationSumProducerForPUPPI.cc.

References beginLuminosityBlock(), fillDescriptions(), and produce().

30 {}

Member Function Documentation

void citk::PFIsolationSumProducerForPUPPI::beginLuminosityBlock ( const edm::LuminosityBlock ,
const edm::EventSetup es 
)
final

Definition at line 100 of file CITKPFIsolationSumProducerForPUPPI.cc.

References _isolation_types.

Referenced by ~PFIsolationSumProducerForPUPPI().

100  {
101  for (const auto& isolators_for_type : _isolation_types) {
102  for (const auto& isolator : isolators_for_type) {
103  isolator->getEventSetupInfo(es);
104  }
105  }
106  }
void citk::PFIsolationSumProducerForPUPPI::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 182 of file CITKPFIsolationSumProducerForPUPPI.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addOptional(), edm::ParameterSetDescription::addVPSet(), HLT_2018_cff::InputTag, egmElectronIsolationPUPPI_cff::isolationConeDefinitions, BPHMonitor_cfi::photons, edm::ParameterSetDescription::setComment(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by ~PFIsolationSumProducerForPUPPI().

182  {
184  iDesc.setComment("PUPPI isolation sum producer");
185 
186  iDesc.add<edm::InputTag>("srcToIsolate", edm::InputTag("no default"))
187  ->setComment("calculate isolation for this collection");
188  iDesc.add<edm::InputTag>("srcForIsolationCone", edm::InputTag("no default"))
189  ->setComment("collection for the isolation calculation: like particleFlow ");
190  iDesc.add<edm::InputTag>("puppiValueMap", edm::InputTag("puppi"))
191  ->setComment("source for puppi, if left empty weight from packedCandidate is taken");
192 
193  edm::ParameterSetDescription descIsoConeDefinitions;
194  descIsoConeDefinitions.add<std::string>("isolationAlgo", "no default");
195  descIsoConeDefinitions.add<double>("coneSize", 0.3);
196  descIsoConeDefinitions.add<std::string>("isolateAgainst", "no default");
197  descIsoConeDefinitions.add<std::vector<unsigned>>("miniAODVertexCodes", {2, 3});
198  descIsoConeDefinitions.addOptional<double>("VetoConeSizeBarrel", 0.0);
199  descIsoConeDefinitions.addOptional<double>("VetoConeSizeEndcaps", 0.0);
200  descIsoConeDefinitions.addOptional<double>("VetoThreshold", 0.0);
201  descIsoConeDefinitions.addOptional<double>("VetoConeSize", 0.0);
202  descIsoConeDefinitions.addOptional<int>("vertexIndex", 0);
203  descIsoConeDefinitions.addOptional<edm::InputTag>("particleBasedIsolation", edm::InputTag("no default"))
204  ->setComment("map for footprint removal that is used for photons");
205 
206  std::vector<edm::ParameterSet> isolationConeDefinitions;
207  edm::ParameterSet chargedHadrons, neutralHadrons, photons;
208  isolationConeDefinitions.push_back(chargedHadrons);
209  isolationConeDefinitions.push_back(neutralHadrons);
210  isolationConeDefinitions.push_back(photons);
211  iDesc.addVPSet("isolationConeDefinitions", descIsoConeDefinitions, isolationConeDefinitions);
212  iDesc.add<bool>("usePUPPINoLepton", false);
213 
214  descriptions.add("CITKPFIsolationSumProducerForPUPPI", iDesc);
215  }
void setComment(std::string const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void citk::PFIsolationSumProducerForPUPPI::produce ( edm::Event ev,
const edm::EventSetup es 
)
final

Definition at line 108 of file CITKPFIsolationSumProducerForPUPPI.cc.

References _isolate_with, _isolation_types, _product_names, _to_isolate, begin, HltBtagPostValidation_cff::c, end, edm::helper::Filler< Map >::fill(), edm::Event::getByToken(), mps_fire::i, edm::helper::Filler< Map >::insert(), dqmiolumiharvest::j, dqmdumpme::k, kNPFTypes, eostools::move(), edm::View< T >::ptrAt(), puppiValueMap, puppiValueMapToken_, pat::PackedCandidate::puppiWeight(), pat::PackedCandidate::puppiWeightNoLep(), edm::Event::put(), edm::View< T >::size(), reco::PFCandidate::translatePdgIdToType(), usePUPPINoLepton, and useValueMapForPUPPI.

Referenced by ~PFIsolationSumProducerForPUPPI().

108  {
109  typedef std::unique_ptr<edm::ValueMap<float>> product_type;
110  typedef std::vector<float> product_values;
111  edm::Handle<CandView> to_isolate;
112  edm::Handle<CandView> isolate_with;
113  ev.getByToken(_to_isolate, to_isolate);
114  ev.getByToken(_isolate_with, isolate_with);
117 
118  // the list of value vectors indexed as "to_isolate"
119  std::array<std::vector<product_values>, kNPFTypes> the_values;
120  // get extra event info and setup value cache
121  unsigned i = 0;
122  for (const auto& isolators_for_type : _isolation_types) {
123  the_values[i++].resize(isolators_for_type.size());
124  for (const auto& isolator : isolators_for_type) {
125  isolator->getEventInfo(ev);
126  }
127  }
128  reco::PFCandidate helper; // to translate pdg id to type
129  // loop over the candidates we are isolating and fill the values
130  for (size_t c = 0; c < to_isolate->size(); ++c) {
131  auto cand_to_isolate = to_isolate->ptrAt(c);
132  std::array<std::vector<float>, kNPFTypes> cand_values;
133  unsigned k = 0;
134  for (const auto& isolators_for_type : _isolation_types) {
135  cand_values[k].resize(isolators_for_type.size());
136  for (auto& value : cand_values[k])
137  value = 0.0;
138  ++k;
139  }
140  for (size_t ic = 0; ic < isolate_with->size(); ++ic) {
141  auto isocand = isolate_with->ptrAt(ic);
142  edm::Ptr<pat::PackedCandidate> aspackedCandidate(isocand);
143  auto isotype = helper.translatePdgIdToType(isocand->pdgId());
144  const auto& isolations = _isolation_types[isotype];
145  for (unsigned i = 0; i < isolations.size(); ++i) {
146  if (isolations[i]->isInIsolationCone(cand_to_isolate, isocand)) {
147  double puppiWeight = 0.;
149  puppiWeight = aspackedCandidate->puppiWeight(); // if miniAOD, take puppiWeight directly from the object
151  puppiWeight =
152  aspackedCandidate->puppiWeightNoLep(); // if miniAOD, take puppiWeightNoLep directly from the object
153  else
154  puppiWeight = (*puppiValueMap)[isocand]; // if AOD, take puppiWeight from the valueMap
155  if (puppiWeight > 0.)
156  cand_values[isotype][i] +=
157  (isocand->pt()) *
158  puppiWeight; // this is basically the main change to Lindsey's code: scale pt with puppiWeight for candidates with puppiWeight > 0.
159  }
160  }
161  }
162  // add this candidate to isolation value list
163  for (unsigned i = 0; i < kNPFTypes; ++i) {
164  for (unsigned j = 0; j < cand_values[i].size(); ++j) {
165  the_values[i][j].push_back(cand_values[i][j]);
166  }
167  }
168  }
169  // fill and put all products
170  for (unsigned i = 0; i < kNPFTypes; ++i) {
171  for (unsigned j = 0; j < the_values[i].size(); ++j) {
172  product_type the_product(new edm::ValueMap<float>);
173  edm::ValueMap<float>::Filler fillerprod(*the_product);
174  fillerprod.insert(to_isolate, the_values[i][j].begin(), the_values[i][j].end());
175  fillerprod.fill();
176  ev.put(std::move(the_product), _product_names[i][j]);
177  }
178  }
179  }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
Definition: helper.py:1
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
Ptr< value_type > ptrAt(size_type i) const
edm::Handle< edm::ValueMap< float > > puppiValueMap
std::array< std::vector< std::string >, kNPFTypes > _product_names
size_type size() const
edm::EDGetTokenT< edm::ValueMap< float > > puppiValueMapToken_
#define end
Definition: vmac.h:39
Definition: value.py:1
ParticleType translatePdgIdToType(int pdgid) const
Definition: PFCandidate.cc:209
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
#define begin
Definition: vmac.h:32
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

edm::EDGetTokenT<CandView> citk::PFIsolationSumProducerForPUPPI::_isolate_with
private
std::array<IsoTypes, kNPFTypes> citk::PFIsolationSumProducerForPUPPI::_isolation_types
private
std::array<std::vector<std::string>, kNPFTypes> citk::PFIsolationSumProducerForPUPPI::_product_names
private
edm::EDGetTokenT<CandView> citk::PFIsolationSumProducerForPUPPI::_to_isolate
private
const TypeMap citk::PFIsolationSumProducerForPUPPI::_typeMap
private
unsigned citk::PFIsolationSumProducerForPUPPI::kNPFTypes = 8
staticprivate

Definition at line 40 of file CITKPFIsolationSumProducerForPUPPI.cc.

Referenced by produce().

edm::Handle<edm::ValueMap<float> > citk::PFIsolationSumProducerForPUPPI::puppiValueMap
private

Definition at line 47 of file CITKPFIsolationSumProducerForPUPPI.cc.

Referenced by produce().

edm::EDGetTokenT<edm::ValueMap<float> > citk::PFIsolationSumProducerForPUPPI::puppiValueMapToken_
private
bool citk::PFIsolationSumProducerForPUPPI::usePUPPINoLepton
private
Initial value:
=
false

Definition at line 52 of file CITKPFIsolationSumProducerForPUPPI.cc.

Referenced by PFIsolationSumProducerForPUPPI(), and produce().

bool citk::PFIsolationSumProducerForPUPPI::useValueMapForPUPPI = true
private