CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
L1ExtraParticleMapProd.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: L1ExtraParticleMapProd
4 // Class: L1ExtraParticleMapProd
5 //
8 //
9 // Original Author: Werner Sun
10 // Created: Mon Oct 16 23:19:38 EDT 2006
11 // $Id: L1ExtraParticleMapProd.cc,v 1.30 2009/05/27 11:12:11 fabiocos Exp $
12 //
13 //
14 
15 
16 // system include files
17 #include <memory>
18 
19 // user include files
21 
22 //#include "FWCore/Framework/interface/MakerMacros.h"
23 
26 
27 #include "CLHEP/Random/RandFlat.h"
28 
29 static const int kDefault = -1 ;
30 
31 //
32 // constants, enums and typedefs
33 //
34 
35 //
36 // static data member definitions
37 //
38 
39 //
40 // constructors and destructor
41 //
43  const edm::ParameterSet& iConfig)
44  : muonSource_( iConfig.getParameter< edm::InputTag >(
45  "muonSource" ) ),
46  isoEmSource_( iConfig.getParameter< edm::InputTag >(
47  "isolatedEmSource" ) ),
48  nonIsoEmSource_( iConfig.getParameter< edm::InputTag >(
49  "nonIsolatedEmSource" ) ),
50  cenJetSource_( iConfig.getParameter< edm::InputTag >(
51  "centralJetSource" ) ),
52  forJetSource_( iConfig.getParameter< edm::InputTag >(
53  "forwardJetSource" ) ),
54  tauJetSource_( iConfig.getParameter< edm::InputTag >(
55  "tauJetSource" ) ),
56  etMissSource_( iConfig.getParameter< edm::InputTag >(
57  "etMissSource" ) ),
58  htMissSource_( iConfig.getParameter< edm::InputTag >(
59  "htMissSource" ) )
60 {
61  using namespace l1extra ;
62 
63  //register your products
64  produces< L1ParticleMapCollection >() ;
65  produces< L1GlobalTriggerReadoutRecord >();
66 
67  //now do what ever other initialization is needed
68  for( int i = 0 ; i < L1ParticleMap::kNumOfL1TriggerTypes ; ++i )
69  {
70  singleThresholds_[ i ] = 0. ;
71  doubleThresholds_[ i ].first = 0. ;
72  doubleThresholds_[ i ].second = 0. ;
73  prescaleCounters_[ i ] = 1 ;
74  prescales_[ i ] = 1 ;
75  }
76 
77  // Single object triggers, 5 thresholds each
78 
79  singleThresholds_[ L1ParticleMap::kSingleMu3 ] =
80  iConfig.getParameter< double >( "L1_SingleMu3_thresh" ) ;
81  prescales_[ L1ParticleMap::kSingleMu3 ] =
82  iConfig.getParameter< int >( "L1_SingleMu3_prescale" ) ;
83  singleThresholds_[ L1ParticleMap::kSingleMu5 ] =
84  iConfig.getParameter< double >( "L1_SingleMu5_thresh" ) ;
85  prescales_[ L1ParticleMap::kSingleMu5 ] =
86  iConfig.getParameter< int >( "L1_SingleMu5_prescale" ) ;
87  singleThresholds_[ L1ParticleMap::kSingleMu7 ] =
88  iConfig.getParameter< double >( "L1_SingleMu7_thresh" ) ;
89  prescales_[ L1ParticleMap::kSingleMu7 ] =
90  iConfig.getParameter< int >( "L1_SingleMu7_prescale" ) ;
91  singleThresholds_[ L1ParticleMap::kSingleMu10 ] =
92  iConfig.getParameter< double >( "L1_SingleMu10_thresh" ) ;
93  prescales_[ L1ParticleMap::kSingleMu10 ] =
94  iConfig.getParameter< int >( "L1_SingleMu10_prescale" ) ;
95  singleThresholds_[ L1ParticleMap::kSingleMu14 ] =
96  iConfig.getParameter< double >( "L1_SingleMu14_thresh" ) ;
97  prescales_[ L1ParticleMap::kSingleMu14 ] =
98  iConfig.getParameter< int >( "L1_SingleMu14_prescale" ) ;
99  singleThresholds_[ L1ParticleMap::kSingleMu20 ] =
100  iConfig.getParameter< double >( "L1_SingleMu20_thresh" ) ;
101  prescales_[ L1ParticleMap::kSingleMu20 ] =
102  iConfig.getParameter< int >( "L1_SingleMu20_prescale" ) ;
103  singleThresholds_[ L1ParticleMap::kSingleMu25 ] =
104  iConfig.getParameter< double >( "L1_SingleMu25_thresh" ) ;
105  prescales_[ L1ParticleMap::kSingleMu25 ] =
106  iConfig.getParameter< int >( "L1_SingleMu25_prescale" ) ;
107 
108  singleThresholds_[ L1ParticleMap::kSingleIsoEG5 ] =
109  iConfig.getParameter< double >( "L1_SingleIsoEG5_thresh" ) ;
110  prescales_[ L1ParticleMap::kSingleIsoEG5 ] =
111  iConfig.getParameter< int >( "L1_SingleIsoEG5_prescale" ) ;
112  singleThresholds_[ L1ParticleMap::kSingleIsoEG8 ] =
113  iConfig.getParameter< double >( "L1_SingleIsoEG8_thresh" ) ;
114  prescales_[ L1ParticleMap::kSingleIsoEG8 ] =
115  iConfig.getParameter< int >( "L1_SingleIsoEG8_prescale" ) ;
116  singleThresholds_[ L1ParticleMap::kSingleIsoEG10 ] =
117  iConfig.getParameter< double >( "L1_SingleIsoEG10_thresh" ) ;
118  prescales_[ L1ParticleMap::kSingleIsoEG10 ] =
119  iConfig.getParameter< int >( "L1_SingleIsoEG10_prescale" ) ;
120  singleThresholds_[ L1ParticleMap::kSingleIsoEG12 ] =
121  iConfig.getParameter< double >( "L1_SingleIsoEG12_thresh" ) ;
122  prescales_[ L1ParticleMap::kSingleIsoEG12 ] =
123  iConfig.getParameter< int >( "L1_SingleIsoEG12_prescale" ) ;
124  singleThresholds_[ L1ParticleMap::kSingleIsoEG15 ] =
125  iConfig.getParameter< double >( "L1_SingleIsoEG15_thresh" ) ;
126  prescales_[ L1ParticleMap::kSingleIsoEG15 ] =
127  iConfig.getParameter< int >( "L1_SingleIsoEG15_prescale" ) ;
128  singleThresholds_[ L1ParticleMap::kSingleIsoEG20 ] =
129  iConfig.getParameter< double >( "L1_SingleIsoEG20_thresh" ) ;
130  prescales_[ L1ParticleMap::kSingleIsoEG20 ] =
131  iConfig.getParameter< int >( "L1_SingleIsoEG20_prescale" ) ;
132  singleThresholds_[ L1ParticleMap::kSingleIsoEG25 ] =
133  iConfig.getParameter< double >( "L1_SingleIsoEG25_thresh" ) ;
134  prescales_[ L1ParticleMap::kSingleIsoEG25 ] =
135  iConfig.getParameter< int >( "L1_SingleIsoEG25_prescale" ) ;
136 
137  singleThresholds_[ L1ParticleMap::kSingleEG5 ] =
138  iConfig.getParameter< double >( "L1_SingleEG5_thresh" ) ;
139  prescales_[ L1ParticleMap::kSingleEG5 ] =
140  iConfig.getParameter< int >( "L1_SingleEG5_prescale" ) ;
141  singleThresholds_[ L1ParticleMap::kSingleEG8 ] =
142  iConfig.getParameter< double >( "L1_SingleEG8_thresh" ) ;
143  prescales_[ L1ParticleMap::kSingleEG8 ] =
144  iConfig.getParameter< int >( "L1_SingleEG8_prescale" ) ;
145  singleThresholds_[ L1ParticleMap::kSingleEG10 ] =
146  iConfig.getParameter< double >( "L1_SingleEG10_thresh" ) ;
147  prescales_[ L1ParticleMap::kSingleEG10 ] =
148  iConfig.getParameter< int >( "L1_SingleEG10_prescale" ) ;
149  singleThresholds_[ L1ParticleMap::kSingleEG12 ] =
150  iConfig.getParameter< double >( "L1_SingleEG12_thresh" ) ;
151  prescales_[ L1ParticleMap::kSingleEG12 ] =
152  iConfig.getParameter< int >( "L1_SingleEG12_prescale" ) ;
153  singleThresholds_[ L1ParticleMap::kSingleEG15 ] =
154  iConfig.getParameter< double >( "L1_SingleEG15_thresh" ) ;
155  prescales_[ L1ParticleMap::kSingleEG15 ] =
156  iConfig.getParameter< int >( "L1_SingleEG15_prescale" ) ;
157  singleThresholds_[ L1ParticleMap::kSingleEG20 ] =
158  iConfig.getParameter< double >( "L1_SingleEG20_thresh" ) ;
159  prescales_[ L1ParticleMap::kSingleEG20 ] =
160  iConfig.getParameter< int >( "L1_SingleEG20_prescale" ) ;
161  singleThresholds_[ L1ParticleMap::kSingleEG25 ] =
162  iConfig.getParameter< double >( "L1_SingleEG25_thresh" ) ;
163  prescales_[ L1ParticleMap::kSingleEG25 ] =
164  iConfig.getParameter< int >( "L1_SingleEG25_prescale" ) ;
165 
166  singleThresholds_[ L1ParticleMap::kSingleJet15 ] =
167  iConfig.getParameter< double >( "L1_SingleJet15_thresh" ) ;
168  prescales_[ L1ParticleMap::kSingleJet15 ] =
169  iConfig.getParameter< int >( "L1_SingleJet15_prescale" ) ;
170  singleThresholds_[ L1ParticleMap::kSingleJet20 ] =
171  iConfig.getParameter< double >( "L1_SingleJet20_thresh" ) ;
172  prescales_[ L1ParticleMap::kSingleJet20 ] =
173  iConfig.getParameter< int >( "L1_SingleJet20_prescale" ) ;
174  singleThresholds_[ L1ParticleMap::kSingleJet30 ] =
175  iConfig.getParameter< double >( "L1_SingleJet30_thresh" ) ;
176  prescales_[ L1ParticleMap::kSingleJet30 ] =
177  iConfig.getParameter< int >( "L1_SingleJet30_prescale" ) ;
178  singleThresholds_[ L1ParticleMap::kSingleJet50 ] =
179  iConfig.getParameter< double >( "L1_SingleJet50_thresh" ) ;
180  prescales_[ L1ParticleMap::kSingleJet50 ] =
181  iConfig.getParameter< int >( "L1_SingleJet50_prescale" ) ;
182  singleThresholds_[ L1ParticleMap::kSingleJet70 ] =
183  iConfig.getParameter< double >( "L1_SingleJet70_thresh" ) ;
184  prescales_[ L1ParticleMap::kSingleJet70 ] =
185  iConfig.getParameter< int >( "L1_SingleJet70_prescale" ) ;
186  singleThresholds_[ L1ParticleMap::kSingleJet100 ] =
187  iConfig.getParameter< double >( "L1_SingleJet100_thresh" ) ;
188  prescales_[ L1ParticleMap::kSingleJet100 ] =
189  iConfig.getParameter< int >( "L1_SingleJet100_prescale" ) ;
190  singleThresholds_[ L1ParticleMap::kSingleJet150 ] =
191  iConfig.getParameter< double >( "L1_SingleJet150_thresh" ) ;
192  prescales_[ L1ParticleMap::kSingleJet150 ] =
193  iConfig.getParameter< int >( "L1_SingleJet150_prescale" ) ;
194  singleThresholds_[ L1ParticleMap::kSingleJet200 ] =
195  iConfig.getParameter< double >( "L1_SingleJet200_thresh" ) ;
196  prescales_[ L1ParticleMap::kSingleJet200 ] =
197  iConfig.getParameter< int >( "L1_SingleJet200_prescale" ) ;
198 
199  singleThresholds_[ L1ParticleMap::kSingleTauJet10 ] =
200  iConfig.getParameter< double >( "L1_SingleTauJet10_thresh" ) ;
201  prescales_[ L1ParticleMap::kSingleTauJet10 ] =
202  iConfig.getParameter< int >( "L1_SingleTauJet10_prescale" ) ;
203  singleThresholds_[ L1ParticleMap::kSingleTauJet20 ] =
204  iConfig.getParameter< double >( "L1_SingleTauJet20_thresh" ) ;
205  prescales_[ L1ParticleMap::kSingleTauJet20 ] =
206  iConfig.getParameter< int >( "L1_SingleTauJet20_prescale" ) ;
207  singleThresholds_[ L1ParticleMap::kSingleTauJet30 ] =
208  iConfig.getParameter< double >( "L1_SingleTauJet30_thresh" ) ;
209  prescales_[ L1ParticleMap::kSingleTauJet30 ] =
210  iConfig.getParameter< int >( "L1_SingleTauJet30_prescale" ) ;
211  singleThresholds_[ L1ParticleMap::kSingleTauJet35 ] =
212  iConfig.getParameter< double >( "L1_SingleTauJet35_thresh" ) ;
213  prescales_[ L1ParticleMap::kSingleTauJet35 ] =
214  iConfig.getParameter< int >( "L1_SingleTauJet35_prescale" ) ;
215  singleThresholds_[ L1ParticleMap::kSingleTauJet40 ] =
216  iConfig.getParameter< double >( "L1_SingleTauJet40_thresh" ) ;
217  prescales_[ L1ParticleMap::kSingleTauJet40 ] =
218  iConfig.getParameter< int >( "L1_SingleTauJet40_prescale" ) ;
219  singleThresholds_[ L1ParticleMap::kSingleTauJet60 ] =
220  iConfig.getParameter< double >( "L1_SingleTauJet60_thresh" ) ;
221  prescales_[ L1ParticleMap::kSingleTauJet60 ] =
222  iConfig.getParameter< int >( "L1_SingleTauJet60_prescale" ) ;
223  singleThresholds_[ L1ParticleMap::kSingleTauJet80 ] =
224  iConfig.getParameter< double >( "L1_SingleTauJet80_thresh" ) ;
225  prescales_[ L1ParticleMap::kSingleTauJet80 ] =
226  iConfig.getParameter< int >( "L1_SingleTauJet80_prescale" ) ;
227  singleThresholds_[ L1ParticleMap::kSingleTauJet100 ] =
228  iConfig.getParameter< double >( "L1_SingleTauJet100_thresh" ) ;
229  prescales_[ L1ParticleMap::kSingleTauJet100 ] =
230  iConfig.getParameter< int >( "L1_SingleTauJet100_prescale" ) ;
231 
232  singleThresholds_[ L1ParticleMap::kHTT100 ] =
233  iConfig.getParameter< double >( "L1_HTT100_thresh" ) ;
234  prescales_[ L1ParticleMap::kHTT100 ] =
235  iConfig.getParameter< int >( "L1_HTT100_prescale" ) ;
236  singleThresholds_[ L1ParticleMap::kHTT200 ] =
237  iConfig.getParameter< double >( "L1_HTT200_thresh" ) ;
238  prescales_[ L1ParticleMap::kHTT200 ] =
239  iConfig.getParameter< int >( "L1_HTT200_prescale" ) ;
240  singleThresholds_[ L1ParticleMap::kHTT250 ] =
241  iConfig.getParameter< double >( "L1_HTT250_thresh" ) ;
242  prescales_[ L1ParticleMap::kHTT250 ] =
243  iConfig.getParameter< int >( "L1_HTT250_prescale" ) ;
244  singleThresholds_[ L1ParticleMap::kHTT300 ] =
245  iConfig.getParameter< double >( "L1_HTT300_thresh" ) ;
246  prescales_[ L1ParticleMap::kHTT300 ] =
247  iConfig.getParameter< int >( "L1_HTT300_prescale" ) ;
248  singleThresholds_[ L1ParticleMap::kHTT400 ] =
249  iConfig.getParameter< double >( "L1_HTT400_thresh" ) ;
250  prescales_[ L1ParticleMap::kHTT400 ] =
251  iConfig.getParameter< int >( "L1_HTT400_prescale" ) ;
252  singleThresholds_[ L1ParticleMap::kHTT500 ] =
253  iConfig.getParameter< double >( "L1_HTT500_thresh" ) ;
254  prescales_[ L1ParticleMap::kHTT500 ] =
255  iConfig.getParameter< int >( "L1_HTT500_prescale" ) ;
256 
257  singleThresholds_[ L1ParticleMap::kETM10 ] =
258  iConfig.getParameter< double >( "L1_ETM10_thresh" ) ;
259  prescales_[ L1ParticleMap::kETM10 ] =
260  iConfig.getParameter< int >( "L1_ETM10_prescale" ) ;
261  singleThresholds_[ L1ParticleMap::kETM15 ] =
262  iConfig.getParameter< double >( "L1_ETM15_thresh" ) ;
263  prescales_[ L1ParticleMap::kETM15 ] =
264  iConfig.getParameter< int >( "L1_ETM15_prescale" ) ;
265  singleThresholds_[ L1ParticleMap::kETM20 ] =
266  iConfig.getParameter< double >( "L1_ETM20_thresh" ) ;
267  prescales_[ L1ParticleMap::kETM20 ] =
268  iConfig.getParameter< int >( "L1_ETM20_prescale" ) ;
269  singleThresholds_[ L1ParticleMap::kETM30 ] =
270  iConfig.getParameter< double >( "L1_ETM30_thresh" ) ;
271  prescales_[ L1ParticleMap::kETM30 ] =
272  iConfig.getParameter< int >( "L1_ETM30_prescale" ) ;
273  singleThresholds_[ L1ParticleMap::kETM40 ] =
274  iConfig.getParameter< double >( "L1_ETM40_thresh" ) ;
275  prescales_[ L1ParticleMap::kETM40 ] =
276  iConfig.getParameter< int >( "L1_ETM40_prescale" ) ;
277  singleThresholds_[ L1ParticleMap::kETM50 ] =
278  iConfig.getParameter< double >( "L1_ETM50_thresh" ) ;
279  prescales_[ L1ParticleMap::kETM50 ] =
280  iConfig.getParameter< int >( "L1_ETM50_prescale" ) ;
281  singleThresholds_[ L1ParticleMap::kETM60 ] =
282  iConfig.getParameter< double >( "L1_ETM60_thresh" ) ;
283  prescales_[ L1ParticleMap::kETM60 ] =
284  iConfig.getParameter< int >( "L1_ETM60_prescale" ) ;
285 
286  singleThresholds_[ L1ParticleMap::kETT60 ] =
287  iConfig.getParameter< double >( "L1_ETT60_thresh" ) ;
288  prescales_[ L1ParticleMap::kETT60 ] =
289  iConfig.getParameter< int >( "L1_ETT60_prescale" ) ;
290 
291  // AA triggers
292 
293  singleThresholds_[ L1ParticleMap::kDoubleMu3 ] =
294  iConfig.getParameter< double >( "L1_DoubleMu3_thresh" ) ;
295  prescales_[ L1ParticleMap::kDoubleMu3 ] =
296  iConfig.getParameter< int >( "L1_DoubleMu3_prescale" ) ;
297 
298  singleThresholds_[ L1ParticleMap::kDoubleIsoEG8 ] =
299  iConfig.getParameter< double >( "L1_DoubleIsoEG8_thresh" ) ;
300  prescales_[ L1ParticleMap::kDoubleIsoEG8 ] =
301  iConfig.getParameter< int >( "L1_DoubleIsoEG8_prescale" ) ;
302  singleThresholds_[ L1ParticleMap::kDoubleIsoEG10 ] =
303  iConfig.getParameter< double >( "L1_DoubleIsoEG10_thresh" ) ;
304  prescales_[ L1ParticleMap::kDoubleIsoEG10 ] =
305  iConfig.getParameter< int >( "L1_DoubleIsoEG10_prescale" ) ;
306 
307  singleThresholds_[ L1ParticleMap::kDoubleEG5 ] =
308  iConfig.getParameter< double >( "L1_DoubleEG5_thresh" ) ;
309  prescales_[ L1ParticleMap::kDoubleEG5 ] =
310  iConfig.getParameter< int >( "L1_DoubleEG5_prescale" ) ;
311  singleThresholds_[ L1ParticleMap::kDoubleEG10 ] =
312  iConfig.getParameter< double >( "L1_DoubleEG10_thresh" ) ;
313  prescales_[ L1ParticleMap::kDoubleEG10 ] =
314  iConfig.getParameter< int >( "L1_DoubleEG10_prescale" ) ;
315  singleThresholds_[ L1ParticleMap::kDoubleEG15 ] =
316  iConfig.getParameter< double >( "L1_DoubleEG15_thresh" ) ;
317  prescales_[ L1ParticleMap::kDoubleEG15 ] =
318  iConfig.getParameter< int >( "L1_DoubleEG15_prescale" ) ;
319 
320  singleThresholds_[ L1ParticleMap::kDoubleJet70 ] =
321  iConfig.getParameter< double >( "L1_DoubleJet70_thresh" ) ;
322  prescales_[ L1ParticleMap::kDoubleJet70 ] =
323  iConfig.getParameter< int >( "L1_DoubleJet70_prescale" ) ;
324  singleThresholds_[ L1ParticleMap::kDoubleJet100 ] =
325  iConfig.getParameter< double >( "L1_DoubleJet100_thresh" ) ;
326  prescales_[ L1ParticleMap::kDoubleJet100 ] =
327  iConfig.getParameter< int >( "L1_DoubleJet100_prescale" ) ;
328 
329  singleThresholds_[ L1ParticleMap::kDoubleTauJet20 ] =
330  iConfig.getParameter< double >( "L1_DoubleTauJet20_thresh" ) ;
331  prescales_[ L1ParticleMap::kDoubleTauJet20 ] =
332  iConfig.getParameter< int >( "L1_DoubleTauJet20_prescale" ) ;
333  singleThresholds_[ L1ParticleMap::kDoubleTauJet30 ] =
334  iConfig.getParameter< double >( "L1_DoubleTauJet30_thresh" ) ;
335  prescales_[ L1ParticleMap::kDoubleTauJet30 ] =
336  iConfig.getParameter< int >( "L1_DoubleTauJet30_prescale" ) ;
337  singleThresholds_[ L1ParticleMap::kDoubleTauJet35 ] =
338  iConfig.getParameter< double >( "L1_DoubleTauJet35_thresh" ) ;
339  prescales_[ L1ParticleMap::kDoubleTauJet35 ] =
340  iConfig.getParameter< int >( "L1_DoubleTauJet35_prescale" ) ;
341  singleThresholds_[ L1ParticleMap::kDoubleTauJet40 ] =
342  iConfig.getParameter< double >( "L1_DoubleTauJet40_thresh" ) ;
343  prescales_[ L1ParticleMap::kDoubleTauJet40 ] =
344  iConfig.getParameter< int >( "L1_DoubleTauJet40_prescale" ) ;
345 
346  // AB triggers
347 
348  doubleThresholds_[ L1ParticleMap::kMu3_IsoEG5 ].first =
349  iConfig.getParameter< double >( "L1_Mu3_IsoEG5_thresh1" ) ;
350  doubleThresholds_[ L1ParticleMap::kMu3_IsoEG5 ].second =
351  iConfig.getParameter< double >( "L1_Mu3_IsoEG5_thresh2" ) ;
352  prescales_[ L1ParticleMap::kMu3_IsoEG5 ] =
353  iConfig.getParameter< int >( "L1_Mu3_IsoEG5_prescale" ) ;
354  doubleThresholds_[ L1ParticleMap::kMu5_IsoEG10 ].first =
355  iConfig.getParameter< double >( "L1_Mu5_IsoEG10_thresh1" ) ;
356  doubleThresholds_[ L1ParticleMap::kMu5_IsoEG10 ].second =
357  iConfig.getParameter< double >( "L1_Mu5_IsoEG10_thresh2" ) ;
358  prescales_[ L1ParticleMap::kMu5_IsoEG10 ] =
359  iConfig.getParameter< int >( "L1_Mu5_IsoEG10_prescale" ) ;
360 
361  doubleThresholds_[ L1ParticleMap::kMu3_EG12 ].first =
362  iConfig.getParameter< double >( "L1_Mu3_EG12_thresh1" ) ;
363  doubleThresholds_[ L1ParticleMap::kMu3_EG12 ].second =
364  iConfig.getParameter< double >( "L1_Mu3_EG12_thresh2" ) ;
365  prescales_[ L1ParticleMap::kMu3_EG12 ] =
366  iConfig.getParameter< int >( "L1_Mu3_EG12_prescale" ) ;
367 
368  doubleThresholds_[ L1ParticleMap::kMu3_Jet15 ].first =
369  iConfig.getParameter< double >( "L1_Mu3_Jet15_thresh1" ) ;
370  doubleThresholds_[ L1ParticleMap::kMu3_Jet15 ].second =
371  iConfig.getParameter< double >( "L1_Mu3_Jet15_thresh2" ) ;
372  prescales_[ L1ParticleMap::kMu3_Jet15 ] =
373  iConfig.getParameter< int >( "L1_Mu3_Jet15_prescale" ) ;
374  doubleThresholds_[ L1ParticleMap::kMu5_Jet15 ].first =
375  iConfig.getParameter< double >( "L1_Mu5_Jet15_thresh1" ) ;
376  doubleThresholds_[ L1ParticleMap::kMu5_Jet15 ].second =
377  iConfig.getParameter< double >( "L1_Mu5_Jet15_thresh2" ) ;
378  prescales_[ L1ParticleMap::kMu5_Jet15 ] =
379  iConfig.getParameter< int >( "L1_Mu5_Jet15_prescale" ) ;
380  doubleThresholds_[ L1ParticleMap::kMu3_Jet70 ].first =
381  iConfig.getParameter< double >( "L1_Mu3_Jet70_thresh1" ) ;
382  doubleThresholds_[ L1ParticleMap::kMu3_Jet70 ].second =
383  iConfig.getParameter< double >( "L1_Mu3_Jet70_thresh2" ) ;
384  prescales_[ L1ParticleMap::kMu3_Jet70 ] =
385  iConfig.getParameter< int >( "L1_Mu3_Jet70_prescale" ) ;
386  doubleThresholds_[ L1ParticleMap::kMu5_Jet20 ].first =
387  iConfig.getParameter< double >( "L1_Mu5_Jet20_thresh1" ) ;
388  doubleThresholds_[ L1ParticleMap::kMu5_Jet20 ].second =
389  iConfig.getParameter< double >( "L1_Mu5_Jet20_thresh2" ) ;
390  prescales_[ L1ParticleMap::kMu5_Jet20 ] =
391  iConfig.getParameter< int >( "L1_Mu5_Jet20_prescale" ) ;
392 
393  doubleThresholds_[ L1ParticleMap::kMu5_TauJet20 ].first =
394  iConfig.getParameter< double >( "L1_Mu5_TauJet20_thresh1" ) ;
395  doubleThresholds_[ L1ParticleMap::kMu5_TauJet20 ].second =
396  iConfig.getParameter< double >( "L1_Mu5_TauJet20_thresh2" ) ;
397  prescales_[ L1ParticleMap::kMu5_TauJet20 ] =
398  iConfig.getParameter< int >( "L1_Mu5_TauJet20_prescale" ) ;
399  doubleThresholds_[ L1ParticleMap::kMu5_TauJet30 ].first =
400  iConfig.getParameter< double >( "L1_Mu5_TauJet30_thresh1" ) ;
401  doubleThresholds_[ L1ParticleMap::kMu5_TauJet30 ].second =
402  iConfig.getParameter< double >( "L1_Mu5_TauJet30_thresh2" ) ;
403  prescales_[ L1ParticleMap::kMu5_TauJet30 ] =
404  iConfig.getParameter< int >( "L1_Mu5_TauJet30_prescale" ) ;
405 
406  doubleThresholds_[ L1ParticleMap::kIsoEG10_EG10 ].first =
407  iConfig.getParameter< double >( "L1_IsoEG10_EG10_thresh1" ) ;
408  doubleThresholds_[ L1ParticleMap::kIsoEG10_EG10 ].second =
409  iConfig.getParameter< double >( "L1_IsoEG10_EG10_thresh2" ) ;
410  prescales_[ L1ParticleMap::kIsoEG10_EG10 ] =
411  iConfig.getParameter< int >( "L1_IsoEG10_EG10_prescale" ) ;
412 
413  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet15 ].first =
414  iConfig.getParameter< double >( "L1_IsoEG10_Jet15_thresh1" ) ;
415  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet15 ].second =
416  iConfig.getParameter< double >( "L1_IsoEG10_Jet15_thresh2" ) ;
417  prescales_[ L1ParticleMap::kIsoEG10_Jet15 ] =
418  iConfig.getParameter< int >( "L1_IsoEG10_Jet15_prescale" ) ;
419  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet30 ].first =
420  iConfig.getParameter< double >( "L1_IsoEG10_Jet30_thresh1" ) ;
421  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet30 ].second =
422  iConfig.getParameter< double >( "L1_IsoEG10_Jet30_thresh2" ) ;
423  prescales_[ L1ParticleMap::kIsoEG10_Jet30 ] =
424  iConfig.getParameter< int >( "L1_IsoEG10_Jet30_prescale" ) ;
425  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet20 ].first =
426  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_thresh1" ) ;
427  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet20 ].second =
428  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_thresh2" ) ;
429  prescales_[ L1ParticleMap::kIsoEG10_Jet20 ] =
430  iConfig.getParameter< int >( "L1_IsoEG10_Jet20_prescale" ) ;
431  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet70 ].first =
432  iConfig.getParameter< double >( "L1_IsoEG10_Jet70_thresh1" ) ;
433  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet70 ].second =
434  iConfig.getParameter< double >( "L1_IsoEG10_Jet70_thresh2" ) ;
435  prescales_[ L1ParticleMap::kIsoEG10_Jet70 ] =
436  iConfig.getParameter< int >( "L1_IsoEG10_Jet70_prescale" ) ;
437 
438  doubleThresholds_[ L1ParticleMap::kIsoEG10_TauJet20 ].first =
439  iConfig.getParameter< double >( "L1_IsoEG10_TauJet20_thresh1" ) ;
440  doubleThresholds_[ L1ParticleMap::kIsoEG10_TauJet20 ].second =
441  iConfig.getParameter< double >( "L1_IsoEG10_TauJet20_thresh2" ) ;
442  prescales_[ L1ParticleMap::kIsoEG10_TauJet20 ] =
443  iConfig.getParameter< int >( "L1_IsoEG10_TauJet20_prescale" ) ;
444  doubleThresholds_[ L1ParticleMap::kIsoEG10_TauJet30 ].first =
445  iConfig.getParameter< double >( "L1_IsoEG10_TauJet30_thresh1" ) ;
446  doubleThresholds_[ L1ParticleMap::kIsoEG10_TauJet30 ].second =
447  iConfig.getParameter< double >( "L1_IsoEG10_TauJet30_thresh2" ) ;
448  prescales_[ L1ParticleMap::kIsoEG10_TauJet30 ] =
449  iConfig.getParameter< int >( "L1_IsoEG10_TauJet30_prescale" ) ;
450 
451  doubleThresholds_[ L1ParticleMap::kEG10_Jet15 ].first =
452  iConfig.getParameter< double >( "L1_EG10_Jet15_thresh1" ) ;
453  doubleThresholds_[ L1ParticleMap::kEG10_Jet15 ].second =
454  iConfig.getParameter< double >( "L1_EG10_Jet15_thresh2" ) ;
455  prescales_[ L1ParticleMap::kEG10_Jet15 ] =
456  iConfig.getParameter< int >( "L1_EG10_Jet15_prescale" ) ;
457  doubleThresholds_[ L1ParticleMap::kEG12_Jet20 ].first =
458  iConfig.getParameter< double >( "L1_EG12_Jet20_thresh1" ) ;
459  doubleThresholds_[ L1ParticleMap::kEG12_Jet20 ].second =
460  iConfig.getParameter< double >( "L1_EG12_Jet20_thresh2" ) ;
461  prescales_[ L1ParticleMap::kEG12_Jet20 ] =
462  iConfig.getParameter< int >( "L1_EG12_Jet20_prescale" ) ;
463  doubleThresholds_[ L1ParticleMap::kEG12_Jet70 ].first =
464  iConfig.getParameter< double >( "L1_EG12_Jet70_thresh1" ) ;
465  doubleThresholds_[ L1ParticleMap::kEG12_Jet70 ].second =
466  iConfig.getParameter< double >( "L1_EG12_Jet70_thresh2" ) ;
467  prescales_[ L1ParticleMap::kEG12_Jet70 ] =
468  iConfig.getParameter< int >( "L1_EG12_Jet70_prescale" ) ;
469 
470  doubleThresholds_[ L1ParticleMap::kEG12_TauJet40 ].first =
471  iConfig.getParameter< double >( "L1_EG12_TauJet40_thresh1" ) ;
472  doubleThresholds_[ L1ParticleMap::kEG12_TauJet40 ].second =
473  iConfig.getParameter< double >( "L1_EG12_TauJet40_thresh2" ) ;
474  prescales_[ L1ParticleMap::kEG12_TauJet40 ] =
475  iConfig.getParameter< int >( "L1_EG12_TauJet40_prescale" ) ;
476 
477  doubleThresholds_[ L1ParticleMap::kJet70_TauJet40 ].first =
478  iConfig.getParameter< double >( "L1_Jet70_TauJet40_thresh1" ) ;
479  doubleThresholds_[ L1ParticleMap::kJet70_TauJet40 ].second =
480  iConfig.getParameter< double >( "L1_Jet70_TauJet40_thresh2" ) ;
481  prescales_[ L1ParticleMap::kJet70_TauJet40 ] =
482  iConfig.getParameter< int >( "L1_Jet70_TauJet40_prescale" ) ;
483 
484  doubleThresholds_[ L1ParticleMap::kMu3_HTT200 ].first =
485  iConfig.getParameter< double >( "L1_Mu3_HTT200_thresh1" ) ;
486  doubleThresholds_[ L1ParticleMap::kMu3_HTT200 ].second =
487  iConfig.getParameter< double >( "L1_Mu3_HTT200_thresh2" ) ;
488  prescales_[ L1ParticleMap::kMu3_HTT200 ] =
489  iConfig.getParameter< int >( "L1_Mu3_HTT200_prescale" ) ;
490  doubleThresholds_[ L1ParticleMap::kIsoEG10_HTT200 ].first =
491  iConfig.getParameter< double >( "L1_IsoEG10_HTT200_thresh1" ) ;
492  doubleThresholds_[ L1ParticleMap::kIsoEG10_HTT200 ].second =
493  iConfig.getParameter< double >( "L1_IsoEG10_HTT200_thresh2" ) ;
494  prescales_[ L1ParticleMap::kIsoEG10_HTT200 ] =
495  iConfig.getParameter< int >( "L1_IsoEG10_HTT200_prescale" ) ;
496  doubleThresholds_[ L1ParticleMap::kEG12_HTT200 ].first =
497  iConfig.getParameter< double >( "L1_EG12_HTT200_thresh1" ) ;
498  doubleThresholds_[ L1ParticleMap::kEG12_HTT200 ].second =
499  iConfig.getParameter< double >( "L1_EG12_HTT200_thresh2" ) ;
500  prescales_[ L1ParticleMap::kEG12_HTT200 ] =
501  iConfig.getParameter< int >( "L1_EG12_HTT200_prescale" ) ;
502  doubleThresholds_[ L1ParticleMap::kJet70_HTT200 ].first =
503  iConfig.getParameter< double >( "L1_Jet70_HTT200_thresh1" ) ;
504  doubleThresholds_[ L1ParticleMap::kJet70_HTT200 ].second =
505  iConfig.getParameter< double >( "L1_Jet70_HTT200_thresh2" ) ;
506  prescales_[ L1ParticleMap::kJet70_HTT200 ] =
507  iConfig.getParameter< int >( "L1_Jet70_HTT200_prescale" ) ;
508  doubleThresholds_[ L1ParticleMap::kTauJet40_HTT200 ].first =
509  iConfig.getParameter< double >( "L1_TauJet40_HTT200_thresh1" ) ;
510  doubleThresholds_[ L1ParticleMap::kTauJet40_HTT200 ].second =
511  iConfig.getParameter< double >( "L1_TauJet40_HTT200_thresh2" ) ;
512  prescales_[ L1ParticleMap::kTauJet40_HTT200 ] =
513  iConfig.getParameter< int >( "L1_TauJet40_HTT200_prescale" ) ;
514 
515  doubleThresholds_[ L1ParticleMap::kMu3_ETM30 ].first =
516  iConfig.getParameter< double >( "L1_Mu3_ETM30_thresh1" ) ;
517  doubleThresholds_[ L1ParticleMap::kMu3_ETM30 ].second =
518  iConfig.getParameter< double >( "L1_Mu3_ETM30_thresh2" ) ;
519  prescales_[ L1ParticleMap::kMu3_ETM30 ] =
520  iConfig.getParameter< int >( "L1_Mu3_ETM30_prescale" ) ;
521  doubleThresholds_[ L1ParticleMap::kIsoEG10_ETM30 ].first =
522  iConfig.getParameter< double >( "L1_IsoEG10_ETM30_thresh1" ) ;
523  doubleThresholds_[ L1ParticleMap::kIsoEG10_ETM30 ].second =
524  iConfig.getParameter< double >( "L1_IsoEG10_ETM30_thresh2" ) ;
525  prescales_[ L1ParticleMap::kIsoEG10_ETM30 ] =
526  iConfig.getParameter< int >( "L1_IsoEG10_ETM30_prescale" ) ;
527  doubleThresholds_[ L1ParticleMap::kEG12_ETM30 ].first =
528  iConfig.getParameter< double >( "L1_EG12_ETM30_thresh1" ) ;
529  doubleThresholds_[ L1ParticleMap::kEG12_ETM30 ].second =
530  iConfig.getParameter< double >( "L1_EG12_ETM30_thresh2" ) ;
531  prescales_[ L1ParticleMap::kEG12_ETM30 ] =
532  iConfig.getParameter< int >( "L1_EG12_ETM30_prescale" ) ;
533  doubleThresholds_[ L1ParticleMap::kJet70_ETM40 ].first =
534  iConfig.getParameter< double >( "L1_Jet70_ETM40_thresh1" ) ;
535  doubleThresholds_[ L1ParticleMap::kJet70_ETM40 ].second =
536  iConfig.getParameter< double >( "L1_Jet70_ETM40_thresh2" ) ;
537  prescales_[ L1ParticleMap::kJet70_ETM40 ] =
538  iConfig.getParameter< int >( "L1_Jet70_ETM40_prescale" ) ;
539 
540  doubleThresholds_[ L1ParticleMap::kTauJet20_ETM20 ].first =
541  iConfig.getParameter< double >( "L1_TauJet20_ETM20_thresh1" ) ;
542  doubleThresholds_[ L1ParticleMap::kTauJet20_ETM20 ].second =
543  iConfig.getParameter< double >( "L1_TauJet20_ETM20_thresh2" ) ;
544  prescales_[ L1ParticleMap::kTauJet20_ETM20 ] =
545  iConfig.getParameter< int >( "L1_TauJet20_ETM20_prescale" ) ;
546  doubleThresholds_[ L1ParticleMap::kTauJet30_ETM30 ].first =
547  iConfig.getParameter< double >( "L1_TauJet30_ETM30_thresh1" ) ;
548  doubleThresholds_[ L1ParticleMap::kTauJet30_ETM30 ].second =
549  iConfig.getParameter< double >( "L1_TauJet30_ETM30_thresh2" ) ;
550  prescales_[ L1ParticleMap::kTauJet30_ETM30 ] =
551  iConfig.getParameter< int >( "L1_TauJet30_ETM30_prescale" ) ;
552  doubleThresholds_[ L1ParticleMap::kTauJet30_ETM40 ].first =
553  iConfig.getParameter< double >( "L1_TauJet30_ETM40_thresh1" ) ;
554  doubleThresholds_[ L1ParticleMap::kTauJet30_ETM40 ].second =
555  iConfig.getParameter< double >( "L1_TauJet30_ETM40_thresh2" ) ;
556  prescales_[ L1ParticleMap::kTauJet30_ETM40 ] =
557  iConfig.getParameter< int >( "L1_TauJet30_ETM40_prescale" ) ;
558 
559  doubleThresholds_[ L1ParticleMap::kHTT100_ETM30 ].first =
560  iConfig.getParameter< double >( "L1_HTT100_ETM30_thresh1" ) ;
561  doubleThresholds_[ L1ParticleMap::kHTT100_ETM30 ].second =
562  iConfig.getParameter< double >( "L1_HTT100_ETM30_thresh2" ) ;
563  prescales_[ L1ParticleMap::kHTT100_ETM30 ] =
564  iConfig.getParameter< int >( "L1_HTT100_ETM30_prescale" ) ;
565 
566  // AAA triggers
567 
568  singleThresholds_[ L1ParticleMap::kTripleMu3 ] =
569  iConfig.getParameter< double >( "L1_TripleMu3_thresh" ) ;
570  prescales_[ L1ParticleMap::kTripleMu3 ] =
571  iConfig.getParameter< int >( "L1_TripleMu3_prescale" ) ;
572  singleThresholds_[ L1ParticleMap::kTripleIsoEG5 ] =
573  iConfig.getParameter< double >( "L1_TripleIsoEG5_thresh" ) ;
574  prescales_[ L1ParticleMap::kTripleIsoEG5 ] =
575  iConfig.getParameter< int >( "L1_TripleIsoEG5_prescale" ) ;
576  singleThresholds_[ L1ParticleMap::kTripleEG10 ] =
577  iConfig.getParameter< double >( "L1_TripleEG10_thresh" ) ;
578  prescales_[ L1ParticleMap::kTripleEG10 ] =
579  iConfig.getParameter< int >( "L1_TripleEG10_prescale" ) ;
580  singleThresholds_[ L1ParticleMap::kTripleJet50 ] =
581  iConfig.getParameter< double >( "L1_TripleJet50_thresh" ) ;
582  prescales_[ L1ParticleMap::kTripleJet50 ] =
583  iConfig.getParameter< int >( "L1_TripleJet50_prescale" ) ;
584  singleThresholds_[ L1ParticleMap::kTripleTauJet40 ] =
585  iConfig.getParameter< double >( "L1_TripleTauJet40_thresh" ) ;
586  prescales_[ L1ParticleMap::kTripleTauJet40 ] =
587  iConfig.getParameter< int >( "L1_TripleTauJet40_prescale" ) ;
588 
589  // AAB triggers
590 
591  doubleThresholds_[ L1ParticleMap::kDoubleMu3_IsoEG5 ].first =
592  iConfig.getParameter< double >( "L1_DoubleMu3_IsoEG5_thresh1" ) ;
593  doubleThresholds_[ L1ParticleMap::kDoubleMu3_IsoEG5 ].second =
594  iConfig.getParameter< double >( "L1_DoubleMu3_IsoEG5_thresh2" ) ;
595  prescales_[ L1ParticleMap::kDoubleMu3_IsoEG5 ] =
596  iConfig.getParameter< int >( "L1_DoubleMu3_IsoEG5_prescale" ) ;
597  doubleThresholds_[ L1ParticleMap::kDoubleMu3_EG10 ].first =
598  iConfig.getParameter< double >( "L1_DoubleMu3_EG10_thresh1" ) ;
599  doubleThresholds_[ L1ParticleMap::kDoubleMu3_EG10 ].second =
600  iConfig.getParameter< double >( "L1_DoubleMu3_EG10_thresh2" ) ;
601  prescales_[ L1ParticleMap::kDoubleMu3_EG10 ] =
602  iConfig.getParameter< int >( "L1_DoubleMu3_EG10_prescale" ) ;
603  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_Mu3 ].first =
604  iConfig.getParameter< double >( "L1_DoubleIsoEG5_Mu3_thresh1" ) ;
605  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_Mu3 ].second =
606  iConfig.getParameter< double >( "L1_DoubleIsoEG5_Mu3_thresh2" ) ;
607  prescales_[ L1ParticleMap::kDoubleIsoEG5_Mu3 ] =
608  iConfig.getParameter< int >( "L1_DoubleIsoEG5_Mu3_prescale" ) ;
609  doubleThresholds_[ L1ParticleMap::kDoubleEG10_Mu3 ].first =
610  iConfig.getParameter< double >( "L1_DoubleEG10_Mu3_thresh1" ) ;
611  doubleThresholds_[ L1ParticleMap::kDoubleEG10_Mu3 ].second =
612  iConfig.getParameter< double >( "L1_DoubleEG10_Mu3_thresh2" ) ;
613  prescales_[ L1ParticleMap::kDoubleEG10_Mu3 ] =
614  iConfig.getParameter< int >( "L1_DoubleEG10_Mu3_prescale" ) ;
615 
616  doubleThresholds_[ L1ParticleMap::kDoubleMu3_HTT200 ].first =
617  iConfig.getParameter< double >( "L1_DoubleMu3_HTT200_thresh1" ) ;
618  doubleThresholds_[ L1ParticleMap::kDoubleMu3_HTT200 ].second =
619  iConfig.getParameter< double >( "L1_DoubleMu3_HTT200_thresh2" ) ;
620  prescales_[ L1ParticleMap::kDoubleMu3_HTT200 ] =
621  iConfig.getParameter< int >( "L1_DoubleMu3_HTT200_prescale" ) ;
622  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_HTT200 ].first =
623  iConfig.getParameter< double >( "L1_DoubleIsoEG5_HTT200_thresh1" ) ;
624  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_HTT200 ].second =
625  iConfig.getParameter< double >( "L1_DoubleIsoEG5_HTT200_thresh2" ) ;
626  prescales_[ L1ParticleMap::kDoubleIsoEG5_HTT200 ] =
627  iConfig.getParameter< int >( "L1_DoubleIsoEG5_HTT200_prescale" ) ;
628  doubleThresholds_[ L1ParticleMap::kDoubleEG10_HTT200 ].first =
629  iConfig.getParameter< double >( "L1_DoubleEG10_HTT200_thresh1" ) ;
630  doubleThresholds_[ L1ParticleMap::kDoubleEG10_HTT200 ].second =
631  iConfig.getParameter< double >( "L1_DoubleEG10_HTT200_thresh2" ) ;
632  prescales_[ L1ParticleMap::kDoubleEG10_HTT200 ] =
633  iConfig.getParameter< int >( "L1_DoubleEG10_HTT200_prescale" ) ;
634  doubleThresholds_[ L1ParticleMap::kDoubleJet50_HTT200 ].first =
635  iConfig.getParameter< double >( "L1_DoubleJet50_HTT200_thresh1" ) ;
636  doubleThresholds_[ L1ParticleMap::kDoubleJet50_HTT200 ].second =
637  iConfig.getParameter< double >( "L1_DoubleJet50_HTT200_thresh2" ) ;
638  prescales_[ L1ParticleMap::kDoubleJet50_HTT200 ] =
639  iConfig.getParameter< int >( "L1_DoubleJet50_HTT200_prescale" ) ;
640  doubleThresholds_[ L1ParticleMap::kDoubleTauJet40_HTT200 ].first =
641  iConfig.getParameter< double >( "L1_DoubleTauJet40_HTT200_thresh1" ) ;
642  doubleThresholds_[ L1ParticleMap::kDoubleTauJet40_HTT200 ].second =
643  iConfig.getParameter< double >( "L1_DoubleTauJet40_HTT200_thresh2" ) ;
644  prescales_[ L1ParticleMap::kDoubleTauJet40_HTT200 ] =
645  iConfig.getParameter< int >( "L1_DoubleTauJet40_HTT200_prescale" ) ;
646 
647  doubleThresholds_[ L1ParticleMap::kDoubleMu3_ETM20 ].first =
648  iConfig.getParameter< double >( "L1_DoubleMu3_ETM20_thresh1" ) ;
649  doubleThresholds_[ L1ParticleMap::kDoubleMu3_ETM20 ].second =
650  iConfig.getParameter< double >( "L1_DoubleMu3_ETM20_thresh2" ) ;
651  prescales_[ L1ParticleMap::kDoubleMu3_ETM20 ] =
652  iConfig.getParameter< int >( "L1_DoubleMu3_ETM20_prescale" ) ;
653  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_ETM20 ].first =
654  iConfig.getParameter< double >( "L1_DoubleIsoEG5_ETM20_thresh1" ) ;
655  doubleThresholds_[ L1ParticleMap::kDoubleIsoEG5_ETM20 ].second =
656  iConfig.getParameter< double >( "L1_DoubleIsoEG5_ETM20_thresh2" ) ;
657  prescales_[ L1ParticleMap::kDoubleIsoEG5_ETM20 ] =
658  iConfig.getParameter< int >( "L1_DoubleIsoEG5_ETM20_prescale" ) ;
659  doubleThresholds_[ L1ParticleMap::kDoubleEG10_ETM20 ].first =
660  iConfig.getParameter< double >( "L1_DoubleEG10_ETM20_thresh1" ) ;
661  doubleThresholds_[ L1ParticleMap::kDoubleEG10_ETM20 ].second =
662  iConfig.getParameter< double >( "L1_DoubleEG10_ETM20_thresh2" ) ;
663  prescales_[ L1ParticleMap::kDoubleEG10_ETM20 ] =
664  iConfig.getParameter< int >( "L1_DoubleEG10_ETM20_prescale" ) ;
665  doubleThresholds_[ L1ParticleMap::kDoubleJet50_ETM20 ].first =
666  iConfig.getParameter< double >( "L1_DoubleJet50_ETM20_thresh1" ) ;
667  doubleThresholds_[ L1ParticleMap::kDoubleJet50_ETM20 ].second =
668  iConfig.getParameter< double >( "L1_DoubleJet50_ETM20_thresh2" ) ;
669  prescales_[ L1ParticleMap::kDoubleJet50_ETM20 ] =
670  iConfig.getParameter< int >( "L1_DoubleJet50_ETM20_prescale" ) ;
671  doubleThresholds_[ L1ParticleMap::kDoubleTauJet40_ETM20 ].first =
672  iConfig.getParameter< double >( "L1_DoubleTauJet40_ETM20_thresh1" ) ;
673  doubleThresholds_[ L1ParticleMap::kDoubleTauJet40_ETM20 ].second =
674  iConfig.getParameter< double >( "L1_DoubleTauJet40_ETM20_thresh2" ) ;
675  prescales_[ L1ParticleMap::kDoubleTauJet40_ETM20 ] =
676  iConfig.getParameter< int >( "L1_DoubleTauJet40_ETM20_prescale" ) ;
677 
678  singleThresholds_[ L1ParticleMap::kQuadJet30 ] =
679  iConfig.getParameter< double >( "L1_QuadJet30_thresh" ) ;
680  prescales_[ L1ParticleMap::kQuadJet30 ] =
681  iConfig.getParameter< int >( "L1_QuadJet30_prescale" ) ;
682 
683  // Diffractive triggers
684  doubleThresholds_[ L1ParticleMap::kExclusiveDoubleIsoEG4 ].first =
685  iConfig.getParameter< double >( "L1_ExclusiveDoubleIsoEG4_thresh1" );
686  doubleThresholds_[ L1ParticleMap::kExclusiveDoubleIsoEG4 ].second =
687  iConfig.getParameter< double >( "L1_ExclusiveDoubleIsoEG4_thresh2" ); // for jet rejection
688  prescales_[ L1ParticleMap::kExclusiveDoubleIsoEG4 ] =
689  iConfig.getParameter< int >( "L1_ExclusiveDoubleIsoEG4_prescale" ) ;
690  singleThresholds_[ L1ParticleMap::kExclusiveDoubleJet60 ] =
691  iConfig.getParameter< double >( "L1_ExclusiveDoubleJet60_thresh" );
692  prescales_[ L1ParticleMap::kExclusiveDoubleJet60 ] =
693  iConfig.getParameter< int >( "L1_ExclusiveDoubleJet60_prescale" ) ;
694  singleThresholds_[ L1ParticleMap::kExclusiveJet25_Gap_Jet25 ] =
695  iConfig.getParameter< double >( "L1_ExclusiveJet25_Gap_Jet25_thresh" );
696  prescales_[ L1ParticleMap::kExclusiveJet25_Gap_Jet25 ] =
697  iConfig.getParameter< int >( "L1_ExclusiveJet25_Gap_Jet25_prescale" ) ;
698  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet20_ForJet10 ].first =
699  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_ForJet10_thresh1" ) ;
700  doubleThresholds_[ L1ParticleMap::kIsoEG10_Jet20_ForJet10 ].second =
701  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_ForJet10_thresh2" ) ;
702  singleThresholds_[ L1ParticleMap::kIsoEG10_Jet20_ForJet10 ] =
703  iConfig.getParameter< double >( "L1_IsoEG10_Jet20_ForJet10_thresh3" ) ;
704  prescales_[ L1ParticleMap::kIsoEG10_Jet20_ForJet10 ] =
705  iConfig.getParameter< int >( "L1_IsoEG10_Jet20_ForJet10_prescale" ) ;
706 
707  prescales_[ L1ParticleMap::kMinBias_HTT10 ] =
708  iConfig.getParameter< int >( "L1_MinBias_HTT10_prescale" ) ;
709  prescales_[ L1ParticleMap::kZeroBias ] =
710  iConfig.getParameter< int >( "L1_ZeroBias_prescale" ) ;
711 
712 // // Print trigger table in Twiki table format.
713 // std::cout << "| *Trigger Index* | *Trigger Name* | *E<sub>T</sub> Threshold (!GeV)* | *Prescale* |"
714 // << std::endl ;
715 
716 // for( int i = 0 ; i < L1ParticleMap::kNumOfL1TriggerTypes ; ++i )
717 // {
718 // std::cout
719 // << "| "
720 // << i
721 // << " | " ;
722 // if( prescales_[ i ] == 999999999 ) std::cout << "<strike>" ;
723 // std::cout
724 // << L1ParticleMap::triggerName( ( L1ParticleMap::L1TriggerType ) i ) ;
725 // if( prescales_[ i ] == 999999999 ) std::cout << "</strike>" ;
726 // std::cout << " | " ;
727 
728 // if( singleThresholds_[ i ] > 0 )
729 // {
730 // if( doubleThresholds_[ i ].first > 0 )
731 // {
732 // std::cout << doubleThresholds_[ i ].first << ", "
733 // << doubleThresholds_[ i ].second << ", " ;
734 // }
735 
736 // std::cout << singleThresholds_[ i ] ;
737 // }
738 // else if( doubleThresholds_[ i ].first > 0 )
739 // {
740 // std::cout << doubleThresholds_[ i ].first << ", "
741 // << doubleThresholds_[ i ].second ;
742 // }
743 // else
744 // {
745 // std::cout << "---" ;
746 // }
747 
748 // std::cout << " | " ;
749 // if( prescales_[ i ] != 999999999 ) std::cout << prescales_[ i ] ;
750 // std::cout << " |"
751 // << std::endl ;
752 // }
753 }
754 
755 
757 {
758  // do anything here that needs to be done at desctruction time
759  // (e.g. close files, deallocate resources etc.)
760 }
761 
762 
763 //
764 // member functions
765 //
766 
767 // ------------ method called to produce the data ------------
768 void
770  const edm::EventSetup& iSetup)
771 {
772  using namespace edm;
773  using namespace std;
774  using namespace reco;
775  using namespace l1extra ;
776 
777 
778  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
779  // ~~~~~~~~ Get L1Extra particles ~~~~~~~~
780  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
781 
783  iEvent.getByLabel( isoEmSource_, isoEmHandle ) ;
784 
785  Handle< L1EmParticleCollection > nonIsoEmHandle ;
786  iEvent.getByLabel( nonIsoEmSource_, nonIsoEmHandle ) ;
787 
788  Handle< L1JetParticleCollection > cenJetHandle ;
789  iEvent.getByLabel( cenJetSource_, cenJetHandle ) ;
790 
791  Handle< L1JetParticleCollection > forJetHandle ;
792  iEvent.getByLabel( forJetSource_, forJetHandle ) ;
793 
794  Handle< L1JetParticleCollection > tauJetHandle ;
795  iEvent.getByLabel( tauJetSource_, tauJetHandle ) ;
796 
798  iEvent.getByLabel( muonSource_, muHandle ) ;
799 
800  Handle< L1EtMissParticle > metHandle ;
801  iEvent.getByLabel( etMissSource_, metHandle ) ;
802 
803  Handle< L1EtMissParticle > mhtHandle ;
804  iEvent.getByLabel( htMissSource_, mhtHandle ) ;
805 
806  double met = metHandle->etMiss() ;
807  double ht = mhtHandle->etTotal() ;
808  double ett = metHandle->etTotal() ;
809 
810  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
811  // ~~~ Evaluate trigger conditions and make a L1ParticleMapCollection. ~~~
812  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
813 
814  // First, form the input vector<Ref>s that will be needed.
815  L1EmParticleVectorRef inputIsoEmRefs ;
816  addToVectorRefs( isoEmHandle, inputIsoEmRefs ) ;
817 
818  L1EmParticleVectorRef inputRelaxedEmRefs ;
819  addToVectorRefs( isoEmHandle, inputRelaxedEmRefs ) ;
820  addToVectorRefs( nonIsoEmHandle, inputRelaxedEmRefs ) ;
821 
822  L1JetParticleVectorRef inputTauRefs ;
823  addToVectorRefs( tauJetHandle, inputTauRefs ) ;
824 
825  L1JetParticleVectorRef inputJetRefs ;
826  addToVectorRefs( forJetHandle, inputJetRefs ) ;
827  addToVectorRefs( cenJetHandle, inputJetRefs ) ;
828  addToVectorRefs( tauJetHandle, inputJetRefs ) ;
829 
830  L1JetParticleVectorRef inputForJetRefs ;
831  addToVectorRefs( forJetHandle, inputForJetRefs ) ;
832 
833  L1JetParticleVectorRef inputCenJetTauJetRefs ;
834  addToVectorRefs( cenJetHandle, inputCenJetTauJetRefs ) ;
835  addToVectorRefs( tauJetHandle, inputCenJetTauJetRefs ) ;
836 
837  L1MuonParticleVectorRef inputMuonRefsSingle ;
838  L1MuonParticleVectorRef inputMuonRefsDouble ;
839  L1MuonParticleCollection::const_iterator muItr = muHandle->begin() ;
840  L1MuonParticleCollection::const_iterator muEnd = muHandle->end() ;
841 
842  for( size_t i = 0 ; muItr != muEnd ; ++muItr, ++i )
843  {
844  if( !muItr->gmtMuonCand().empty() )
845  {
846  unsigned int qual = muItr->gmtMuonCand().quality() ;
847 
848  if( qual == 4 ||
849  qual == 5 ||
850  qual == 6 ||
851  qual == 7 )
852  {
853  inputMuonRefsSingle.push_back(
854  edm::Ref< L1MuonParticleCollection >( muHandle, i ) ) ;
855  }
856 
857  if( qual == 3 ||
858  qual == 5 ||
859  qual == 6 ||
860  qual == 7 )
861  {
862  inputMuonRefsDouble.push_back(
863  edm::Ref< L1MuonParticleCollection >( muHandle, i ) ) ;
864  }
865  }
866  }
867 
868  auto_ptr< L1ParticleMapCollection > mapColl( new L1ParticleMapCollection ) ;
869  bool globalDecision = false ;
870  std::vector< bool > decisionWord ;
871 
872  for( int itrig = 0 ; itrig < L1ParticleMap::kNumOfL1TriggerTypes; ++itrig )
873  {
874  bool decision = false ;
875  std::vector< L1ParticleMap::L1ObjectType > objectTypes ;
876  L1EmParticleVectorRef outputEmRefsTmp ;
877  L1JetParticleVectorRef outputJetRefsTmp ;
878  L1MuonParticleVectorRef outputMuonRefsTmp ;
879  L1EtMissParticleRefProd metRefTmp ;
880  L1ParticleMap::L1IndexComboVector combosTmp ; // unfilled for single objs
881 
882  if( itrig == L1ParticleMap::kSingleMu3 ||
883  itrig == L1ParticleMap::kSingleMu5 ||
884  itrig == L1ParticleMap::kSingleMu7 ||
885  itrig == L1ParticleMap::kSingleMu10 ||
886  itrig == L1ParticleMap::kSingleMu14 ||
887  itrig == L1ParticleMap::kSingleMu20 ||
888  itrig == L1ParticleMap::kSingleMu25 )
889  {
890  objectTypes.push_back( L1ParticleMap::kMuon ) ;
891 
892  evaluateSingleObjectTrigger( inputMuonRefsSingle,
893  singleThresholds_[ itrig ],
894  decision,
895  outputMuonRefsTmp ) ;
896  }
897  else if( itrig == L1ParticleMap::kSingleIsoEG5 ||
898  itrig == L1ParticleMap::kSingleIsoEG8 ||
899  itrig == L1ParticleMap::kSingleIsoEG10 ||
900  itrig == L1ParticleMap::kSingleIsoEG12 ||
901  itrig == L1ParticleMap::kSingleIsoEG15 ||
902  itrig == L1ParticleMap::kSingleIsoEG20 ||
903  itrig == L1ParticleMap::kSingleIsoEG25 )
904  {
905  objectTypes.push_back( L1ParticleMap::kEM ) ;
906 
907  evaluateSingleObjectTrigger( inputIsoEmRefs,
908  singleThresholds_[ itrig ],
909  decision,
910  outputEmRefsTmp ) ;
911  }
912  else if( itrig == L1ParticleMap::kSingleEG5 ||
913  itrig == L1ParticleMap::kSingleEG8 ||
914  itrig == L1ParticleMap::kSingleEG10 ||
915  itrig == L1ParticleMap::kSingleEG12 ||
916  itrig == L1ParticleMap::kSingleEG15 ||
917  itrig == L1ParticleMap::kSingleEG20 ||
918  itrig == L1ParticleMap::kSingleEG25 )
919  {
920  objectTypes.push_back( L1ParticleMap::kEM ) ;
921 
922  evaluateSingleObjectTrigger( inputRelaxedEmRefs,
923  singleThresholds_[ itrig ],
924  decision,
925  outputEmRefsTmp ) ;
926  }
927  else if( itrig == L1ParticleMap::kSingleJet15 ||
928  itrig == L1ParticleMap::kSingleJet20 ||
929  itrig == L1ParticleMap::kSingleJet30 ||
930  itrig == L1ParticleMap::kSingleJet50 ||
931  itrig == L1ParticleMap::kSingleJet70 ||
932  itrig == L1ParticleMap::kSingleJet100 ||
933  itrig == L1ParticleMap::kSingleJet150 ||
934  itrig == L1ParticleMap::kSingleJet200 )
935  {
936  objectTypes.push_back( L1ParticleMap::kJet ) ;
937 
938  evaluateSingleObjectTrigger( inputJetRefs,
939  singleThresholds_[ itrig ],
940  decision,
941  outputJetRefsTmp ) ;
942  }
943  else if( itrig == L1ParticleMap::kSingleTauJet10 ||
944  itrig == L1ParticleMap::kSingleTauJet20 ||
945  itrig == L1ParticleMap::kSingleTauJet30 ||
946  itrig == L1ParticleMap::kSingleTauJet35 ||
947  itrig == L1ParticleMap::kSingleTauJet40 ||
948  itrig == L1ParticleMap::kSingleTauJet60 ||
949  itrig == L1ParticleMap::kSingleTauJet80 ||
950  itrig == L1ParticleMap::kSingleTauJet100 )
951  {
952  objectTypes.push_back( L1ParticleMap::kJet ) ;
953 
954  evaluateSingleObjectTrigger( inputTauRefs,
955  singleThresholds_[ itrig ],
956  decision,
957  outputJetRefsTmp ) ;
958  }
959  else if( itrig == L1ParticleMap::kHTT100 ||
960  itrig == L1ParticleMap::kHTT200 ||
961  itrig == L1ParticleMap::kHTT250 ||
962  itrig == L1ParticleMap::kHTT300 ||
963  itrig == L1ParticleMap::kHTT400 ||
964  itrig == L1ParticleMap::kHTT500 )
965  {
966  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
967 
968  if( ht >= singleThresholds_[ itrig ] )
969  {
970  decision = true ;
971  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
972  }
973  }
974  else if( itrig == L1ParticleMap::kETM10 ||
975  itrig == L1ParticleMap::kETM15 ||
976  itrig == L1ParticleMap::kETM20 ||
977  itrig == L1ParticleMap::kETM30 ||
978  itrig == L1ParticleMap::kETM40 ||
979  itrig == L1ParticleMap::kETM50 ||
980  itrig == L1ParticleMap::kETM60 )
981  {
982  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
983 
984  if( met >= singleThresholds_[ itrig ] )
985  {
986  decision = true ;
987  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
988  }
989  }
990  else if( itrig == L1ParticleMap::kETT60 )
991  {
992  objectTypes.push_back( L1ParticleMap::kEtTotal ) ;
993 
994  if( ett >= singleThresholds_[ itrig ] )
995  {
996  decision = true ;
997  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
998  }
999  }
1000  else if( itrig == L1ParticleMap::kDoubleMu3 )
1001  {
1002  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1003  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1004 
1005  evaluateDoubleSameObjectTrigger( inputMuonRefsDouble,
1006  singleThresholds_[ itrig ],
1007  decision,
1008  outputMuonRefsTmp,
1009  combosTmp ) ;
1010  }
1011  else if( itrig == L1ParticleMap::kDoubleIsoEG8 ||
1012  itrig == L1ParticleMap::kDoubleIsoEG10 )
1013  {
1014  objectTypes.push_back( L1ParticleMap::kEM ) ;
1015  objectTypes.push_back( L1ParticleMap::kEM ) ;
1016 
1017  evaluateDoubleSameObjectTrigger( inputIsoEmRefs,
1018  singleThresholds_[ itrig ],
1019  decision,
1020  outputEmRefsTmp,
1021  combosTmp ) ;
1022  }
1023  else if( itrig == L1ParticleMap::kDoubleEG5 ||
1024  itrig == L1ParticleMap::kDoubleEG10 ||
1025  itrig == L1ParticleMap::kDoubleEG15 )
1026  {
1027  objectTypes.push_back( L1ParticleMap::kEM ) ;
1028  objectTypes.push_back( L1ParticleMap::kEM ) ;
1029 
1030  evaluateDoubleSameObjectTrigger( inputRelaxedEmRefs,
1031  singleThresholds_[ itrig ],
1032  decision,
1033  outputEmRefsTmp,
1034  combosTmp ) ;
1035  }
1036  else if( itrig == L1ParticleMap::kDoubleJet70 ||
1037  itrig == L1ParticleMap::kDoubleJet100 )
1038  {
1039  objectTypes.push_back( L1ParticleMap::kJet ) ;
1040  objectTypes.push_back( L1ParticleMap::kJet ) ;
1041 
1042  evaluateDoubleSameObjectTrigger( inputJetRefs,
1043  singleThresholds_[ itrig ],
1044  decision,
1045  outputJetRefsTmp,
1046  combosTmp ) ;
1047  }
1048  else if( itrig == L1ParticleMap::kDoubleTauJet20 ||
1049  itrig == L1ParticleMap::kDoubleTauJet30 ||
1050  itrig == L1ParticleMap::kDoubleTauJet35 ||
1051  itrig == L1ParticleMap::kDoubleTauJet40 )
1052  {
1053  objectTypes.push_back( L1ParticleMap::kJet ) ;
1054  objectTypes.push_back( L1ParticleMap::kJet ) ;
1055 
1056  evaluateDoubleSameObjectTrigger( inputTauRefs,
1057  singleThresholds_[ itrig ],
1058  decision,
1059  outputJetRefsTmp,
1060  combosTmp ) ;
1061  }
1062  else if( itrig == L1ParticleMap::kMu3_IsoEG5 ||
1063  itrig == L1ParticleMap::kMu5_IsoEG10 )
1064  {
1065  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1066  objectTypes.push_back( L1ParticleMap::kEM ) ;
1067 
1069  inputMuonRefsSingle,
1070  inputIsoEmRefs,
1071  doubleThresholds_[ itrig ].first,
1072  doubleThresholds_[ itrig ].second,
1073  decision,
1074  outputMuonRefsTmp,
1075  outputEmRefsTmp,
1076  combosTmp ) ;
1077  }
1078  else if( itrig == L1ParticleMap::kMu3_EG12 )
1079  {
1080  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1081  objectTypes.push_back( L1ParticleMap::kEM ) ;
1082 
1084  inputMuonRefsSingle,
1085  inputRelaxedEmRefs,
1086  doubleThresholds_[ itrig ].first,
1087  doubleThresholds_[ itrig ].second,
1088  decision,
1089  outputMuonRefsTmp,
1090  outputEmRefsTmp,
1091  combosTmp ) ;
1092  }
1093  else if( itrig == L1ParticleMap::kMu3_Jet15 ||
1094  itrig == L1ParticleMap::kMu5_Jet15 ||
1095  itrig == L1ParticleMap::kMu3_Jet70 ||
1096  itrig == L1ParticleMap::kMu5_Jet20 )
1097  {
1098  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1099  objectTypes.push_back( L1ParticleMap::kJet ) ;
1100 
1102  inputMuonRefsSingle,
1103  inputJetRefs,
1104  doubleThresholds_[ itrig ].first,
1105  doubleThresholds_[ itrig ].second,
1106  decision,
1107  outputMuonRefsTmp,
1108  outputJetRefsTmp,
1109  combosTmp ) ;
1110  }
1111  else if( itrig == L1ParticleMap::kMu5_TauJet20 ||
1112  itrig == L1ParticleMap::kMu5_TauJet30 )
1113  {
1114  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1115  objectTypes.push_back( L1ParticleMap::kJet ) ;
1116 
1118  inputMuonRefsSingle,
1119  inputTauRefs,
1120  doubleThresholds_[ itrig ].first,
1121  doubleThresholds_[ itrig ].second,
1122  decision,
1123  outputMuonRefsTmp,
1124  outputJetRefsTmp,
1125  combosTmp ) ;
1126  }
1127  else if( itrig == L1ParticleMap::kIsoEG10_EG10 )
1128  {
1129  objectTypes.push_back( L1ParticleMap::kEM ) ;
1130  objectTypes.push_back( L1ParticleMap::kEM ) ;
1131 
1133  inputIsoEmRefs,
1134  inputRelaxedEmRefs,
1135  doubleThresholds_[ itrig ].first,
1136  doubleThresholds_[ itrig ].second,
1137  decision,
1138  outputEmRefsTmp,
1139  combosTmp ) ;
1140  }
1141  else if( itrig == L1ParticleMap::kIsoEG10_Jet15 ||
1142  itrig == L1ParticleMap::kIsoEG10_Jet30 ||
1143  itrig == L1ParticleMap::kIsoEG10_Jet20 ||
1144  itrig == L1ParticleMap::kIsoEG10_Jet70 )
1145  {
1146  objectTypes.push_back( L1ParticleMap::kEM ) ;
1147  objectTypes.push_back( L1ParticleMap::kJet ) ;
1148 
1150  inputIsoEmRefs,
1151  inputJetRefs,
1152  doubleThresholds_[ itrig ].first,
1153  doubleThresholds_[ itrig ].second,
1154  decision,
1155  outputEmRefsTmp,
1156  outputJetRefsTmp,
1157  combosTmp ) ;
1158  }
1159  else if( itrig == L1ParticleMap::kIsoEG10_TauJet20 ||
1160  itrig == L1ParticleMap::kIsoEG10_TauJet30 )
1161  {
1162  objectTypes.push_back( L1ParticleMap::kEM ) ;
1163  objectTypes.push_back( L1ParticleMap::kJet ) ;
1164 
1166  inputIsoEmRefs,
1167  inputTauRefs,
1168  doubleThresholds_[ itrig ].first,
1169  doubleThresholds_[ itrig ].second,
1170  decision,
1171  outputEmRefsTmp,
1172  outputJetRefsTmp,
1173  combosTmp ) ;
1174  }
1175  else if( itrig == L1ParticleMap::kEG10_Jet15 ||
1176  itrig == L1ParticleMap::kEG12_Jet20 ||
1177  itrig == L1ParticleMap::kEG12_Jet70 )
1178  {
1179  objectTypes.push_back( L1ParticleMap::kEM ) ;
1180  objectTypes.push_back( L1ParticleMap::kJet ) ;
1181 
1183  inputRelaxedEmRefs,
1184  inputJetRefs,
1185  doubleThresholds_[ itrig ].first,
1186  doubleThresholds_[ itrig ].second,
1187  decision,
1188  outputEmRefsTmp,
1189  outputJetRefsTmp,
1190  combosTmp ) ;
1191  }
1192  else if( itrig == L1ParticleMap::kEG12_TauJet40 )
1193  {
1194  objectTypes.push_back( L1ParticleMap::kEM ) ;
1195  objectTypes.push_back( L1ParticleMap::kJet ) ;
1196 
1198  inputRelaxedEmRefs,
1199  inputTauRefs,
1200  doubleThresholds_[ itrig ].first,
1201  doubleThresholds_[ itrig ].second,
1202  decision,
1203  outputEmRefsTmp,
1204  outputJetRefsTmp,
1205  combosTmp ) ;
1206  }
1207  else if( itrig == L1ParticleMap::kJet70_TauJet40 )
1208  {
1209  objectTypes.push_back( L1ParticleMap::kJet ) ;
1210  objectTypes.push_back( L1ParticleMap::kJet ) ;
1211 
1213  inputJetRefs,
1214  inputTauRefs,
1215  doubleThresholds_[ itrig ].first,
1216  doubleThresholds_[ itrig ].second,
1217  decision,
1218  outputJetRefsTmp,
1219  combosTmp ) ;
1220  }
1221  else if( itrig == L1ParticleMap::kMu3_HTT200 )
1222  {
1223  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1224  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1225 
1226  if( ht >= doubleThresholds_[ itrig ].second )
1227  {
1228  evaluateSingleObjectTrigger( inputMuonRefsSingle,
1229  doubleThresholds_[ itrig ].first,
1230  decision,
1231  outputMuonRefsTmp ) ;
1232 
1233  if( decision )
1234  {
1235  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1236  }
1237  }
1238  }
1239  else if( itrig == L1ParticleMap::kIsoEG10_HTT200 )
1240  {
1241  objectTypes.push_back( L1ParticleMap::kEM ) ;
1242  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1243 
1244  if( ht >= doubleThresholds_[ itrig ].second )
1245  {
1246  evaluateSingleObjectTrigger( inputIsoEmRefs,
1247  doubleThresholds_[ itrig ].first,
1248  decision,
1249  outputEmRefsTmp ) ;
1250 
1251  if( decision )
1252  {
1253  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1254  }
1255  }
1256  }
1257  else if( itrig == L1ParticleMap::kEG12_HTT200 )
1258  {
1259  objectTypes.push_back( L1ParticleMap::kEM ) ;
1260  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1261 
1262  if( ht >= doubleThresholds_[ itrig ].second )
1263  {
1264  evaluateSingleObjectTrigger( inputRelaxedEmRefs,
1265  doubleThresholds_[ itrig ].first,
1266  decision,
1267  outputEmRefsTmp ) ;
1268 
1269  if( decision )
1270  {
1271  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1272  }
1273  }
1274  }
1275  else if( itrig == L1ParticleMap::kJet70_HTT200 )
1276  {
1277  objectTypes.push_back( L1ParticleMap::kJet ) ;
1278  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1279 
1280  if( ht >= doubleThresholds_[ itrig ].second )
1281  {
1282  evaluateSingleObjectTrigger( inputJetRefs,
1283  doubleThresholds_[ itrig ].first,
1284  decision,
1285  outputJetRefsTmp ) ;
1286 
1287  if( decision )
1288  {
1289  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1290  }
1291  }
1292  }
1293  else if( itrig == L1ParticleMap::kTauJet40_HTT200 )
1294  {
1295  objectTypes.push_back( L1ParticleMap::kJet ) ;
1296  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1297 
1298  if( ht >= doubleThresholds_[ itrig ].second )
1299  {
1300  evaluateSingleObjectTrigger( inputTauRefs,
1301  doubleThresholds_[ itrig ].first,
1302  decision,
1303  outputJetRefsTmp ) ;
1304 
1305  if( decision )
1306  {
1307  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1308  }
1309  }
1310  }
1311  else if( itrig == L1ParticleMap::kMu3_ETM30 )
1312  {
1313  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1314  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1315 
1316  if( met >= doubleThresholds_[ itrig ].second )
1317  {
1318  evaluateSingleObjectTrigger( inputMuonRefsSingle,
1319  doubleThresholds_[ itrig ].first,
1320  decision,
1321  outputMuonRefsTmp ) ;
1322 
1323  if( decision )
1324  {
1325  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1326  }
1327  }
1328  }
1329  else if( itrig == L1ParticleMap::kIsoEG10_ETM30 )
1330  {
1331  objectTypes.push_back( L1ParticleMap::kEM ) ;
1332  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1333 
1334  if( met >= doubleThresholds_[ itrig ].second )
1335  {
1336  evaluateSingleObjectTrigger( inputIsoEmRefs,
1337  doubleThresholds_[ itrig ].first,
1338  decision,
1339  outputEmRefsTmp ) ;
1340 
1341  if( decision )
1342  {
1343  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1344  }
1345  }
1346  }
1347  else if( itrig == L1ParticleMap::kEG12_ETM30 )
1348  {
1349  objectTypes.push_back( L1ParticleMap::kEM ) ;
1350  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1351 
1352  if( met >= doubleThresholds_[ itrig ].second )
1353  {
1354  evaluateSingleObjectTrigger( inputRelaxedEmRefs,
1355  doubleThresholds_[ itrig ].first,
1356  decision,
1357  outputEmRefsTmp ) ;
1358 
1359  if( decision )
1360  {
1361  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1362  }
1363  }
1364  }
1365  else if( itrig == L1ParticleMap::kJet70_ETM40 )
1366  {
1367  objectTypes.push_back( L1ParticleMap::kJet ) ;
1368  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1369 
1370  if( met >= doubleThresholds_[ itrig ].second )
1371  {
1372  evaluateSingleObjectTrigger( inputJetRefs,
1373  doubleThresholds_[ itrig ].first,
1374  decision,
1375  outputJetRefsTmp ) ;
1376 
1377  if( decision )
1378  {
1379  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1380  }
1381  }
1382  }
1383  else if( itrig == L1ParticleMap::kTauJet20_ETM20 ||
1384  itrig == L1ParticleMap::kTauJet30_ETM30 ||
1385  itrig == L1ParticleMap::kTauJet30_ETM40 )
1386  {
1387  objectTypes.push_back( L1ParticleMap::kJet ) ;
1388  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1389 
1390  if( met >= doubleThresholds_[ itrig ].second )
1391  {
1392  evaluateSingleObjectTrigger( inputTauRefs,
1393  doubleThresholds_[ itrig ].first,
1394  decision,
1395  outputJetRefsTmp ) ;
1396 
1397  if( decision )
1398  {
1399  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1400  }
1401  }
1402  }
1403  else if( itrig == L1ParticleMap::kHTT100_ETM30 )
1404  {
1405  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1406  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1407 
1408  if( ht >= doubleThresholds_[ itrig ].first &&
1409  met >= doubleThresholds_[ itrig ].second )
1410  {
1411  decision = true ;
1412  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1413  }
1414  }
1415  else if( itrig == L1ParticleMap::kTripleMu3 )
1416  {
1417  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1418  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1419  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1420 
1421  evaluateTripleSameObjectTrigger( inputMuonRefsDouble,
1422  singleThresholds_[ itrig ],
1423  decision,
1424  outputMuonRefsTmp,
1425  combosTmp ) ;
1426  }
1427  else if( itrig == L1ParticleMap::kTripleIsoEG5 )
1428  {
1429  objectTypes.push_back( L1ParticleMap::kEM ) ;
1430  objectTypes.push_back( L1ParticleMap::kEM ) ;
1431  objectTypes.push_back( L1ParticleMap::kEM ) ;
1432 
1433  evaluateTripleSameObjectTrigger( inputIsoEmRefs,
1434  singleThresholds_[ itrig ],
1435  decision,
1436  outputEmRefsTmp,
1437  combosTmp ) ;
1438  }
1439  else if( itrig == L1ParticleMap::kTripleEG10 )
1440  {
1441  objectTypes.push_back( L1ParticleMap::kEM ) ;
1442  objectTypes.push_back( L1ParticleMap::kEM ) ;
1443  objectTypes.push_back( L1ParticleMap::kEM ) ;
1444 
1445  evaluateTripleSameObjectTrigger( inputRelaxedEmRefs,
1446  singleThresholds_[ itrig ],
1447  decision,
1448  outputEmRefsTmp,
1449  combosTmp ) ;
1450  }
1451  else if( itrig == L1ParticleMap::kTripleJet50 )
1452  {
1453  objectTypes.push_back( L1ParticleMap::kJet ) ;
1454  objectTypes.push_back( L1ParticleMap::kJet ) ;
1455  objectTypes.push_back( L1ParticleMap::kJet ) ;
1456 
1457  evaluateTripleSameObjectTrigger( inputJetRefs,
1458  singleThresholds_[ itrig ],
1459  decision,
1460  outputJetRefsTmp,
1461  combosTmp ) ;
1462  }
1463  else if( itrig == L1ParticleMap::kTripleTauJet40 )
1464  {
1465  objectTypes.push_back( L1ParticleMap::kJet ) ;
1466  objectTypes.push_back( L1ParticleMap::kJet ) ;
1467  objectTypes.push_back( L1ParticleMap::kJet ) ;
1468 
1469  evaluateTripleSameObjectTrigger( inputTauRefs,
1470  singleThresholds_[ itrig ],
1471  decision,
1472  outputJetRefsTmp,
1473  combosTmp ) ;
1474  }
1475  else if( itrig == L1ParticleMap::kDoubleMu3_IsoEG5 )
1476  {
1477  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1478  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1479  objectTypes.push_back( L1ParticleMap::kEM ) ;
1480 
1482  inputMuonRefsDouble,
1483  inputIsoEmRefs,
1484  doubleThresholds_[ itrig ].first,
1485  doubleThresholds_[ itrig ].second,
1486  decision,
1487  outputMuonRefsTmp,
1488  outputEmRefsTmp,
1489  combosTmp ) ;
1490  }
1491  else if( itrig == L1ParticleMap::kDoubleMu3_EG10 )
1492  {
1493  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1494  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1495  objectTypes.push_back( L1ParticleMap::kEM ) ;
1496 
1498  inputMuonRefsDouble,
1499  inputRelaxedEmRefs,
1500  doubleThresholds_[ itrig ].first,
1501  doubleThresholds_[ itrig ].second,
1502  decision,
1503  outputMuonRefsTmp,
1504  outputEmRefsTmp,
1505  combosTmp ) ;
1506  }
1507  else if( itrig == L1ParticleMap::kDoubleIsoEG5_Mu3 )
1508  {
1509  objectTypes.push_back( L1ParticleMap::kEM ) ;
1510  objectTypes.push_back( L1ParticleMap::kEM ) ;
1511  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1512 
1514  inputIsoEmRefs,
1515  inputMuonRefsSingle,
1516  doubleThresholds_[ itrig ].first,
1517  doubleThresholds_[ itrig ].second,
1518  decision,
1519  outputEmRefsTmp,
1520  outputMuonRefsTmp,
1521  combosTmp ) ;
1522  }
1523  else if( itrig == L1ParticleMap::kDoubleEG10_Mu3 )
1524  {
1525  objectTypes.push_back( L1ParticleMap::kEM ) ;
1526  objectTypes.push_back( L1ParticleMap::kEM ) ;
1527  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1528 
1530  inputRelaxedEmRefs,
1531  inputMuonRefsSingle,
1532  doubleThresholds_[ itrig ].first,
1533  doubleThresholds_[ itrig ].second,
1534  decision,
1535  outputEmRefsTmp,
1536  outputMuonRefsTmp,
1537  combosTmp ) ;
1538  }
1539  else if( itrig == L1ParticleMap::kDoubleMu3_HTT200 )
1540  {
1541  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1542  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1543  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1544 
1545  if( ht >= doubleThresholds_[ itrig ].second )
1546  {
1547  evaluateDoubleSameObjectTrigger( inputMuonRefsDouble,
1548  doubleThresholds_[ itrig ].first,
1549  decision,
1550  outputMuonRefsTmp,
1551  combosTmp,
1552  true ) ;
1553 
1554  if( decision )
1555  {
1556  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1557  }
1558  }
1559  }
1560  else if( itrig == L1ParticleMap::kDoubleIsoEG5_HTT200 )
1561  {
1562  objectTypes.push_back( L1ParticleMap::kEM ) ;
1563  objectTypes.push_back( L1ParticleMap::kEM ) ;
1564  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1565 
1566  if( ht >= doubleThresholds_[ itrig ].second )
1567  {
1568  evaluateDoubleSameObjectTrigger( inputIsoEmRefs,
1569  doubleThresholds_[ itrig ].first,
1570  decision,
1571  outputEmRefsTmp,
1572  combosTmp,
1573  true ) ;
1574 
1575  if( decision )
1576  {
1577  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1578  }
1579  }
1580  }
1581  else if( itrig == L1ParticleMap::kDoubleEG10_HTT200 )
1582  {
1583  objectTypes.push_back( L1ParticleMap::kEM ) ;
1584  objectTypes.push_back( L1ParticleMap::kEM ) ;
1585  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1586 
1587  if( ht >= doubleThresholds_[ itrig ].second )
1588  {
1589  evaluateDoubleSameObjectTrigger( inputRelaxedEmRefs,
1590  doubleThresholds_[ itrig ].first,
1591  decision,
1592  outputEmRefsTmp,
1593  combosTmp,
1594  true ) ;
1595 
1596  if( decision )
1597  {
1598  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1599  }
1600  }
1601  }
1602  else if( itrig == L1ParticleMap::kDoubleJet50_HTT200 )
1603  {
1604  objectTypes.push_back( L1ParticleMap::kJet ) ;
1605  objectTypes.push_back( L1ParticleMap::kJet ) ;
1606  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1607 
1608  if( ht >= doubleThresholds_[ itrig ].second )
1609  {
1610  evaluateDoubleSameObjectTrigger( inputJetRefs,
1611  doubleThresholds_[ itrig ].first,
1612  decision,
1613  outputJetRefsTmp,
1614  combosTmp,
1615  true ) ;
1616 
1617  if( decision )
1618  {
1619  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1620  }
1621  }
1622  }
1623  else if( itrig == L1ParticleMap::kDoubleTauJet40_HTT200 )
1624  {
1625  objectTypes.push_back( L1ParticleMap::kJet ) ;
1626  objectTypes.push_back( L1ParticleMap::kJet ) ;
1627  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1628 
1629  if( ht >= doubleThresholds_[ itrig ].second )
1630  {
1631  evaluateDoubleSameObjectTrigger( inputTauRefs,
1632  doubleThresholds_[ itrig ].first,
1633  decision,
1634  outputJetRefsTmp,
1635  combosTmp,
1636  true ) ;
1637 
1638  if( decision )
1639  {
1640  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1641  }
1642  }
1643  }
1644  else if( itrig == L1ParticleMap::kDoubleMu3_ETM20 )
1645  {
1646  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1647  objectTypes.push_back( L1ParticleMap::kMuon ) ;
1648  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1649 
1650  if( met >= doubleThresholds_[ itrig ].second )
1651  {
1652  evaluateDoubleSameObjectTrigger( inputMuonRefsDouble,
1653  doubleThresholds_[ itrig ].first,
1654  decision,
1655  outputMuonRefsTmp,
1656  combosTmp,
1657  true ) ;
1658 
1659  if( decision )
1660  {
1661  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1662  }
1663  }
1664  }
1665  else if( itrig == L1ParticleMap::kDoubleIsoEG5_ETM20 )
1666  {
1667  objectTypes.push_back( L1ParticleMap::kEM ) ;
1668  objectTypes.push_back( L1ParticleMap::kEM ) ;
1669  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1670 
1671  if( met >= doubleThresholds_[ itrig ].second )
1672  {
1673  evaluateDoubleSameObjectTrigger( inputIsoEmRefs,
1674  doubleThresholds_[ itrig ].first,
1675  decision,
1676  outputEmRefsTmp,
1677  combosTmp,
1678  true ) ;
1679 
1680  if( decision )
1681  {
1682  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1683  }
1684  }
1685  }
1686  else if( itrig == L1ParticleMap::kDoubleEG10_ETM20 )
1687  {
1688  objectTypes.push_back( L1ParticleMap::kEM ) ;
1689  objectTypes.push_back( L1ParticleMap::kEM ) ;
1690  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1691 
1692  if( met >= doubleThresholds_[ itrig ].second )
1693  {
1694  evaluateDoubleSameObjectTrigger( inputRelaxedEmRefs,
1695  doubleThresholds_[ itrig ].first,
1696  decision,
1697  outputEmRefsTmp,
1698  combosTmp,
1699  true ) ;
1700 
1701  if( decision )
1702  {
1703  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1704  }
1705  }
1706  }
1707  else if( itrig == L1ParticleMap::kDoubleJet50_ETM20 )
1708  {
1709  objectTypes.push_back( L1ParticleMap::kJet ) ;
1710  objectTypes.push_back( L1ParticleMap::kJet ) ;
1711  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1712 
1713  if( met >= doubleThresholds_[ itrig ].second )
1714  {
1715  evaluateDoubleSameObjectTrigger( inputJetRefs,
1716  doubleThresholds_[ itrig ].first,
1717  decision,
1718  outputJetRefsTmp,
1719  combosTmp,
1720  true ) ;
1721 
1722  if( decision )
1723  {
1724  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1725  }
1726  }
1727  }
1728  else if( itrig == L1ParticleMap::kDoubleTauJet40_ETM20 )
1729  {
1730  objectTypes.push_back( L1ParticleMap::kJet ) ;
1731  objectTypes.push_back( L1ParticleMap::kJet ) ;
1732  objectTypes.push_back( L1ParticleMap::kEtMiss ) ;
1733 
1734  if( met >= doubleThresholds_[ itrig ].second )
1735  {
1736  evaluateDoubleSameObjectTrigger( inputTauRefs,
1737  doubleThresholds_[ itrig ].first,
1738  decision,
1739  outputJetRefsTmp,
1740  combosTmp,
1741  true ) ;
1742 
1743  if( decision )
1744  {
1745  metRefTmp = L1EtMissParticleRefProd( metHandle ) ;
1746  }
1747  }
1748  }
1749  else if( itrig == L1ParticleMap::kQuadJet30 )
1750  {
1751  objectTypes.push_back( L1ParticleMap::kJet ) ;
1752  objectTypes.push_back( L1ParticleMap::kJet ) ;
1753  objectTypes.push_back( L1ParticleMap::kJet ) ;
1754  objectTypes.push_back( L1ParticleMap::kJet ) ;
1755 
1756  evaluateQuadSameObjectTrigger( inputJetRefs,
1757  singleThresholds_[ itrig ],
1758  decision,
1759  outputJetRefsTmp,
1760  combosTmp ) ;
1761  }
1762  else if( itrig == L1ParticleMap::kExclusiveDoubleIsoEG4 )
1763  {
1764  objectTypes.push_back( L1ParticleMap::kEM ) ;
1765  objectTypes.push_back( L1ParticleMap::kEM ) ;
1766 
1767  evaluateDoubleExclusiveIsoEG(inputIsoEmRefs,
1768  inputJetRefs,
1769  doubleThresholds_[ itrig ].first,
1770  doubleThresholds_[ itrig ].second,
1771  decision,
1772  outputEmRefsTmp,
1773  combosTmp);
1774 
1775  }
1776  else if( itrig == L1ParticleMap::kExclusiveDoubleJet60 )
1777  {
1778  objectTypes.push_back( L1ParticleMap::kJet ) ;
1779  objectTypes.push_back( L1ParticleMap::kJet ) ;
1780 
1781  if( inputJetRefs.size() == 2 )
1782  {
1783  evaluateDoubleSameObjectTrigger( inputJetRefs,
1784  singleThresholds_[ itrig ],
1785  decision,
1786  outputJetRefsTmp,
1787  combosTmp ) ;
1788  }
1789  }
1790  else if( itrig == L1ParticleMap::kExclusiveJet25_Gap_Jet25 )
1791  {
1792  objectTypes.push_back( L1ParticleMap::kJet ) ;
1793  objectTypes.push_back( L1ParticleMap::kJet ) ;
1794 
1795  if( inputJetRefs.size() == 2 )
1796  {
1797  evaluateJetGapJetTrigger( inputForJetRefs,
1798  singleThresholds_[ itrig ],
1799  decision,
1800  outputJetRefsTmp,
1801  combosTmp ) ;
1802  }
1803  }
1804  else if( itrig == L1ParticleMap::kIsoEG10_Jet20_ForJet10 )
1805  {
1806  objectTypes.push_back( L1ParticleMap::kEM ) ;
1807  objectTypes.push_back( L1ParticleMap::kJet ) ;
1808 
1809  evaluateForwardRapidityGap(inputForJetRefs,
1810  singleThresholds_[ itrig ],
1811  decision);
1812 
1813  if(decision){
1814  decision = false;
1816  inputIsoEmRefs,
1817  inputCenJetTauJetRefs,
1818  doubleThresholds_[ itrig ].first,
1819  doubleThresholds_[ itrig ].second,
1820  decision,
1821  outputEmRefsTmp,
1822  outputJetRefsTmp,
1823  combosTmp );
1824  }
1825  }
1826  else if( itrig == L1ParticleMap::kMinBias_HTT10 )
1827  {
1828  objectTypes.push_back( L1ParticleMap::kEtHad ) ;
1829 
1830  if( ht >= 10. )
1831  {
1832  decision = true ;
1833  metRefTmp = L1EtMissParticleRefProd( mhtHandle ) ;
1834  }
1835  }
1836  else if( itrig == L1ParticleMap::kZeroBias )
1837  {
1838  decision = true ;
1839  }
1840 
1841  L1EmParticleVectorRef outputEmRefs ;
1842  L1JetParticleVectorRef outputJetRefs ;
1843  L1MuonParticleVectorRef outputMuonRefs ;
1844  L1EtMissParticleRefProd metRef ;
1845  L1ParticleMap::L1IndexComboVector combos ; // unfilled for single objs
1846 
1847  if( decision )
1848  {
1849 // if( prescaleCounters_[ itrig ] % prescales_[ itrig ] )
1850 
1851  double rand = CLHEP::RandFlat::shoot() * ( double ) prescales_[ itrig ] ;
1852  if( rand > 1. )
1853  {
1854  decision = false ;
1855  }
1856  else
1857  {
1858  outputEmRefs = outputEmRefsTmp ;
1859  outputJetRefs = outputJetRefsTmp ;
1860  outputMuonRefs = outputMuonRefsTmp ;
1861  metRef = metRefTmp ;
1862  combos = combosTmp ;
1863  }
1864 
1865  ++prescaleCounters_[ itrig ] ;
1866  }
1867 
1868  // Construct a L1ParticleMap and add it to the collection.
1869  mapColl->push_back( L1ParticleMap(
1870  ( L1ParticleMap::L1TriggerType ) itrig,
1871  decision,
1872  objectTypes,
1873  outputEmRefs,
1874  outputJetRefs,
1875  outputMuonRefs,
1876  metRef,
1877  combos ) ) ;
1878 
1879  globalDecision = globalDecision || decision ;
1880  decisionWord.push_back( decision ) ;
1881  }
1882 
1883  // Put the L1ParticleMapCollection into the event.
1884  iEvent.put( mapColl ) ;
1885 
1886  // Make a L1GlobalTriggerReadoutRecord and put it into the event.
1887  auto_ptr< L1GlobalTriggerReadoutRecord > gtRecord(
1889  gtRecord->setDecision( globalDecision ) ;
1890  gtRecord->setDecisionWord( decisionWord ) ;
1891  iEvent.put( gtRecord ) ;
1892 
1893  return ;
1894 }
1895 
1896 
1897 template< class TCollection >
1898 void
1900  const edm::Handle< TCollection >& handle, // input
1901  std::vector< edm::Ref< TCollection > >& vectorRefs ) // output
1902 {
1903  for( size_t i = 0 ; i < handle->size() ; ++i )
1904  {
1905  vectorRefs.push_back( edm::Ref< TCollection >( handle, i ) ) ;
1906  }
1907 }
1908 
1909 template< class TCollection >
1910 void
1912  const std::vector< edm::Ref< TCollection > >& inputRefs, // input
1913  const double& etThreshold, // input
1914  bool& decision, // output
1915  std::vector< edm::Ref< TCollection > >& outputRefs ) // output
1916 {
1917  for( size_t i = 0 ; i < inputRefs.size() ; ++i )
1918  {
1919  if( inputRefs[ i ].get()->et() >= etThreshold )
1920  {
1921  decision = true ;
1922  outputRefs.push_back( inputRefs[ i ] ) ;
1923  }
1924  }
1925 }
1926 
1927 template< class TCollection >
1928 void
1930  const std::vector< edm::Ref< TCollection > >& inputRefs, // input
1931  const double& etThreshold, // input
1932  bool& decision, // output
1933  std::vector< edm::Ref< TCollection > >& outputRefs, // output
1935  bool combinedWithGlobalObject ) // input
1936 {
1937  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
1938  // because i is unsigned, and if size() is 0, then RHS undefined.
1939  for( size_t i = 0 ; i+1 < inputRefs.size() ; ++i )
1940  {
1941  const edm::Ref< TCollection >& refi = inputRefs[ i ] ;
1942  if( refi.get()->et() >= etThreshold )
1943  {
1944  for( size_t j = i+1 ; j < inputRefs.size() ; ++j )
1945  {
1946  const edm::Ref< TCollection >& refj = inputRefs[ j ] ;
1947  if( refj.get()->et() >= etThreshold )
1948  {
1949  decision = true ;
1950 
1951  // If the two objects are already in the list, find
1952  // their indices.
1953  int iInList = kDefault ;
1954  int jInList = kDefault ;
1955  for( size_t iout = 0 ; iout < outputRefs.size() ; ++iout )
1956  {
1957  if( refi == outputRefs[ iout ] )
1958  {
1959  iInList = iout ;
1960  }
1961 
1962  if( refj == outputRefs[ iout ] )
1963  {
1964  jInList = iout ;
1965  }
1966  }
1967 
1968  // If either object is not in the list, add it, and
1969  // record its index.
1970  if( iInList == kDefault )
1971  {
1972  iInList = outputRefs.size() ;
1973  outputRefs.push_back( refi ) ;
1974  }
1975 
1976  if( jInList == kDefault )
1977  {
1978  jInList = outputRefs.size() ;
1979  outputRefs.push_back( refj ) ;
1980  }
1981 
1982  // Record this object combination.
1984  combo.push_back( iInList ) ;
1985  combo.push_back( jInList ) ;
1986  if( combinedWithGlobalObject ) combo.push_back( 0 ) ;
1987  combos.push_back( combo ) ;
1988  }
1989  }
1990  }
1991  }
1992 }
1993 
1994 
1995 template< class TCollection >
1996 void
1998  const std::vector< edm::Ref< TCollection > >& inputRefs, // input
1999  const double& etThreshold, // input
2000  bool& decision, // output
2001  std::vector< edm::Ref< TCollection > >& outputRefs, // output
2002  l1extra::L1ParticleMap::L1IndexComboVector& combos ) // output
2003 {
2004  // Use i+2 < inputRefs.size() instead of i < inputRefs.size()-2
2005  // because i is unsigned, and if size() is 0, then RHS undefined.
2006  for( size_t i = 0 ; i+2 < inputRefs.size() ; ++i )
2007  {
2008  const edm::Ref< TCollection >& refi = inputRefs[ i ] ;
2009  if( refi.get()->et() >= etThreshold )
2010  {
2011  for( size_t j = i+1 ; j+1 < inputRefs.size() ; ++j )
2012  {
2013  const edm::Ref< TCollection >& refj = inputRefs[ j ] ;
2014  if( refj.get()->et() >= etThreshold )
2015  {
2016  for( size_t k = j+1 ; k < inputRefs.size() ; ++k )
2017  {
2018  const edm::Ref< TCollection >& refk = inputRefs[ k ] ;
2019  if( refk.get()->et() >= etThreshold )
2020  {
2021  decision = true ;
2022 
2023  // If the three objects are already in the list, find
2024  // their indices.
2025  int iInList = kDefault ;
2026  int jInList = kDefault ;
2027  int kInList = kDefault ;
2028  for( size_t iout = 0 ; iout < outputRefs.size() ; ++iout )
2029  {
2030  if( refi == outputRefs[ iout ] )
2031  {
2032  iInList = iout ;
2033  }
2034 
2035  if( refj == outputRefs[ iout ] )
2036  {
2037  jInList = iout ;
2038  }
2039 
2040  if( refk == outputRefs[ iout ] )
2041  {
2042  kInList = iout ;
2043  }
2044  }
2045 
2046  // If any object is not in the list, add it, and
2047  // record its index.
2048  if( iInList == kDefault )
2049  {
2050  iInList = outputRefs.size() ;
2051  outputRefs.push_back( refi );
2052  }
2053 
2054  if( jInList == kDefault )
2055  {
2056  jInList = outputRefs.size() ;
2057  outputRefs.push_back( refj );
2058  }
2059 
2060  if( kInList == kDefault )
2061  {
2062  kInList = outputRefs.size() ;
2063  outputRefs.push_back( refk );
2064  }
2065 
2066  // Record this object combination.
2068  combo.push_back( iInList ) ;
2069  combo.push_back( jInList ) ;
2070  combo.push_back( kInList ) ;
2071  combos.push_back( combo ) ;
2072  }
2073  }
2074  }
2075  }
2076  }
2077  }
2078 }
2079 
2080 
2081 template< class TCollection1, class TCollection2 >
2082 void
2084  const std::vector< edm::Ref< TCollection1 > >& inputRefs1, // input
2085  const std::vector< edm::Ref< TCollection2 > >& inputRefs2, // input
2086  const double& etThreshold1, // input
2087  const double& etThreshold2, // input
2088  bool& decision, // output
2089  std::vector< edm::Ref< TCollection1 > >& outputRefs1, // output
2090  std::vector< edm::Ref< TCollection2 > >& outputRefs2, // output
2091  l1extra::L1ParticleMap::L1IndexComboVector& combos ) // output
2092 {
2093  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
2094  // because i is unsigned, and if size() is 0, then RHS undefined.
2095  for( size_t i = 0 ; i+1 < inputRefs1.size() ; ++i )
2096  {
2097  const edm::Ref< TCollection1 >& refi = inputRefs1[ i ] ;
2098  if( refi.get()->et() >= etThreshold1 )
2099  {
2100  for( size_t j = i+1 ; j < inputRefs1.size() ; ++j )
2101  {
2102  const edm::Ref< TCollection1 >& refj = inputRefs1[ j ] ;
2103  if( refj.get()->et() >= etThreshold1 )
2104  {
2105  for( size_t k = 0 ; k < inputRefs2.size() ; ++k )
2106  {
2107  const edm::Ref< TCollection2 >& refk = inputRefs2[ k ] ;
2108  if( refk.get()->et() >= etThreshold2 )
2109  {
2110  decision = true ;
2111 
2112  // If the three objects are already in the list, find
2113  // their indices.
2114  int iInList = kDefault ;
2115  int jInList = kDefault ;
2116 
2117  for( size_t iout = 0 ;
2118  iout < outputRefs1.size() ; ++iout )
2119  {
2120  if( refi == outputRefs1[ iout ] )
2121  {
2122  iInList = iout ;
2123  }
2124 
2125  if( refj == outputRefs1[ iout ] )
2126  {
2127  jInList = iout ;
2128  }
2129  }
2130 
2131  int kInList = kDefault ;
2132  for( size_t kout = 0 ;
2133  kout < outputRefs2.size() ; ++kout )
2134  {
2135  if( refk == outputRefs2[ kout ] )
2136  {
2137  kInList = kout ;
2138  }
2139  }
2140 
2141  // If any object is not in the list, add it, and
2142  // record its index.
2143  if( iInList == kDefault )
2144  {
2145  iInList = outputRefs1.size() ;
2146  outputRefs1.push_back( refi );
2147  }
2148 
2149  if( jInList == kDefault )
2150  {
2151  jInList = outputRefs1.size() ;
2152  outputRefs1.push_back( refj );
2153  }
2154 
2155  if( kInList == kDefault )
2156  {
2157  kInList = outputRefs2.size() ;
2158  outputRefs2.push_back( refk );
2159  }
2160 
2161  // Record this object combination.
2163  combo.push_back( iInList ) ;
2164  combo.push_back( jInList ) ;
2165  combo.push_back( kInList ) ;
2166  combos.push_back( combo ) ;
2167  }
2168  }
2169  }
2170  }
2171  }
2172  }
2173 }
2174 
2175 
2176 template< class TCollection >
2177 void
2179  const std::vector< edm::Ref< TCollection > >& inputRefs, // input
2180  const double& etThreshold, // input
2181  bool& decision, // output
2182  std::vector< edm::Ref< TCollection > >& outputRefs, // output
2183  l1extra::L1ParticleMap::L1IndexComboVector& combos ) // output
2184 {
2185  // Use i+3 < inputRefs.size() instead of i < inputRefs.size()-3
2186  // because i is unsigned, and if size() is 0, then RHS undefined.
2187  for( size_t i = 0 ; i+3 < inputRefs.size() ; ++i )
2188  {
2189  const edm::Ref< TCollection >& refi = inputRefs[ i ] ;
2190  if( refi.get()->et() >= etThreshold )
2191  {
2192  for( size_t j = i+1 ; j+2 < inputRefs.size() ; ++j )
2193  {
2194  const edm::Ref< TCollection >& refj = inputRefs[ j ] ;
2195  if( refj.get()->et() >= etThreshold )
2196  {
2197  for( size_t k = j+1 ; k+1 < inputRefs.size() ; ++k )
2198  {
2199  const edm::Ref< TCollection >& refk = inputRefs[ k ] ;
2200  if( refk.get()->et() >= etThreshold )
2201  {
2202  for( size_t p = k+1 ; p < inputRefs.size() ; ++p )
2203  {
2204  const edm::Ref< TCollection >& refp = inputRefs[ p ] ;
2205  if( refp.get()->et() >= etThreshold )
2206  {
2207  decision = true ;
2208 
2209  // If the objects are already in the list, find
2210  // their indices.
2211  int iInList = kDefault ;
2212  int jInList = kDefault ;
2213  int kInList = kDefault ;
2214  int pInList = kDefault ;
2215  for( size_t iout = 0 ;
2216  iout < outputRefs.size() ; ++iout )
2217  {
2218  if( refi == outputRefs[ iout ] )
2219  {
2220  iInList = iout ;
2221  }
2222 
2223  if( refj == outputRefs[ iout ] )
2224  {
2225  jInList = iout ;
2226  }
2227 
2228  if( refk == outputRefs[ iout ] )
2229  {
2230  kInList = iout ;
2231  }
2232 
2233  if( refp == outputRefs[ iout ] )
2234  {
2235  pInList = iout ;
2236  }
2237  }
2238 
2239  // If any object is not in the list, add it, and
2240  // record its index.
2241  if( iInList == kDefault )
2242  {
2243  iInList = outputRefs.size() ;
2244  outputRefs.push_back( refi ) ;
2245  }
2246 
2247  if( jInList == kDefault )
2248  {
2249  jInList = outputRefs.size() ;
2250  outputRefs.push_back( refj ) ;
2251  }
2252 
2253  if( kInList == kDefault )
2254  {
2255  kInList = outputRefs.size() ;
2256  outputRefs.push_back( refk ) ;
2257  }
2258 
2259  if( pInList == kDefault )
2260  {
2261  pInList = outputRefs.size() ;
2262  outputRefs.push_back( refp ) ;
2263  }
2264 
2265  // Record this object combination.
2267  combo.push_back( iInList ) ;
2268  combo.push_back( jInList ) ;
2269  combo.push_back( kInList ) ;
2270  combo.push_back( pInList ) ;
2271  combos.push_back( combo ) ;
2272  }
2273  }
2274  }
2275  }
2276  }
2277  }
2278  }
2279  }
2280 }
2281 
2282 
2283 template< class TCollection1, class TCollection2 >
2284 void
2286  const std::vector< edm::Ref< TCollection1 > >& inputRefs1, // input
2287  const std::vector< edm::Ref< TCollection2 > >& inputRefs2, // input
2288  const double& etThreshold1, // input
2289  const double& etThreshold2, // input
2290  bool& decision, // output
2291  std::vector< edm::Ref< TCollection1 > >& outputRefs1, // output
2292  std::vector< edm::Ref< TCollection2 > >& outputRefs2, // output
2293  l1extra::L1ParticleMap::L1IndexComboVector& combos ) // output
2294 {
2295  for( size_t i = 0 ; i < inputRefs1.size() ; ++i )
2296  {
2297  const edm::Ref< TCollection1 >& refi = inputRefs1[ i ] ;
2298  if( refi.get()->et() >= etThreshold1 )
2299  {
2300  for( size_t j = 0 ; j < inputRefs2.size() ; ++j )
2301  {
2302  const edm::Ref< TCollection2 >& refj = inputRefs2[ j ] ;
2303 
2304  if( refj.get()->et() >= etThreshold2 )
2305  {
2306  decision = true ;
2307 
2308  // If the two objects are already in their respective lists,
2309  // find their indices.
2310  int iInList = kDefault ;
2311  for( size_t iout = 0 ; iout < outputRefs1.size() ; ++iout )
2312  {
2313  if( refi == outputRefs1[ iout ] )
2314  {
2315  iInList = iout ;
2316  }
2317  }
2318 
2319  int jInList = kDefault ;
2320  for( size_t jout = 0 ; jout < outputRefs2.size() ; ++jout )
2321  {
2322  if( refj == outputRefs2[ jout ] )
2323  {
2324  jInList = jout ;
2325  }
2326  }
2327 
2328  // If either object is not in the list, add it, and
2329  // record its index.
2330  if( iInList == kDefault )
2331  {
2332  iInList = outputRefs1.size() ;
2333  outputRefs1.push_back( refi ) ;
2334  }
2335 
2336  if( jInList == kDefault )
2337  {
2338  jInList = outputRefs2.size() ;
2339  outputRefs2.push_back( refj ) ;
2340  }
2341 
2342  // Record this object combination.
2344  combo.push_back( iInList ) ;
2345  combo.push_back( jInList ) ;
2346  combos.push_back( combo ) ;
2347  }
2348  }
2349  }
2350  }
2351 }
2352 
2353 
2354 template< class TCollection >
2355 void
2357  const std::vector< edm::Ref< TCollection > >& inputRefs1, // input
2358  const std::vector< edm::Ref< TCollection > >& inputRefs2, // input
2359  const double& etThreshold1, // input
2360  const double& etThreshold2, // input
2361  bool& decision, // output
2362  std::vector< edm::Ref< TCollection > >& outputRefs, // output
2363  l1extra::L1ParticleMap::L1IndexComboVector& combos ) // output
2364 {
2365  for( size_t i = 0 ; i < inputRefs1.size() ; ++i )
2366  {
2367  const edm::Ref< TCollection >& refi = inputRefs1[ i ] ;
2368  if( refi.get()->et() >= etThreshold1 )
2369  {
2370  for( size_t j = 0 ; j < inputRefs2.size() ; ++j )
2371  {
2372  const edm::Ref< TCollection >& refj = inputRefs2[ j ] ;
2373 
2374  if( refj.get()->et() >= etThreshold2 &&
2375  refi != refj )
2376  {
2377  decision = true ;
2378 
2379  // If the two objects are already in their respective lists,
2380  // find their indices.
2381  int iInList = kDefault ;
2382  for( size_t iout = 0 ; iout < outputRefs.size() ; ++iout )
2383  {
2384  if( refi == outputRefs[ iout ] )
2385  {
2386  iInList = iout ;
2387  }
2388  }
2389 
2390  int jInList = kDefault ;
2391  for( size_t jout = 0 ; jout < outputRefs.size() ; ++jout )
2392  {
2393  if( refj == outputRefs[ jout ] )
2394  {
2395  jInList = jout ;
2396  }
2397  }
2398 
2399  // If either object is not in the list, add it, and
2400  // record its index.
2401  if( iInList == kDefault )
2402  {
2403  iInList = outputRefs.size() ;
2404  outputRefs.push_back( refi ) ;
2405  }
2406 
2407  if( jInList == kDefault )
2408  {
2409  jInList = outputRefs.size() ;
2410  outputRefs.push_back( refj ) ;
2411  }
2412 
2413  // Record this object combination.
2415  combo.push_back( iInList ) ;
2416  combo.push_back( jInList ) ;
2417  combos.push_back( combo ) ;
2418  }
2419  }
2420  }
2421  }
2422 }
2423 
2424 void
2426  const l1extra::L1EmParticleVectorRef& inputRefs1, // input
2427  const l1extra::L1JetParticleVectorRef& inputRefs2, // input
2428  const double& etThreshold1, // input
2429  const double& etThreshold2, // input
2430  bool& decision, // output
2431  l1extra::L1EmParticleVectorRef& outputRefs1, // output
2432  l1extra::L1JetParticleVectorRef& outputRefs2, // output
2433  l1extra::L1ParticleMap::L1IndexComboVector& combos ) // output
2434 {
2435  for( size_t i = 0 ; i < inputRefs1.size() ; ++i )
2436  {
2437  const l1extra::L1EmParticleRef& refi = inputRefs1[ i ] ;
2438  if( refi.get()->et() >= etThreshold1 )
2439  {
2440  for( size_t j = 0 ; j < inputRefs2.size() ; ++j )
2441  {
2442  const l1extra::L1JetParticleRef& refj = inputRefs2[ j ] ;
2443 
2444  // Check for identical region only if both HW objects are non-null.
2445  if( refj.get()->et() >= etThreshold2 &&
2446  ( refi.get()->gctEmCand() == 0 ||
2447  refj.get()->gctJetCand() == 0 ||
2448  refi.get()->gctEmCand()->regionId() !=
2449  refj.get()->gctJetCand()->regionId() ) )
2450  {
2451  decision = true ;
2452 
2453  // If the two objects are already in their respective lists,
2454  // find their indices.
2455  int iInList = kDefault ;
2456  for( size_t iout = 0 ; iout < outputRefs1.size() ; ++iout )
2457  {
2458  if( refi == outputRefs1[ iout ] )
2459  {
2460  iInList = iout ;
2461  }
2462  }
2463 
2464  int jInList = kDefault ;
2465  for( size_t jout = 0 ; jout < outputRefs2.size() ; ++jout )
2466  {
2467  if( refj == outputRefs2[ jout ] )
2468  {
2469  jInList = jout ;
2470  }
2471  }
2472 
2473  // If either object is not in the list, add it, and
2474  // record its index.
2475  if( iInList == kDefault )
2476  {
2477  iInList = outputRefs1.size() ;
2478  outputRefs1.push_back( refi ) ;
2479  }
2480 
2481  if( jInList == kDefault )
2482  {
2483  jInList = outputRefs2.size() ;
2484  outputRefs2.push_back( refj ) ;
2485  }
2486 
2487  // Record this object combination.
2489  combo.push_back( iInList ) ;
2490  combo.push_back( jInList ) ;
2491  combos.push_back( combo ) ;
2492  }
2493  }
2494  }
2495  }
2496 }
2497 
2498 // ok if both objects are above the threshold and are in opposite hemispheres
2500  const l1extra::L1JetParticleVectorRef& inputRefs, // input
2501  const double& etThreshold, // input
2502  bool& decision, // output
2503  l1extra::L1JetParticleVectorRef& outputRefs, // output
2504  l1extra::L1ParticleMap::L1IndexComboVector& combos ) // output
2505 {
2506  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
2507  // because i is unsigned, and if size() is 0, then RHS undefined.
2508  for( size_t i = 0 ; i+1 < inputRefs.size() ; ++i )
2509  {
2510  const l1extra::L1JetParticleRef& refi = inputRefs[ i ] ;
2511  if( refi.get()->et() >= etThreshold )
2512  {
2513  for( size_t j = i+1 ; j < inputRefs.size() ; ++j )
2514  {
2515  const l1extra::L1JetParticleRef& refj = inputRefs[ j ] ;
2516  if( ( refj.get()->et() >= etThreshold ) &&
2517  ( ( ( refi.get()->eta() < 0. ) && ( refj.get()->eta() > 0. ) )
2518  ||
2519  ( ( refi.get()->eta() > 0. ) && ( refj.get()->eta() < 0. ) )
2520  )
2521  )
2522  {
2523  decision = true ;
2524 
2525  // If the two objects are already in the list, find
2526  // their indices.
2527  int iInList = kDefault ;
2528  int jInList = kDefault ;
2529  for( size_t iout = 0 ; iout < outputRefs.size() ; ++iout )
2530  {
2531  if( refi == outputRefs[ iout ] )
2532  {
2533  iInList = iout ;
2534  }
2535 
2536  if( refj == outputRefs[ iout ] )
2537  {
2538  jInList = iout ;
2539  }
2540  }
2541 
2542  // If either object is not in the list, add it, and
2543  // record its index.
2544  if( iInList == kDefault )
2545  {
2546  iInList = outputRefs.size() ;
2547  outputRefs.push_back( refi ) ;
2548  }
2549 
2550  if( jInList == kDefault )
2551  {
2552  jInList = outputRefs.size() ;
2553  outputRefs.push_back( refj ) ;
2554  }
2555 
2556  // Record this object combination.
2558  combo.push_back( iInList ) ;
2559  combo.push_back( jInList ) ;
2560  combos.push_back( combo ) ;
2561  }
2562  }
2563  }
2564  }
2565 }
2566 
2567 
2568 // veto if both forward regions see some jet with e_T > threshold
2569 void
2571  const l1extra::L1JetParticleVectorRef& inputRefs, // input
2572  const double& etThreshold, // input
2573  bool& decision // output
2574  )
2575 {
2576  decision = true;
2577 
2578  // search for forward pair
2579  for( size_t k = 0 ; k+1 < inputRefs.size() ; ++k )
2580  {
2581  const l1extra::L1JetParticleRef& refk = inputRefs[ k ] ;
2582  double etak = refk.get()->eta();
2583  if( ( refk.get()->type() == l1extra::L1JetParticle::kForward ) &&
2584  ( refk.get()->et() >= etThreshold ) )
2585  {
2586  for( size_t l = k+1 ; l < inputRefs.size() ; ++l )
2587  {
2588  const l1extra::L1JetParticleRef& refl = inputRefs[ l ] ;
2589  double etal = refl.get()->eta();
2590  if( (refl.get()->type()==l1extra::L1JetParticle::kForward) &&
2591  (refl.get()->et() >= etThreshold ) &&
2592  ((etak>0 && etal<0) || (etak<0 && etal>0)) )
2593  {
2594  decision = false ;
2595  return ;// no need for going further -- for a faster algorithm
2596  }
2597  }
2598  }
2599  }
2600 }
2601 
2602 void
2604  const l1extra::L1EmParticleVectorRef& inputRefs1, // input
2605  const l1extra::L1JetParticleVectorRef& inputRefs2, // input
2606  const double& etThreshold1, // input
2607  const double& etThreshold2, // input
2608  bool& decision, // output
2609  l1extra::L1EmParticleVectorRef& outputRefs1, // output
2610  l1extra::L1ParticleMap::L1IndexComboVector& combos ) // output
2611 {
2612  if ( inputRefs1.size() ==2 )
2613  { // 2 iso EG
2614  decision=true;
2615  if (inputRefs2.size()>0)
2616  { // should veto if there are jets, with pt>thresh
2617  for( size_t j = 0 ; j < inputRefs2.size() ; ++j )
2618  {
2619  if(inputRefs2[j].get()->gctJetCand()->regionId() ==
2620  inputRefs1[0].get()->gctEmCand()->regionId())continue;
2621  if(inputRefs2[j].get()->gctJetCand()->regionId() ==
2622  inputRefs1[1].get()->gctEmCand()->regionId())continue;
2623  if(inputRefs2[j].get()->et( )> etThreshold2 ) {
2624  decision=false; break; }
2625  // break : for a faster algorithm
2626  }
2627  }
2628  if(decision)
2629  { // threshold evaluation for the Exclusive double isoEG
2630  decision = false;
2631  evaluateDoubleSameObjectTrigger( inputRefs1,
2632  etThreshold1,
2633  decision,
2634  outputRefs1,
2635  combos ) ;
2636  }
2637  }
2638 }
2639 
2640 
2641 //define this as a plug-in
2642 //DEFINE_FWK_MODULE(L1ExtraParticleMapProd);
std::vector< L1EmParticleRef > L1EmParticleVectorRef
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
virtual void produce(edm::Event &, const edm::EventSetup &)
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)
static const int kDefault
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)
std::vector< unsigned int > L1IndexCombo
int iEvent
Definition: GenABIO.cc:243
std::vector< L1IndexCombo > L1IndexComboVector
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:94
tuple handle
Definition: patZpeak.py:22
int j
Definition: DBlmapReader.cc:9
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 first
Definition: L1TdeRCT.cc:94
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
std::pair< double, double > doubleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
int k[5][pyjets_maxn]
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)
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)
int prescales_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
edm::RefProd< L1EtMissParticle > L1EtMissParticleRefProd
Signal rand(Signal arg)
Definition: vlib.cc:442
std::vector< L1MuonParticleRef > L1MuonParticleVectorRef
Pt3D refl(const Pt3D &p)
L1ExtraParticleMapProd(const edm::ParameterSet &)
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:242
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)
void evaluateJetGapJetTrigger(const l1extra::L1JetParticleVectorRef &inputRefs, const double &etThreshold, bool &decision, l1extra::L1JetParticleVectorRef &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos)