73 const double MuMass(0.106);
74 const double MuMass2(MuMass * MuMass);
109 if (mucands->size() < 2)
111 if (trkcands->empty())
114 RecoChargedCandidateCollection::const_iterator mucand1;
115 RecoChargedCandidateCollection::const_iterator mucand2;
116 RecoChargedCandidateCollection::const_iterator trkcand;
122 vector<RecoChargedCandidateRef> vPrevCands;
125 for (mucand1 = mucands->begin(); mucand1 != mucands->end(); ++mucand1) {
127 LogDebug(
"HLTmumutkVtxProducer") <<
" 1st muon: q*pt= " << trk1->charge() * trk1->pt() <<
", eta= " << trk1->eta()
128 <<
", hits= " << trk1->numberOfValidHits();
135 if (fabs(trk1->eta()) >
maxEta_)
142 for (; mucand2 != mucands->end(); mucand2++) {
145 LogDebug(
"HLTDisplacedMumukFilter") <<
" 2nd muon: q*pt= " << trk2->charge() * trk2->pt()
146 <<
", eta= " << trk2->eta() <<
", hits= " << trk2->numberOfValidHits();
152 if (fabs(trk2->eta()) >
maxEta_)
158 for (trkcand = trkcands->begin(); trkcand != trkcands->end(); ++trkcand) {
165 LogDebug(
"HLTDisplacedMumukFilter") <<
" 3rd track: q*pt= " << trk3->charge() * trk3->pt()
166 <<
", eta= " << trk3->eta() <<
", hits= " << trk3->numberOfValidHits();
169 if (fabs(trk3->eta()) >
maxEta_)
175 e1 =
sqrt(trk1->momentum().Mag2() + MuMass2);
176 e2 =
sqrt(trk2->momentum().Mag2() + MuMass2);
177 e3 =
sqrt(trk3->momentum().Mag2() + thirdTrackMass2);
186 double invmass =
abs(p.mass());
187 LogDebug(
"HLTDisplacedMumukFilter") <<
" Invmass= " << invmass;
194 vector<TransientTrack> t_tks;
195 t_tks.push_back((*theB).build(&trk1));
196 t_tks.push_back((*theB).build(&trk2));
197 t_tks.push_back((*theB).build(&trk3));
198 if (t_tks.size() != 3)
203 double d0sig = tscb.transverseImpactParameter().significance();
static FreeTrajectoryState initialFreeState(const reco::Track &, const MagneticField *)
const std::string mfName_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< Vertex > VertexCollection
collection of Vertex objects
bool overlap(const reco::TrackRef &trackref1, const reco::TrackRef &trackref2)
const double thirdTrackMass_
const double minD0Significance_
const edm::EDGetTokenT< reco::RecoChargedCandidateCollection > trkCandToken_
Abs< T >::type abs(const T &t)
CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &tracks) const override
T const * get() const
Returns C++ pointer to the item.
const edm::EDGetTokenT< reco::RecoChargedCandidateCollection > muCandToken_
bool checkPreviousCand(const reco::TrackRef &trackref, const std::vector< reco::RecoChargedCandidateRef > &ref2) const
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > previousCandToken_
const edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
T const * product() const
math::PtEtaPhiELorentzVectorF LorentzVector