CMS 3D CMS Logo

ZGoldenFilter.cc
Go to the documentation of this file.
14 
15 
16 #include <string>
17 using namespace std;
18 using namespace reco;
19 namespace edm { class EventSetup; }
20 
21 bool IsMuMatchedToHLTMu ( const reco::Candidate * dau, std::vector<reco::Particle> HLTMu , double DR, double DPtRel ) {
22  unsigned int dim = HLTMu.size();
23  unsigned int nPass=0;
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++ ;
27  }
28  }
29  return (nPass>0);
30 }
31 
32 bool IsMuMatchedToHLTSingleMu ( const reco::Candidate * dau, reco::Particle HLTMu , double DR, double DPtRel ) {
33  unsigned int nPass=0;
34  if ( (deltaR(HLTMu, *dau) < DR) && (fabs(HLTMu.pt() - dau->pt())/ HLTMu.pt()<DPtRel)) {
35  nPass++;
36  }
37  return (nPass>0);
38 }
39 
40 
42 
43 public:
45  bool operator()(const reco::Candidate & ) const;
46  void newEvent (const edm::Event&, const edm::EventSetup&);
56  double maxDPtRel_, maxDeltaR_ ;
57 };
58 
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")){
68 }
69 
71 
73  edm::LogWarning("") << ">>> TRIGGER collection does not exist !!!";
74  return ;
75  }
79  edm::LogError( "errorTriggerEventValid" ) << "trigger::TriggerEvent product with InputTag " << trigEv_.encode() << " not in event";
80  return;
81  }
83 }
84 
85 
86 
88  // int i = newEvent( edm::Event& const , edm::EventSetup& const );
89  assert(z.numberOfDaughters()==2);
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";
101  const reco::Candidate * dau0 = z.daughter(0);
102  const reco::Candidate * dau1 = z.daughter(1);
104  unsigned int nMuHLT =0;
105  std::vector<reco::Particle> HLTMuMatched;
106  for ( unsigned int ia = 0; ia < handleTriggerEvent_->sizeFilters(); ++ ia) {
109  size_t p = fullname.find_first_of(':');
110  if ( p != std::string::npos) {
111  name = fullname.substr(0, p);
112  }
113  else {
114  name = fullname;
115  }
116  if ( !toc.empty() ) {
118  for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
119  if (name == L3FilterName_ ) {
120  HLTMuMatched.push_back(toc[*ki].particle());
121  nMuHLT++;
122  }
123  }
124  }
125  }
126  /*trigger_fired is unused in all later code
127  bool trigger_fired = false;
128  for (unsigned int i=0; i<triggerResults_->size(); i++) {
129  std::string trigName = trigNames_->triggerName(i);
130  if ( trigName == hltPath_ && triggerResults_->accept(i)) trigger_fired = true;
131  }*/
132  bool firstdismuon = (dau0->isGlobalMuon() ? true : false);
133  bool firstdisStandAlone = (dau0->isStandAloneMuon() ? true : false);
134  std::vector<bool> IsDau0Matched_;
135  std::vector<bool> IsDau1Matched_;
136  if(dau0 != nullptr){
137  // checking if dau0 is matched to any HLT muon....
138  singleTrigFlag0 = IsMuMatchedToHLTMu ( dau0, HLTMuMatched ,maxDeltaR_, maxDPtRel_ );
139 
140  for (unsigned int y=0; y< HLTMuMatched.size(); y++ ){
141  IsDau0Matched_.push_back( IsMuMatchedToHLTSingleMu ( dau0, HLTMuMatched[y] ,maxDeltaR_, maxDPtRel_ ));
142  }
143  }
144  bool secondismuon = (dau1->isGlobalMuon() ? true : false);
145  bool secondisStandAlone = (dau1->isStandAloneMuon() ? true : false);
146  if(dau1 != nullptr && (secondismuon ||secondisStandAlone) ){
147  singleTrigFlag1 = IsMuMatchedToHLTMu ( dau1, HLTMuMatched ,maxDeltaR_, maxDPtRel_ );
148  for (unsigned int y=0; y< HLTMuMatched.size(); y++ ){
149  IsDau1Matched_.push_back( IsMuMatchedToHLTSingleMu ( dau1, HLTMuMatched[y] ,maxDeltaR_, maxDPtRel_ ));
150  }
151  }
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;}
156  }
157  }
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;
169  return false;
170 }
171 
172 
173 
178 
180 
181 
182 typedef SingleObjectSelector<
186 
187 
189 
double pt() const
transverse momentum
Definition: Particle.h:104
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:135
virtual bool isStandAloneMuon() const =0
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
#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
Definition: TriggerEvent.h:111
edm::EDGetTokenT< trigger::TriggerEvent > trigEvToken_
std::string cond_
bool ev
void newEvent(const edm::Event &, const edm::EventSetup &)
std::string encode() const
Definition: InputTag.cc:159
return((rh^lh)&mask)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:98
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_
int k[5][pyjets_maxn]
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:81
const edm::InputTag filterTag(trigger::size_type index) const
Definition: TriggerEvent.h:103
virtual bool isGlobalMuon() const =0
virtual double pt() const =0
transverse momentum
std::vector< size_type > Keys
std::string hltPath_
fixed size matrix
HLT enums.
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
Definition: Event.cc:256
edm::InputTag trigEv_
ZGoldenFilter(const edm::ParameterSet &, edm::ConsumesCollector &iC)