59 std::vector<size_t>
idx(v.size());
60 for (
size_t i = 0;
i !=
idx.size(); ++
i)
idx[
i] =
i;
86 return p.Z()-v.Z() - ((p.X()-v.X()) * c.
px() + (p.Y()-v.Y())*c.
py()) * c.
pz()/(c.
pt()*c.
pt());
95 PVAssoQuality_(consumes<edm::ValueMap<int> >(iConfig.getParameter<edm::
InputTag>(
"vertexAssociator"))),
98 PuppiWeight_(consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::
InputTag>(
"PuppiSrc"))),
99 PuppiWeightNoLep_(consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::
InputTag>(
"PuppiNoLepSrc"))),
101 PuppiCands_(consumes<std::vector<
reco::PFCandidate > >(iConfig.getParameter<edm::
InputTag>(
"PuppiSrc"))),
102 PuppiCandsNoLep_(consumes<std::vector<
reco::PFCandidate > >(iConfig.getParameter<edm::
InputTag>(
"PuppiNoLepSrc"))),
103 SVWhiteList_(consumes<edm::
View<
reco::CompositePtrCandidate > >(iConfig.getParameter<edm::
InputTag>(
"secondaryVerticesForWhiteList"))),
104 minPtForTrackProperties_(iConfig.getParameter<double>(
"minPtForTrackProperties"))
106 produces< std::vector<pat::PackedCandidate> > ();
107 produces< edm::Association<pat::PackedCandidateCollection> > ();
108 produces< edm::Association<reco::PFCandidateCollection> > ();
119 std::vector<reco::Candidate>::const_iterator cand;
122 iEvent.
getByToken( PuppiWeight_, puppiWeight );
124 iEvent.
getByToken( PuppiCandsMap_, puppiCandsMap );
127 std::vector<int> mappingPuppi(puppiCands->size());
130 iEvent.
getByToken( PuppiWeightNoLep_, puppiWeightNoLep );
132 iEvent.
getByToken( PuppiCandsNoLep_, puppiCandsNoLep );
134 std::vector<reco::CandidatePtr> puppiCandsNoLepPtrs;
135 if (puppiCandsNoLep.
isValid()){
136 for (
auto pup : *puppiCandsNoLep){
137 puppiCandsNoLepPtrs.push_back(pup.sourceCandidatePtr(0));
140 auto const& puppiCandsNoLepV = puppiCandsNoLep.
product();
148 iEvent.
getByToken(PVAssoQuality_,assoQualityHandle);
153 iEvent.
getByToken(SVWhiteList_,svWhiteListHandle);
155 std::set<unsigned int> whiteList;
156 for(
unsigned int i=0;
i<svWhiteList.
size();
i++)
158 for(
unsigned int j=0;
j< svWhiteList[
i].numberOfSourceCandidatePtrs();
j++) {
160 if(c.
id() == cands.
id()) whiteList.insert(c.
key());
173 std::auto_ptr< std::vector<pat::PackedCandidate> > outPtrP(
new std::vector<pat::PackedCandidate> );
174 std::vector<int> mapping(cands->size());
175 std::vector<int> mappingReverse(cands->size());
176 std::vector<int> mappingTk(TKOrigs->size(), -1);
178 for(
unsigned int ic=0, nc = cands->size(); ic < nc; ++ic) {
180 float phiAtVtx = cand.
phi();
190 for(
size_t ii=0;
ii<PVs->size();
ii++){
191 float dz=
std::abs(ctrack->
dz( ((*PVs)[
ii]).position()));
192 if(dz<dist) {pvi=
ii;dist=dz; }
205 phiAtVtx = ctrack->
phi();
222 outPtrP->back().setLostInnerHits( lostHits );
223 if(outPtrP->back().pt() > minPtForTrackProperties_ || whiteList.find(ic)!=whiteList.end()) {
224 outPtrP->back().setTrackProperties(*ctrack);
231 outPtrP->back().setMuonID(cand.
muonRef()->isStandAloneMuon(), cand.
muonRef()->isGlobalMuon());
237 PVpos = PV->position();
248 float puppiWeightVal = (*puppiWeight)[pkref];
249 float puppiWeightNoLepVal = 0.0;
254 if ( puppiWeightNoLep.isValid() ) {
256 auto pkrefPtr = pkref->sourceCandidatePtr(0);
258 bool foundNoLep =
false;
259 for (
size_t ipcnl = 0; ipcnl < puppiCandsNoLepPtrs.size(); ipcnl++){
260 if (puppiCandsNoLepPtrs[ipcnl] == pkrefPtr){
262 puppiWeightNoLepVal = puppiCandsNoLepV->at(ipcnl).pt()/cand.
pt();
266 if ( !foundNoLep || puppiWeightNoLepVal > 1 ) {
267 puppiWeightNoLepVal = 1.0;
270 outPtrP->back().setPuppiWeight( puppiWeightVal, puppiWeightNoLepVal );
272 mappingPuppi[((*puppiCandsMap)[pkref]).
key()]=ic;
282 std::auto_ptr< std::vector<pat::PackedCandidate> > outPtrPSorted(
new std::vector<pat::PackedCandidate> );
283 std::vector<size_t> order=sort_indexes(*outPtrP);
284 std::vector<size_t> reverseOrder(order.size());
285 for(
size_t i=0,nc=cands->size();
i<nc;
i++) {
286 outPtrPSorted->push_back((*outPtrP)[order[
i]]);
287 reverseOrder[order[
i]] =
i;
288 mappingReverse[order[
i]]=
i;
292 for(
size_t i=0,ntk=mappingTk.size();
i<ntk;
i++){
293 int origInd = mappingTk[
i];
294 if (origInd>=0 ) mappingTk[
i]=reverseOrder[origInd];
297 for(
size_t i=0,ntk=mappingPuppi.size();
i<ntk;
i++){
298 mappingPuppi[
i]=reverseOrder[mappingPuppi[
i]];
308 pf2pcFiller.
insert(cands, mappingReverse.begin(), mappingReverse.end());
309 pc2pfFiller.
insert(oh , order.begin(), order.end());
311 pf2pcFiller.
insert(TKOrigs, mappingTk.begin(), mappingTk.end());
312 pf2pcFiller.
insert(puppiCands, mappingPuppi.begin(), mappingPuppi.end());
const Point & referencePoint() const
Reference point on the track.
virtual int pdgId() const
PDG identifier.
const edm::EDGetTokenT< edm::ValueMap< float > > PuppiWeight_
bool isNonnull() const
Checks for non-null.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
virtual double pt() const =0
transverse momentum
#define DEFINE_FWK_MODULE(type)
Sin< T >::type sin(const T &t)
virtual double pz() const =0
z coordinate of momentum vector
void insert(const H &h, I begin, I end)
std::vector< Track > TrackCollection
collection of Tracks
double phi() const
azimuthal angle of momentum vector
std::vector< Vertex > VertexCollection
collection of Vertex objects
static const int qualityMap[8]
conversion map from quality flags used in PV association and miniAOD one
const edm::EDGetTokenT< reco::PFCandidateCollection > Cands_
virtual double pt() const
transverse momentum
key_type key() const
Accessor for product key.
virtual double eta() const
momentum pseudorapidity
const reco::VertexRef vertexRef() const
virtual double pt() const
transverse momentum
ProductID id() const
Accessor for product ID.
const edm::EDGetTokenT< edm::ValueMap< int > > PVAssoQuality_
reco::TrackRef trackRef() const
const double minPtForTrackProperties_
PATPackedCandidateProducer(const edm::ParameterSet &)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Cos< T >::type cos(const T &t)
float calcDxy(float dx, float dy, float phi) const
Abs< T >::type abs(const T &t)
virtual int charge() const
electric charge
virtual const Point & vertex() const
vertex position (overwritten by PF...)
const edm::EDGetTokenT< reco::TrackCollection > TKOrigs_
const edm::EDGetTokenT< std::vector< reco::PFCandidate > > PuppiCands_
std::vector< size_t > sort_indexes(const std::vector< T > &v) const
virtual double py() const =0
y coordinate of momentum vector
const edm::EDGetTokenT< edm::ValueMap< reco::CandidatePtr > > PuppiCandsMap_
const edm::EDGetTokenT< edm::ValueMap< float > > PuppiWeightNoLep_
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
virtual void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
reco::MuonRef muonRef() const
virtual double px() const =0
x coordinate of momentum vector
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.
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
float calcDz(reco::Candidate::Point p, reco::Candidate::Point v, const reco::Candidate &c) const
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 edm::EDGetTokenT< std::vector< reco::PFCandidate > > PuppiCandsNoLep_
XYZPointD XYZPoint
point in space with cartesian internal representation
tuple idx
DEBUGGING if hasattr(process,"trackMonIterativeTracking2012"): print "trackMonIterativeTracking2012 D...
ProductID id() const
Accessor for product ID.
const edm::EDGetTokenT< reco::VertexCollection > PVOrigs_
~PATPackedCandidateProducer()
int numberOfLostHits(HitCategory category) const
Particle reconstructed by the particle flow algorithm.
virtual const PolarLorentzVector & polarP4() const
four-momentum Lorentz vector
reco::GsfTrackRef gsfTrackRef() const
math::XYZPoint Point
point in the space
const edm::EDGetTokenT< edm::Association< reco::VertexCollection > > PVAsso_
bool hasValidHitInFirstPixelBarrel() const
const edm::EDGetTokenT< reco::VertexCollection > PVs_
virtual double phi() const
momentum azimuthal angle
bool candsOrdering(pat::PackedCandidate i, pat::PackedCandidate j) const
const edm::EDGetTokenT< edm::View< reco::CompositePtrCandidate > > SVWhiteList_