176 std::vector<reco::CandidatePtr> puppiCandsNoLepPtrs;
183 for (
auto pup : *puppiCandsNoLep) {
184 puppiCandsNoLepPtrs.push_back(pup.sourceCandidatePtr(0));
187 std::vector<int> mappingPuppi(
usePuppi_ ? puppiCands->size() : 0);
203 std::set<unsigned int> whiteList;
204 std::set<reco::TrackRef> whiteListTk;
209 for (
unsigned int i = 0;
i < svWhiteList.
size();
i++) {
211 for (
unsigned int j = 0; j < svWhiteList[
i].numberOfSourceCandidatePtrs(); j++) {
213 if (c.
id() == cands.
id())
214 whiteList.insert(c.
key());
217 for (
auto dau = svWhiteList[
i].
begin(); dau != svWhiteList[
i].
end(); dau++) {
219 if (chCand !=
nullptr) {
220 whiteListTk.insert(chCand->
track());
232 std::vector<pat::HcalDepthEnergyFractions> hcalDepthEnergyFractions;
233 hcalDepthEnergyFractions.reserve(cands->size());
234 std::vector<pat::HcalDepthEnergyFractions> hcalDepthEnergyFractions_Ordered;
235 hcalDepthEnergyFractions_Ordered.reserve(cands->size());
239 auto outPtrP = std::make_unique<std::vector<pat::PackedCandidate>>();
240 std::vector<int>
mapping(cands->size());
241 std::vector<int> mappingReverse(cands->size());
242 std::vector<int> mappingTk(TKOrigs->size(), -1);
244 for (
unsigned int ic = 0, nc = cands->size(); ic < nc; ++ic) {
255 for (
size_t ii = 0;
ii < PVs->size();
ii++) {
278 float ptTrk = ctrack->
pt();
279 float etaAtVtx = ctrack->
eta();
280 float phiAtVtx = ctrack->
phi();
300 outPtrP->back().setLostInnerHits(lostHits);
302 whiteList.find(ic) != whiteList.end() ||
305 if (
abs(outPtrP->back().pdgId()) == 22) {
309 outPtrP->back().setTrackProperties(*ctrack,
320 outPtrP->back().setTrackProperties(*ctrack,
324 outPtrP->back().setTrackProperties(*ctrack,
334 outPtrP->back().setMuonID(cand.
muonRef()->isStandAloneMuon(), cand.
muonRef()->isGlobalMuon());
339 PVpos =
PV->position();
344 outPtrP->back().setAssociationQuality(
350 bool isIsolatedChargedHadron =
false;
353 isIsolatedChargedHadron =
355 outPtrP->back().setIsIsolatedChargedHadron(isIsolatedChargedHadron);
364 outPtrP->back().setHcalFraction(0);
365 outPtrP->back().setCaloFraction(0);
368 if (isIsolatedChargedHadron) {
372 outPtrP->back().setRawCaloFraction(0);
373 outPtrP->back().setRawHcalFraction(0);
376 std::vector<float> dummyVector;
384 fabs(outPtrP->back().eta()) > 1.3) {
389 hcalDepthEFrac.reset(hcalDepthEnergyFractionTmp);
392 hcalDepthEnergyFractions.push_back(hcalDepthEFrac);
398 outPtrP->back().setGoodEgamma();
405 float puppiWeightVal = (*puppiWeight)[pkref];
406 float puppiWeightNoLepVal = 0.0;
410 if (puppiWeightNoLep.
isValid()) {
412 auto pkrefPtr = pkref->sourceCandidatePtr(0);
414 bool foundNoLep =
false;
415 for (
size_t ipcnl = 0; ipcnl < puppiCandsNoLepPtrs.size(); ipcnl++) {
416 if (puppiCandsNoLepPtrs[ipcnl] == pkrefPtr) {
418 puppiWeightNoLepVal =
419 puppiCandsNoLep->at(ipcnl).pt() / cand.
pt();
423 if (!foundNoLep || puppiWeightNoLepVal > 1) {
424 puppiWeightNoLepVal = 1.0;
427 outPtrP->back().setPuppiWeight(puppiWeightVal, puppiWeightNoLepVal);
429 mappingPuppi[((*puppiCandsMap)[pkref]).
key()] = ic;
442 auto outPtrPSorted = std::make_unique<std::vector<pat::PackedCandidate>>();
444 std::vector<size_t> reverseOrder(order.size());
445 for (
size_t i = 0, nc = cands->size();
i < nc;
i++) {
446 outPtrPSorted->push_back((*outPtrP)[order[
i]]);
447 reverseOrder[order[
i]] =
i;
448 mappingReverse[order[
i]] =
i;
449 hcalDepthEnergyFractions_Ordered.push_back(hcalDepthEnergyFractions[order[i]]);
453 for (
size_t i = 0, ntk = mappingTk.size(); i < ntk; i++) {
454 if (mappingTk[i] >= 0)
455 mappingTk[
i] = reverseOrder[mappingTk[
i]];
458 for (
size_t i = 0, ntk = mappingPuppi.size(); i < ntk; i++) {
459 mappingPuppi[
i] = reverseOrder[mappingPuppi[
i]];
465 auto pf2pc = std::make_unique<edm::Association<pat::PackedCandidateCollection>>(oh);
466 auto pc2pf = std::make_unique<edm::Association<reco::PFCandidateCollection>>(
cands);
469 pf2pcFiller.insert(cands, mappingReverse.begin(), mappingReverse.end());
470 pc2pfFiller.insert(oh, order.begin(), order.end());
472 pf2pcFiller.insert(TKOrigs, mappingTk.begin(), mappingTk.end());
474 pf2pcFiller.insert(puppiCands, mappingPuppi.begin(), mappingPuppi.end());
482 auto hcalDepthEnergyFractionsV = std::make_unique<edm::ValueMap<HcalDepthEnergyFractions>>();
484 fillerHcalDepthEnergyFractions.insert(
485 cands, hcalDepthEnergyFractions_Ordered.begin(), hcalDepthEnergyFractions_Ordered.end());
486 fillerHcalDepthEnergyFractions.fill();
489 iEvent.
put(
std::move(hcalDepthEnergyFractionsV),
"hcalDepthEnergyFractions");
double ecalEnergy() const
return corrected Ecal energy
int pdgId() const final
PDG identifier.
const Point & referencePoint() const
Reference point on the track.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool isNonnull() const
Checks for non-null.
double eta() const final
momentum pseudorapidity
const PolarLorentzVector & polarP4() const final
four-momentum Lorentz vector
double rawEcalEnergy() const
return corrected Ecal energy
bool hasValidHitInPixelLayer(enum PixelSubdetector::SubDetector, uint16_t layer) const
const edm::EDGetTokenT< std::vector< reco::PFCandidate > > PuppiCandsNoLep_
float mva_nothing_gamma() const
mva for gamma detection
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const std::array< float, 7 > & hcalDepthEnergyFractions() const
fraction of hcal energy at a given depth (index 0..6 for depth 1..7)
double phi() const
azimuthal angle of momentum vector
double pt() const final
transverse momentum
int charge() const final
electric charge
static const int qualityMap[8]
conversion map from quality flags used in PV association and miniAOD one
const edm::EDGetTokenT< reco::PFCandidateCollection > Cands_
key_type key() const
Accessor for product key.
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
ProductID id() const
Accessor for product ID.
const edm::EDGetTokenT< edm::ValueMap< int > > PVAssoQuality_
const edm::EDGetTokenT< edm::ValueMap< float > > PuppiWeightNoLep_
reco::TrackRef trackRef() const
const double minPtForTrackProperties_
const Point & vertex() const override
vertex position (overwritten by PF...)
bool isTimeValid() const
do we have a valid time information
double eta() const
pseudorapidity of momentum vector
double pt() const
track transverse momentum
const bool storePfGammaEnFr_
double energy() const final
energy
Abs< T >::type abs(const T &t)
const bool storeChargedHadronIsolation_
const edm::EDGetTokenT< std::vector< reco::PFCandidate > > PuppiCands_
reco::TrackRef track() const override
reference to a track
static std::vector< size_t > sort_indexes(const std::vector< T > &v)
const edm::EDGetTokenT< reco::TrackCollection > TKOrigs_
const bool storeHcalDepthEndcapOnly_
const edm::EDGetTokenT< edm::ValueMap< reco::CandidatePtr > > PuppiCandsMap_
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
const int covarianceVersion_
reco::MuonRef muonRef() const
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
LostInnerHits
Enumerator specifying the.
const edm::EDGetTokenT< edm::ValueMap< bool > > ChargedHadronIsolation_
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
T const * product() const
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
const std::vector< int > covariancePackingSchemas_
XYZPointD XYZPoint
point in space with cartesian internal representation
ProductID id() const
Accessor for product ID.
const edm::EDGetTokenT< edm::ValueMap< float > > PuppiWeight_
const edm::EDGetTokenT< reco::VertexCollection > PVOrigs_
int numberOfLostHits(HitCategory category) const
Particle reconstructed by the particle flow algorithm.
std::vector< edm::EDGetTokenT< edm::View< reco::Candidate > > > SVWhiteLists_
reco::GsfTrackRef gsfTrackRef() const
const std::vector< int > pfCandidateTypesForHcalDepth_
double hcalEnergy() const
return corrected Hcal energy
int numberOfValidPixelHits() const
const_iterator end() const
const edm::EDGetTokenT< edm::Association< reco::VertexCollection > > PVAsso_
const edm::EDGetTokenT< reco::VertexCollection > PVs_
const double minPtForLowQualityTrackProperties_
virtual ParticleType particleId() const
uint16_t getHitPattern(HitCategory category, int position) const
double phi() const final
momentum azimuthal angle
const double minPtForChargedHadronProperties_
double rawHcalEnergy() const
return raw Hcal energy