32 void endJob()
override ;
33 bool isDuplicate(
unsigned int Run,
unsigned int Event);
56 RemoveDuplicates = iConfig.
getParameter<
bool> (
"RemoveDuplicates");
59 triggerResultsToken_ = consumes<edm::TriggerResults>(
edm::InputTag(
"TriggerResults",
"", TriggerProcess));
61 trEvToken = consumes< trigger::TriggerEvent >(
edm::InputTag(
"hltTriggerSummaryAOD" ) );
62 MuonTrigger1Mask = iConfig.
getParameter<
int> (
"MuonTrigger1Mask");
63 PFMetTriggerMask = iConfig.
getParameter<
int> (
"PFMetTriggerMask");
64 L2MuMETTriggerMask = iConfig.
getParameter<
int> (
"L2MuMETTriggerMask");
84 char tmp[255];sprintf(tmp,
"%i_%i",Run,Event);
85 std::map<std::string, bool >::iterator it = DuplicateMap.find(
std::string(tmp));
86 if(it==DuplicateMap.end()){
98 iEvent.
getByToken(triggerResultsToken_, triggerResults);
101 if (triggerResults.
isValid()) {
104 if(!tr.
isValid()){ printf(
"NoValidTrigger\n"); }
107 if(RemoveDuplicates) {
123 unsigned int TrIndex_Unknown = tr.
size();
126 bool MuonTrigger1 =
false;
127 bool PFMetTrigger =
false;
128 bool L2MuMETTrigger =
false;
133 if(MuonTrigger1Mask!=0) {
134 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_Mu40_eta2p1_v5")) {
137 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_Mu40_eta2p1_v4")) {
140 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_Mu40_eta2p1_v1")) {
144 if(IncreasedTreshold(trEv,
InputTag(
"hltSingleMu30L2QualL3Filtered30",
"",TriggerProcess), 40, 2.1, 1,
false)){MuonTrigger1 =
true;}
147 if(IncreasedTreshold(trEv,
InputTag(
"hltSingleMu30L2QualL3Filtered30",
"",TriggerProcess), 40, 2.1, 1,
false)){MuonTrigger1 =
true;}
150 if(IncreasedTreshold(trEv,
InputTag(
"hltSingleMu30L2QualL3Filtered30",
"",TriggerProcess), 40, 2.1, 1,
false)){MuonTrigger1 =
true;}
153 if(IncreasedTreshold(trEv,
InputTag(
"hltSingleMu30L3Filtered30",
"",TriggerProcess), 40, 2.1, 1,
false)){MuonTrigger1 =
true;}
156 if(IncreasedTreshold(trEv,
InputTag(
"hltSingleMu30L3Filtered30",
"",TriggerProcess), 40, 2.1, 1,
false)){MuonTrigger1 =
true;}
159 if(IncreasedTreshold(trEv,
InputTag(
"hltSingleMu30L3Filtered30",
"",TriggerProcess), 40, 2.1, 1,
false)){MuonTrigger1 =
true;}
162 if(IncreasedTreshold(trEv,
InputTag(
"hltSingleMu30L3Filtered30",
"",TriggerProcess), 40, 2.1, 1,
false)){MuonTrigger1 =
true;}
165 if(IncreasedTreshold(trEv,
InputTag(
"hltSingleMu30L3Filtered30",
"",TriggerProcess), 40, 2.1, 1,
false)){MuonTrigger1 =
true;}
167 printf(
"HSCPHLTFilter --> HLT_Mu30_v1 not found\n");
168 for(
unsigned int i=0;
i<tr.
size();
i++){
187 if(PFMetTriggerMask!=0) {
188 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v17")){
191 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v16")){
194 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v12")){
197 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v11")){
200 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v10")){
203 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v9")){
206 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v8")){
209 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v7")){
212 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v6")){
215 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v5")){
218 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v4")){
221 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v3")){
224 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v2")){
227 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_PFMHT150_v1")){
230 printf(
"HSCPHLTFilter --> HLT_PFMHT150_v2 or v1 not found\n");
231 for(
unsigned int i=0;
i<tr.
size();
i++){
253 if(L2MuMETTriggerMask!=0) {
256 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_L2Mu60_1Hit_MET60_v6")){
259 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_L2Mu60_1Hit_MET60_v5")){
262 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_L2Mu60_1Hit_MET60_v4")){
265 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_L2Mu60_1Hit_MET60_v3")){
268 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_L2Mu60_1Hit_MET60_v2")) {
271 if(TrIndex_Unknown != tr.
triggerIndex(
"HLT_L2Mu60_1Hit_MET60_v1")){
280 if(L2MuMETTriggerMask==2) {
283 if(IncreasedTreshold(trEv,
InputTag(
"hltL2Mu20L2Filtered20",
"",TriggerProcess), 60, 2.1, 1,
false) &&
284 IncreasedTreshold(trEv,
InputTag(
"hltMET80",
"",TriggerProcess), 80, 2.1, 1,
false)) {L2MuMETTrigger =
true;}
290 if(MuonTrigger1Mask==0)MuonTrigger1=
false;
291 if(PFMetTriggerMask ==0)PFMetTrigger =
false;
292 if(L2MuMETTriggerMask==0) L2MuMETTrigger=
false;
295 if(MuonTrigger1Mask<0 && MuonTrigger1)
return false;
296 if(PFMetTriggerMask<0 && PFMetTrigger)
return false;
297 if(L2MuMETTriggerMask<0 && L2MuMETTrigger)
return false;
299 bool d = (MuonTrigger1 | PFMetTrigger | L2MuMETTrigger);
306 unsigned int filterIndex = trEv.
filterIndex(InputPath);
312 const int nI(VIDS.size());
313 const int nK(KEYS.size());
319 if(!averageThreshold){
320 int NObjectAboveThresholdObserved = 0;
321 for (
int i=0;
i!=
n; ++
i) {
322 if(TOC[KEYS[
i]].
pt()> NewThreshold && fabs(TOC[KEYS[
i]].
eta())<
etaCut) NObjectAboveThresholdObserved++;
325 if(NObjectAboveThresholdObserved>=NObjectAboveThreshold)
return true;
328 std::vector<double> ObjPt;
330 for (
int i=0;
i!=
n; ++
i) {
331 ObjPt.push_back(TOC[KEYS[
i]].
pt());
334 if((
int)(ObjPt.size())<NObjectAboveThreshold)
return false;
338 for(
int i=0;
i<NObjectAboveThreshold;
i++){
339 Average+= ObjPt[ObjPt.size()-1-
i];
340 }Average/=NObjectAboveThreshold;
343 if(Average>NewThreshold)
return true;
HSCPHLTFilter(const edm::ParameterSet &)
T getParameter(std::string const &) const
EventAuxiliary const & eventAuxiliary() const override
edm::EDGetTokenT< edm::TriggerResults > triggerResultsToken_
The single EDProduct to be saved for each event (AOD case)
trigger::size_type sizeFilters() const
TriggerResultsByName triggerResultsByName(edm::TriggerResults const &triggerResults) const override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< std::string >::size_type size() const
const Keys & filterKeys(trigger::size_type index) const
trigger::size_type filterIndex(const edm::InputTag &filterTag) const
find index of filter in data-member vector from filter tag
bool filter(edm::Event &, const edm::EventSetup &) override
std::string const & triggerName(unsigned i) const
unsigned triggerIndex(std::string const &pathName) const
~HSCPHLTFilter() override
bool isDuplicate(unsigned int Run, unsigned int Event)
const Vids & filterIds(trigger::size_type index) const
#define DEFINE_FWK_MODULE(type)
const TriggerObjectCollection & getObjects() const
std::map< std::string, bool > DuplicateMap
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
std::vector< size_type > Keys
static std::string const triggerResults("TriggerResults")
std::string TriggerProcess
edm::EDGetTokenT< trigger::TriggerEvent > trEvToken
bool IncreasedTreshold(const trigger::TriggerEvent &trEv, const edm::InputTag &InputPath, double NewThreshold, double etaCut, int NObjectAboveThreshold, bool averageThreshold)
std::vector< std::vector< double > > tmp
EventNumber_t event() const