CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
L1ExtraParticleMapProd Class Reference

#include <L1ExtraParticleMapProd.h>

Inheritance diagram for L1ExtraParticleMapProd:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 L1ExtraParticleMapProd (const edm::ParameterSet &)
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 
 ~L1ExtraParticleMapProd ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

template<class TCollection >
void addToVectorRefs (const edm::Handle< TCollection > &handle, std::vector< edm::Ref< TCollection > > &vectorRefs)
 
void evaluateDoubleDifferentCaloObjectTrigger (const l1extra::L1EmParticleVectorRef &inputRefs1, const l1extra::L1JetParticleVectorRef &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, l1extra::L1EmParticleVectorRef &outputRefs1, l1extra::L1JetParticleVectorRef &outputRefs2, l1extra::L1ParticleMap::L1IndexComboVector &combos)
 
template<class TCollection >
void evaluateDoubleDifferentObjectSameTypeTrigger (const std::vector< edm::Ref< TCollection > > &inputRefs1, const std::vector< edm::Ref< TCollection > > &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)
 
template<class TCollection1 , class TCollection2 >
void evaluateDoubleDifferentObjectTrigger (const std::vector< edm::Ref< TCollection1 > > &inputRefs1, const std::vector< edm::Ref< TCollection2 > > &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, std::vector< edm::Ref< TCollection1 > > &outputRefs1, std::vector< edm::Ref< TCollection2 > > &outputRefs2, l1extra::L1ParticleMap::L1IndexComboVector &combos)
 
void evaluateDoubleExclusiveIsoEG (const l1extra::L1EmParticleVectorRef &inputRefs1, const l1extra::L1JetParticleVectorRef &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, l1extra::L1EmParticleVectorRef &outputRefs1, l1extra::L1ParticleMap::L1IndexComboVector &combos)
 
template<class TCollection1 , class TCollection2 >
void evaluateDoublePlusSingleObjectTrigger (const std::vector< edm::Ref< TCollection1 > > &inputRefs1, const std::vector< edm::Ref< TCollection2 > > &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, std::vector< edm::Ref< TCollection1 > > &outputRefs1, std::vector< edm::Ref< TCollection2 > > &outputRefs2, l1extra::L1ParticleMap::L1IndexComboVector &combos)
 
template<class TCollection >
void evaluateDoubleSameObjectTrigger (const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos, bool combinedWithGlobalObject=false)
 
void evaluateForwardRapidityGap (const l1extra::L1JetParticleVectorRef &inputRefs, const double &etThreshold, bool &decision)
 
void evaluateJetGapJetTrigger (const l1extra::L1JetParticleVectorRef &inputRefs, const double &etThreshold, bool &decision, l1extra::L1JetParticleVectorRef &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)
 
template<class TCollection >
void evaluateQuadSameObjectTrigger (const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)
 
template<class TCollection >
void evaluateSingleObjectTrigger (const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs)
 
template<class TCollection >
void evaluateTripleSameObjectTrigger (const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)
 

Private Attributes

edm::InputTag cenJetSource_
 
std::pair< double, double > doubleThresholds_ [l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
 
edm::InputTag etMissSource_
 
edm::InputTag forJetSource_
 
edm::InputTag htMissSource_
 
edm::InputTag isoEmSource_
 
edm::InputTag muonSource_
 
edm::InputTag nonIsoEmSource_
 
int prescaleCounters_ [l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
 
int prescales_ [l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
 
double singleThresholds_ [l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
 
edm::InputTag tauJetSource_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

L1Trigger/L1ExtraFromDigis/interface/L1ExtraParticleMapProd.h

Author
Werner Sun

Description: producer of L1ParticleMap objects from GT emulator object maps.

L1Trigger/L1ExtraParticleMapProd/src/L1ExtraParticleMapProd.cc

Author
Werner Sun

Definition at line 38 of file L1ExtraParticleMapProd.h.

Constructor & Destructor Documentation

L1ExtraParticleMapProd::L1ExtraParticleMapProd ( const edm::ParameterSet iConfig)
explicit

Definition at line 41 of file L1ExtraParticleMapProd.cc.

References doubleThresholds_, edm::ParameterSet::getParameter(), mps_fire::i, prescaleCounters_, prescales_, and singleThresholds_.

44  "muonSource" ) ),
46  "isolatedEmSource" ) ),
48  "nonIsolatedEmSource" ) ),
50  "centralJetSource" ) ),
52  "forwardJetSource" ) ),
54  "tauJetSource" ) ),
56  "etMissSource" ) ),
58  "htMissSource" ) )
59 {
60  using namespace l1extra ;
61 
62  //register your products
63  produces< L1ParticleMapCollection >() ;
64  produces< L1GlobalTriggerReadoutRecord >();
65 
66  //now do what ever other initialization is needed
67  for( int i = 0 ; i < L1ParticleMap::kNumOfL1TriggerTypes ; ++i )
68  {
69  singleThresholds_[ i ] = 0. ;
70  doubleThresholds_[ i ].first = 0. ;
71  doubleThresholds_[ i ].second = 0. ;
72  prescaleCounters_[ i ] = 1 ;
73  prescales_[ i ] = 1 ;
74  }
75 
76  // Single object triggers, 5 thresholds each
77 
78  singleThresholds_[ L1ParticleMap::kSingleMu3 ] =
79  iConfig.getParameter< double >( "L1_SingleMu3_thresh" ) ;
80  prescales_[ L1ParticleMap::kSingleMu3 ] =
81  iConfig.getParameter< int >( "L1_SingleMu3_prescale" ) ;
82  singleThresholds_[ L1ParticleMap::kSingleMu5 ] =
83  iConfig.getParameter< double >( "L1_SingleMu5_thresh" ) ;
84  prescales_[ L1ParticleMap::kSingleMu5 ] =
85  iConfig.getParameter< int >( "L1_SingleMu5_prescale" ) ;
86  singleThresholds_[ L1ParticleMap::kSingleMu7 ] =
87  iConfig.getParameter< double >( "L1_SingleMu7_thresh" ) ;
88  prescales_[ L1ParticleMap::kSingleMu7 ] =
89  iConfig.getParameter< int >( "L1_SingleMu7_prescale" ) ;
90  singleThresholds_[ L1ParticleMap::kSingleMu10 ] =
91  iConfig.getParameter< double >( "L1_SingleMu10_thresh" ) ;
92  prescales_[ L1ParticleMap::kSingleMu10 ] =
93  iConfig.getParameter< int >( "L1_SingleMu10_prescale" ) ;
94  singleThresholds_[ L1ParticleMap::kSingleMu14 ] =
95  iConfig.getParameter< double >( "L1_SingleMu14_thresh" ) ;
96  prescales_[ L1ParticleMap::kSingleMu14 ] =
97  iConfig.getParameter< int >( "L1_SingleMu14_prescale" ) ;
98  singleThresholds_[ L1ParticleMap::kSingleMu20 ] =
99  iConfig.getParameter< double >( "L1_SingleMu20_thresh" ) ;
100  prescales_[ L1ParticleMap::kSingleMu20 ] =
101  iConfig.getParameter< int >( "L1_SingleMu20_prescale" ) ;
102  singleThresholds_[ L1ParticleMap::kSingleMu25 ] =
103  iConfig.getParameter< double >( "L1_SingleMu25_thresh" ) ;
104  prescales_[ L1ParticleMap::kSingleMu25 ] =
105  iConfig.getParameter< int >( "L1_SingleMu25_prescale" ) ;
106 
107  singleThresholds_[ L1ParticleMap::kSingleIsoEG5 ] =
108  iConfig.getParameter< double >( "L1_SingleIsoEG5_thresh" ) ;
109  prescales_[ L1ParticleMap::kSingleIsoEG5 ] =
110  iConfig.getParameter< int >( "L1_SingleIsoEG5_prescale" ) ;
111  singleThresholds_[ L1ParticleMap::kSingleIsoEG8 ] =
112  iConfig.getParameter< double >( "L1_SingleIsoEG8_thresh" ) ;
113  prescales_[ L1ParticleMap::kSingleIsoEG8 ] =
114  iConfig.getParameter< int >( "L1_SingleIsoEG8_prescale" ) ;
115  singleThresholds_[ L1ParticleMap::kSingleIsoEG10 ] =
116  iConfig.getParameter< double >( "L1_SingleIsoEG10_thresh" ) ;
117  prescales_[ L1ParticleMap::kSingleIsoEG10 ] =
118  iConfig.getParameter< int >( "L1_SingleIsoEG10_prescale" ) ;
119  singleThresholds_[ L1ParticleMap::kSingleIsoEG12 ] =
120  iConfig.getParameter< double >( "L1_SingleIsoEG12_thresh" ) ;
121  prescales_[ L1ParticleMap::kSingleIsoEG12 ] =
122  iConfig.getParameter< int >( "L1_SingleIsoEG12_prescale" ) ;
123  singleThresholds_[ L1ParticleMap::kSingleIsoEG15 ] =
124  iConfig.getParameter< double >( "L1_SingleIsoEG15_thresh" ) ;
125  prescales_[ L1ParticleMap::kSingleIsoEG15 ] =
126  iConfig.getParameter< int >( "L1_SingleIsoEG15_prescale" ) ;
127  singleThresholds_[ L1ParticleMap::kSingleIsoEG20 ] =
128  iConfig.getParameter< double >( "L1_SingleIsoEG20_thresh" ) ;
129  prescales_[ L1ParticleMap::kSingleIsoEG20 ] =
130  iConfig.getParameter< int >( "L1_SingleIsoEG20_prescale" ) ;
131  singleThresholds_[ L1ParticleMap::kSingleIsoEG25 ] =
132  iConfig.getParameter< double >( "L1_SingleIsoEG25_thresh" ) ;
133  prescales_[ L1ParticleMap::kSingleIsoEG25 ] =
134  iConfig.getParameter< int >( "L1_SingleIsoEG25_prescale" ) ;
135 
136  singleThresholds_[ L1ParticleMap::kSingleEG5 ] =
137  iConfig.getParameter< double >( "L1_SingleEG5_thresh" ) ;
138  prescales_[ L1ParticleMap::kSingleEG5 ] =
139  iConfig.getParameter< int >( "L1_SingleEG5_prescale" ) ;
140  singleThresholds_[ L1ParticleMap::kSingleEG8 ] =
141  iConfig.getParameter< double >( "L1_SingleEG8_thresh" ) ;
142  prescales_[ L1ParticleMap::kSingleEG8 ] =
143  iConfig.getParameter< int >( "L1_SingleEG8_prescale" ) ;
144  singleThresholds_[ L1ParticleMap::kSingleEG10 ] =
145  iConfig.getParameter< double >( "L1_SingleEG10_thresh" ) ;
146  prescales_[ L1ParticleMap::kSingleEG10 ] =
147  iConfig.getParameter< int >( "L1_SingleEG10_prescale" ) ;
148  singleThresholds_[ L1ParticleMap::kSingleEG12 ] =
149  iConfig.getParameter< double >( "L1_SingleEG12_thresh" ) ;
150  prescales_[ L1ParticleMap::kSingleEG12 ] =
151  iConfig.getParameter< int >( "L1_SingleEG12_prescale" ) ;
152  singleThresholds_[ L1ParticleMap::kSingleEG15 ] =
153  iConfig.getParameter< double >( "L1_SingleEG15_thresh" ) ;
154  prescales_[ L1ParticleMap::kSingleEG15 ] =
155  iConfig.getParameter< int >( "L1_SingleEG15_prescale" ) ;
156  singleThresholds_[ L1ParticleMap::kSingleEG20 ] =
157  iConfig.getParameter< double >( "L1_SingleEG20_thresh" ) ;
158  prescales_[ L1ParticleMap::kSingleEG20 ] =
159  iConfig.getParameter< int >( "L1_SingleEG20_prescale" ) ;
160  singleThresholds_[ L1ParticleMap::kSingleEG25 ] =
161  iConfig.getParameter< double >( "L1_SingleEG25_thresh" ) ;
162  prescales_[ L1ParticleMap::kSingleEG25 ] =
163  iConfig.getParameter< int >( "L1_SingleEG25_prescale" ) ;
164 
165  singleThresholds_[ L1ParticleMap::kSingleJet15 ] =
166  iConfig.getParameter< double >( "L1_SingleJet15_thresh" ) ;
167  prescales_[ L1ParticleMap::kSingleJet15 ] =
168  iConfig.getParameter< int >( "L1_SingleJet15_prescale" ) ;
169  singleThresholds_[ L1ParticleMap::kSingleJet20 ] =
170  iConfig.getParameter< double >( "L1_SingleJet20_thresh" ) ;
171  prescales_[ L1ParticleMap::kSingleJet20 ] =
172  iConfig.getParameter< int >( "L1_SingleJet20_prescale" ) ;
173  singleThresholds_[ L1ParticleMap::kSingleJet30 ] =
174  iConfig.getParameter< double >( "L1_SingleJet30_thresh" ) ;
175  prescales_[ L1ParticleMap::kSingleJet30 ] =
176  iConfig.getParameter< int >( "L1_SingleJet30_prescale" ) ;
177  singleThresholds_[ L1ParticleMap::kSingleJet50 ] =
178  iConfig.getParameter< double >( "L1_SingleJet50_thresh" ) ;
179  prescales_[ L1ParticleMap::kSingleJet50 ] =
180  iConfig.getParameter< int >( "L1_SingleJet50_prescale" ) ;
181  singleThresholds_[ L1ParticleMap::kSingleJet70 ] =
182  iConfig.getParameter< double >( "L1_SingleJet70_thresh" ) ;
183  prescales_[ L1ParticleMap::kSingleJet70 ] =
184  iConfig.getParameter< int >( "L1_SingleJet70_prescale" ) ;
185  singleThresholds_[ L1ParticleMap::kSingleJet100 ] =
186  iConfig.getParameter< double >( "L1_SingleJet100_thresh" ) ;
187  prescales_[ L1ParticleMap::kSingleJet100 ] =
188  iConfig.getParameter< int >( "L1_SingleJet100_prescale" ) ;
189  singleThresholds_[ L1ParticleMap::kSingleJet150 ] =
190  iConfig.getParameter< double >( "L1_SingleJet150_thresh" ) ;
191  prescales_[ L1ParticleMap::kSingleJet150 ] =
192  iConfig.getParameter< int >( "L1_SingleJet150_prescale" ) ;
193  singleThresholds_[ L1ParticleMap::kSingleJet200 ] =
194  iConfig.getParameter< double >( "L1_SingleJet200_thresh" ) ;
195  prescales_[ L1ParticleMap::kSingleJet200 ] =
196  iConfig.getParameter< int >( "L1_SingleJet200_prescale" ) ;
197 
198  singleThresholds_[ L1ParticleMap::kSingleTauJet10 ] =
199  iConfig.getParameter< double >( "L1_SingleTauJet10_thresh" ) ;
200  prescales_[ L1ParticleMap::kSingleTauJet10 ] =
201  iConfig.getParameter< int >( "L1_SingleTauJet10_prescale" ) ;
202  singleThresholds_[ L1ParticleMap::kSingleTauJet20 ] =
203  iConfig.getParameter< double >( "L1_SingleTauJet20_thresh" ) ;
204  prescales_[ L1ParticleMap::kSingleTauJet20 ] =
205  iConfig.getParameter< int >( "L1_SingleTauJet20_prescale" ) ;
206  singleThresholds_[ L1ParticleMap::kSingleTauJet30 ] =
207  iConfig.getParameter< double >( "L1_SingleTauJet30_thresh" ) ;
208  prescales_[ L1ParticleMap::kSingleTauJet30 ] =
209  iConfig.getParameter< int >( "L1_SingleTauJet30_prescale" ) ;
210  singleThresholds_[ L1ParticleMap::kSingleTauJet35 ] =
211  iConfig.getParameter< double >( "L1_SingleTauJet35_thresh" ) ;
212  prescales_[ L1ParticleMap::kSingleTauJet35 ] =
213  iConfig.getParameter< int >( "L1_SingleTauJet35_prescale" ) ;
214  singleThresholds_[ L1ParticleMap::kSingleTauJet40 ] =
215  iConfig.getParameter< double >( "L1_SingleTauJet40_thresh" ) ;
216  prescales_[ L1ParticleMap::kSingleTauJet40 ] =
217  iConfig.getParameter< int >( "L1_SingleTauJet40_prescale" ) ;
218  singleThresholds_[ L1ParticleMap::kSingleTauJet60 ] =
219  iConfig.getParameter< double >( "L1_SingleTauJet60_thresh" ) ;
220  prescales_[ L1ParticleMap::kSingleTauJet60 ] =
221  iConfig.getParameter< int >( "L1_SingleTauJet60_prescale" ) ;
222  singleThresholds_[ L1ParticleMap::kSingleTauJet80 ] =
223  iConfig.getParameter< double >( "L1_SingleTauJet80_thresh" ) ;
224  prescales_[ L1ParticleMap::kSingleTauJet80 ] =
225  iConfig.getParameter< int >( "L1_SingleTauJet80_prescale" ) ;
226  singleThresholds_[ L1ParticleMap::kSingleTauJet100 ] =
227  iConfig.getParameter< double >( "L1_SingleTauJet100_thresh" ) ;
228  prescales_[ L1ParticleMap::kSingleTauJet100 ] =
229  iConfig.getParameter< int >( "L1_SingleTauJet100_prescale" ) ;
230 
231  singleThresholds_[ L1ParticleMap::kHTT100 ] =
232  iConfig.getParameter< double >( "L1_HTT100_thresh" ) ;
233  prescales_[ L1ParticleMap::kHTT100 ] =
234  iConfig.getParameter< int >( "L1_HTT100_prescale" ) ;
235  singleThresholds_[ L1ParticleMap::kHTT200 ] =
236  iConfig.getParameter< double >( "L1_HTT200_thresh" ) ;
237  prescales_[ L1ParticleMap::kHTT200 ] =
238  iConfig.getParameter< int >( "L1_HTT200_prescale" ) ;
239  singleThresholds_[ L1ParticleMap::kHTT250 ] =
240  iConfig.getParameter< double >( "L1_HTT250_thresh" ) ;
241  prescales_[ L1ParticleMap::kHTT250 ] =
242  iConfig.getParameter< int >( "L1_HTT250_prescale" ) ;
243  singleThresholds_[ L1ParticleMap::kHTT300 ] =
244  iConfig.getParameter< double >( "L1_HTT300_thresh" ) ;
245  prescales_[ L1ParticleMap::kHTT300 ] =
246  iConfig.getParameter< int >( "L1_HTT300_prescale" ) ;
247  singleThresholds_[ L1ParticleMap::kHTT400 ] =
248  iConfig.getParameter< double >( "L1_HTT400_thresh" ) ;
249  prescales_[ L1ParticleMap::kHTT400 ] =
250  iConfig.getParameter< int >( "L1_HTT400_prescale" ) ;
251  singleThresholds_[ L1ParticleMap::kHTT500 ] =
252  iConfig.getParameter< double >( "L1_HTT500_thresh" ) ;
253  prescales_[ L1ParticleMap::kHTT500 ] =
254  iConfig.getParameter< int >( "L1_HTT500_prescale" ) ;
255 
256  singleThresholds_[ L1ParticleMap::kETM10 ] =
257  iConfig.getParameter< double >( "L1_ETM10_thresh" ) ;
258  prescales_[ L1ParticleMap::kETM10 ] =
259  iConfig.getParameter< int >( "L1_ETM10_prescale" ) ;
260  singleThresholds_[ L1ParticleMap::kETM15 ] =
261  iConfig.getParameter< double >( "L1_ETM15_thresh" ) ;
262  prescales_[ L1ParticleMap::kETM15 ] =
263  iConfig.getParameter< int >( "L1_ETM15_prescale" ) ;
264  singleThresholds_[ L1ParticleMap::kETM20 ] =
265  iConfig.getParameter< double >( "L1_ETM20_thresh" ) ;
266  prescales_[ L1ParticleMap::kETM20 ] =
267  iConfig.getParameter< int >( "L1_ETM20_prescale" ) ;
268  singleThresholds_[ L1ParticleMap::kETM30 ] =
269  iConfig.getParameter< double >( "L1_ETM30_thresh" ) ;
270  prescales_[ L1ParticleMap::kETM30 ] =
271  iConfig.getParameter< int >( "L1_ETM30_prescale" ) ;
272  singleThresholds_[ L1ParticleMap::kETM40 ] =
273  iConfig.getParameter< double >( "L1_ETM40_thresh" ) ;
274  prescales_[ L1ParticleMap::kETM40 ] =
275  iConfig.getParameter< int >( "L1_ETM40_prescale" ) ;
276  singleThresholds_[ L1ParticleMap::kETM50 ] =
277  iConfig.getParameter< double >( "L1_ETM50_thresh" ) ;
278  prescales_[ L1ParticleMap::kETM50 ] =
279  iConfig.getParameter< int >( "L1_ETM50_prescale" ) ;
280  singleThresholds_[ L1ParticleMap::kETM60 ] =
281  iConfig.getParameter< double >( "L1_ETM60_thresh" ) ;
282  prescales_[ L1ParticleMap::kETM60 ] =
283  iConfig.getParameter< int >( "L1_ETM60_prescale" ) ;
284 
285  singleThresholds_[ L1ParticleMap::kETT60 ] =
286  iConfig.getParameter< double >( "L1_ETT60_thresh" ) ;
287  prescales_[ L1ParticleMap::kETT60 ] =
288  iConfig.getParameter< int >( "L1_ETT60_prescale" ) ;
289 
290  // AA triggers
291 
292  singleThresholds_[ L1ParticleMap::kDoubleMu3 ] =
293  iConfig.getParameter< double >( "L1_DoubleMu3_thresh" ) ;
294  prescales_[ L1ParticleMap::kDoubleMu3 ] =
295  iConfig.getParameter< int >( "L1_DoubleMu3_prescale" ) ;
296 
297  singleThresholds_[ L1ParticleMap::kDoubleIsoEG8 ] =
298  iConfig.getParameter< double >( "L1_DoubleIsoEG8_thresh" ) ;
299  prescales_[ L1ParticleMap::kDoubleIsoEG8 ] =
300  iConfig.getParameter< int >( "L1_DoubleIsoEG8_prescale" ) ;
301  singleThresholds_[ L1ParticleMap::kDoubleIsoEG10 ] =
302  iConfig.getParameter< double >( "L1_DoubleIsoEG10_thresh" ) ;
303  prescales_[ L1ParticleMap::kDoubleIsoEG10 ] =
304  iConfig.getParameter< int >( "L1_DoubleIsoEG10_prescale" ) ;
305 
306  singleThresholds_[ L1ParticleMap::kDoubleEG5 ] =
307  iConfig.getParameter< double >( "L1_DoubleEG5_thresh" ) ;
308  prescales_[ L1ParticleMap::kDoubleEG5 ] =
309  iConfig.getParameter< int >( "L1_DoubleEG5_prescale" ) ;
310  singleThresholds_[ L1ParticleMap::kDoubleEG10 ] =
311  iConfig.getParameter< double >( "L1_DoubleEG10_thresh" ) ;
312  prescales_[ L1ParticleMap::kDoubleEG10 ] =
313  iConfig.getParameter< int >( "L1_DoubleEG10_prescale" ) ;
314  singleThresholds_[ L1ParticleMap::kDoubleEG15 ] =
315  iConfig.getParameter< double >( "L1_DoubleEG15_thresh" ) ;
316  prescales_[ L1ParticleMap::kDoubleEG15 ] =
317  iConfig.getParameter< int >( "L1_DoubleEG15_prescale" ) ;
318 
319  singleThresholds_[ L1ParticleMap::kDoubleJet70 ] =
320  iConfig.getParameter< double >( "L1_DoubleJet70_thresh" ) ;
321  prescales_[ L1ParticleMap::kDoubleJet70 ] =
322  iConfig.getParameter< int >( "L1_DoubleJet70_prescale" ) ;
323  singleThresholds_[ L1ParticleMap::kDoubleJet100 ] =
324  iConfig.getParameter< double >( "L1_DoubleJet100_thresh" ) ;
325  prescales_[ L1ParticleMap::kDoubleJet100 ] =
326  iConfig.getParameter< int >( "L1_DoubleJet100_prescale" ) ;
327 
328  singleThresholds_[ L1ParticleMap::kDoubleTauJet20 ] =
329  iConfig.getParameter< double >( "L1_DoubleTauJet20_thresh" ) ;
330  prescales_[ L1ParticleMap::kDoubleTauJet20 ] =
331  iConfig.getParameter< int >( "L1_DoubleTauJet20_prescale" ) ;
332  singleThresholds_[ L1ParticleMap::kDoubleTauJet30 ] =
333  iConfig.getParameter< double >( "L1_DoubleTauJet30_thresh" ) ;
334  prescales_[ L1ParticleMap::kDoubleTauJet30 ] =
335  iConfig.getParameter< int >( "L1_DoubleTauJet30_prescale" ) ;
336  singleThresholds_[ L1ParticleMap::kDoubleTauJet35 ] =
337  iConfig.getParameter< double >( "L1_DoubleTauJet35_thresh" ) ;
338  prescales_[ L1ParticleMap::kDoubleTauJet35 ] =
339  iConfig.getParameter< int >( "L1_DoubleTauJet35_prescale" ) ;
340  singleThresholds_[ L1ParticleMap::kDoubleTauJet40 ] =
341  iConfig.getParameter< double >( "L1_DoubleTauJet40_thresh" ) ;
342  prescales_[ L1ParticleMap::kDoubleTauJet40 ] =
343  iConfig.getParameter< int >( "L1_DoubleTauJet40_prescale" ) ;
344 
345  // AB triggers
346 
347  doubleThresholds_[ L1ParticleMap::kMu3_IsoEG5 ].first =
348  iConfig.getParameter< double >( "L1_Mu3_IsoEG5_thresh1" ) ;
349  doubleThresholds_[ L1ParticleMap::kMu3_IsoEG5 ].second =
350  iConfig.getParameter< double >( "L1_Mu3_IsoEG5_thresh2" ) ;
351  prescales_[ L1ParticleMap::kMu3_IsoEG5 ] =
352  iConfig.getParameter< int >( "L1_Mu3_IsoEG5_prescale" ) ;
353  doubleThresholds_[ L1ParticleMap::kMu5_IsoEG10 ].first =
354  iConfig.getParameter< double >( "L1_Mu5_IsoEG10_thresh1" ) ;
355  doubleThresholds_[ L1ParticleMap::kMu5_IsoEG10 ].second =
356  iConfig.getParameter< double >( "L1_Mu5_IsoEG10_thresh2" ) ;
357  prescales_[ L1ParticleMap::kMu5_IsoEG10 ] =
358  iConfig.getParameter< int >( "L1_Mu5_IsoEG10_prescale" ) ;
359 
360  doubleThresholds_[ L1ParticleMap::kMu3_EG12 ].first =
361  iConfig.getParameter< double >( "L1_Mu3_EG12_thresh1" ) ;
362  doubleThresholds_[ L1ParticleMap::kMu3_EG12 ].second =
363  iConfig.getParameter< double >( "L1_Mu3_EG12_thresh2" ) ;
364  prescales_[ L1ParticleMap::kMu3_EG12 ] =
365  iConfig.getParameter< int >( "L1_Mu3_EG12_prescale" ) ;
366 
367  doubleThresholds_[ L1ParticleMap::kMu3_Jet15 ].first =
368  iConfig.getParameter< double >( "L1_Mu3_Jet15_thresh1" ) ;
369  doubleThresholds_[ L1ParticleMap::kMu3_Jet15 ].second =
370  iConfig.getParameter< double >( "L1_Mu3_Jet15_thresh2" ) ;
371  prescales_[ L1ParticleMap::kMu3_Jet15 ] =
372  iConfig.getParameter< int >( "L1_Mu3_Jet15_prescale" ) ;
373  doubleThresholds_[ L1ParticleMap::kMu5_Jet15 ].first =
374  iConfig.getParameter< double >( "L1_Mu5_Jet15_thresh1" ) ;
375  doubleThresholds_[ L1ParticleMap::kMu5_Jet15 ].second =
376  iConfig.getParameter< double >( "L1_Mu5_Jet15_thresh2" ) ;
377  prescales_[ L1ParticleMap::kMu5_Jet15 ] =
378  iConfig.getParameter< int >( "L1_Mu5_Jet15_prescale" ) ;
379  doubleThresholds_[ L1ParticleMap::kMu3_Jet70 ].first =
380  iConfig.getParameter< double >( "L1_Mu3_Jet70_thresh1" ) ;
381  doubleThresholds_[ L1ParticleMap::kMu3_Jet70 ].second =
382  iConfig.getParameter< double >( "L1_Mu3_Jet70_thresh2" ) ;
383  prescales_[ L1ParticleMap::kMu3_Jet70 ] =
384  iConfig.getParameter< int >( "L1_Mu3_Jet70_prescale" ) ;
385  doubleThresholds_[ L1ParticleMap::kMu5_Jet20 ].first =
386  iConfig.getParameter< double >( "L1_Mu5_Jet20_thresh1" ) ;
387  doubleThresholds_[ L1ParticleMap::kMu5_Jet20 ].second =
388  iConfig.getParameter< double >( "L1_Mu5_Jet20_thresh2" ) ;
389  prescales_[ L1ParticleMap::kMu5_Jet20 ] =
390  iConfig.getParameter< int >( "L1_Mu5_Jet20_prescale" ) ;
391 
392  doubleThresholds_[ L1ParticleMap::kMu5_TauJet20 ].first =
393  iConfig.getParameter< double >( "L1_Mu5_TauJet20_thresh1" ) ;
394  doubleThresholds_[ L1ParticleMap::kMu5_TauJet20 ].second =
395  iConfig.getParameter< double >( "L1_Mu5_TauJet20_thresh2" ) ;
396  prescales_[ L1ParticleMap::kMu5_TauJet20 ] =
397  iConfig.getParameter< int >( "L1_Mu5_TauJet20_prescale" ) ;
398  doubleThresholds_[ L1ParticleMap::kMu5_TauJet30 ].first =
399  iConfig.getParameter< double >( "L1_Mu5_TauJet30_thresh1" ) ;
400  doubleThresholds_[ L1ParticleMap::kMu5_TauJet30 ].second =
401  iConfig.getParameter< double >( "L1_Mu5_TauJet30_thresh2" ) ;
402  prescales_[ L1ParticleMap::kMu5_TauJet30 ] =
403  iConfig.getParameter< int >( "L1_Mu5_TauJet30_prescale" ) ;
404 
405  doubleThresholds_[ L1ParticleMap::kIsoEG10_EG10 ].first =
406  iConfig.getParameter< double >( "L1_IsoEG10_EG10_thresh1" ) ;
407  doubleThresholds_[ L1ParticleMap::kIsoEG10_EG10 ].second =
408  iConfig.getParameter< double >( "L1_IsoEG10_EG10_thresh2" ) ;
409  prescales_[ L1ParticleMap::kIsoEG10_EG10 ] =
410  iConfig.getParameter< int >( "L1_IsoEG10_EG10_prescale" ) ;
411 
412  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet15 ].first =
413  iConfig.getParameter< double >( "L1_IsoEG10_Jet15_thresh1" ) ;
414  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet15 ].second =
415  iConfig.getParameter< double >( "L1_IsoEG10_Jet15_thresh2" ) ;
416  prescales_[ L1ParticleMap::kIsoEG10_Jet15 ] =
417  iConfig.getParameter< int >( "L1_IsoEG10_Jet15_prescale" ) ;
418  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet30 ].first =
419  iConfig.getParameter< double >( "L1_IsoEG10_Jet30_thresh1" ) ;
420  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet30 ].second =
421  iConfig.getParameter< double >( "L1_IsoEG10_Jet30_thresh2" ) ;
422  prescales_[ L1ParticleMap::kIsoEG10_Jet30 ] =
423  iConfig.getParameter< int >( "L1_IsoEG10_Jet30_prescale" ) ;
424  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet20 ].first =
425  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_thresh1" ) ;
426  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet20 ].second =
427  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_thresh2" ) ;
428  prescales_[ L1ParticleMap::kIsoEG10_Jet20 ] =
429  iConfig.getParameter< int >( "L1_IsoEG10_Jet20_prescale" ) ;
430  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet70 ].first =
431  iConfig.getParameter< double >( "L1_IsoEG10_Jet70_thresh1" ) ;
432  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet70 ].second =
433  iConfig.getParameter< double >( "L1_IsoEG10_Jet70_thresh2" ) ;
434  prescales_[ L1ParticleMap::kIsoEG10_Jet70 ] =
435  iConfig.getParameter< int >( "L1_IsoEG10_Jet70_prescale" ) ;
436 
437  doubleThresholds_[ L1ParticleMap::kIsoEG10_TauJet20 ].first =
438  iConfig.getParameter< double >( "L1_IsoEG10_TauJet20_thresh1" ) ;
439  doubleThresholds_[ L1ParticleMap::kIsoEG10_TauJet20 ].second =
440  iConfig.getParameter< double >( "L1_IsoEG10_TauJet20_thresh2" ) ;
441  prescales_[ L1ParticleMap::kIsoEG10_TauJet20 ] =
442  iConfig.getParameter< int >( "L1_IsoEG10_TauJet20_prescale" ) ;
443  doubleThresholds_[ L1ParticleMap::kIsoEG10_TauJet30 ].first =
444  iConfig.getParameter< double >( "L1_IsoEG10_TauJet30_thresh1" ) ;
445  doubleThresholds_[ L1ParticleMap::kIsoEG10_TauJet30 ].second =
446  iConfig.getParameter< double >( "L1_IsoEG10_TauJet30_thresh2" ) ;
447  prescales_[ L1ParticleMap::kIsoEG10_TauJet30 ] =
448  iConfig.getParameter< int >( "L1_IsoEG10_TauJet30_prescale" ) ;
449 
450  doubleThresholds_[ L1ParticleMap::kEG10_Jet15 ].first =
451  iConfig.getParameter< double >( "L1_EG10_Jet15_thresh1" ) ;
452  doubleThresholds_[ L1ParticleMap::kEG10_Jet15 ].second =
453  iConfig.getParameter< double >( "L1_EG10_Jet15_thresh2" ) ;
454  prescales_[ L1ParticleMap::kEG10_Jet15 ] =
455  iConfig.getParameter< int >( "L1_EG10_Jet15_prescale" ) ;
456  doubleThresholds_[ L1ParticleMap::kEG12_Jet20 ].first =
457  iConfig.getParameter< double >( "L1_EG12_Jet20_thresh1" ) ;
458  doubleThresholds_[ L1ParticleMap::kEG12_Jet20 ].second =
459  iConfig.getParameter< double >( "L1_EG12_Jet20_thresh2" ) ;
460  prescales_[ L1ParticleMap::kEG12_Jet20 ] =
461  iConfig.getParameter< int >( "L1_EG12_Jet20_prescale" ) ;
462  doubleThresholds_[ L1ParticleMap::kEG12_Jet70 ].first =
463  iConfig.getParameter< double >( "L1_EG12_Jet70_thresh1" ) ;
464  doubleThresholds_[ L1ParticleMap::kEG12_Jet70 ].second =
465  iConfig.getParameter< double >( "L1_EG12_Jet70_thresh2" ) ;
466  prescales_[ L1ParticleMap::kEG12_Jet70 ] =
467  iConfig.getParameter< int >( "L1_EG12_Jet70_prescale" ) ;
468 
469  doubleThresholds_[ L1ParticleMap::kEG12_TauJet40 ].first =
470  iConfig.getParameter< double >( "L1_EG12_TauJet40_thresh1" ) ;
471  doubleThresholds_[ L1ParticleMap::kEG12_TauJet40 ].second =
472  iConfig.getParameter< double >( "L1_EG12_TauJet40_thresh2" ) ;
473  prescales_[ L1ParticleMap::kEG12_TauJet40 ] =
474  iConfig.getParameter< int >( "L1_EG12_TauJet40_prescale" ) ;
475 
476  doubleThresholds_[ L1ParticleMap::kJet70_TauJet40 ].first =
477  iConfig.getParameter< double >( "L1_Jet70_TauJet40_thresh1" ) ;
478  doubleThresholds_[ L1ParticleMap::kJet70_TauJet40 ].second =
479  iConfig.getParameter< double >( "L1_Jet70_TauJet40_thresh2" ) ;
480  prescales_[ L1ParticleMap::kJet70_TauJet40 ] =
481  iConfig.getParameter< int >( "L1_Jet70_TauJet40_prescale" ) ;
482 
483  doubleThresholds_[ L1ParticleMap::kMu3_HTT200 ].first =
484  iConfig.getParameter< double >( "L1_Mu3_HTT200_thresh1" ) ;
485  doubleThresholds_[ L1ParticleMap::kMu3_HTT200 ].second =
486  iConfig.getParameter< double >( "L1_Mu3_HTT200_thresh2" ) ;
487  prescales_[ L1ParticleMap::kMu3_HTT200 ] =
488  iConfig.getParameter< int >( "L1_Mu3_HTT200_prescale" ) ;
489  doubleThresholds_[ L1ParticleMap::kIsoEG10_HTT200 ].first =
490  iConfig.getParameter< double >( "L1_IsoEG10_HTT200_thresh1" ) ;
491  doubleThresholds_[ L1ParticleMap::kIsoEG10_HTT200 ].second =
492  iConfig.getParameter< double >( "L1_IsoEG10_HTT200_thresh2" ) ;
493  prescales_[ L1ParticleMap::kIsoEG10_HTT200 ] =
494  iConfig.getParameter< int >( "L1_IsoEG10_HTT200_prescale" ) ;
495  doubleThresholds_[ L1ParticleMap::kEG12_HTT200 ].first =
496  iConfig.getParameter< double >( "L1_EG12_HTT200_thresh1" ) ;
497  doubleThresholds_[ L1ParticleMap::kEG12_HTT200 ].second =
498  iConfig.getParameter< double >( "L1_EG12_HTT200_thresh2" ) ;
499  prescales_[ L1ParticleMap::kEG12_HTT200 ] =
500  iConfig.getParameter< int >( "L1_EG12_HTT200_prescale" ) ;
501  doubleThresholds_[ L1ParticleMap::kJet70_HTT200 ].first =
502  iConfig.getParameter< double >( "L1_Jet70_HTT200_thresh1" ) ;
503  doubleThresholds_[ L1ParticleMap::kJet70_HTT200 ].second =
504  iConfig.getParameter< double >( "L1_Jet70_HTT200_thresh2" ) ;
505  prescales_[ L1ParticleMap::kJet70_HTT200 ] =
506  iConfig.getParameter< int >( "L1_Jet70_HTT200_prescale" ) ;
507  doubleThresholds_[ L1ParticleMap::kTauJet40_HTT200 ].first =
508  iConfig.getParameter< double >( "L1_TauJet40_HTT200_thresh1" ) ;
509  doubleThresholds_[ L1ParticleMap::kTauJet40_HTT200 ].second =
510  iConfig.getParameter< double >( "L1_TauJet40_HTT200_thresh2" ) ;
511  prescales_[ L1ParticleMap::kTauJet40_HTT200 ] =
512  iConfig.getParameter< int >( "L1_TauJet40_HTT200_prescale" ) ;
513 
514  doubleThresholds_[ L1ParticleMap::kMu3_ETM30 ].first =
515  iConfig.getParameter< double >( "L1_Mu3_ETM30_thresh1" ) ;
516  doubleThresholds_[ L1ParticleMap::kMu3_ETM30 ].second =
517  iConfig.getParameter< double >( "L1_Mu3_ETM30_thresh2" ) ;
518  prescales_[ L1ParticleMap::kMu3_ETM30 ] =
519  iConfig.getParameter< int >( "L1_Mu3_ETM30_prescale" ) ;
520  doubleThresholds_[ L1ParticleMap::kIsoEG10_ETM30 ].first =
521  iConfig.getParameter< double >( "L1_IsoEG10_ETM30_thresh1" ) ;
522  doubleThresholds_[ L1ParticleMap::kIsoEG10_ETM30 ].second =
523  iConfig.getParameter< double >( "L1_IsoEG10_ETM30_thresh2" ) ;
524  prescales_[ L1ParticleMap::kIsoEG10_ETM30 ] =
525  iConfig.getParameter< int >( "L1_IsoEG10_ETM30_prescale" ) ;
526  doubleThresholds_[ L1ParticleMap::kEG12_ETM30 ].first =
527  iConfig.getParameter< double >( "L1_EG12_ETM30_thresh1" ) ;
528  doubleThresholds_[ L1ParticleMap::kEG12_ETM30 ].second =
529  iConfig.getParameter< double >( "L1_EG12_ETM30_thresh2" ) ;
530  prescales_[ L1ParticleMap::kEG12_ETM30 ] =
531  iConfig.getParameter< int >( "L1_EG12_ETM30_prescale" ) ;
532  doubleThresholds_[ L1ParticleMap::kJet70_ETM40 ].first =
533  iConfig.getParameter< double >( "L1_Jet70_ETM40_thresh1" ) ;
534  doubleThresholds_[ L1ParticleMap::kJet70_ETM40 ].second =
535  iConfig.getParameter< double >( "L1_Jet70_ETM40_thresh2" ) ;
536  prescales_[ L1ParticleMap::kJet70_ETM40 ] =
537  iConfig.getParameter< int >( "L1_Jet70_ETM40_prescale" ) ;
538 
539  doubleThresholds_[ L1ParticleMap::kTauJet20_ETM20 ].first =
540  iConfig.getParameter< double >( "L1_TauJet20_ETM20_thresh1" ) ;
541  doubleThresholds_[ L1ParticleMap::kTauJet20_ETM20 ].second =
542  iConfig.getParameter< double >( "L1_TauJet20_ETM20_thresh2" ) ;
543  prescales_[ L1ParticleMap::kTauJet20_ETM20 ] =
544  iConfig.getParameter< int >( "L1_TauJet20_ETM20_prescale" ) ;
545  doubleThresholds_[ L1ParticleMap::kTauJet30_ETM30 ].first =
546  iConfig.getParameter< double >( "L1_TauJet30_ETM30_thresh1" ) ;
547  doubleThresholds_[ L1ParticleMap::kTauJet30_ETM30 ].second =
548  iConfig.getParameter< double >( "L1_TauJet30_ETM30_thresh2" ) ;
549  prescales_[ L1ParticleMap::kTauJet30_ETM30 ] =
550  iConfig.getParameter< int >( "L1_TauJet30_ETM30_prescale" ) ;
551  doubleThresholds_[ L1ParticleMap::kTauJet30_ETM40 ].first =
552  iConfig.getParameter< double >( "L1_TauJet30_ETM40_thresh1" ) ;
553  doubleThresholds_[ L1ParticleMap::kTauJet30_ETM40 ].second =
554  iConfig.getParameter< double >( "L1_TauJet30_ETM40_thresh2" ) ;
555  prescales_[ L1ParticleMap::kTauJet30_ETM40 ] =
556  iConfig.getParameter< int >( "L1_TauJet30_ETM40_prescale" ) ;
557 
558  doubleThresholds_[ L1ParticleMap::kHTT100_ETM30 ].first =
559  iConfig.getParameter< double >( "L1_HTT100_ETM30_thresh1" ) ;
560  doubleThresholds_[ L1ParticleMap::kHTT100_ETM30 ].second =
561  iConfig.getParameter< double >( "L1_HTT100_ETM30_thresh2" ) ;
562  prescales_[ L1ParticleMap::kHTT100_ETM30 ] =
563  iConfig.getParameter< int >( "L1_HTT100_ETM30_prescale" ) ;
564 
565  // AAA triggers
566 
567  singleThresholds_[ L1ParticleMap::kTripleMu3 ] =
568  iConfig.getParameter< double >( "L1_TripleMu3_thresh" ) ;
569  prescales_[ L1ParticleMap::kTripleMu3 ] =
570  iConfig.getParameter< int >( "L1_TripleMu3_prescale" ) ;
571  singleThresholds_[ L1ParticleMap::kTripleIsoEG5 ] =
572  iConfig.getParameter< double >( "L1_TripleIsoEG5_thresh" ) ;
573  prescales_[ L1ParticleMap::kTripleIsoEG5 ] =
574  iConfig.getParameter< int >( "L1_TripleIsoEG5_prescale" ) ;
575  singleThresholds_[ L1ParticleMap::kTripleEG10 ] =
576  iConfig.getParameter< double >( "L1_TripleEG10_thresh" ) ;
577  prescales_[ L1ParticleMap::kTripleEG10 ] =
578  iConfig.getParameter< int >( "L1_TripleEG10_prescale" ) ;
579  singleThresholds_[ L1ParticleMap::kTripleJet50 ] =
580  iConfig.getParameter< double >( "L1_TripleJet50_thresh" ) ;
581  prescales_[ L1ParticleMap::kTripleJet50 ] =
582  iConfig.getParameter< int >( "L1_TripleJet50_prescale" ) ;
583  singleThresholds_[ L1ParticleMap::kTripleTauJet40 ] =
584  iConfig.getParameter< double >( "L1_TripleTauJet40_thresh" ) ;
585  prescales_[ L1ParticleMap::kTripleTauJet40 ] =
586  iConfig.getParameter< int >( "L1_TripleTauJet40_prescale" ) ;
587 
588  // AAB triggers
589 
590  doubleThresholds_[ L1ParticleMap::kDoubleMu3_IsoEG5 ].first =
591  iConfig.getParameter< double >( "L1_DoubleMu3_IsoEG5_thresh1" ) ;
592  doubleThresholds_[ L1ParticleMap::kDoubleMu3_IsoEG5 ].second =
593  iConfig.getParameter< double >( "L1_DoubleMu3_IsoEG5_thresh2" ) ;
594  prescales_[ L1ParticleMap::kDoubleMu3_IsoEG5 ] =
595  iConfig.getParameter< int >( "L1_DoubleMu3_IsoEG5_prescale" ) ;
596  doubleThresholds_[ L1ParticleMap::kDoubleMu3_EG10 ].first =
597  iConfig.getParameter< double >( "L1_DoubleMu3_EG10_thresh1" ) ;
598  doubleThresholds_[ L1ParticleMap::kDoubleMu3_EG10 ].second =
599  iConfig.getParameter< double >( "L1_DoubleMu3_EG10_thresh2" ) ;
600  prescales_[ L1ParticleMap::kDoubleMu3_EG10 ] =
601  iConfig.getParameter< int >( "L1_DoubleMu3_EG10_prescale" ) ;
602  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_Mu3 ].first =
603  iConfig.getParameter< double >( "L1_DoubleIsoEG5_Mu3_thresh1" ) ;
604  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_Mu3 ].second =
605  iConfig.getParameter< double >( "L1_DoubleIsoEG5_Mu3_thresh2" ) ;
606  prescales_[ L1ParticleMap::kDoubleIsoEG5_Mu3 ] =
607  iConfig.getParameter< int >( "L1_DoubleIsoEG5_Mu3_prescale" ) ;
608  doubleThresholds_[ L1ParticleMap::kDoubleEG10_Mu3 ].first =
609  iConfig.getParameter< double >( "L1_DoubleEG10_Mu3_thresh1" ) ;
610  doubleThresholds_[ L1ParticleMap::kDoubleEG10_Mu3 ].second =
611  iConfig.getParameter< double >( "L1_DoubleEG10_Mu3_thresh2" ) ;
612  prescales_[ L1ParticleMap::kDoubleEG10_Mu3 ] =
613  iConfig.getParameter< int >( "L1_DoubleEG10_Mu3_prescale" ) ;
614 
615  doubleThresholds_[ L1ParticleMap::kDoubleMu3_HTT200 ].first =
616  iConfig.getParameter< double >( "L1_DoubleMu3_HTT200_thresh1" ) ;
617  doubleThresholds_[ L1ParticleMap::kDoubleMu3_HTT200 ].second =
618  iConfig.getParameter< double >( "L1_DoubleMu3_HTT200_thresh2" ) ;
619  prescales_[ L1ParticleMap::kDoubleMu3_HTT200 ] =
620  iConfig.getParameter< int >( "L1_DoubleMu3_HTT200_prescale" ) ;
621  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_HTT200 ].first =
622  iConfig.getParameter< double >( "L1_DoubleIsoEG5_HTT200_thresh1" ) ;
623  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_HTT200 ].second =
624  iConfig.getParameter< double >( "L1_DoubleIsoEG5_HTT200_thresh2" ) ;
625  prescales_[ L1ParticleMap::kDoubleIsoEG5_HTT200 ] =
626  iConfig.getParameter< int >( "L1_DoubleIsoEG5_HTT200_prescale" ) ;
627  doubleThresholds_[ L1ParticleMap::kDoubleEG10_HTT200 ].first =
628  iConfig.getParameter< double >( "L1_DoubleEG10_HTT200_thresh1" ) ;
629  doubleThresholds_[ L1ParticleMap::kDoubleEG10_HTT200 ].second =
630  iConfig.getParameter< double >( "L1_DoubleEG10_HTT200_thresh2" ) ;
631  prescales_[ L1ParticleMap::kDoubleEG10_HTT200 ] =
632  iConfig.getParameter< int >( "L1_DoubleEG10_HTT200_prescale" ) ;
633  doubleThresholds_[ L1ParticleMap::kDoubleJet50_HTT200 ].first =
634  iConfig.getParameter< double >( "L1_DoubleJet50_HTT200_thresh1" ) ;
635  doubleThresholds_[ L1ParticleMap::kDoubleJet50_HTT200 ].second =
636  iConfig.getParameter< double >( "L1_DoubleJet50_HTT200_thresh2" ) ;
637  prescales_[ L1ParticleMap::kDoubleJet50_HTT200 ] =
638  iConfig.getParameter< int >( "L1_DoubleJet50_HTT200_prescale" ) ;
639  doubleThresholds_[ L1ParticleMap::kDoubleTauJet40_HTT200 ].first =
640  iConfig.getParameter< double >( "L1_DoubleTauJet40_HTT200_thresh1" ) ;
641  doubleThresholds_[ L1ParticleMap::kDoubleTauJet40_HTT200 ].second =
642  iConfig.getParameter< double >( "L1_DoubleTauJet40_HTT200_thresh2" ) ;
643  prescales_[ L1ParticleMap::kDoubleTauJet40_HTT200 ] =
644  iConfig.getParameter< int >( "L1_DoubleTauJet40_HTT200_prescale" ) ;
645 
646  doubleThresholds_[ L1ParticleMap::kDoubleMu3_ETM20 ].first =
647  iConfig.getParameter< double >( "L1_DoubleMu3_ETM20_thresh1" ) ;
648  doubleThresholds_[ L1ParticleMap::kDoubleMu3_ETM20 ].second =
649  iConfig.getParameter< double >( "L1_DoubleMu3_ETM20_thresh2" ) ;
650  prescales_[ L1ParticleMap::kDoubleMu3_ETM20 ] =
651  iConfig.getParameter< int >( "L1_DoubleMu3_ETM20_prescale" ) ;
652  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_ETM20 ].first =
653  iConfig.getParameter< double >( "L1_DoubleIsoEG5_ETM20_thresh1" ) ;
654  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_ETM20 ].second =
655  iConfig.getParameter< double >( "L1_DoubleIsoEG5_ETM20_thresh2" ) ;
656  prescales_[ L1ParticleMap::kDoubleIsoEG5_ETM20 ] =
657  iConfig.getParameter< int >( "L1_DoubleIsoEG5_ETM20_prescale" ) ;
658  doubleThresholds_[ L1ParticleMap::kDoubleEG10_ETM20 ].first =
659  iConfig.getParameter< double >( "L1_DoubleEG10_ETM20_thresh1" ) ;
660  doubleThresholds_[ L1ParticleMap::kDoubleEG10_ETM20 ].second =
661  iConfig.getParameter< double >( "L1_DoubleEG10_ETM20_thresh2" ) ;
662  prescales_[ L1ParticleMap::kDoubleEG10_ETM20 ] =
663  iConfig.getParameter< int >( "L1_DoubleEG10_ETM20_prescale" ) ;
664  doubleThresholds_[ L1ParticleMap::kDoubleJet50_ETM20 ].first =
665  iConfig.getParameter< double >( "L1_DoubleJet50_ETM20_thresh1" ) ;
666  doubleThresholds_[ L1ParticleMap::kDoubleJet50_ETM20 ].second =
667  iConfig.getParameter< double >( "L1_DoubleJet50_ETM20_thresh2" ) ;
668  prescales_[ L1ParticleMap::kDoubleJet50_ETM20 ] =
669  iConfig.getParameter< int >( "L1_DoubleJet50_ETM20_prescale" ) ;
670  doubleThresholds_[ L1ParticleMap::kDoubleTauJet40_ETM20 ].first =
671  iConfig.getParameter< double >( "L1_DoubleTauJet40_ETM20_thresh1" ) ;
672  doubleThresholds_[ L1ParticleMap::kDoubleTauJet40_ETM20 ].second =
673  iConfig.getParameter< double >( "L1_DoubleTauJet40_ETM20_thresh2" ) ;
674  prescales_[ L1ParticleMap::kDoubleTauJet40_ETM20 ] =
675  iConfig.getParameter< int >( "L1_DoubleTauJet40_ETM20_prescale" ) ;
676 
677  singleThresholds_[ L1ParticleMap::kQuadJet30 ] =
678  iConfig.getParameter< double >( "L1_QuadJet30_thresh" ) ;
679  prescales_[ L1ParticleMap::kQuadJet30 ] =
680  iConfig.getParameter< int >( "L1_QuadJet30_prescale" ) ;
681 
682  // Diffractive triggers
683  doubleThresholds_[ L1ParticleMap::kExclusiveDoubleIsoEG4 ].first =
684  iConfig.getParameter< double >( "L1_ExclusiveDoubleIsoEG4_thresh1" );
685  doubleThresholds_[ L1ParticleMap::kExclusiveDoubleIsoEG4 ].second =
686  iConfig.getParameter< double >( "L1_ExclusiveDoubleIsoEG4_thresh2" ); // for jet rejection
687  prescales_[ L1ParticleMap::kExclusiveDoubleIsoEG4 ] =
688  iConfig.getParameter< int >( "L1_ExclusiveDoubleIsoEG4_prescale" ) ;
689  singleThresholds_[ L1ParticleMap::kExclusiveDoubleJet60 ] =
690  iConfig.getParameter< double >( "L1_ExclusiveDoubleJet60_thresh" );
691  prescales_[ L1ParticleMap::kExclusiveDoubleJet60 ] =
692  iConfig.getParameter< int >( "L1_ExclusiveDoubleJet60_prescale" ) ;
693  singleThresholds_[ L1ParticleMap::kExclusiveJet25_Gap_Jet25 ] =
694  iConfig.getParameter< double >( "L1_ExclusiveJet25_Gap_Jet25_thresh" );
695  prescales_[ L1ParticleMap::kExclusiveJet25_Gap_Jet25 ] =
696  iConfig.getParameter< int >( "L1_ExclusiveJet25_Gap_Jet25_prescale" ) ;
697  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet20_ForJet10 ].first =
698  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_ForJet10_thresh1" ) ;
699  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet20_ForJet10 ].second =
700  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_ForJet10_thresh2" ) ;
701  singleThresholds_[ L1ParticleMap::kIsoEG10_Jet20_ForJet10 ] =
702  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_ForJet10_thresh3" ) ;
703  prescales_[ L1ParticleMap::kIsoEG10_Jet20_ForJet10 ] =
704  iConfig.getParameter< int >( "L1_IsoEG10_Jet20_ForJet10_prescale" ) ;
705 
706  prescales_[ L1ParticleMap::kMinBias_HTT10 ] =
707  iConfig.getParameter< int >( "L1_MinBias_HTT10_prescale" ) ;
708  prescales_[ L1ParticleMap::kZeroBias ] =
709  iConfig.getParameter< int >( "L1_ZeroBias_prescale" ) ;
710 
711 // // Print trigger table in Twiki table format.
712 // std::cout << "| *Trigger Index* | *Trigger Name* | *E<sub>T</sub> Threshold (!GeV)* | *Prescale* |"
713 // << std::endl ;
714 
715 // for( int i = 0 ; i < L1ParticleMap::kNumOfL1TriggerTypes ; ++i )
716 // {
717 // std::cout
718 // << "| "
719 // << i
720 // << " | " ;
721 // if( prescales_[ i ] == 999999999 ) std::cout << "<strike>" ;
722 // std::cout
723 // << L1ParticleMap::triggerName( ( L1ParticleMap::L1TriggerType ) i ) ;
724 // if( prescales_[ i ] == 999999999 ) std::cout << "</strike>" ;
725 // std::cout << " | " ;
726 
727 // if( singleThresholds_[ i ] > 0 )
728 // {
729 // if( doubleThresholds_[ i ].first > 0 )
730 // {
731 // std::cout << doubleThresholds_[ i ].first << ", "
732 // << doubleThresholds_[ i ].second << ", " ;
733 // }
734 
735 // std::cout << singleThresholds_[ i ] ;
736 // }
737 // else if( doubleThresholds_[ i ].first > 0 )
738 // {
739 // std::cout << doubleThresholds_[ i ].first << ", "
740 // << doubleThresholds_[ i ].second ;
741 // }
742 // else
743 // {
744 // std::cout << "---" ;
745 // }
746 
747 // std::cout << " | " ;
748 // if( prescales_[ i ] != 999999999 ) std::cout << prescales_[ i ] ;
749 // std::cout << " |"
750 // << std::endl ;
751 // }
752 }
T getParameter(std::string const &) const
int prescaleCounters_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
double singleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
std::pair< double, double > doubleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
int prescales_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
L1ExtraParticleMapProd::~L1ExtraParticleMapProd ( )

Definition at line 755 of file L1ExtraParticleMapProd.cc.

756 {
757  // do anything here that needs to be done at desctruction time
758  // (e.g. close files, deallocate resources etc.)
759 }

Member Function Documentation

template<class TCollection >
void L1ExtraParticleMapProd::addToVectorRefs ( const edm::Handle< TCollection > &  handle,
std::vector< edm::Ref< TCollection > > &  vectorRefs 
)
private

Definition at line 1898 of file L1ExtraParticleMapProd.cc.

References mps_fire::i.

Referenced by produce().

1901 {
1902  for( size_t i = 0 ; i < handle->size() ; ++i )
1903  {
1904  vectorRefs.push_back( edm::Ref< TCollection >( handle, i ) ) ;
1905  }
1906 }
void L1ExtraParticleMapProd::evaluateDoubleDifferentCaloObjectTrigger ( const l1extra::L1EmParticleVectorRef inputRefs1,
const l1extra::L1JetParticleVectorRef inputRefs2,
const double &  etThreshold1,
const double &  etThreshold2,
bool &  decision,
l1extra::L1EmParticleVectorRef outputRefs1,
l1extra::L1JetParticleVectorRef outputRefs2,
l1extra::L1ParticleMap::L1IndexComboVector combos 
)
private

Definition at line 2424 of file L1ExtraParticleMapProd.cc.

References edm::Ref< C, T, F >::get(), mps_fire::i, kDefault, and funct::true.

Referenced by produce().

2433 {
2434  for( size_t i = 0 ; i < inputRefs1.size() ; ++i )
2435  {
2436  const l1extra::L1EmParticleRef& refi = inputRefs1[ i ] ;
2437  if( refi.get()->et() >= etThreshold1 )
2438  {
2439  for( size_t j = 0 ; j < inputRefs2.size() ; ++j )
2440  {
2441  const l1extra::L1JetParticleRef& refj = inputRefs2[ j ] ;
2442 
2443  // Check for identical region only if both HW objects are non-null.
2444  if( refj.get()->et() >= etThreshold2 &&
2445  ( refi.get()->gctEmCand() == 0 ||
2446  refj.get()->gctJetCand() == 0 ||
2447  refi.get()->gctEmCand()->regionId() !=
2448  refj.get()->gctJetCand()->regionId() ) )
2449  {
2450  decision = true ;
2451 
2452  // If the two objects are already in their respective lists,
2453  // find their indices.
2454  int iInList = kDefault ;
2455  for( size_t iout = 0 ; iout < outputRefs1.size() ; ++iout )
2456  {
2457  if( refi == outputRefs1[ iout ] )
2458  {
2459  iInList = iout ;
2460  }
2461  }
2462 
2463  int jInList = kDefault ;
2464  for( size_t jout = 0 ; jout < outputRefs2.size() ; ++jout )
2465  {
2466  if( refj == outputRefs2[ jout ] )
2467  {
2468  jInList = jout ;
2469  }
2470  }
2471 
2472  // If either object is not in the list, add it, and
2473  // record its index.
2474  if( iInList == kDefault )
2475  {
2476  iInList = outputRefs1.size() ;
2477  outputRefs1.push_back( refi ) ;
2478  }
2479 
2480  if( jInList == kDefault )
2481  {
2482  jInList = outputRefs2.size() ;
2483  outputRefs2.push_back( refj ) ;
2484  }
2485 
2486  // Record this object combination.
2488  combo.push_back( iInList ) ;
2489  combo.push_back( jInList ) ;
2490  combos.push_back( combo ) ;
2491  }
2492  }
2493  }
2494  }
2495 }
static const int kDefault
std::vector< unsigned int > L1IndexCombo
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
template<class TCollection >
void L1ExtraParticleMapProd::evaluateDoubleDifferentObjectSameTypeTrigger ( const std::vector< edm::Ref< TCollection > > &  inputRefs1,
const std::vector< edm::Ref< TCollection > > &  inputRefs2,
const double &  etThreshold1,
const double &  etThreshold2,
bool &  decision,
std::vector< edm::Ref< TCollection > > &  outputRefs,
l1extra::L1ParticleMap::L1IndexComboVector combos 
)
private

Definition at line 2355 of file L1ExtraParticleMapProd.cc.

References edm::Ref< C, T, F >::get(), mps_fire::i, kDefault, and funct::true.

Referenced by produce().

2363 {
2364  for( size_t i = 0 ; i < inputRefs1.size() ; ++i )
2365  {
2366  const edm::Ref< TCollection >& refi = inputRefs1[ i ] ;
2367  if( refi.get()->et() >= etThreshold1 )
2368  {
2369  for( size_t j = 0 ; j < inputRefs2.size() ; ++j )
2370  {
2371  const edm::Ref< TCollection >& refj = inputRefs2[ j ] ;
2372 
2373  if( refj.get()->et() >= etThreshold2 &&
2374  refi != refj )
2375  {
2376  decision = true ;
2377 
2378  // If the two objects are already in their respective lists,
2379  // find their indices.
2380  int iInList = kDefault ;
2381  for( size_t iout = 0 ; iout < outputRefs.size() ; ++iout )
2382  {
2383  if( refi == outputRefs[ iout ] )
2384  {
2385  iInList = iout ;
2386  }
2387  }
2388 
2389  int jInList = kDefault ;
2390  for( size_t jout = 0 ; jout < outputRefs.size() ; ++jout )
2391  {
2392  if( refj == outputRefs[ jout ] )
2393  {
2394  jInList = jout ;
2395  }
2396  }
2397 
2398  // If either object is not in the list, add it, and
2399  // record its index.
2400  if( iInList == kDefault )
2401  {
2402  iInList = outputRefs.size() ;
2403  outputRefs.push_back( refi ) ;
2404  }
2405 
2406  if( jInList == kDefault )
2407  {
2408  jInList = outputRefs.size() ;
2409  outputRefs.push_back( refj ) ;
2410  }
2411 
2412  // Record this object combination.
2414  combo.push_back( iInList ) ;
2415  combo.push_back( jInList ) ;
2416  combos.push_back( combo ) ;
2417  }
2418  }
2419  }
2420  }
2421 }
static const int kDefault
std::vector< unsigned int > L1IndexCombo
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
template<class TCollection1 , class TCollection2 >
void L1ExtraParticleMapProd::evaluateDoubleDifferentObjectTrigger ( const std::vector< edm::Ref< TCollection1 > > &  inputRefs1,
const std::vector< edm::Ref< TCollection2 > > &  inputRefs2,
const double &  etThreshold1,
const double &  etThreshold2,
bool &  decision,
std::vector< edm::Ref< TCollection1 > > &  outputRefs1,
std::vector< edm::Ref< TCollection2 > > &  outputRefs2,
l1extra::L1ParticleMap::L1IndexComboVector combos 
)
private

Definition at line 2284 of file L1ExtraParticleMapProd.cc.

References edm::Ref< C, T, F >::get(), mps_fire::i, kDefault, and funct::true.

Referenced by produce().

2293 {
2294  for( size_t i = 0 ; i < inputRefs1.size() ; ++i )
2295  {
2296  const edm::Ref< TCollection1 >& refi = inputRefs1[ i ] ;
2297  if( refi.get()->et() >= etThreshold1 )
2298  {
2299  for( size_t j = 0 ; j < inputRefs2.size() ; ++j )
2300  {
2301  const edm::Ref< TCollection2 >& refj = inputRefs2[ j ] ;
2302 
2303  if( refj.get()->et() >= etThreshold2 )
2304  {
2305  decision = true ;
2306 
2307  // If the two objects are already in their respective lists,
2308  // find their indices.
2309  int iInList = kDefault ;
2310  for( size_t iout = 0 ; iout < outputRefs1.size() ; ++iout )
2311  {
2312  if( refi == outputRefs1[ iout ] )
2313  {
2314  iInList = iout ;
2315  }
2316  }
2317 
2318  int jInList = kDefault ;
2319  for( size_t jout = 0 ; jout < outputRefs2.size() ; ++jout )
2320  {
2321  if( refj == outputRefs2[ jout ] )
2322  {
2323  jInList = jout ;
2324  }
2325  }
2326 
2327  // If either object is not in the list, add it, and
2328  // record its index.
2329  if( iInList == kDefault )
2330  {
2331  iInList = outputRefs1.size() ;
2332  outputRefs1.push_back( refi ) ;
2333  }
2334 
2335  if( jInList == kDefault )
2336  {
2337  jInList = outputRefs2.size() ;
2338  outputRefs2.push_back( refj ) ;
2339  }
2340 
2341  // Record this object combination.
2343  combo.push_back( iInList ) ;
2344  combo.push_back( jInList ) ;
2345  combos.push_back( combo ) ;
2346  }
2347  }
2348  }
2349  }
2350 }
static const int kDefault
std::vector< unsigned int > L1IndexCombo
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
void L1ExtraParticleMapProd::evaluateDoubleExclusiveIsoEG ( const l1extra::L1EmParticleVectorRef inputRefs1,
const l1extra::L1JetParticleVectorRef inputRefs2,
const double &  etThreshold1,
const double &  etThreshold2,
bool &  decision,
l1extra::L1EmParticleVectorRef outputRefs1,
l1extra::L1ParticleMap::L1IndexComboVector combos 
)
private

Definition at line 2602 of file L1ExtraParticleMapProd.cc.

References evaluateDoubleSameObjectTrigger().

Referenced by produce().

2610 {
2611  if ( inputRefs1.size() ==2 )
2612  { // 2 iso EG
2613  decision=true;
2614  if (inputRefs2.size()>0)
2615  { // should veto if there are jets, with pt>thresh
2616  for( size_t j = 0 ; j < inputRefs2.size() ; ++j )
2617  {
2618  if(inputRefs2[j].get()->gctJetCand()->regionId() ==
2619  inputRefs1[0].get()->gctEmCand()->regionId())continue;
2620  if(inputRefs2[j].get()->gctJetCand()->regionId() ==
2621  inputRefs1[1].get()->gctEmCand()->regionId())continue;
2622  if(inputRefs2[j].get()->et( )> etThreshold2 ) {
2623  decision=false; break; }
2624  // break : for a faster algorithm
2625  }
2626  }
2627  if(decision)
2628  { // threshold evaluation for the Exclusive double isoEG
2629  decision = false;
2630  evaluateDoubleSameObjectTrigger( inputRefs1,
2631  etThreshold1,
2632  decision,
2633  outputRefs1,
2634  combos ) ;
2635  }
2636  }
2637 }
void evaluateDoubleSameObjectTrigger(const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos, bool combinedWithGlobalObject=false)
template<class TCollection1 , class TCollection2 >
void L1ExtraParticleMapProd::evaluateDoublePlusSingleObjectTrigger ( const std::vector< edm::Ref< TCollection1 > > &  inputRefs1,
const std::vector< edm::Ref< TCollection2 > > &  inputRefs2,
const double &  etThreshold1,
const double &  etThreshold2,
bool &  decision,
std::vector< edm::Ref< TCollection1 > > &  outputRefs1,
std::vector< edm::Ref< TCollection2 > > &  outputRefs2,
l1extra::L1ParticleMap::L1IndexComboVector combos 
)
private

Definition at line 2082 of file L1ExtraParticleMapProd.cc.

References edm::Ref< C, T, F >::get(), mps_fire::i, gen::k, kDefault, and funct::true.

Referenced by produce().

2091 {
2092  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
2093  // because i is unsigned, and if size() is 0, then RHS undefined.
2094  for( size_t i = 0 ; i+1 < inputRefs1.size() ; ++i )
2095  {
2096  const edm::Ref< TCollection1 >& refi = inputRefs1[ i ] ;
2097  if( refi.get()->et() >= etThreshold1 )
2098  {
2099  for( size_t j = i+1 ; j < inputRefs1.size() ; ++j )
2100  {
2101  const edm::Ref< TCollection1 >& refj = inputRefs1[ j ] ;
2102  if( refj.get()->et() >= etThreshold1 )
2103  {
2104  for( size_t k = 0 ; k < inputRefs2.size() ; ++k )
2105  {
2106  const edm::Ref< TCollection2 >& refk = inputRefs2[ k ] ;
2107  if( refk.get()->et() >= etThreshold2 )
2108  {
2109  decision = true ;
2110 
2111  // If the three objects are already in the list, find
2112  // their indices.
2113  int iInList = kDefault ;
2114  int jInList = kDefault ;
2115 
2116  for( size_t iout = 0 ;
2117  iout < outputRefs1.size() ; ++iout )
2118  {
2119  if( refi == outputRefs1[ iout ] )
2120  {
2121  iInList = iout ;
2122  }
2123 
2124  if( refj == outputRefs1[ iout ] )
2125  {
2126  jInList = iout ;
2127  }
2128  }
2129 
2130  int kInList = kDefault ;
2131  for( size_t kout = 0 ;
2132  kout < outputRefs2.size() ; ++kout )
2133  {
2134  if( refk == outputRefs2[ kout ] )
2135  {
2136  kInList = kout ;
2137  }
2138  }
2139 
2140  // If any object is not in the list, add it, and
2141  // record its index.
2142  if( iInList == kDefault )
2143  {
2144  iInList = outputRefs1.size() ;
2145  outputRefs1.push_back( refi );
2146  }
2147 
2148  if( jInList == kDefault )
2149  {
2150  jInList = outputRefs1.size() ;
2151  outputRefs1.push_back( refj );
2152  }
2153 
2154  if( kInList == kDefault )
2155  {
2156  kInList = outputRefs2.size() ;
2157  outputRefs2.push_back( refk );
2158  }
2159 
2160  // Record this object combination.
2162  combo.push_back( iInList ) ;
2163  combo.push_back( jInList ) ;
2164  combo.push_back( kInList ) ;
2165  combos.push_back( combo ) ;
2166  }
2167  }
2168  }
2169  }
2170  }
2171  }
2172 }
static const int kDefault
std::vector< unsigned int > L1IndexCombo
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
int k[5][pyjets_maxn]
template<class TCollection >
void L1ExtraParticleMapProd::evaluateDoubleSameObjectTrigger ( const std::vector< edm::Ref< TCollection > > &  inputRefs,
const double &  etThreshold,
bool &  decision,
std::vector< edm::Ref< TCollection > > &  outputRefs,
l1extra::L1ParticleMap::L1IndexComboVector combos,
bool  combinedWithGlobalObject = false 
)
private

Definition at line 1928 of file L1ExtraParticleMapProd.cc.

References edm::Ref< C, T, F >::get(), mps_fire::i, kDefault, and funct::true.

Referenced by evaluateDoubleExclusiveIsoEG(), and produce().

1935 {
1936  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
1937  // because i is unsigned, and if size() is 0, then RHS undefined.
1938  for( size_t i = 0 ; i+1 < inputRefs.size() ; ++i )
1939  {
1940  const edm::Ref< TCollection >& refi = inputRefs[ i ] ;
1941  if( refi.get()->et() >= etThreshold )
1942  {
1943  for( size_t j = i+1 ; j < inputRefs.size() ; ++j )
1944  {
1945  const edm::Ref< TCollection >& refj = inputRefs[ j ] ;
1946  if( refj.get()->et() >= etThreshold )
1947  {
1948  decision = true ;
1949 
1950  // If the two objects are already in the list, find
1951  // their indices.
1952  int iInList = kDefault ;
1953  int jInList = kDefault ;
1954  for( size_t iout = 0 ; iout < outputRefs.size() ; ++iout )
1955  {
1956  if( refi == outputRefs[ iout ] )
1957  {
1958  iInList = iout ;
1959  }
1960 
1961  if( refj == outputRefs[ iout ] )
1962  {
1963  jInList = iout ;
1964  }
1965  }
1966 
1967  // If either object is not in the list, add it, and
1968  // record its index.
1969  if( iInList == kDefault )
1970  {
1971  iInList = outputRefs.size() ;
1972  outputRefs.push_back( refi ) ;
1973  }
1974 
1975  if( jInList == kDefault )
1976  {
1977  jInList = outputRefs.size() ;
1978  outputRefs.push_back( refj ) ;
1979  }
1980 
1981  // Record this object combination.
1983  combo.push_back( iInList ) ;
1984  combo.push_back( jInList ) ;
1985  if( combinedWithGlobalObject ) combo.push_back( 0 ) ;
1986  combos.push_back( combo ) ;
1987  }
1988  }
1989  }
1990  }
1991 }
static const int kDefault
std::vector< unsigned int > L1IndexCombo
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
void L1ExtraParticleMapProd::evaluateForwardRapidityGap ( const l1extra::L1JetParticleVectorRef inputRefs,
const double &  etThreshold,
bool &  decision 
)
private

Definition at line 2569 of file L1ExtraParticleMapProd.cc.

References funct::false, edm::Ref< C, T, F >::get(), gen::k, l1extra::L1JetParticle::kForward, checklumidiff::l, truncPyr::refl(), and reco::return().

Referenced by produce().

2574 {
2575  decision = true;
2576 
2577  // search for forward pair
2578  for( size_t k = 0 ; k+1 < inputRefs.size() ; ++k )
2579  {
2580  const l1extra::L1JetParticleRef& refk = inputRefs[ k ] ;
2581  double etak = refk.get()->eta();
2582  if( ( refk.get()->type() == l1extra::L1JetParticle::kForward ) &&
2583  ( refk.get()->et() >= etThreshold ) )
2584  {
2585  for( size_t l = k+1 ; l < inputRefs.size() ; ++l )
2586  {
2587  const l1extra::L1JetParticleRef& refl = inputRefs[ l ] ;
2588  double etal = refl.get()->eta();
2589  if( (refl.get()->type()==l1extra::L1JetParticle::kForward) &&
2590  (refl.get()->et() >= etThreshold ) &&
2591  ((etak>0 && etal<0) || (etak<0 && etal>0)) )
2592  {
2593  decision = false ;
2594  return ;// no need for going further -- for a faster algorithm
2595  }
2596  }
2597  }
2598  }
2599 }
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
int k[5][pyjets_maxn]
return(e1-e2)*(e1-e2)+dp *dp
Pt3D refl(const Pt3D &p)
void L1ExtraParticleMapProd::evaluateJetGapJetTrigger ( const l1extra::L1JetParticleVectorRef inputRefs,
const double &  etThreshold,
bool &  decision,
l1extra::L1JetParticleVectorRef outputRefs,
l1extra::L1ParticleMap::L1IndexComboVector combos 
)
private

Definition at line 2498 of file L1ExtraParticleMapProd.cc.

References edm::Ref< C, T, F >::get(), mps_fire::i, kDefault, and funct::true.

Referenced by produce().

2504 {
2505  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
2506  // because i is unsigned, and if size() is 0, then RHS undefined.
2507  for( size_t i = 0 ; i+1 < inputRefs.size() ; ++i )
2508  {
2509  const l1extra::L1JetParticleRef& refi = inputRefs[ i ] ;
2510  if( refi.get()->et() >= etThreshold )
2511  {
2512  for( size_t j = i+1 ; j < inputRefs.size() ; ++j )
2513  {
2514  const l1extra::L1JetParticleRef& refj = inputRefs[ j ] ;
2515  if( ( refj.get()->et() >= etThreshold ) &&
2516  ( ( ( refi.get()->eta() < 0. ) && ( refj.get()->eta() > 0. ) )
2517  ||
2518  ( ( refi.get()->eta() > 0. ) && ( refj.get()->eta() < 0. ) )
2519  )
2520  )
2521  {
2522  decision = true ;
2523 
2524  // If the two objects are already in the list, find
2525  // their indices.
2526  int iInList = kDefault ;
2527  int jInList = kDefault ;
2528  for( size_t iout = 0 ; iout < outputRefs.size() ; ++iout )
2529  {
2530  if( refi == outputRefs[ iout ] )
2531  {
2532  iInList = iout ;
2533  }
2534 
2535  if( refj == outputRefs[ iout ] )
2536  {
2537  jInList = iout ;
2538  }
2539  }
2540 
2541  // If either object is not in the list, add it, and
2542  // record its index.
2543  if( iInList == kDefault )
2544  {
2545  iInList = outputRefs.size() ;
2546  outputRefs.push_back( refi ) ;
2547  }
2548 
2549  if( jInList == kDefault )
2550  {
2551  jInList = outputRefs.size() ;
2552  outputRefs.push_back( refj ) ;
2553  }
2554 
2555  // Record this object combination.
2557  combo.push_back( iInList ) ;
2558  combo.push_back( jInList ) ;
2559  combos.push_back( combo ) ;
2560  }
2561  }
2562  }
2563  }
2564 }
static const int kDefault
std::vector< unsigned int > L1IndexCombo
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
template<class TCollection >
void L1ExtraParticleMapProd::evaluateQuadSameObjectTrigger ( const std::vector< edm::Ref< TCollection > > &  inputRefs,
const double &  etThreshold,
bool &  decision,
std::vector< edm::Ref< TCollection > > &  outputRefs,
l1extra::L1ParticleMap::L1IndexComboVector combos 
)
private

Definition at line 2177 of file L1ExtraParticleMapProd.cc.

References edm::Ref< C, T, F >::get(), mps_fire::i, gen::k, kDefault, AlCaHLTBitMon_ParallelJobs::p, and funct::true.

Referenced by produce().

2183 {
2184  // Use i+3 < inputRefs.size() instead of i < inputRefs.size()-3
2185  // because i is unsigned, and if size() is 0, then RHS undefined.
2186  for( size_t i = 0 ; i+3 < inputRefs.size() ; ++i )
2187  {
2188  const edm::Ref< TCollection >& refi = inputRefs[ i ] ;
2189  if( refi.get()->et() >= etThreshold )
2190  {
2191  for( size_t j = i+1 ; j+2 < inputRefs.size() ; ++j )
2192  {
2193  const edm::Ref< TCollection >& refj = inputRefs[ j ] ;
2194  if( refj.get()->et() >= etThreshold )
2195  {
2196  for( size_t k = j+1 ; k+1 < inputRefs.size() ; ++k )
2197  {
2198  const edm::Ref< TCollection >& refk = inputRefs[ k ] ;
2199  if( refk.get()->et() >= etThreshold )
2200  {
2201  for( size_t p = k+1 ; p < inputRefs.size() ; ++p )
2202  {
2203  const edm::Ref< TCollection >& refp = inputRefs[ p ] ;
2204  if( refp.get()->et() >= etThreshold )
2205  {
2206  decision = true ;
2207 
2208  // If the objects are already in the list, find
2209  // their indices.
2210  int iInList = kDefault ;
2211  int jInList = kDefault ;
2212  int kInList = kDefault ;
2213  int pInList = kDefault ;
2214  for( size_t iout = 0 ;
2215  iout < outputRefs.size() ; ++iout )
2216  {
2217  if( refi == outputRefs[ iout ] )
2218  {
2219  iInList = iout ;
2220  }
2221 
2222  if( refj == outputRefs[ iout ] )
2223  {
2224  jInList = iout ;
2225  }
2226 
2227  if( refk == outputRefs[ iout ] )
2228  {
2229  kInList = iout ;
2230  }
2231 
2232  if( refp == outputRefs[ iout ] )
2233  {
2234  pInList = iout ;
2235  }
2236  }
2237 
2238  // If any object is not in the list, add it, and
2239  // record its index.
2240  if( iInList == kDefault )
2241  {
2242  iInList = outputRefs.size() ;
2243  outputRefs.push_back( refi ) ;
2244  }
2245 
2246  if( jInList == kDefault )
2247  {
2248  jInList = outputRefs.size() ;
2249  outputRefs.push_back( refj ) ;
2250  }
2251 
2252  if( kInList == kDefault )
2253  {
2254  kInList = outputRefs.size() ;
2255  outputRefs.push_back( refk ) ;
2256  }
2257 
2258  if( pInList == kDefault )
2259  {
2260  pInList = outputRefs.size() ;
2261  outputRefs.push_back( refp ) ;
2262  }
2263 
2264  // Record this object combination.
2266  combo.push_back( iInList ) ;
2267  combo.push_back( jInList ) ;
2268  combo.push_back( kInList ) ;
2269  combo.push_back( pInList ) ;
2270  combos.push_back( combo ) ;
2271  }
2272  }
2273  }
2274  }
2275  }
2276  }
2277  }
2278  }
2279 }
static const int kDefault
std::vector< unsigned int > L1IndexCombo
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
int k[5][pyjets_maxn]
template<class TCollection >
void L1ExtraParticleMapProd::evaluateSingleObjectTrigger ( const std::vector< edm::Ref< TCollection > > &  inputRefs,
const double &  etThreshold,
bool &  decision,
std::vector< edm::Ref< TCollection > > &  outputRefs 
)
private

Definition at line 1910 of file L1ExtraParticleMapProd.cc.

References mps_fire::i, and funct::true.

Referenced by produce().

1915 {
1916  for( size_t i = 0 ; i < inputRefs.size() ; ++i )
1917  {
1918  if( inputRefs[ i ].get()->et() >= etThreshold )
1919  {
1920  decision = true ;
1921  outputRefs.push_back( inputRefs[ i ] ) ;
1922  }
1923  }
1924 }
template<class TCollection >
void L1ExtraParticleMapProd::evaluateTripleSameObjectTrigger ( const std::vector< edm::Ref< TCollection > > &  inputRefs,
const double &  etThreshold,
bool &  decision,
std::vector< edm::Ref< TCollection > > &  outputRefs,
l1extra::L1ParticleMap::L1IndexComboVector combos 
)
private

Definition at line 1996 of file L1ExtraParticleMapProd.cc.

References edm::Ref< C, T, F >::get(), mps_fire::i, gen::k, kDefault, and funct::true.

Referenced by produce().

2002 {
2003  // Use i+2 < inputRefs.size() instead of i < inputRefs.size()-2
2004  // because i is unsigned, and if size() is 0, then RHS undefined.
2005  for( size_t i = 0 ; i+2 < inputRefs.size() ; ++i )
2006  {
2007  const edm::Ref< TCollection >& refi = inputRefs[ i ] ;
2008  if( refi.get()->et() >= etThreshold )
2009  {
2010  for( size_t j = i+1 ; j+1 < inputRefs.size() ; ++j )
2011  {
2012  const edm::Ref< TCollection >& refj = inputRefs[ j ] ;
2013  if( refj.get()->et() >= etThreshold )
2014  {
2015  for( size_t k = j+1 ; k < inputRefs.size() ; ++k )
2016  {
2017  const edm::Ref< TCollection >& refk = inputRefs[ k ] ;
2018  if( refk.get()->et() >= etThreshold )
2019  {
2020  decision = true ;
2021 
2022  // If the three objects are already in the list, find
2023  // their indices.
2024  int iInList = kDefault ;
2025  int jInList = kDefault ;
2026  int kInList = kDefault ;
2027  for( size_t iout = 0 ; iout < outputRefs.size() ; ++iout )
2028  {
2029  if( refi == outputRefs[ iout ] )
2030  {
2031  iInList = iout ;
2032  }
2033 
2034  if( refj == outputRefs[ iout ] )
2035  {
2036  jInList = iout ;
2037  }
2038 
2039  if( refk == outputRefs[ iout ] )
2040  {
2041  kInList = iout ;
2042  }
2043  }
2044 
2045  // If any object is not in the list, add it, and
2046  // record its index.
2047  if( iInList == kDefault )
2048  {
2049  iInList = outputRefs.size() ;
2050  outputRefs.push_back( refi );
2051  }
2052 
2053  if( jInList == kDefault )
2054  {
2055  jInList = outputRefs.size() ;
2056  outputRefs.push_back( refj );
2057  }
2058 
2059  if( kInList == kDefault )
2060  {
2061  kInList = outputRefs.size() ;
2062  outputRefs.push_back( refk );
2063  }
2064 
2065  // Record this object combination.
2067  combo.push_back( iInList ) ;
2068  combo.push_back( jInList ) ;
2069  combo.push_back( kInList ) ;
2070  combos.push_back( combo ) ;
2071  }
2072  }
2073  }
2074  }
2075  }
2076  }
2077 }
static const int kDefault
std::vector< unsigned int > L1IndexCombo
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
int k[5][pyjets_maxn]
void L1ExtraParticleMapProd::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
virtual

Definition at line 768 of file L1ExtraParticleMapProd.cc.

References addToVectorRefs(), cenJetSource_, doubleThresholds_, l1extra::L1EtMissParticle::etMiss(), etMissSource_, l1extra::L1EtMissParticle::etTotal(), evaluateDoubleDifferentCaloObjectTrigger(), evaluateDoubleDifferentObjectSameTypeTrigger(), evaluateDoubleDifferentObjectTrigger(), evaluateDoubleExclusiveIsoEG(), evaluateDoublePlusSingleObjectTrigger(), evaluateDoubleSameObjectTrigger(), evaluateForwardRapidityGap(), evaluateJetGapJetTrigger(), evaluateQuadSameObjectTrigger(), evaluateSingleObjectTrigger(), evaluateTripleSameObjectTrigger(), funct::false, plotBeamSpotDB::first, forJetSource_, edm::Event::getByLabel(), htMissSource_, mps_fire::i, isoEmSource_, WDecay::kMuon, RazorAnalyzer::met, eostools::move(), muonSource_, nonIsoEmSource_, prescaleCounters_, prescales_, edm::Event::put(), rand(), reco::return(), edm::second(), singleThresholds_, tauJetSource_, and funct::true.

770 {
771  using namespace edm;
772  using namespace std;
773  using namespace reco;
774  using namespace l1extra ;
775 
776 
777  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
778  // ~~~~~~~~ Get L1Extra particles ~~~~~~~~
779  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
780 
782  iEvent.getByLabel( isoEmSource_, isoEmHandle ) ;
783 
784  Handle< L1EmParticleCollection > nonIsoEmHandle ;
785  iEvent.getByLabel( nonIsoEmSource_, nonIsoEmHandle ) ;
786 
787  Handle< L1JetParticleCollection > cenJetHandle ;
788  iEvent.getByLabel( cenJetSource_, cenJetHandle ) ;
789 
790  Handle< L1JetParticleCollection > forJetHandle ;
791  iEvent.getByLabel( forJetSource_, forJetHandle ) ;
792 
793  Handle< L1JetParticleCollection > tauJetHandle ;
794  iEvent.getByLabel( tauJetSource_, tauJetHandle ) ;
795 
797  iEvent.getByLabel( muonSource_, muHandle ) ;
798 
799  Handle< L1EtMissParticle > metHandle ;
800  iEvent.getByLabel( etMissSource_, metHandle ) ;
801 
802  Handle< L1EtMissParticle > mhtHandle ;
803  iEvent.getByLabel( htMissSource_, mhtHandle ) ;
804 
805  double met = metHandle->etMiss() ;
806  double ht = mhtHandle->etTotal() ;
807  double ett = metHandle->etTotal() ;
808 
809  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
810  // ~~~ Evaluate trigger conditions and make a L1ParticleMapCollection. ~~~
811  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
812 
813  // First, form the input vector<Ref>s that will be needed.
814  L1EmParticleVectorRef inputIsoEmRefs ;
815  addToVectorRefs( isoEmHandle, inputIsoEmRefs ) ;
816 
817  L1EmParticleVectorRef inputRelaxedEmRefs ;
818  addToVectorRefs( isoEmHandle, inputRelaxedEmRefs ) ;
819  addToVectorRefs( nonIsoEmHandle, inputRelaxedEmRefs ) ;
820 
821  L1JetParticleVectorRef inputTauRefs ;
822  addToVectorRefs( tauJetHandle, inputTauRefs ) ;
823 
824  L1JetParticleVectorRef inputJetRefs ;
825  addToVectorRefs( forJetHandle, inputJetRefs ) ;
826  addToVectorRefs( cenJetHandle, inputJetRefs ) ;
827  addToVectorRefs( tauJetHandle, inputJetRefs ) ;
828 
829  L1JetParticleVectorRef inputForJetRefs ;
830  addToVectorRefs( forJetHandle, inputForJetRefs ) ;
831 
832  L1JetParticleVectorRef inputCenJetTauJetRefs ;
833  addToVectorRefs( cenJetHandle, inputCenJetTauJetRefs ) ;
834  addToVectorRefs( tauJetHandle, inputCenJetTauJetRefs ) ;
835 
836  L1MuonParticleVectorRef inputMuonRefsSingle ;
837  L1MuonParticleVectorRef inputMuonRefsDouble ;
838  L1MuonParticleCollection::const_iterator muItr = muHandle->begin() ;
839  L1MuonParticleCollection::const_iterator muEnd = muHandle->end() ;
840 
841  for( size_t i = 0 ; muItr != muEnd ; ++muItr, ++i )
842  {
843  if( !muItr->gmtMuonCand().empty() )
844  {
845  unsigned int qual = muItr->gmtMuonCand().quality() ;
846 
847  if( qual == 4 ||
848  qual == 5 ||
849  qual == 6 ||
850  qual == 7 )
851  {
852  inputMuonRefsSingle.push_back(
853  edm::Ref< L1MuonParticleCollection >( muHandle, i ) ) ;
854  }
855 
856  if( qual == 3 ||
857  qual == 5 ||
858  qual == 6 ||
859  qual == 7 )
860  {
861  inputMuonRefsDouble.push_back(
862  edm::Ref< L1MuonParticleCollection >( muHandle, i ) ) ;
863  }
864  }
865  }
866 
867  unique_ptr< L1ParticleMapCollection > mapColl( new L1ParticleMapCollection ) ;
868  bool globalDecision = false ;
869  std::vector< bool > decisionWord ;
870 
871  for( int itrig = 0 ; itrig < L1ParticleMap::kNumOfL1TriggerTypes; ++itrig )
872  {
873  bool decision = false ;
874  std::vector< L1ParticleMap::L1ObjectType > objectTypes ;
875  L1EmParticleVectorRef outputEmRefsTmp ;
876  L1JetParticleVectorRef outputJetRefsTmp ;
877  L1MuonParticleVectorRef outputMuonRefsTmp ;
878  L1EtMissParticleRefProd metRefTmp ;
879  L1ParticleMap::L1IndexComboVector combosTmp ; // unfilled for single objs
880 
881  if( itrig == L1ParticleMap::kSingleMu3 ||
882  itrig == L1ParticleMap::kSingleMu5 ||
883  itrig == L1ParticleMap::kSingleMu7 ||
884  itrig == L1ParticleMap::kSingleMu10 ||
885  itrig == L1ParticleMap::kSingleMu14 ||
886  itrig == L1ParticleMap::kSingleMu20 ||
887  itrig == L1ParticleMap::kSingleMu25 )
888  {
889  objectTypes.push_back( L1ParticleMap::kMuon ) ;
890 
891  evaluateSingleObjectTrigger( inputMuonRefsSingle,
892  singleThresholds_[ itrig ],
893  decision,
894  outputMuonRefsTmp ) ;
895  }
896  else if( itrig == L1ParticleMap::kSingleIsoEG5 ||
897  itrig == L1ParticleMap::kSingleIsoEG8 ||
898  itrig == L1ParticleMap::kSingleIsoEG10 ||
899  itrig == L1ParticleMap::kSingleIsoEG12 ||
900  itrig == L1ParticleMap::kSingleIsoEG15 ||
901  itrig == L1ParticleMap::kSingleIsoEG20 ||
902  itrig == L1ParticleMap::kSingleIsoEG25 )
903  {
904  objectTypes.push_back( L1ParticleMap::kEM ) ;
905 
906  evaluateSingleObjectTrigger( inputIsoEmRefs,
907  singleThresholds_[ itrig ],
908  decision,
909  outputEmRefsTmp ) ;
910  }
911  else if( itrig == L1ParticleMap::kSingleEG5 ||
912  itrig == L1ParticleMap::kSingleEG8 ||
913  itrig == L1ParticleMap::kSingleEG10 ||
914  itrig == L1ParticleMap::kSingleEG12 ||
915  itrig == L1ParticleMap::kSingleEG15 ||
916  itrig == L1ParticleMap::kSingleEG20 ||
917  itrig == L1ParticleMap::kSingleEG25 )
918  {
919  objectTypes.push_back( L1ParticleMap::kEM ) ;
920 
921  evaluateSingleObjectTrigger( inputRelaxedEmRefs,
922  singleThresholds_[ itrig ],
923  decision,
924  outputEmRefsTmp ) ;
925  }
926  else if( itrig == L1ParticleMap::kSingleJet15 ||
927  itrig == L1ParticleMap::kSingleJet20 ||
928  itrig == L1ParticleMap::kSingleJet30 ||
929  itrig == L1ParticleMap::kSingleJet50 ||
930  itrig == L1ParticleMap::kSingleJet70 ||
931  itrig == L1ParticleMap::kSingleJet100 ||
932  itrig == L1ParticleMap::kSingleJet150 ||
933  itrig == L1ParticleMap::kSingleJet200 )
934  {
935  objectTypes.push_back( L1ParticleMap::kJet ) ;
936 
937  evaluateSingleObjectTrigger( inputJetRefs,
938  singleThresholds_[ itrig ],
939  decision,
940  outputJetRefsTmp ) ;
941  }
942  else if( itrig == L1ParticleMap::kSingleTauJet10 ||
943  itrig == L1ParticleMap::kSingleTauJet20 ||
944  itrig == L1ParticleMap::kSingleTauJet30 ||
945  itrig == L1ParticleMap::kSingleTauJet35 ||
946  itrig == L1ParticleMap::kSingleTauJet40 ||
947  itrig == L1ParticleMap::kSingleTauJet60 ||
948  itrig == L1ParticleMap::kSingleTauJet80 ||
949  itrig == L1ParticleMap::kSingleTauJet100 )
950  {
951  objectTypes.push_back( L1ParticleMap::kJet ) ;
952 
953  evaluateSingleObjectTrigger( inputTauRefs,
954  singleThresholds_[ itrig ],
955  decision,
956  outputJetRefsTmp ) ;
957  }
958  else if( itrig == L1ParticleMap::kHTT100 ||
959  itrig == L1ParticleMap::kHTT200 ||
960  itrig == L1ParticleMap::kHTT250 ||
961  itrig == L1ParticleMap::kHTT300 ||
962  itrig == L1ParticleMap::kHTT400 ||
963  itrig == L1ParticleMap::kHTT500 )
964  {
965  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
966 
967  if( ht >= singleThresholds_[ itrig ] )
968  {
969  decision = true ;
970  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
971  }
972  }
973  else if( itrig == L1ParticleMap::kETM10 ||
974  itrig == L1ParticleMap::kETM15 ||
975  itrig == L1ParticleMap::kETM20 ||
976  itrig == L1ParticleMap::kETM30 ||
977  itrig == L1ParticleMap::kETM40 ||
978  itrig == L1ParticleMap::kETM50 ||
979  itrig == L1ParticleMap::kETM60 )
980  {
981  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
982 
983  if( met >= singleThresholds_[ itrig ] )
984  {
985  decision = true ;
986  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
987  }
988  }
989  else if( itrig == L1ParticleMap::kETT60 )
990  {
991  objectTypes.push_back( L1ParticleMap::kEtTotal ) ;
992 
993  if( ett >= singleThresholds_[ itrig ] )
994  {
995  decision = true ;
996  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
997  }
998  }
999  else if( itrig == L1ParticleMap::kDoubleMu3 )
1000  {
1001  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1002  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1003 
1004  evaluateDoubleSameObjectTrigger( inputMuonRefsDouble,
1005  singleThresholds_[ itrig ],
1006  decision,
1007  outputMuonRefsTmp,
1008  combosTmp ) ;
1009  }
1010  else if( itrig == L1ParticleMap::kDoubleIsoEG8 ||
1011  itrig == L1ParticleMap::kDoubleIsoEG10 )
1012  {
1013  objectTypes.push_back( L1ParticleMap::kEM ) ;
1014  objectTypes.push_back( L1ParticleMap::kEM ) ;
1015 
1016  evaluateDoubleSameObjectTrigger( inputIsoEmRefs,
1017  singleThresholds_[ itrig ],
1018  decision,
1019  outputEmRefsTmp,
1020  combosTmp ) ;
1021  }
1022  else if( itrig == L1ParticleMap::kDoubleEG5 ||
1023  itrig == L1ParticleMap::kDoubleEG10 ||
1024  itrig == L1ParticleMap::kDoubleEG15 )
1025  {
1026  objectTypes.push_back( L1ParticleMap::kEM ) ;
1027  objectTypes.push_back( L1ParticleMap::kEM ) ;
1028 
1029  evaluateDoubleSameObjectTrigger( inputRelaxedEmRefs,
1030  singleThresholds_[ itrig ],
1031  decision,
1032  outputEmRefsTmp,
1033  combosTmp ) ;
1034  }
1035  else if( itrig == L1ParticleMap::kDoubleJet70 ||
1036  itrig == L1ParticleMap::kDoubleJet100 )
1037  {
1038  objectTypes.push_back( L1ParticleMap::kJet ) ;
1039  objectTypes.push_back( L1ParticleMap::kJet ) ;
1040 
1041  evaluateDoubleSameObjectTrigger( inputJetRefs,
1042  singleThresholds_[ itrig ],
1043  decision,
1044  outputJetRefsTmp,
1045  combosTmp ) ;
1046  }
1047  else if( itrig == L1ParticleMap::kDoubleTauJet20 ||
1048  itrig == L1ParticleMap::kDoubleTauJet30 ||
1049  itrig == L1ParticleMap::kDoubleTauJet35 ||
1050  itrig == L1ParticleMap::kDoubleTauJet40 )
1051  {
1052  objectTypes.push_back( L1ParticleMap::kJet ) ;
1053  objectTypes.push_back( L1ParticleMap::kJet ) ;
1054 
1055  evaluateDoubleSameObjectTrigger( inputTauRefs,
1056  singleThresholds_[ itrig ],
1057  decision,
1058  outputJetRefsTmp,
1059  combosTmp ) ;
1060  }
1061  else if( itrig == L1ParticleMap::kMu3_IsoEG5 ||
1062  itrig == L1ParticleMap::kMu5_IsoEG10 )
1063  {
1064  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1065  objectTypes.push_back( L1ParticleMap::kEM ) ;
1066 
1068  inputMuonRefsSingle,
1069  inputIsoEmRefs,
1070  doubleThresholds_[ itrig ].first,
1071  doubleThresholds_[ itrig ].second,
1072  decision,
1073  outputMuonRefsTmp,
1074  outputEmRefsTmp,
1075  combosTmp ) ;
1076  }
1077  else if( itrig == L1ParticleMap::kMu3_EG12 )
1078  {
1079  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1080  objectTypes.push_back( L1ParticleMap::kEM ) ;
1081 
1083  inputMuonRefsSingle,
1084  inputRelaxedEmRefs,
1085  doubleThresholds_[ itrig ].first,
1086  doubleThresholds_[ itrig ].second,
1087  decision,
1088  outputMuonRefsTmp,
1089  outputEmRefsTmp,
1090  combosTmp ) ;
1091  }
1092  else if( itrig == L1ParticleMap::kMu3_Jet15 ||
1093  itrig == L1ParticleMap::kMu5_Jet15 ||
1094  itrig == L1ParticleMap::kMu3_Jet70 ||
1095  itrig == L1ParticleMap::kMu5_Jet20 )
1096  {
1097  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1098  objectTypes.push_back( L1ParticleMap::kJet ) ;
1099 
1101  inputMuonRefsSingle,
1102  inputJetRefs,
1103  doubleThresholds_[ itrig ].first,
1104  doubleThresholds_[ itrig ].second,
1105  decision,
1106  outputMuonRefsTmp,
1107  outputJetRefsTmp,
1108  combosTmp ) ;
1109  }
1110  else if( itrig == L1ParticleMap::kMu5_TauJet20 ||
1111  itrig == L1ParticleMap::kMu5_TauJet30 )
1112  {
1113  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1114  objectTypes.push_back( L1ParticleMap::kJet ) ;
1115 
1117  inputMuonRefsSingle,
1118  inputTauRefs,
1119  doubleThresholds_[ itrig ].first,
1120  doubleThresholds_[ itrig ].second,
1121  decision,
1122  outputMuonRefsTmp,
1123  outputJetRefsTmp,
1124  combosTmp ) ;
1125  }
1126  else if( itrig == L1ParticleMap::kIsoEG10_EG10 )
1127  {
1128  objectTypes.push_back( L1ParticleMap::kEM ) ;
1129  objectTypes.push_back( L1ParticleMap::kEM ) ;
1130 
1132  inputIsoEmRefs,
1133  inputRelaxedEmRefs,
1134  doubleThresholds_[ itrig ].first,
1135  doubleThresholds_[ itrig ].second,
1136  decision,
1137  outputEmRefsTmp,
1138  combosTmp ) ;
1139  }
1140  else if( itrig == L1ParticleMap::kIsoEG10_Jet15 ||
1141  itrig == L1ParticleMap::kIsoEG10_Jet30 ||
1142  itrig == L1ParticleMap::kIsoEG10_Jet20 ||
1143  itrig == L1ParticleMap::kIsoEG10_Jet70 )
1144  {
1145  objectTypes.push_back( L1ParticleMap::kEM ) ;
1146  objectTypes.push_back( L1ParticleMap::kJet ) ;
1147 
1149  inputIsoEmRefs,
1150  inputJetRefs,
1151  doubleThresholds_[ itrig ].first,
1152  doubleThresholds_[ itrig ].second,
1153  decision,
1154  outputEmRefsTmp,
1155  outputJetRefsTmp,
1156  combosTmp ) ;
1157  }
1158  else if( itrig == L1ParticleMap::kIsoEG10_TauJet20 ||
1159  itrig == L1ParticleMap::kIsoEG10_TauJet30 )
1160  {
1161  objectTypes.push_back( L1ParticleMap::kEM ) ;
1162  objectTypes.push_back( L1ParticleMap::kJet ) ;
1163 
1165  inputIsoEmRefs,
1166  inputTauRefs,
1167  doubleThresholds_[ itrig ].first,
1168  doubleThresholds_[ itrig ].second,
1169  decision,
1170  outputEmRefsTmp,
1171  outputJetRefsTmp,
1172  combosTmp ) ;
1173  }
1174  else if( itrig == L1ParticleMap::kEG10_Jet15 ||
1175  itrig == L1ParticleMap::kEG12_Jet20 ||
1176  itrig == L1ParticleMap::kEG12_Jet70 )
1177  {
1178  objectTypes.push_back( L1ParticleMap::kEM ) ;
1179  objectTypes.push_back( L1ParticleMap::kJet ) ;
1180 
1182  inputRelaxedEmRefs,
1183  inputJetRefs,
1184  doubleThresholds_[ itrig ].first,
1185  doubleThresholds_[ itrig ].second,
1186  decision,
1187  outputEmRefsTmp,
1188  outputJetRefsTmp,
1189  combosTmp ) ;
1190  }
1191  else if( itrig == L1ParticleMap::kEG12_TauJet40 )
1192  {
1193  objectTypes.push_back( L1ParticleMap::kEM ) ;
1194  objectTypes.push_back( L1ParticleMap::kJet ) ;
1195 
1197  inputRelaxedEmRefs,
1198  inputTauRefs,
1199  doubleThresholds_[ itrig ].first,
1200  doubleThresholds_[ itrig ].second,
1201  decision,
1202  outputEmRefsTmp,
1203  outputJetRefsTmp,
1204  combosTmp ) ;
1205  }
1206  else if( itrig == L1ParticleMap::kJet70_TauJet40 )
1207  {
1208  objectTypes.push_back( L1ParticleMap::kJet ) ;
1209  objectTypes.push_back( L1ParticleMap::kJet ) ;
1210 
1212  inputJetRefs,
1213  inputTauRefs,
1214  doubleThresholds_[ itrig ].first,
1215  doubleThresholds_[ itrig ].second,
1216  decision,
1217  outputJetRefsTmp,
1218  combosTmp ) ;
1219  }
1220  else if( itrig == L1ParticleMap::kMu3_HTT200 )
1221  {
1222  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1223  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1224 
1225  if( ht >= doubleThresholds_[ itrig ].second )
1226  {
1227  evaluateSingleObjectTrigger( inputMuonRefsSingle,
1228  doubleThresholds_[ itrig ].first,
1229  decision,
1230  outputMuonRefsTmp ) ;
1231 
1232  if( decision )
1233  {
1234  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1235  }
1236  }
1237  }
1238  else if( itrig == L1ParticleMap::kIsoEG10_HTT200 )
1239  {
1240  objectTypes.push_back( L1ParticleMap::kEM ) ;
1241  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1242 
1243  if( ht >= doubleThresholds_[ itrig ].second )
1244  {
1245  evaluateSingleObjectTrigger( inputIsoEmRefs,
1246  doubleThresholds_[ itrig ].first,
1247  decision,
1248  outputEmRefsTmp ) ;
1249 
1250  if( decision )
1251  {
1252  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1253  }
1254  }
1255  }
1256  else if( itrig == L1ParticleMap::kEG12_HTT200 )
1257  {
1258  objectTypes.push_back( L1ParticleMap::kEM ) ;
1259  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1260 
1261  if( ht >= doubleThresholds_[ itrig ].second )
1262  {
1263  evaluateSingleObjectTrigger( inputRelaxedEmRefs,
1264  doubleThresholds_[ itrig ].first,
1265  decision,
1266  outputEmRefsTmp ) ;
1267 
1268  if( decision )
1269  {
1270  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1271  }
1272  }
1273  }
1274  else if( itrig == L1ParticleMap::kJet70_HTT200 )
1275  {
1276  objectTypes.push_back( L1ParticleMap::kJet ) ;
1277  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1278 
1279  if( ht >= doubleThresholds_[ itrig ].second )
1280  {
1281  evaluateSingleObjectTrigger( inputJetRefs,
1282  doubleThresholds_[ itrig ].first,
1283  decision,
1284  outputJetRefsTmp ) ;
1285 
1286  if( decision )
1287  {
1288  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1289  }
1290  }
1291  }
1292  else if( itrig == L1ParticleMap::kTauJet40_HTT200 )
1293  {
1294  objectTypes.push_back( L1ParticleMap::kJet ) ;
1295  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1296 
1297  if( ht >= doubleThresholds_[ itrig ].second )
1298  {
1299  evaluateSingleObjectTrigger( inputTauRefs,
1300  doubleThresholds_[ itrig ].first,
1301  decision,
1302  outputJetRefsTmp ) ;
1303 
1304  if( decision )
1305  {
1306  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1307  }
1308  }
1309  }
1310  else if( itrig == L1ParticleMap::kMu3_ETM30 )
1311  {
1312  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1313  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1314 
1315  if( met >= doubleThresholds_[ itrig ].second )
1316  {
1317  evaluateSingleObjectTrigger( inputMuonRefsSingle,
1318  doubleThresholds_[ itrig ].first,
1319  decision,
1320  outputMuonRefsTmp ) ;
1321 
1322  if( decision )
1323  {
1324  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1325  }
1326  }
1327  }
1328  else if( itrig == L1ParticleMap::kIsoEG10_ETM30 )
1329  {
1330  objectTypes.push_back( L1ParticleMap::kEM ) ;
1331  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1332 
1333  if( met >= doubleThresholds_[ itrig ].second )
1334  {
1335  evaluateSingleObjectTrigger( inputIsoEmRefs,
1336  doubleThresholds_[ itrig ].first,
1337  decision,
1338  outputEmRefsTmp ) ;
1339 
1340  if( decision )
1341  {
1342  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1343  }
1344  }
1345  }
1346  else if( itrig == L1ParticleMap::kEG12_ETM30 )
1347  {
1348  objectTypes.push_back( L1ParticleMap::kEM ) ;
1349  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1350 
1351  if( met >= doubleThresholds_[ itrig ].second )
1352  {
1353  evaluateSingleObjectTrigger( inputRelaxedEmRefs,
1354  doubleThresholds_[ itrig ].first,
1355  decision,
1356  outputEmRefsTmp ) ;
1357 
1358  if( decision )
1359  {
1360  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1361  }
1362  }
1363  }
1364  else if( itrig == L1ParticleMap::kJet70_ETM40 )
1365  {
1366  objectTypes.push_back( L1ParticleMap::kJet ) ;
1367  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1368 
1369  if( met >= doubleThresholds_[ itrig ].second )
1370  {
1371  evaluateSingleObjectTrigger( inputJetRefs,
1372  doubleThresholds_[ itrig ].first,
1373  decision,
1374  outputJetRefsTmp ) ;
1375 
1376  if( decision )
1377  {
1378  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1379  }
1380  }
1381  }
1382  else if( itrig == L1ParticleMap::kTauJet20_ETM20 ||
1383  itrig == L1ParticleMap::kTauJet30_ETM30 ||
1384  itrig == L1ParticleMap::kTauJet30_ETM40 )
1385  {
1386  objectTypes.push_back( L1ParticleMap::kJet ) ;
1387  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1388 
1389  if( met >= doubleThresholds_[ itrig ].second )
1390  {
1391  evaluateSingleObjectTrigger( inputTauRefs,
1392  doubleThresholds_[ itrig ].first,
1393  decision,
1394  outputJetRefsTmp ) ;
1395 
1396  if( decision )
1397  {
1398  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1399  }
1400  }
1401  }
1402  else if( itrig == L1ParticleMap::kHTT100_ETM30 )
1403  {
1404  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1405  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1406 
1407  if( ht >= doubleThresholds_[ itrig ].first &&
1408  met >= doubleThresholds_[ itrig ].second )
1409  {
1410  decision = true ;
1411  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1412  }
1413  }
1414  else if( itrig == L1ParticleMap::kTripleMu3 )
1415  {
1416  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1417  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1418  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1419 
1420  evaluateTripleSameObjectTrigger( inputMuonRefsDouble,
1421  singleThresholds_[ itrig ],
1422  decision,
1423  outputMuonRefsTmp,
1424  combosTmp ) ;
1425  }
1426  else if( itrig == L1ParticleMap::kTripleIsoEG5 )
1427  {
1428  objectTypes.push_back( L1ParticleMap::kEM ) ;
1429  objectTypes.push_back( L1ParticleMap::kEM ) ;
1430  objectTypes.push_back( L1ParticleMap::kEM ) ;
1431 
1432  evaluateTripleSameObjectTrigger( inputIsoEmRefs,
1433  singleThresholds_[ itrig ],
1434  decision,
1435  outputEmRefsTmp,
1436  combosTmp ) ;
1437  }
1438  else if( itrig == L1ParticleMap::kTripleEG10 )
1439  {
1440  objectTypes.push_back( L1ParticleMap::kEM ) ;
1441  objectTypes.push_back( L1ParticleMap::kEM ) ;
1442  objectTypes.push_back( L1ParticleMap::kEM ) ;
1443 
1444  evaluateTripleSameObjectTrigger( inputRelaxedEmRefs,
1445  singleThresholds_[ itrig ],
1446  decision,
1447  outputEmRefsTmp,
1448  combosTmp ) ;
1449  }
1450  else if( itrig == L1ParticleMap::kTripleJet50 )
1451  {
1452  objectTypes.push_back( L1ParticleMap::kJet ) ;
1453  objectTypes.push_back( L1ParticleMap::kJet ) ;
1454  objectTypes.push_back( L1ParticleMap::kJet ) ;
1455 
1456  evaluateTripleSameObjectTrigger( inputJetRefs,
1457  singleThresholds_[ itrig ],
1458  decision,
1459  outputJetRefsTmp,
1460  combosTmp ) ;
1461  }
1462  else if( itrig == L1ParticleMap::kTripleTauJet40 )
1463  {
1464  objectTypes.push_back( L1ParticleMap::kJet ) ;
1465  objectTypes.push_back( L1ParticleMap::kJet ) ;
1466  objectTypes.push_back( L1ParticleMap::kJet ) ;
1467 
1468  evaluateTripleSameObjectTrigger( inputTauRefs,
1469  singleThresholds_[ itrig ],
1470  decision,
1471  outputJetRefsTmp,
1472  combosTmp ) ;
1473  }
1474  else if( itrig == L1ParticleMap::kDoubleMu3_IsoEG5 )
1475  {
1476  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1477  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1478  objectTypes.push_back( L1ParticleMap::kEM ) ;
1479 
1481  inputMuonRefsDouble,
1482  inputIsoEmRefs,
1483  doubleThresholds_[ itrig ].first,
1484  doubleThresholds_[ itrig ].second,
1485  decision,
1486  outputMuonRefsTmp,
1487  outputEmRefsTmp,
1488  combosTmp ) ;
1489  }
1490  else if( itrig == L1ParticleMap::kDoubleMu3_EG10 )
1491  {
1492  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1493  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1494  objectTypes.push_back( L1ParticleMap::kEM ) ;
1495 
1497  inputMuonRefsDouble,
1498  inputRelaxedEmRefs,
1499  doubleThresholds_[ itrig ].first,
1500  doubleThresholds_[ itrig ].second,
1501  decision,
1502  outputMuonRefsTmp,
1503  outputEmRefsTmp,
1504  combosTmp ) ;
1505  }
1506  else if( itrig == L1ParticleMap::kDoubleIsoEG5_Mu3 )
1507  {
1508  objectTypes.push_back( L1ParticleMap::kEM ) ;
1509  objectTypes.push_back( L1ParticleMap::kEM ) ;
1510  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1511 
1513  inputIsoEmRefs,
1514  inputMuonRefsSingle,
1515  doubleThresholds_[ itrig ].first,
1516  doubleThresholds_[ itrig ].second,
1517  decision,
1518  outputEmRefsTmp,
1519  outputMuonRefsTmp,
1520  combosTmp ) ;
1521  }
1522  else if( itrig == L1ParticleMap::kDoubleEG10_Mu3 )
1523  {
1524  objectTypes.push_back( L1ParticleMap::kEM ) ;
1525  objectTypes.push_back( L1ParticleMap::kEM ) ;
1526  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1527 
1529  inputRelaxedEmRefs,
1530  inputMuonRefsSingle,
1531  doubleThresholds_[ itrig ].first,
1532  doubleThresholds_[ itrig ].second,
1533  decision,
1534  outputEmRefsTmp,
1535  outputMuonRefsTmp,
1536  combosTmp ) ;
1537  }
1538  else if( itrig == L1ParticleMap::kDoubleMu3_HTT200 )
1539  {
1540  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1541  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1542  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1543 
1544  if( ht >= doubleThresholds_[ itrig ].second )
1545  {
1546  evaluateDoubleSameObjectTrigger( inputMuonRefsDouble,
1547  doubleThresholds_[ itrig ].first,
1548  decision,
1549  outputMuonRefsTmp,
1550  combosTmp,
1551  true ) ;
1552 
1553  if( decision )
1554  {
1555  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1556  }
1557  }
1558  }
1559  else if( itrig == L1ParticleMap::kDoubleIsoEG5_HTT200 )
1560  {
1561  objectTypes.push_back( L1ParticleMap::kEM ) ;
1562  objectTypes.push_back( L1ParticleMap::kEM ) ;
1563  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1564 
1565  if( ht >= doubleThresholds_[ itrig ].second )
1566  {
1567  evaluateDoubleSameObjectTrigger( inputIsoEmRefs,
1568  doubleThresholds_[ itrig ].first,
1569  decision,
1570  outputEmRefsTmp,
1571  combosTmp,
1572  true ) ;
1573 
1574  if( decision )
1575  {
1576  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1577  }
1578  }
1579  }
1580  else if( itrig == L1ParticleMap::kDoubleEG10_HTT200 )
1581  {
1582  objectTypes.push_back( L1ParticleMap::kEM ) ;
1583  objectTypes.push_back( L1ParticleMap::kEM ) ;
1584  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1585 
1586  if( ht >= doubleThresholds_[ itrig ].second )
1587  {
1588  evaluateDoubleSameObjectTrigger( inputRelaxedEmRefs,
1589  doubleThresholds_[ itrig ].first,
1590  decision,
1591  outputEmRefsTmp,
1592  combosTmp,
1593  true ) ;
1594 
1595  if( decision )
1596  {
1597  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1598  }
1599  }
1600  }
1601  else if( itrig == L1ParticleMap::kDoubleJet50_HTT200 )
1602  {
1603  objectTypes.push_back( L1ParticleMap::kJet ) ;
1604  objectTypes.push_back( L1ParticleMap::kJet ) ;
1605  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1606 
1607  if( ht >= doubleThresholds_[ itrig ].second )
1608  {
1609  evaluateDoubleSameObjectTrigger( inputJetRefs,
1610  doubleThresholds_[ itrig ].first,
1611  decision,
1612  outputJetRefsTmp,
1613  combosTmp,
1614  true ) ;
1615 
1616  if( decision )
1617  {
1618  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1619  }
1620  }
1621  }
1622  else if( itrig == L1ParticleMap::kDoubleTauJet40_HTT200 )
1623  {
1624  objectTypes.push_back( L1ParticleMap::kJet ) ;
1625  objectTypes.push_back( L1ParticleMap::kJet ) ;
1626  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1627 
1628  if( ht >= doubleThresholds_[ itrig ].second )
1629  {
1630  evaluateDoubleSameObjectTrigger( inputTauRefs,
1631  doubleThresholds_[ itrig ].first,
1632  decision,
1633  outputJetRefsTmp,
1634  combosTmp,
1635  true ) ;
1636 
1637  if( decision )
1638  {
1639  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1640  }
1641  }
1642  }
1643  else if( itrig == L1ParticleMap::kDoubleMu3_ETM20 )
1644  {
1645  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1646  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1647  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1648 
1649  if( met >= doubleThresholds_[ itrig ].second )
1650  {
1651  evaluateDoubleSameObjectTrigger( inputMuonRefsDouble,
1652  doubleThresholds_[ itrig ].first,
1653  decision,
1654  outputMuonRefsTmp,
1655  combosTmp,
1656  true ) ;
1657 
1658  if( decision )
1659  {
1660  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1661  }
1662  }
1663  }
1664  else if( itrig == L1ParticleMap::kDoubleIsoEG5_ETM20 )
1665  {
1666  objectTypes.push_back( L1ParticleMap::kEM ) ;
1667  objectTypes.push_back( L1ParticleMap::kEM ) ;
1668  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1669 
1670  if( met >= doubleThresholds_[ itrig ].second )
1671  {
1672  evaluateDoubleSameObjectTrigger( inputIsoEmRefs,
1673  doubleThresholds_[ itrig ].first,
1674  decision,
1675  outputEmRefsTmp,
1676  combosTmp,
1677  true ) ;
1678 
1679  if( decision )
1680  {
1681  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1682  }
1683  }
1684  }
1685  else if( itrig == L1ParticleMap::kDoubleEG10_ETM20 )
1686  {
1687  objectTypes.push_back( L1ParticleMap::kEM ) ;
1688  objectTypes.push_back( L1ParticleMap::kEM ) ;
1689  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1690 
1691  if( met >= doubleThresholds_[ itrig ].second )
1692  {
1693  evaluateDoubleSameObjectTrigger( inputRelaxedEmRefs,
1694  doubleThresholds_[ itrig ].first,
1695  decision,
1696  outputEmRefsTmp,
1697  combosTmp,
1698  true ) ;
1699 
1700  if( decision )
1701  {
1702  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1703  }
1704  }
1705  }
1706  else if( itrig == L1ParticleMap::kDoubleJet50_ETM20 )
1707  {
1708  objectTypes.push_back( L1ParticleMap::kJet ) ;
1709  objectTypes.push_back( L1ParticleMap::kJet ) ;
1710  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1711 
1712  if( met >= doubleThresholds_[ itrig ].second )
1713  {
1714  evaluateDoubleSameObjectTrigger( inputJetRefs,
1715  doubleThresholds_[ itrig ].first,
1716  decision,
1717  outputJetRefsTmp,
1718  combosTmp,
1719  true ) ;
1720 
1721  if( decision )
1722  {
1723  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1724  }
1725  }
1726  }
1727  else if( itrig == L1ParticleMap::kDoubleTauJet40_ETM20 )
1728  {
1729  objectTypes.push_back( L1ParticleMap::kJet ) ;
1730  objectTypes.push_back( L1ParticleMap::kJet ) ;
1731  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1732 
1733  if( met >= doubleThresholds_[ itrig ].second )
1734  {
1735  evaluateDoubleSameObjectTrigger( inputTauRefs,
1736  doubleThresholds_[ itrig ].first,
1737  decision,
1738  outputJetRefsTmp,
1739  combosTmp,
1740  true ) ;
1741 
1742  if( decision )
1743  {
1744  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1745  }
1746  }
1747  }
1748  else if( itrig == L1ParticleMap::kQuadJet30 )
1749  {
1750  objectTypes.push_back( L1ParticleMap::kJet ) ;
1751  objectTypes.push_back( L1ParticleMap::kJet ) ;
1752  objectTypes.push_back( L1ParticleMap::kJet ) ;
1753  objectTypes.push_back( L1ParticleMap::kJet ) ;
1754 
1755  evaluateQuadSameObjectTrigger( inputJetRefs,
1756  singleThresholds_[ itrig ],
1757  decision,
1758  outputJetRefsTmp,
1759  combosTmp ) ;
1760  }
1761  else if( itrig == L1ParticleMap::kExclusiveDoubleIsoEG4 )
1762  {
1763  objectTypes.push_back( L1ParticleMap::kEM ) ;
1764  objectTypes.push_back( L1ParticleMap::kEM ) ;
1765 
1766  evaluateDoubleExclusiveIsoEG(inputIsoEmRefs,
1767  inputJetRefs,
1768  doubleThresholds_[ itrig ].first,
1769  doubleThresholds_[ itrig ].second,
1770  decision,
1771  outputEmRefsTmp,
1772  combosTmp);
1773 
1774  }
1775  else if( itrig == L1ParticleMap::kExclusiveDoubleJet60 )
1776  {
1777  objectTypes.push_back( L1ParticleMap::kJet ) ;
1778  objectTypes.push_back( L1ParticleMap::kJet ) ;
1779 
1780  if( inputJetRefs.size() == 2 )
1781  {
1782  evaluateDoubleSameObjectTrigger( inputJetRefs,
1783  singleThresholds_[ itrig ],
1784  decision,
1785  outputJetRefsTmp,
1786  combosTmp ) ;
1787  }
1788  }
1789  else if( itrig == L1ParticleMap::kExclusiveJet25_Gap_Jet25 )
1790  {
1791  objectTypes.push_back( L1ParticleMap::kJet ) ;
1792  objectTypes.push_back( L1ParticleMap::kJet ) ;
1793 
1794  if( inputJetRefs.size() == 2 )
1795  {
1796  evaluateJetGapJetTrigger( inputForJetRefs,
1797  singleThresholds_[ itrig ],
1798  decision,
1799  outputJetRefsTmp,
1800  combosTmp ) ;
1801  }
1802  }
1803  else if( itrig == L1ParticleMap::kIsoEG10_Jet20_ForJet10 )
1804  {
1805  objectTypes.push_back( L1ParticleMap::kEM ) ;
1806  objectTypes.push_back( L1ParticleMap::kJet ) ;
1807 
1808  evaluateForwardRapidityGap(inputForJetRefs,
1809  singleThresholds_[ itrig ],
1810  decision);
1811 
1812  if(decision){
1813  decision = false;
1815  inputIsoEmRefs,
1816  inputCenJetTauJetRefs,
1817  doubleThresholds_[ itrig ].first,
1818  doubleThresholds_[ itrig ].second,
1819  decision,
1820  outputEmRefsTmp,
1821  outputJetRefsTmp,
1822  combosTmp );
1823  }
1824  }
1825  else if( itrig == L1ParticleMap::kMinBias_HTT10 )
1826  {
1827  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1828 
1829  if( ht >= 10. )
1830  {
1831  decision = true ;
1832  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1833  }
1834  }
1835  else if( itrig == L1ParticleMap::kZeroBias )
1836  {
1837  decision = true ;
1838  }
1839 
1840  L1EmParticleVectorRef outputEmRefs ;
1841  L1JetParticleVectorRef outputJetRefs ;
1842  L1MuonParticleVectorRef outputMuonRefs ;
1843  L1EtMissParticleRefProd metRef ;
1844  L1ParticleMap::L1IndexComboVector combos ; // unfilled for single objs
1845 
1846  if( decision )
1847  {
1848 // if( prescaleCounters_[ itrig ] % prescales_[ itrig ] )
1849 
1850  double rand = CLHEP::RandFlat::shoot() * ( double ) prescales_[ itrig ] ;
1851  if( rand > 1. )
1852  {
1853  decision = false ;
1854  }
1855  else
1856  {
1857  outputEmRefs = outputEmRefsTmp ;
1858  outputJetRefs = outputJetRefsTmp ;
1859  outputMuonRefs = outputMuonRefsTmp ;
1860  metRef = metRefTmp ;
1861  combos = combosTmp ;
1862  }
1863 
1864  ++prescaleCounters_[ itrig ] ;
1865  }
1866 
1867  // Construct a L1ParticleMap and add it to the collection.
1868  mapColl->push_back( L1ParticleMap(
1869  ( L1ParticleMap::L1TriggerType ) itrig,
1870  decision,
1871  objectTypes,
1872  outputEmRefs,
1873  outputJetRefs,
1874  outputMuonRefs,
1875  metRef,
1876  combos ) ) ;
1877 
1878  globalDecision = globalDecision || decision ;
1879  decisionWord.push_back( decision ) ;
1880  }
1881 
1882  // Put the L1ParticleMapCollection into the event.
1883  iEvent.put(std::move(mapColl)) ;
1884 
1885  // Make a L1GlobalTriggerReadoutRecord and put it into the event.
1886  unique_ptr< L1GlobalTriggerReadoutRecord > gtRecord(
1888  gtRecord->setDecision( globalDecision ) ;
1889  gtRecord->setDecisionWord( decisionWord ) ;
1890  iEvent.put(std::move(gtRecord)) ;
1891 
1892  return ;
1893 }
std::vector< L1EmParticleRef > L1EmParticleVectorRef
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:122
std::vector< L1JetParticleRef > L1JetParticleVectorRef
void evaluateQuadSameObjectTrigger(const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)
void evaluateDoublePlusSingleObjectTrigger(const std::vector< edm::Ref< TCollection1 > > &inputRefs1, const std::vector< edm::Ref< TCollection2 > > &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, std::vector< edm::Ref< TCollection1 > > &outputRefs1, std::vector< edm::Ref< TCollection2 > > &outputRefs2, l1extra::L1ParticleMap::L1IndexComboVector &combos)
void evaluateForwardRapidityGap(const l1extra::L1JetParticleVectorRef &inputRefs, const double &etThreshold, bool &decision)
void evaluateDoubleDifferentObjectSameTypeTrigger(const std::vector< edm::Ref< TCollection > > &inputRefs1, const std::vector< edm::Ref< TCollection > > &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)
U second(std::pair< T, U > const &p)
void evaluateDoubleSameObjectTrigger(const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos, bool combinedWithGlobalObject=false)
int prescaleCounters_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
double singleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:413
std::pair< double, double > doubleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
void evaluateDoubleExclusiveIsoEG(const l1extra::L1EmParticleVectorRef &inputRefs1, const l1extra::L1JetParticleVectorRef &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, l1extra::L1EmParticleVectorRef &outputRefs1, l1extra::L1ParticleMap::L1IndexComboVector &combos)
void evaluateDoubleDifferentCaloObjectTrigger(const l1extra::L1EmParticleVectorRef &inputRefs1, const l1extra::L1JetParticleVectorRef &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, l1extra::L1EmParticleVectorRef &outputRefs1, l1extra::L1JetParticleVectorRef &outputRefs2, l1extra::L1ParticleMap::L1IndexComboVector &combos)
met
===> hadronic RAZOR
void evaluateTripleSameObjectTrigger(const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)
void evaluateSingleObjectTrigger(const std::vector< edm::Ref< TCollection > > &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection > > &outputRefs)
return(e1-e2)*(e1-e2)+dp *dp
fixed size matrix
HLT enums.
int prescales_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
edm::RefProd< L1EtMissParticle > L1EtMissParticleRefProd
const double & etTotal() const
Signal rand(Signal arg)
Definition: vlib.cc:442
std::vector< L1MuonParticleRef > L1MuonParticleVectorRef
void evaluateDoubleDifferentObjectTrigger(const std::vector< edm::Ref< TCollection1 > > &inputRefs1, const std::vector< edm::Ref< TCollection2 > > &inputRefs2, const double &etThreshold1, const double &etThreshold2, bool &decision, std::vector< edm::Ref< TCollection1 > > &outputRefs1, std::vector< edm::Ref< TCollection2 > > &outputRefs2, l1extra::L1ParticleMap::L1IndexComboVector &combos)
void addToVectorRefs(const edm::Handle< TCollection > &handle, std::vector< edm::Ref< TCollection > > &vectorRefs)
def move(src, dest)
Definition: eostools.py:510
void evaluateJetGapJetTrigger(const l1extra::L1JetParticleVectorRef &inputRefs, const double &etThreshold, bool &decision, l1extra::L1JetParticleVectorRef &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)

Member Data Documentation

edm::InputTag L1ExtraParticleMapProd::cenJetSource_
private

Definition at line 153 of file L1ExtraParticleMapProd.h.

Referenced by produce().

std::pair< double, double > L1ExtraParticleMapProd::doubleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
private

Definition at line 164 of file L1ExtraParticleMapProd.h.

Referenced by L1ExtraParticleMapProd(), and produce().

edm::InputTag L1ExtraParticleMapProd::etMissSource_
private

Definition at line 156 of file L1ExtraParticleMapProd.h.

Referenced by produce().

edm::InputTag L1ExtraParticleMapProd::forJetSource_
private

Definition at line 154 of file L1ExtraParticleMapProd.h.

Referenced by produce().

edm::InputTag L1ExtraParticleMapProd::htMissSource_
private

Definition at line 157 of file L1ExtraParticleMapProd.h.

Referenced by produce().

edm::InputTag L1ExtraParticleMapProd::isoEmSource_
private

Definition at line 151 of file L1ExtraParticleMapProd.h.

Referenced by produce().

edm::InputTag L1ExtraParticleMapProd::muonSource_
private

Definition at line 150 of file L1ExtraParticleMapProd.h.

Referenced by produce().

edm::InputTag L1ExtraParticleMapProd::nonIsoEmSource_
private

Definition at line 152 of file L1ExtraParticleMapProd.h.

Referenced by produce().

int L1ExtraParticleMapProd::prescaleCounters_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
private

Definition at line 162 of file L1ExtraParticleMapProd.h.

Referenced by L1ExtraParticleMapProd(), and produce().

int L1ExtraParticleMapProd::prescales_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
private

Definition at line 160 of file L1ExtraParticleMapProd.h.

Referenced by L1ExtraParticleMapProd(), and produce().

double L1ExtraParticleMapProd::singleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
private

Definition at line 159 of file L1ExtraParticleMapProd.h.

Referenced by L1ExtraParticleMapProd(), and produce().

edm::InputTag L1ExtraParticleMapProd::tauJetSource_
private

Definition at line 155 of file L1ExtraParticleMapProd.h.

Referenced by produce().