94 std::vector<edm::ValueMap<JetCorrFactors> > jetCorrs;
99 jetCorrs.push_back( *jetCorr );
104 std::vector<edm::Handle<reco::JetFloatAssociation::Container> > jetDiscriminators;
111 std::vector<edm::Handle<edm::View<reco::BaseTagInfo> > > jetTagInfos;
120 auto patJets = std::make_unique<std::vector<Jet>>();
122 auto tagInfosOut = std::make_unique<edm::OwnVector<reco::BaseTagInfo>>();
129 unsigned int idx = itJet - jets->begin();
132 Jet ajet( patJetRef );
136 ajet.setP4(ajet.correctedP4(0));
144 ajet.addJECFactors(jcf);
146 std::vector<std::string>
levels = jetCorrs[0][jetRef].correctionLabels();
147 if(
std::find(levels.begin(), levels.end(),
"L2L3Residual")!=levels.end()){
148 ajet.initializeJEC(jetCorrs[0][jetRef].jecLevel(
"L2L3Residual"));
150 else if(
std::find(levels.begin(), levels.end(),
"L3Absolute")!=levels.end()){
151 ajet.initializeJEC(jetCorrs[0][jetRef].jecLevel(
"L3Absolute"));
154 ajet.initializeJEC(jetCorrs[0][jetRef].jecLevel(
"Uncorrected"));
156 edm::LogWarning(
"L3Absolute not found") <<
"L2L3Residual and L3Absolute are not part of the jetCorrFactors\n" 157 <<
"of module " << jetCorrs[0][jetRef].jecSet() <<
". Jets will remain" 166 for (
size_t k=0;
k<jetDiscriminators.size(); ++
k) {
167 float value = (*jetDiscriminators[
k])[jetRef];
172 for (
size_t k=0;
k<jetTagInfos.size(); ++
k) {
177 if ((idx < taginfos.
size()) && (taginfos[idx].
jet() == jetRef)) {
178 match = taginfos.
ptrAt(idx);
182 if (itTI->jet() == jetRef) { match = taginfos.
ptrAt( itTI - taginfos.
begin() );
break; }
186 tagInfosOut->push_back( match->
clone() );
205 ajet.refToOrig_ = patJetRef->originalObjectRef();
GreaterByPt< Jet > pTComparator_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
virtual BaseTagInfo * clone(void) const
clone
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Ptr< value_type > ptrAt(size_type i) const
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
std::vector< edm::EDGetTokenT< edm::View< reco::BaseTagInfo > > > tagInfoTokens_
std::vector< edm::EDGetTokenT< reco::JetFloatAssociation::Container > > discriminatorTokens_
Container::value_type value_type
const_iterator begin() const
Class for the storage of jet correction factors.
RefProd< PROD > getRefBeforePut()
bool isNonnull() const
Checks for non-null.
std::vector< std::string > discriminatorLabels_
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
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_
std::vector< edm::EDGetTokenT< edm::ValueMap< JetCorrFactors > > > jetCorrFactorsTokens_