119 if (AllMuCands->size() >= 3 && L3MuCands->size() >= 2){
122 auto AllMuCands_end = AllMuCands->end();
123 for (
auto i = AllMuCands->begin();
i != AllMuCands_end-2; ++
i) {
125 bool passingPreviousFilter_1 =
false;
126 for (
const auto & imu : PassedL3Muons){
129 for (
auto j =
i+1; j != AllMuCands_end-1; ++j) {
131 bool passingPreviousFilter_2 =
false;
132 for (
const auto & jmu : PassedL3Muons){
136 if (!(passingPreviousFilter_1 || passingPreviousFilter_2))
continue;
137 for (
auto k = j+1;
k != AllMuCands_end; ++
k){
139 bool passingPreviousFilter_3 =
false;
140 for (
const auto & kmu : PassedL3Muons){
144 if (!( (passingPreviousFilter_1 & passingPreviousFilter_2 ) ||
145 (passingPreviousFilter_1 & passingPreviousFilter_3 ) ||
146 (passingPreviousFilter_2 & passingPreviousFilter_3 ) ))
continue;
153 daughters.reserve(3);
155 daughters.push_back(*
i);
156 daughters.push_back(*j);
157 daughters.push_back(*
k);
159 std::sort(daughters.begin(), daughters.end(), ptComparer<reco::RecoChargedCandidate>);
172 int charge = daughters[0].charge() + daughters[1].charge() + daughters[2].charge();
174 int tauPdgId = charge > 0? 15 : -15;
187 bool collimated =
true;
188 for (
auto const &idau : daughters){
195 if (!collimated)
continue;
212 Taus->push_back(tau);
218 std::sort(Taus->begin(), Taus->end(), ptComparer<reco::CompositeCandidate>);
221 for (
const auto & itau : *Taus){
224 double sumPt = -itau.pt();
227 for (
const auto & itrk : *IsoTracks){
237 if ( !( (sumPt < chAbsIsoCut)||(sumPt < chRelIsoCut) ) )
continue;
239 SelectedTaus->push_back(itau);
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
const edm::EDGetTokenT< reco::RecoChargedCandidateCollection > AllMuonsToken_
double eta() const final
momentum pseudorapidity
edm::Handle< reco::RecoChargedCandidateCollection > L3MuCands
edm::Handle< trigger::TriggerFilterObjectWithRefs > L3DiMuonsFilterCands
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
const double MaxTriMuonMass_
std::vector< CompositeCandidate > CompositeCandidateCollection
collection of Candidate objects
const double TriMuonPtCut_
const int TriMuonAbsCharge_
const double MinTriMuonMass_
double pt() const final
transverse momentum
int charge() const final
electric charge
const double TriMuonEtaCut_
void setVertex(const Point &vertex) override
set vertex
const double TwiceMuonMass_
void setCharge(Charge q) final
set electric charge
const double ChargedAbsIsoCut_
const double IsoConeSize_
virtual const LorentzVector & p4() const =0
four-momentum Lorentz vector
const double MatchingConeSize_
Abs< T >::type abs(const T &t)
const LorentzVector & p4() const final
four-momentum Lorentz vector
edm::Handle< reco::TrackCollection > IsoTracks
const Candidate * daughter(size_type) const override
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
void addDaughter(const Candidate &, const std::string &s="")
add a clone of the passed candidate as daughter
double vz() const override
z coordinate of vertex position
std::vector< RecoChargedCandidate > RecoChargedCandidateCollection
collectin of RecoChargedCandidate objects
const double ChargedRelIsoCut_
const edm::EDGetTokenT< reco::RecoChargedCandidateCollection > L3MuonsToken_
edm::Handle< reco::RecoChargedCandidateCollection > AllMuCands
T1 deltaR2(T1 eta1, T2 phi1, T3 eta2, T4 phi2)
edm::Handle< reco::RecoChargedCandidateRef > PassedL3Muons
virtual double vz() const =0
z coordinate of vertex position
const double MaxTriMuonRadius_
void setPdgId(int pdgId) final
void setP4(const LorentzVector &p4) final
set 4-momentum
const edm::EDGetTokenT< reco::TrackCollection > IsoTracksToken_
double mass() const final
mass
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > L3DiMuonsFilterToken_