102 vector<StoredPileupJetIdentifier> ids;
103 map<string, vector<float> >
mvas;
104 map<string, vector<int> > idflags;
106 VertexCollection::const_iterator
vtx;
109 vtx = vertexes.begin();
110 while( vtx != vertexes.end() && ( vtx->isFake() || vtx->ndof() < 4 ) ) {
113 if( vtx == vertexes.end() ) { vtx = vertexes.begin(); }
118 for (
unsigned int i=0;
i<jets.
size(); ++
i ) {
120 auto algoi =
algos_.begin();
127 ispat = patjet !=
nullptr;
145 jecCor_->setJetPt(jet.
pt());
147 jecCor_->setJetEta(jet.
eta());
148 jecCor_->setJetA(jet.
jetArea());
149 jecCor_->setRho(rho);
150 jec = jecCor_->getCorrection();
154 std::unique_ptr<reco::Jet> corrJet;
161 corrJet.reset(dynamic_cast<reco::Jet *>( jet.
clone() ));
163 corrJet->scaleEnergy(scale);
165 const reco::Jet * theJet = ( applyJec ? corrJet.get() : &
jet );
171 ids.push_back( puIdentifier );
174 puIdentifier = (*vmap)[jets.
refAt(
i)];
175 puIdentifier.
jetPt(theJet->
pt());
178 ialgo->
set(puIdentifier);
184 mvas[algoi->first].push_back( puIdentifier.
mva() );
185 idflags[algoi->first].push_back( puIdentifier.
idFlag() );
186 for( ++algoi; algoi!=
algos_.end(); ++algoi) {
187 ialgo = algoi->second.get();
188 ialgo->
set(puIdentifier);
190 mvas[algoi->first].push_back(
id.
mva() );
191 idflags[algoi->first].push_back(
id.idFlag() );
198 for(
const auto& ialgo :
algos_) {
200 vector<float> &
mva = mvas[ialgo.first];
201 auto mvaout = std::make_unique<ValueMap<float>>();
203 mvafiller.insert(jetHandle,mva.begin(),mva.end());
205 iEvent.
put(
std::move(mvaout),ialgo.first+
"Discriminant");
208 vector<int> & idflag = idflags[ialgo.first];
209 auto idflagout = std::make_unique<ValueMap<int>>();
211 idflagfiller.insert(jetHandle,idflag.begin(),idflag.end());
218 assert( jetHandle->size() == ids.size() );
219 auto idsout = std::make_unique<ValueMap<StoredPileupJetIdentifier>>();
221 idsfiller.insert(jetHandle,ids.begin(),ids.end());
void set(const PileupJetIdentifier &)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
double eta() const final
momentum pseudorapidity
edm::EDGetTokenT< reco::VertexCollection > input_vertex_token_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const int & idFlag() const
const float & mva() const
Base class for all types of Jets.
edm::EDGetTokenT< edm::View< reco::Jet > > input_jet_token_
double pt() const final
transverse momentum
std::vector< Vertex > VertexCollection
collection of Vertex objects
const float & jetPt() const
RefToBase< value_type > refAt(size_type i) const
bool inputIsCorrected() const
edm::EDGetTokenT< double > input_rho_token_
void initJetEnergyCorrector(const edm::EventSetup &iSetup, bool isData)
const float & jetPhi() const
bool produceJetIds() const
PileupJetIdentifier computeIdVariables(const reco::Jet *jet, float jec, const reco::Vertex *, const reco::VertexCollection &, double rho)
T const * product() const
std::vector< std::pair< std::string, std::unique_ptr< PileupJetIdAlgo > > > algos_
PileupJetIdentifier computeMva()
Analysis-level calorimeter jet class.
CompositePtrCandidate * clone() const override
returns a clone of the candidate
virtual float jetArea() const
get jet area
edm::EDGetTokenT< edm::ValueMap< StoredPileupJetIdentifier > > input_vm_pujetid_token_
const_reference at(size_type pos) const
Jet correctedJet(const std::string &level, const std::string &flavor="none", const std::string &set="") const
double phi() const final
momentum azimuthal angle
std::unique_ptr< FactorizedJetCorrector > jecCor_
const float & jetEta() const