41 beamspotTag_ (iConfig.getParameter<
edm::
InputTag > (
"BeamSpotTag")),
43 candTag_ (iConfig.getParameter<
edm::
InputTag > (
"CandTag")),
45 previousCandTag_ (iConfig.getParameter<
InputTag > (
"PreviousCandTag")),
47 seedMapTag_( iConfig.getParameter<
InputTag >(
"SeedMapTag") ),
48 seedMapToken_(consumes<
SeedMap>(seedMapTag_)),
49 fast_Accept_ (iConfig.getParameter<
bool> (
"FastAccept")),
50 max_Eta_ (iConfig.getParameter<double> (
"MaxEta")),
51 min_Nhits_ (iConfig.getParameter<
int> (
"MinNhits")),
52 min_Nstations_(iConfig.getParameter<
int> (
"MinNstations")),
53 min_Nchambers_(iConfig.getParameter<
int> (
"MinNchambers")),
54 max_Dr_ (iConfig.getParameter<double> (
"MaxDr")),
55 max_Dz_ (iConfig.getParameter<double> (
"MaxDz")),
56 chargeOpt_ (iConfig.getParameter<
int> (
"ChargeOpt")),
57 min_PtPair_ (iConfig.getParameter<double> (
"MinPtPair")),
58 min_PtMax_ (iConfig.getParameter<double> (
"MinPtMax")),
59 min_PtMin_ (iConfig.getParameter<double> (
"MinPtMin")),
60 min_InvMass_ (iConfig.getParameter<double> (
"MinInvMass")),
61 max_InvMass_ (iConfig.getParameter<double> (
"MaxInvMass")),
62 min_Acop_ (iConfig.getParameter<double> (
"MinAcop")),
63 max_Acop_ (iConfig.getParameter<double> (
"MaxAcop")),
64 min_Angle_ (iConfig.getParameter<double> (
"MinAngle")),
65 max_Angle_ (iConfig.getParameter<double> (
"MaxAngle")),
66 min_PtBalance_ (iConfig.getParameter<double> (
"MinPtBalance")),
67 max_PtBalance_ (iConfig.getParameter<double> (
"MaxPtBalance")),
68 nsigma_Pt_ (iConfig.getParameter<double> (
"NSigmaPt"))
72 <<
" CandTag/MinN/MaxEta/MinNhits/MinNstations/MinNchambers/MaxDr/MaxDz/MinPt1/MinPt2/MinInvMass/MaxInvMass/MinAcop/MaxAcop/MinAngle/MaxAngle/MinPtBalance/MaxPtBalance/NSigmaPt : " 105 desc.
add<
bool>(
"FastAccept",
false);
106 desc.
add<
double>(
"MaxEta",2.5);
107 desc.
add<
int>(
"MinNhits",0);
108 desc.
add<
int>(
"MinNstations",0);
109 desc.
add<
int>(
"MinNchambers",2);
110 desc.
add<
double>(
"MaxDr",100.0);
111 desc.
add<
double>(
"MaxDz",9999.0);
112 desc.
add<
int>(
"ChargeOpt",0);
113 desc.
add<
double>(
"MinPtPair",0.0);
114 desc.
add<
double>(
"MinPtMax",3.0);
115 desc.
add<
double>(
"MinPtMin",3.0);
116 desc.
add<
double>(
"MinInvMass",1.6);
117 desc.
add<
double>(
"MaxInvMass",5.6);
118 desc.
add<
double>(
"MinAcop",-1.0);
119 desc.
add<
double>(
"MaxAcop",3.15);
120 desc.
add<
double>(
"MinAngle",-999.0);
121 desc.
add<
double>(
"MaxAngle",2.5);
122 desc.
add<
double>(
"MinPtBalance",-1.0);
123 desc.
add<
double>(
"MaxPtBalance",999999.0);
124 desc.
add<
double>(
"NSigmaPt",0.0);
125 descriptions.
add(
"hltMuonDimuonL2Filter", desc);
133 double const MuMass = 0.106;
134 double const MuMass2 = MuMass*MuMass;
151 beamSpot = *recoBeamSpotHandle;
161 RecoChargedCandidateCollection::const_iterator cand1;
162 RecoChargedCandidateCollection::const_iterator cand2;
163 for (cand1=mucands->begin(); cand1!=mucands->end(); cand1++) {
166 LogDebug(
"HLTMuonDimuonL2Filter") <<
" 1st muon in loop: q*pt= " 167 << tk1->charge()*tk1->pt() <<
", eta= " << tk1->eta() <<
", hits= " << tk1->numberOfValidHits();
171 if (fabs(tk1->eta())>
max_Eta_)
continue;
174 if (tk1->numberOfValidHits()<
min_Nhits_)
continue;
177 if (tk1->hitPattern().muonStationsWithAnyHits() <
min_Nstations_)
continue;
180 if(tk1->hitPattern().dtStationsWithAnyHits() +
181 tk1->hitPattern().cscStationsWithAnyHits() <
min_Nchambers_)
continue;
188 if (fabs(tk1->dz())>
max_Dz_)
continue;
191 double pt1 = tk1->pt();
192 double err1 = tk1->error(0);
193 double abspar1 = fabs(tk1->parameter(0));
197 LogDebug(
"HLTMuonDimuonL2Filter") <<
" ... 1st muon in loop, pt1= " 198 << pt1 <<
", ptLx1= " << ptLx1;
200 cand2 = cand1; cand2++;
201 for (; cand2!=mucands->end(); cand2++) {
205 LogDebug(
"HLTMuonDimuonL2Filter") <<
" 2nd muon in loop: q*pt= " << tk2->charge()*tk2->pt() <<
", eta= " << tk2->eta() <<
", hits= " << tk2->numberOfValidHits() <<
", d0= " << tk2->d0();
208 if (fabs(tk2->eta())>
max_Eta_)
continue;
211 if (tk2->numberOfValidHits()<
min_Nhits_)
continue;
214 if (tk2->hitPattern().muonStationsWithAnyHits() <
min_Nstations_)
continue;
217 if(tk2->hitPattern().dtStationsWithAnyHits() +
218 tk2->hitPattern().cscStationsWithAnyHits() <
min_Nchambers_)
continue;
225 if (fabs(tk2->dz())>
max_Dz_)
continue;
228 double pt2 = tk2->pt();
229 double err2 = tk2->error(0);
230 double abspar2 = fabs(tk2->parameter(0));
234 LogDebug(
"HLTMuonDimuonL2Filter") <<
" ... 2nd muon in loop, pt2= " 235 << pt2 <<
", ptLx2= " << ptLx2;
246 if (tk1->charge()*tk2->charge()>0)
continue;
248 if (tk1->charge()*tk2->charge()<0)
continue;
252 double acop = fabs(tk1->phi()-tk2->phi());
253 if (acop>
M_PI) acop = 2*
M_PI - acop;
255 LogDebug(
"HLTMuonDimuonL2Filter") <<
" ... 1-2 acop= " << acop;
260 double angle = acos((tk1->px()*tk2->px() + tk1->py()*tk2->py() + tk1->pz()*tk2->pz())/(tk1->p()*tk2->p()));
261 LogDebug(
"HLTMuonDimuonL2Filter") <<
" ... 1-2 angle= " <<
angle;
266 double ptbalance = fabs(tk1->pt()-tk2->pt());
271 e1 =
sqrt(tk1->momentum().Mag2()+MuMass2);
272 e2 =
sqrt(tk2->momentum().Mag2()+MuMass2);
277 double pt12 = p.pt();
278 LogDebug(
"HLTMuonDimuonL2Filter") <<
" ... 1-2 pt12= " << pt12;
281 double invmass =
abs(p.mass());
283 LogDebug(
"HLTMuonDimuonL2Filter") <<
" ... 1-2 invmass= " << invmass;
289 LogDebug(
"HLTMuonDimuonL2Filter") <<
" Track1 passing filter: pt= " << tk1->pt() <<
", eta: " << tk1->eta();
290 LogDebug(
"HLTMuonDimuonL2Filter") <<
" Track2 passing filter: pt= " << tk2->pt() <<
", eta: " << tk2->eta();
291 LogDebug(
"HLTMuonDimuonL2Filter") <<
" Invmass= " << invmass;
295 vector<RecoChargedCandidateRef> vref;
297 for (
auto &
i : vref) {
302 }
else if (tktmp==tk2) {
305 if (i1done && i2done)
break;
323 const bool accept (n >= 1);
325 LogDebug(
"HLTMuonDimuonL2Filter") <<
" >>>>> Result of HLTMuonDimuonL2Filter is "<< accept <<
", number of muon pairs passing thresholds= " <<
n;
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
bool isTriggeredByL1(reco::TrackRef &l2muon)
checks if a L2 muon was seeded by a fired L1
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
~HLTMuonDimuonL2Filter() override
edm::Ref< RecoChargedCandidateCollection > RecoChargedCandidateRef
reference to an object in a collection of RecoChargedCandidate objects
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
#define DEFINE_FWK_MODULE(type)
Abs< T >::type abs(const T &t)
edm::EDGetTokenT< reco::BeamSpot > beamspotToken_
T const * get() const
Returns C++ pointer to the item.
edm::EDGetTokenT< SeedMap > seedMapToken_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > candToken_
std::vector< RecoChargedCandidate > RecoChargedCandidateCollection
collectin of RecoChargedCandidate objects
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > previousCandToken_
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLTMuonDimuonL2Filter(const edm::ParameterSet &)
const Point & position() const
position
math::PtEtaPhiELorentzVectorF LorentzVector
T angle(T x1, T y1, T z1, T x2, T y2, T z2)