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<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

virtual void beginLuminosityBlock (const edm::LuminosityBlock &, const edm::EventSetup &) override final
 
 PFIsolationSumProducerForPUPPI (const edm::ParameterSet &)
 
virtual void produce (edm::Event &, const edm::EventSetup &) override final
 
virtual ~PFIsolationSumProducerForPUPPI ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (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 = false
 
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
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 26 of file CITKPFIsolationSumProducerForPUPPI.cc.

Member Typedef Documentation

Definition at line 45 of file CITKPFIsolationSumProducerForPUPPI.cc.

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

Definition at line 44 of file CITKPFIsolationSumProducerForPUPPI.cc.

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

Definition at line 43 of file CITKPFIsolationSumProducerForPUPPI.cc.

Constructor & Destructor Documentation

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

Definition at line 63 of file CITKPFIsolationSumProducerForPUPPI.cc.

References _isolate_with, _isolation_types, _product_names, _to_isolate, _typeMap, beginLuminosityBlock(), EnergyCorrector::c, highPtTrackIsolations_cff::coneSize, edm::EDConsumerBase::consumesCollector(), Exception, reco::get(), edm::InputTag::label(), dataset::name, BPhysicsValidation_cfi::pname, puppiValueMapToken_, AlCaHLTBitMon_QueryRunRegistry::string, and useValueMapForPUPPI.

63  :
64  _typeMap( { {"h+",1},
65  {"h0",5},
66  {"gamma",4},
67  {"electron",2},
68  {"muon",3},
69  {"HFh",6},
70  {"HFgamma",7} } ){
71  _to_isolate =
72  consumes<CandView>(c.getParameter<edm::InputTag>("srcToIsolate"));
73  _isolate_with =
74  consumes<CandView>(c.getParameter<edm::InputTag>("srcForIsolationCone"));
75  if (c.getParameter<edm::InputTag>("puppiValueMap").label().size() != 0) {
76  puppiValueMapToken_ = mayConsume<edm::ValueMap<float>>(c.getParameter<edm::InputTag>("puppiValueMap")); //getting token for puppiValueMap
77  useValueMapForPUPPI = true;
78  }
79  else useValueMapForPUPPI = false;
80  const std::vector<edm::ParameterSet>& isoDefs =
81  c.getParameterSetVector("isolationConeDefinitions");
82  for( const auto& isodef : isoDefs ) {
83  const std::string& name =
84  isodef.getParameter<std::string>("isolationAlgo");
85  const float coneSize = isodef.getParameter<double>("coneSize");
86  char buf[50];
87  std::sprintf(buf,"DR%.2f",coneSize);
88  std::string coneName(buf);
89  auto decimal = coneName.find('.');
90  if( decimal != std::string::npos ) coneName.erase(decimal,1);
91  const std::string& isotype =
92  isodef.getParameter<std::string>("isolateAgainst");
93  IsolationConeDefinitionBase* theisolator =
94  CITKIsolationConeDefinitionFactory::get()->create(name,isodef);
95  theisolator->setConsumes(consumesCollector());
96  const auto thetype = _typeMap.find(isotype);
97  if( thetype == _typeMap.end() ) {
98  throw cms::Exception("InvalidIsolationType")
99  << "Isolation type: " << isotype << " is not available in the "
100  << "list of allowed isolations!.";
101  }
102  _isolation_types[thetype->second].emplace_back(theisolator);
103  const std::string dash("-");
104  std::string pname = isotype+dash+coneName+dash+theisolator->additionalCode();
105  _product_names[thetype->second].emplace_back(pname);
106  produces<edm::ValueMap<float> >(pname);
107  }
108  }
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_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
std::string const & label() const
Definition: InputTag.h:36
T get(const Candidate &c)
Definition: component.h:55
virtual citk::PFIsolationSumProducerForPUPPI::~PFIsolationSumProducerForPUPPI ( )
inlinevirtual

Definition at line 31 of file CITKPFIsolationSumProducerForPUPPI.cc.

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

31 {}

Member Function Documentation

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

Definition at line 111 of file CITKPFIsolationSumProducerForPUPPI.cc.

References _isolation_types, and produce().

Referenced by PFIsolationSumProducerForPUPPI(), and ~PFIsolationSumProducerForPUPPI().

112  {
113  for( const auto& isolators_for_type : _isolation_types ) {
114  for( const auto& isolator : isolators_for_type ) {
115  isolator->getEventSetupInfo(es);
116  }
117  }
118  }
void citk::PFIsolationSumProducerForPUPPI::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 189 of file CITKPFIsolationSumProducerForPUPPI.cc.

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

Referenced by ~PFIsolationSumProducerForPUPPI().

190 {
192  iDesc.setComment("PUPPI isolation sum producer");
193 
194  iDesc.add<edm::InputTag>("srcToIsolate", edm::InputTag("no default"))->setComment("calculate isolation for this collection");
195  iDesc.add<edm::InputTag>("srcForIsolationCone", edm::InputTag("no default"))->setComment("collection for the isolation calculation: like particleFlow ");
196  iDesc.add<edm::InputTag>("puppiValueMap", edm::InputTag("puppi"))->setComment("source for puppi, if left empty weight from packedCandidate is taken");
197 
198  edm::ParameterSetDescription descIsoConeDefinitions;
199  descIsoConeDefinitions.add<std::string>("isolationAlgo", "no default");
200  descIsoConeDefinitions.add<double>("coneSize", 0.3);
201  descIsoConeDefinitions.add<std::string>("isolateAgainst", "no default");
202  descIsoConeDefinitions.add<std::vector<unsigned>>("miniAODVertexCodes", {2,3});
203  descIsoConeDefinitions.addOptional<double>("VetoConeSizeBarrel", 0.0);
204  descIsoConeDefinitions.addOptional<double>("VetoConeSizeEndcaps", 0.0);
205  descIsoConeDefinitions.addOptional<int>("vertexIndex",0);
206  descIsoConeDefinitions.addOptional<edm::InputTag>("particleBasedIsolation",edm::InputTag("no default"))->setComment("map for footprint removal that is used for photons");
207 
208 
209  std::vector<edm::ParameterSet> isolationConeDefinitions;
210  edm::ParameterSet chargedHadrons, neutralHadrons,photons;
211  isolationConeDefinitions.push_back(chargedHadrons);
212  isolationConeDefinitions.push_back(neutralHadrons);
213  isolationConeDefinitions.push_back(photons);
214  iDesc.addVPSet("isolationConeDefinitions", descIsoConeDefinitions, isolationConeDefinitions);
215  iDesc.addOptional<bool>("usePUPPINoLepton",false);
216 
217  descriptions.add("CITKPFIsolationSumProducerForPUPPI", iDesc);
218 }
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 
)
finaloverridevirtual

Definition at line 121 of file CITKPFIsolationSumProducerForPUPPI.cc.

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

Referenced by beginLuminosityBlock(), and ~PFIsolationSumProducerForPUPPI().

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

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 42 of file CITKPFIsolationSumProducerForPUPPI.cc.

Referenced by produce().

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

Definition at line 49 of file CITKPFIsolationSumProducerForPUPPI.cc.

Referenced by produce().

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

Definition at line 54 of file CITKPFIsolationSumProducerForPUPPI.cc.

Referenced by produce().

bool citk::PFIsolationSumProducerForPUPPI::useValueMapForPUPPI = true
private