22 unsigned int dim = HLTMu.size();
24 if (dim==0)
return false;
25 for (
unsigned int k =0;
k< dim;
k++ ) {
26 if ( (
deltaR(HLTMu[
k], *dau) < DR) && (fabs(HLTMu[k].
pt() - dau->
pt())/ HLTMu[k].
pt()<DPtRel)){ nPass++ ;
34 if ( (
deltaR(HLTMu, *dau) < DR) && (fabs(HLTMu.
pt() - dau->
pt())/ HLTMu.
pt()<DPtRel)) {
60 trigToken_(iC.consumes<
edm::TriggerResults>(cfg.getParameter<
edm::InputTag> (
"TrigTag"))),
61 trigEv_(cfg.getParameter<
edm::InputTag> (
"triggerEvent")),
62 trigEvToken_(iC.consumes<
trigger::TriggerEvent>(trigEv_)),
63 cond_(cfg.getParameter<
std::
string >(
"condition")),
64 hltPath_(cfg.getParameter<
std::
string >(
"hltPath")),
65 L3FilterName_(cfg.getParameter<
std::
string >(
"L3FilterName")),
66 maxDPtRel_(cfg.getParameter<double>(
"maxDPtRel")),
67 maxDeltaR_(cfg.getParameter<double>(
"maxDeltaR")){
79 edm::LogError(
"errorTriggerEventValid" ) <<
"trigger::TriggerEvent product with InputTag " <<
trigEv_.
encode() <<
" not in event";
90 bool singleTrigFlag0 =
false;
91 bool singleTrigFlag1 =
false;
92 bool exactlyOneTriggerFlag =
false;
93 bool bothTriggerFlag =
false;
94 bool atLeastOneTriggerFlag=
false;
95 bool FirstTriggerFlag =
false;
96 bool globalisTriggerFlag =
false;
97 if((((
cond_ !=
"exactlyOneMatched" &&
cond_!=
"atLeastOneMatched") &&
cond_ !=
"bothMatched") &&
cond_ !=
"firstMatched") &&
cond_ !=
"globalisMatched")
99 <<
"Invalid condition type: " <<
cond_ <<
". Valid types are:" 100 <<
" exactlyOneMatched, atLeastOneMatched, bothMatched, firstMatched,globalisMatched\n";
104 unsigned int nMuHLT =0;
105 std::vector<reco::Particle> HLTMuMatched;
109 size_t p = fullname.find_first_of(
':');
110 if ( p != std::string::npos) {
111 name = fullname.substr(0, p);
116 if ( !toc.empty() ) {
118 for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
120 HLTMuMatched.push_back(toc[*ki].particle());
132 bool firstdismuon = (dau0->
isGlobalMuon() ?
true :
false);
134 std::vector<bool> IsDau0Matched_;
135 std::vector<bool> IsDau1Matched_;
140 for (
unsigned int y=0;
y< HLTMuMatched.size();
y++ ){
144 bool secondismuon = (dau1->
isGlobalMuon() ?
true :
false);
146 if(dau1 !=
nullptr && (secondismuon ||secondisStandAlone) ){
148 for (
unsigned int y=0;
y< HLTMuMatched.size();
y++ ){
152 if ( (IsDau0Matched_.size() * IsDau1Matched_.size())!=0 ) {
153 for (
unsigned int y=0;
y< IsDau1Matched_.size();
y++ ){
154 if ( IsDau0Matched_[
y]==
true && IsDau1Matched_[
y]==
true ){
155 std::cout<<
"WARNING--> I'm matching the two muons to the same HLT muon....." << std::endl;}
158 if(!singleTrigFlag0 && !singleTrigFlag1)
return false;
159 if((singleTrigFlag0 && singleTrigFlag1) && secondismuon ) bothTriggerFlag =
true;
160 if(((singleTrigFlag0 && !singleTrigFlag1) && secondismuon) || ((!singleTrigFlag0 && singleTrigFlag1) && secondismuon)) exactlyOneTriggerFlag =
true;
161 if((((singleTrigFlag0 && firstdismuon) && secondisStandAlone) && !secondismuon ) || (((singleTrigFlag1 && secondismuon) && firstdisStandAlone) && !firstdismuon))globalisTriggerFlag =
true;
162 if((singleTrigFlag0 && !singleTrigFlag1) && !secondismuon) FirstTriggerFlag =
true;
163 if((singleTrigFlag0 || singleTrigFlag1) && secondismuon) atLeastOneTriggerFlag=
true;
164 if(
cond_==
"exactlyOneMatched")
return exactlyOneTriggerFlag;
165 if(
cond_==
"atLeastOneMatched")
return atLeastOneTriggerFlag;
166 if(
cond_==
"bothMatched")
return bothTriggerFlag;
167 if(
cond_==
"firstMatched")
return FirstTriggerFlag;
168 if(
cond_==
"globalisMatched")
return globalisTriggerFlag;
double pt() const
transverse momentum
trigger::size_type sizeFilters() const
virtual bool isStandAloneMuon() const =0
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define EVENTSETUP_STD_INIT(SELECTOR)
edm::EDGetTokenT< edm::TriggerResults > trigToken_
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
const Keys & filterKeys(trigger::size_type index) const
edm::EDGetTokenT< trigger::TriggerEvent > trigEvToken_
void newEvent(const edm::Event &, const edm::EventSetup &)
#define DEFINE_FWK_MODULE(type)
const TriggerObjectCollection & getObjects() const
bool operator()(const reco::Candidate &) const
std::string L3FilterName_
SingleObjectSelector< edm::View< reco::Candidate >, AndSelector< ZGoldenFilter, StringCutObjectSelector< reco::Candidate > >> ZGoldenSelectorAndFilter
bool IsMuMatchedToHLTSingleMu(const reco::Candidate *dau, reco::Particle HLTMu, double DR, double DPtRel)
edm::TriggerNames const * trigNames_
edm::Handle< trigger::TriggerEvent > handleTriggerEvent_
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
const edm::InputTag filterTag(trigger::size_type index) const
virtual bool isGlobalMuon() const =0
virtual double pt() const =0
transverse momentum
std::vector< size_type > Keys
edm::Handle< edm::TriggerResults > triggerResults_
bool IsMuMatchedToHLTMu(const reco::Candidate *dau, std::vector< reco::Particle > HLTMu, double DR, double DPtRel)
virtual size_type numberOfDaughters() const =0
number of daughters
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
ZGoldenFilter(const edm::ParameterSet &, edm::ConsumesCollector &iC)