29 useUserData_(iConfig.exists(
"userData")),
38 addBTagInfo_ = iConfig.getParameter<
bool>(
"addBTagInfo" );
39 addDiscriminators_ = iConfig.getParameter<
bool>(
"addDiscriminators" );
40 discriminatorTags_ = iConfig.getParameter<std::vector<edm::InputTag> >(
"discriminatorSources" );
42 addTagInfos_ = iConfig.getParameter<
bool>(
"addTagInfos" );
43 tagInfoTags_ = iConfig.getParameter<std::vector<edm::InputTag> >(
"tagInfoSources" );
45 if (discriminatorTags_.empty()) {
46 addDiscriminators_ =
false;
48 for (std::vector<edm::InputTag>::const_iterator it = discriminatorTags_.begin(), ed = discriminatorTags_.end(); it != ed; ++it) {
51 if ((pos != std::string::npos) && (pos != label.length() - 7)) {
54 discriminatorLabels_.push_back(label);
57 if (tagInfoTags_.empty()) {
60 for (std::vector<edm::InputTag>::const_iterator it = tagInfoTags_.begin(), ed = tagInfoTags_.end(); it != ed; ++it) {
63 if ((pos != std::string::npos) && (pos != label.length() - 8)) {
66 tagInfoLabels_.push_back(label);
69 if (!addBTagInfo_) { addDiscriminators_ =
false; addTagInfos_ =
false; }
75 produces<std::vector<Jet> >();
76 produces<edm::OwnVector<reco::BaseTagInfo> > (
"tagInfos");
80 PATJetUpdater::~PATJetUpdater() {
92 std::vector<edm::ValueMap<JetCorrFactors> > jetCorrs;
97 jetCorrs.push_back( *jetCorr );
102 std::vector<edm::Handle<reco::JetFloatAssociation::Container> > jetDiscriminators;
109 std::vector<edm::Handle<edm::View<reco::BaseTagInfo> > > jetTagInfos;
118 std::auto_ptr< std::vector<Jet> >
patJets (
new std::vector<Jet>() );
127 unsigned int idx = itJet - jets->begin();
144 std::vector<std::string> levels = jetCorrs[0][jetRef].correctionLabels();
145 if(
std::find(levels.begin(), levels.end(),
"L2L3Residual")!=levels.end()){
146 ajet.
initializeJEC(jetCorrs[0][jetRef].jecLevel(
"L2L3Residual"));
148 else if(
std::find(levels.begin(), levels.end(),
"L3Absolute")!=levels.end()){
149 ajet.
initializeJEC(jetCorrs[0][jetRef].jecLevel(
"L3Absolute"));
152 ajet.
initializeJEC(jetCorrs[0][jetRef].jecLevel(
"Uncorrected"));
154 edm::LogWarning(
"L3Absolute not found") <<
"L2L3Residual and L3Absolute are not part of the jetCorrFactors\n"
155 <<
"of module " << jetCorrs[0][jetRef].jecSet() <<
". Jets will remain"
164 for (
size_t k=0;
k<jetDiscriminators.size(); ++
k) {
165 float value = (*jetDiscriminators[
k])[jetRef];
170 for (
size_t k=0;
k<jetTagInfos.size(); ++
k) {
175 if ((idx < taginfos.
size()) && (taginfos[idx].
jet() == jetRef)) {
176 match = taginfos.
ptrAt(idx);
180 if (itTI->jet() == jetRef) { match = taginfos.
ptrAt( itTI - taginfos.
begin() );
break; }
184 tagInfosOut->push_back( match->clone() );
201 patJets->push_back(ajet);
210 iEvent.
put( tagInfosOut,
"tagInfos" );
224 iDesc.
add<
bool>(
"addTagInfos",
true);
225 std::vector<edm::InputTag> emptyVInputTags;
226 iDesc.
add<std::vector<edm::InputTag> >(
"tagInfoSources", emptyVInputTags);
229 iDesc.
add<
bool>(
"addJetCorrFactors",
true);
230 iDesc.
add<std::vector<edm::InputTag> >(
"jetCorrFactorsSource", emptyVInputTags);
233 iDesc.
add<
bool>(
"addBTagInfo",
true);
234 iDesc.
add<
bool>(
"addDiscriminators",
true);
235 iDesc.
add<std::vector<edm::InputTag> >(
"discriminatorSources", emptyVInputTags);
242 descriptions.
add(
"PATJetUpdater", iDesc);
const LorentzVector correctedP4(const std::string &level, const std::string &flavor="none", const std::string &set="") const
void initializeJEC(unsigned int level, const JetCorrFactors::Flavor &flavor=JetCorrFactors::NONE, unsigned int set=0)
initialize the jet to a given JEC level during creation starting from Uncorrected ...
T getParameter(std::string const &) const
Assists in assimilating all pat::UserData into pat objects.
GreaterByPt< Jet > pTComparator_
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
void addJECFactors(const JetCorrFactors &jec)
add more sets of energy correction factors
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Ptr< value_type > ptrAt(size_type i) const
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken_
PATJetUpdater(const edm::ParameterSet &iConfig)
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 >
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void addBDiscriminatorPair(const std::pair< std::string, float > &thePair)
method to add a algolabel-discriminator pair
static void fillDescription(edm::ParameterSetDescription &iDesc)
std::vector< edm::EDGetTokenT< edm::View< reco::BaseTagInfo > > > tagInfoTokens_
void setComment(std::string const &value)
std::vector< edm::EDGetTokenT< reco::JetFloatAssociation::Container > > discriminatorTokens_
Container::value_type value_type
const_iterator begin() const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Class for the storage of jet correction factors.
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
RefProd< PROD > getRefBeforePut()
bool isNonnull() const
Checks for non-null.
std::vector< pat::JetCorrFactors > jec_
std::vector< std::string > discriminatorLabels_
tuple idx
DEBUGGING if hasattr(process,"trackMonIterativeTracking2012"): print "trackMonIterativeTracking2012 D...
virtual void setP4(const LorentzVector &p4) final
set 4-momentum
Analysis-level calorimeter jet class.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
ProductID id() const
Accessor for product ID.
const_iterator end() const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
pat::PATUserDataHelper< pat::Jet > userDataHelper_
std::vector< std::string > tagInfoLabels_
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
virtual void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
std::vector< edm::EDGetTokenT< edm::ValueMap< JetCorrFactors > > > jetCorrFactorsTokens_
void addTagInfo(const std::string &label, const TagInfoFwdPtrCollection::value_type &info)