163 std::auto_ptr<VertexCollection> VertexCollection_out= std::auto_ptr<VertexCollection>(
new VertexCollection);
170 disc->discr_ = &(*discr);
175 unsigned int index(0);
177 std::vector<reco::TrackBaseRef> SignalTracks;
181 if(Tau->size()==PV->size()){
186 edm::LogError(
"PFTauPrimaryVertexProducer") <<
"PFTauPrimaryVertexProducer Number of Tau do not match Number of Primary Vertices for useInputPV Algorithim. Using Tau Primary Vertes Instead";
197 bool passedDisc =
true;
198 if ( disc->cutFormula_ )passedDisc = (disc->cutFormula_->Eval((*disc->discr_)[
tau]) > 0.5);
199 else passedDisc = ((*disc->discr_)[
tau] > disc->cut_);
200 if ( !passedDisc ){passed =
false;
break;}
202 if (passed &&
cut_.get()){passed = (*cut_)(*tau);}
209 const std::vector<edm::Ptr<reco::PFCandidate> > cands = RefPFTau->signalPFChargedHadrCands();
211 if(iter->get()->trackRef().isNonnull()) SignalTracks.push_back(
reco::TrackBaseRef(iter->get()->trackRef()));
212 else if(iter->get()->gsfTrackRef().isNonnull()){SignalTracks.push_back(
reco::TrackBaseRef(((iter)->
get()->gsfTrackRef())));}
222 if(RefMuon->track().isNonnull()) SignalTracks.push_back(
reco::TrackBaseRef(RefMuon->track()));
231 if(RefElectron->track().isNonnull()) SignalTracks.push_back(
reco::TrackBaseRef(RefElectron->track()));
253 for(std::vector<reco::TrackBaseRef>::const_iterator vtxTrkRef=thePV.
tracks_begin();vtxTrkRef<thePV.
tracks_end();vtxTrkRef++){
254 for (
unsigned int sigTrk = 0; sigTrk < SignalTracks.size(); sigTrk++) {
255 if((*vtxTrkRef)!=SignalTracks[sigTrk] ){
256 nonTauTracks.push_back(**vtxTrkRef);
263 std::vector<reco::TransientTrack> transTracks;
264 for (reco::TrackCollection::iterator iter=nonTauTracks.begin(); iter!=nonTauTracks.end(); ++iter){
265 transTracks.push_back(transTrackBuilder->build(*iter));
268 if ( transTracks.size() >= 3 ) {
273 transVtx = avf.
vertex(transTracks);
275 transVtx = avf.
vertex(transTracks, *beamSpot);
280 }
else FitOk =
false;
281 if ( FitOk ) thePV = transVtx;
284 VertexCollection_out->push_back(thePV);
285 AVPFTauPV->setValue(iPFTau, VRef);
288 iEvent.
put(VertexCollection_out,
"PFTauPrimaryVertices");
289 iEvent.
put(AVPFTauPV);
DiscCutPairVec discriminators_
trackRef_iterator tracks_end() const
last iterator over tracks
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< std::vector< reco::PFTau > > PFTauToken_
std::vector< Track > TrackCollection
collection of Tracks
std::vector< Vertex > VertexCollection
collection of Vertex objects
edm::RefProd< PFTauCollection > PFTauRefProd
references to PFTau collection
edm::EDGetTokenT< reco::VertexCollection > PVToken_
void setWeightThreshold(float w)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
edm::EDGetTokenT< std::vector< reco::Muon > > MuonToken_
virtual CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &) const
edm::EDGetTokenT< reco::TrackCollection > TrackCollectionToken_
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
RefProd< PROD > getRefBeforePut()
bool RemoveElectronTracks_
std::auto_ptr< StringCutObjectSelector< reco::PFTau > > cut_
trackRef_iterator tracks_begin() const
first iterator over tracks
edm::EDGetTokenT< std::vector< reco::Electron > > ElectronToken_