1 |
#ifndef PhysicsTools_PatAlgos_PATTriggerMatchSelector_h
|
2 |
#define PhysicsTools_PatAlgos_PATTriggerMatchSelector_h
|
3 |
|
4 |
|
5 |
// -*- C++ -*-
|
6 |
//
|
7 |
// Package: PatAlgos
|
8 |
// Class: PATTriggerMatchSelector
|
9 |
//
|
10 |
/**
|
11 |
\class pat::PATTriggerMatchSelector PATTriggerMatchSelector.h "PhysicsTools/PatAlgos/plugins/PATTriggerMatchSelector.h"
|
12 |
\brief
|
13 |
|
14 |
.
|
15 |
|
16 |
\author Volker Adler
|
17 |
\version $Id: PATTriggerMatchSelector.h,v 1.1 2009/10/20 17:15:14 dgele Exp $
|
18 |
*/
|
19 |
//
|
20 |
// $Id: PATTriggerMatchSelector.h,v 1.1 2009/10/20 17:15:14 dgele Exp $
|
21 |
//
|
22 |
|
23 |
|
24 |
#include <string>
|
25 |
#include <vector>
|
26 |
#include <map>
|
27 |
|
28 |
#include "FWCore/ParameterSet/interface/ParameterSet.h"
|
29 |
|
30 |
#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"
|
31 |
/* */
|
32 |
#include <iostream>
|
33 |
/* */
|
34 |
|
35 |
|
36 |
namespace pat {
|
37 |
|
38 |
template< typename T1, typename T2 >
|
39 |
class PATTriggerMatchSelector {
|
40 |
|
41 |
bool andOr_; // AND used if 'false', OR otherwise
|
42 |
std::vector< unsigned > filterIds_; // special filter related ID as defined in enum 'TriggerObjectType' in DataFormats/HLTReco/interface/TriggerTypeDefs.h
|
43 |
std::vector< std::string > filterIdsEnum_; // special filter related ID as defined in enum 'TriggerObjectType' in DataFormats/HLTReco/interface/TriggerTypeDefs.h
|
44 |
std::vector< std::string > filterLabels_;
|
45 |
std::vector< std::string > pathNames_;
|
46 |
std::vector< std::string > collectionTags_; // needs full tag strings (as from edm::InputTag::encode()), not only labels
|
47 |
|
48 |
public:
|
49 |
|
50 |
PATTriggerMatchSelector( const edm::ParameterSet & iConfig ) :
|
51 |
andOr_( iConfig.getParameter< bool >( "andOr" ) ),
|
52 |
filterIds_( iConfig.getParameter< std::vector< unsigned > >( "filterIds" ) ),
|
53 |
filterIdsEnum_( iConfig.getParameter< std::vector< std::string > >( "filterIdsEnum" ) ),
|
54 |
filterLabels_( iConfig.getParameter< std::vector< std::string > >( "filterLabels" ) ),
|
55 |
pathNames_( iConfig.getParameter< std::vector< std::string > >( "pathNames" ) ),
|
56 |
collectionTags_( iConfig.getParameter< std::vector< std::string > >( "collectionTags" ) )
|
57 |
{
|
58 |
}
|
59 |
|
60 |
bool operator()( const T1 & patObj, const T2 & trigObj ) const {
|
61 |
std::map< std::string, trigger::TriggerObjectType > filterIdsEnumMap;
|
62 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1Mu" , trigger::TriggerL1Mu ) );
|
63 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1NoIsoEG" , trigger::TriggerL1NoIsoEG ) );
|
64 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1IsoEG" , trigger::TriggerL1IsoEG ) );
|
65 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1CenJet" , trigger::TriggerL1CenJet ) );
|
66 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1ForJet" , trigger::TriggerL1ForJet ) );
|
67 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1TauJet" , trigger::TriggerL1TauJet ) );
|
68 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1ETM" , trigger::TriggerL1ETM ) );
|
69 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1ETT" , trigger::TriggerL1ETT ) );
|
70 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1HTT" , trigger::TriggerL1HTT ) );
|
71 |
filterIdsEnumMap.insert( std::make_pair( "TriggerL1JetCounts", trigger::TriggerL1JetCounts ) );
|
72 |
filterIdsEnumMap.insert( std::make_pair( "TriggerPhoton" , trigger::TriggerPhoton ) );
|
73 |
filterIdsEnumMap.insert( std::make_pair( "TriggerElectron" , trigger::TriggerElectron ) );
|
74 |
filterIdsEnumMap.insert( std::make_pair( "TriggerMuon" , trigger::TriggerMuon ) );
|
75 |
filterIdsEnumMap.insert( std::make_pair( "TriggerTau" , trigger::TriggerTau ) );
|
76 |
filterIdsEnumMap.insert( std::make_pair( "TriggerJet" , trigger::TriggerJet ) );
|
77 |
filterIdsEnumMap.insert( std::make_pair( "TriggerBJet" , trigger::TriggerBJet ) );
|
78 |
filterIdsEnumMap.insert( std::make_pair( "TriggerMET" , trigger::TriggerMET ) );
|
79 |
filterIdsEnumMap.insert( std::make_pair( "TriggerHT" , trigger::TriggerHT ) );
|
80 |
filterIdsEnumMap.insert( std::make_pair( "TriggerTrack" , trigger::TriggerTrack ) );
|
81 |
filterIdsEnumMap.insert( std::make_pair( "TriggerCluster" , trigger::TriggerCluster ) );
|
82 |
filterIdsEnumMap.insert( std::make_pair( "TriggerMETSig" , trigger::TriggerMETSig ) );
|
83 |
filterIdsEnumMap.insert( std::make_pair( "TriggerELongit" , trigger::TriggerELongit ) );
|
84 |
if ( andOr_ ) { // OR
|
85 |
for ( size_t i = 0; i < filterIds_.size(); ++i ) {
|
86 |
if ( filterIds_.at( i ) == 0 || trigObj.hasFilterId( filterIds_.at( i ) ) ) return true;
|
87 |
}
|
88 |
for ( size_t j = 0; j < filterLabels_.size(); ++j ) {
|
89 |
if ( filterLabels_.at( j ) == "*" || filterLabels_.at( j ) == "@" || trigObj.hasFilterLabel( filterLabels_.at( j ) ) ) return true;
|
90 |
}
|
91 |
for ( size_t k = 0; k < pathNames_.size(); ++k ) {
|
92 |
if ( pathNames_.at( k ) == "*" || pathNames_.at( k ) == "@" || trigObj.hasPathName( pathNames_.at( k ) ) ) return true;
|
93 |
}
|
94 |
for ( size_t l = 0; l < collectionTags_.size(); ++l ) {
|
95 |
if ( collectionTags_.at( l ) == "*" || collectionTags_.at( l ) == "@" || collectionTags_.at( l ) == trigObj.collection() ) return true;
|
96 |
}
|
97 |
for ( size_t m = 0; m < filterIdsEnum_.size(); ++m ) {
|
98 |
if ( filterIdsEnum_.at( m ) == "*" || filterIdsEnum_.at( m ) == "@" ) return true;
|
99 |
std::map< std::string, trigger::TriggerObjectType >::const_iterator iter( filterIdsEnumMap.find( filterIdsEnum_.at( m ) ) );
|
100 |
if ( iter != filterIdsEnumMap.end() && trigObj.hasFilterId( iter->second ) ) return true;
|
101 |
}
|
102 |
return false;
|
103 |
} else { // AND
|
104 |
for ( size_t i = 0; i < filterIds_.size(); ++i ) {
|
105 |
if ( filterIds_.at( i ) == 0 || trigObj.hasFilterId( filterIds_.at( i ) ) ) {
|
106 |
for ( size_t j = 0; j < filterLabels_.size(); ++j ) {
|
107 |
if ( filterLabels_.at( j ) == "*" || filterLabels_.at( j ) == "@" || trigObj.hasFilterLabel( filterLabels_.at( j ) ) ) {
|
108 |
for ( size_t k = 0; k < pathNames_.size(); ++k ) {
|
109 |
if ( pathNames_.at( k ) == "*" || pathNames_.at( k ) == "@" || trigObj.hasPathName( pathNames_.at( k ) ) ) {
|
110 |
for ( size_t l = 0; l < collectionTags_.size(); ++l ) {
|
111 |
if ( collectionTags_.at( l ) == "*" || collectionTags_.at( l ) == "@" || collectionTags_.at( l ) == trigObj.collection() ) {
|
112 |
for ( size_t m = 0; m < filterIdsEnum_.size(); ++m ) {
|
113 |
if ( filterIdsEnum_.at( m ) == "*" || filterIdsEnum_.at( m ) == "@" ) return true;
|
114 |
std::map< std::string, trigger::TriggerObjectType >::const_iterator iter( filterIdsEnumMap.find( filterIdsEnum_.at( m ) ) );
|
115 |
if ( iter != filterIdsEnumMap.end() && trigObj.hasFilterId( iter->second ) ) return true;
|
116 |
}
|
117 |
}
|
118 |
}
|
119 |
}
|
120 |
}
|
121 |
}
|
122 |
}
|
123 |
}
|
124 |
}
|
125 |
return false;
|
126 |
}
|
127 |
return false;
|
128 |
}
|
129 |
|
130 |
};
|
131 |
|
132 |
}
|
133 |
|
134 |
|
135 |
#endif
|