ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/PatAlgos/plugins/PATTriggerMatchSelector.h
Revision: 1.1
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: text/plain
Branch: MAIN
Branch point for: ANA
Log Message:
Initial revision

File Contents

# User Rev Content
1 dgele 1.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.2.3 2009/04/27 20:48:46 vadler Exp $
18     */
19     //
20     // $Id: PATTriggerMatchSelector.h,v 1.1.2.3 2009/04/27 20:48:46 vadler 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