CMS 3D CMS Logo

L1ExtraParticleMapProd.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: L1ExtraParticleMapProd
4 // Class: L1ExtraParticleMapProd
5 //
10 //
11 // Original Author: Werner Sun
12 // Created: Mon Oct 16 23:19:38 EDT 2006
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  : muonSource_(iConfig.getParameter<edm::InputTag>("muonSource")),
44  isoEmSource_(iConfig.getParameter<edm::InputTag>("isolatedEmSource")),
45  nonIsoEmSource_(iConfig.getParameter<edm::InputTag>("nonIsolatedEmSource")),
46  cenJetSource_(iConfig.getParameter<edm::InputTag>("centralJetSource")),
47  forJetSource_(iConfig.getParameter<edm::InputTag>("forwardJetSource")),
48  tauJetSource_(iConfig.getParameter<edm::InputTag>("tauJetSource")),
49  etMissSource_(iConfig.getParameter<edm::InputTag>("etMissSource")),
50  htMissSource_(iConfig.getParameter<edm::InputTag>("htMissSource")) {
51  using namespace l1extra;
52 
53  // register your products
54  produces<L1ParticleMapCollection>();
55  produces<L1GlobalTriggerReadoutRecord>();
56 
57  // now do what ever other initialization is needed
58  for (int i = 0; i < L1ParticleMap::kNumOfL1TriggerTypes; ++i) {
59  singleThresholds_[i] = 0.;
60  doubleThresholds_[i].first = 0.;
61  doubleThresholds_[i].second = 0.;
62  prescales_[i] = 1;
63  }
64 
65  // Single object triggers, 5 thresholds each
66 
67  singleThresholds_[L1ParticleMap::kSingleMu3] = iConfig.getParameter<double>("L1_SingleMu3_thresh");
68  prescales_[L1ParticleMap::kSingleMu3] = iConfig.getParameter<int>("L1_SingleMu3_prescale");
69  singleThresholds_[L1ParticleMap::kSingleMu5] = iConfig.getParameter<double>("L1_SingleMu5_thresh");
70  prescales_[L1ParticleMap::kSingleMu5] = iConfig.getParameter<int>("L1_SingleMu5_prescale");
71  singleThresholds_[L1ParticleMap::kSingleMu7] = iConfig.getParameter<double>("L1_SingleMu7_thresh");
72  prescales_[L1ParticleMap::kSingleMu7] = iConfig.getParameter<int>("L1_SingleMu7_prescale");
73  singleThresholds_[L1ParticleMap::kSingleMu10] = iConfig.getParameter<double>("L1_SingleMu10_thresh");
74  prescales_[L1ParticleMap::kSingleMu10] = iConfig.getParameter<int>("L1_SingleMu10_prescale");
75  singleThresholds_[L1ParticleMap::kSingleMu14] = iConfig.getParameter<double>("L1_SingleMu14_thresh");
76  prescales_[L1ParticleMap::kSingleMu14] = iConfig.getParameter<int>("L1_SingleMu14_prescale");
77  singleThresholds_[L1ParticleMap::kSingleMu20] = iConfig.getParameter<double>("L1_SingleMu20_thresh");
78  prescales_[L1ParticleMap::kSingleMu20] = iConfig.getParameter<int>("L1_SingleMu20_prescale");
79  singleThresholds_[L1ParticleMap::kSingleMu25] = iConfig.getParameter<double>("L1_SingleMu25_thresh");
80  prescales_[L1ParticleMap::kSingleMu25] = iConfig.getParameter<int>("L1_SingleMu25_prescale");
81 
82  singleThresholds_[L1ParticleMap::kSingleIsoEG5] = iConfig.getParameter<double>("L1_SingleIsoEG5_thresh");
83  prescales_[L1ParticleMap::kSingleIsoEG5] = iConfig.getParameter<int>("L1_SingleIsoEG5_prescale");
84  singleThresholds_[L1ParticleMap::kSingleIsoEG8] = iConfig.getParameter<double>("L1_SingleIsoEG8_thresh");
85  prescales_[L1ParticleMap::kSingleIsoEG8] = iConfig.getParameter<int>("L1_SingleIsoEG8_prescale");
86  singleThresholds_[L1ParticleMap::kSingleIsoEG10] = iConfig.getParameter<double>("L1_SingleIsoEG10_thresh");
87  prescales_[L1ParticleMap::kSingleIsoEG10] = iConfig.getParameter<int>("L1_SingleIsoEG10_prescale");
88  singleThresholds_[L1ParticleMap::kSingleIsoEG12] = iConfig.getParameter<double>("L1_SingleIsoEG12_thresh");
89  prescales_[L1ParticleMap::kSingleIsoEG12] = iConfig.getParameter<int>("L1_SingleIsoEG12_prescale");
90  singleThresholds_[L1ParticleMap::kSingleIsoEG15] = iConfig.getParameter<double>("L1_SingleIsoEG15_thresh");
91  prescales_[L1ParticleMap::kSingleIsoEG15] = iConfig.getParameter<int>("L1_SingleIsoEG15_prescale");
92  singleThresholds_[L1ParticleMap::kSingleIsoEG20] = iConfig.getParameter<double>("L1_SingleIsoEG20_thresh");
93  prescales_[L1ParticleMap::kSingleIsoEG20] = iConfig.getParameter<int>("L1_SingleIsoEG20_prescale");
94  singleThresholds_[L1ParticleMap::kSingleIsoEG25] = iConfig.getParameter<double>("L1_SingleIsoEG25_thresh");
95  prescales_[L1ParticleMap::kSingleIsoEG25] = iConfig.getParameter<int>("L1_SingleIsoEG25_prescale");
96 
97  singleThresholds_[L1ParticleMap::kSingleEG5] = iConfig.getParameter<double>("L1_SingleEG5_thresh");
98  prescales_[L1ParticleMap::kSingleEG5] = iConfig.getParameter<int>("L1_SingleEG5_prescale");
99  singleThresholds_[L1ParticleMap::kSingleEG8] = iConfig.getParameter<double>("L1_SingleEG8_thresh");
100  prescales_[L1ParticleMap::kSingleEG8] = iConfig.getParameter<int>("L1_SingleEG8_prescale");
101  singleThresholds_[L1ParticleMap::kSingleEG10] = iConfig.getParameter<double>("L1_SingleEG10_thresh");
102  prescales_[L1ParticleMap::kSingleEG10] = iConfig.getParameter<int>("L1_SingleEG10_prescale");
103  singleThresholds_[L1ParticleMap::kSingleEG12] = iConfig.getParameter<double>("L1_SingleEG12_thresh");
104  prescales_[L1ParticleMap::kSingleEG12] = iConfig.getParameter<int>("L1_SingleEG12_prescale");
105  singleThresholds_[L1ParticleMap::kSingleEG15] = iConfig.getParameter<double>("L1_SingleEG15_thresh");
106  prescales_[L1ParticleMap::kSingleEG15] = iConfig.getParameter<int>("L1_SingleEG15_prescale");
107  singleThresholds_[L1ParticleMap::kSingleEG20] = iConfig.getParameter<double>("L1_SingleEG20_thresh");
108  prescales_[L1ParticleMap::kSingleEG20] = iConfig.getParameter<int>("L1_SingleEG20_prescale");
109  singleThresholds_[L1ParticleMap::kSingleEG25] = iConfig.getParameter<double>("L1_SingleEG25_thresh");
110  prescales_[L1ParticleMap::kSingleEG25] = iConfig.getParameter<int>("L1_SingleEG25_prescale");
111 
112  singleThresholds_[L1ParticleMap::kSingleJet15] = iConfig.getParameter<double>("L1_SingleJet15_thresh");
113  prescales_[L1ParticleMap::kSingleJet15] = iConfig.getParameter<int>("L1_SingleJet15_prescale");
114  singleThresholds_[L1ParticleMap::kSingleJet20] = iConfig.getParameter<double>("L1_SingleJet20_thresh");
115  prescales_[L1ParticleMap::kSingleJet20] = iConfig.getParameter<int>("L1_SingleJet20_prescale");
116  singleThresholds_[L1ParticleMap::kSingleJet30] = iConfig.getParameter<double>("L1_SingleJet30_thresh");
117  prescales_[L1ParticleMap::kSingleJet30] = iConfig.getParameter<int>("L1_SingleJet30_prescale");
118  singleThresholds_[L1ParticleMap::kSingleJet50] = iConfig.getParameter<double>("L1_SingleJet50_thresh");
119  prescales_[L1ParticleMap::kSingleJet50] = iConfig.getParameter<int>("L1_SingleJet50_prescale");
120  singleThresholds_[L1ParticleMap::kSingleJet70] = iConfig.getParameter<double>("L1_SingleJet70_thresh");
121  prescales_[L1ParticleMap::kSingleJet70] = iConfig.getParameter<int>("L1_SingleJet70_prescale");
122  singleThresholds_[L1ParticleMap::kSingleJet100] = iConfig.getParameter<double>("L1_SingleJet100_thresh");
123  prescales_[L1ParticleMap::kSingleJet100] = iConfig.getParameter<int>("L1_SingleJet100_prescale");
124  singleThresholds_[L1ParticleMap::kSingleJet150] = iConfig.getParameter<double>("L1_SingleJet150_thresh");
125  prescales_[L1ParticleMap::kSingleJet150] = iConfig.getParameter<int>("L1_SingleJet150_prescale");
126  singleThresholds_[L1ParticleMap::kSingleJet200] = iConfig.getParameter<double>("L1_SingleJet200_thresh");
127  prescales_[L1ParticleMap::kSingleJet200] = iConfig.getParameter<int>("L1_SingleJet200_prescale");
128 
129  singleThresholds_[L1ParticleMap::kSingleTauJet10] = iConfig.getParameter<double>("L1_SingleTauJet10_thresh");
130  prescales_[L1ParticleMap::kSingleTauJet10] = iConfig.getParameter<int>("L1_SingleTauJet10_prescale");
131  singleThresholds_[L1ParticleMap::kSingleTauJet20] = iConfig.getParameter<double>("L1_SingleTauJet20_thresh");
132  prescales_[L1ParticleMap::kSingleTauJet20] = iConfig.getParameter<int>("L1_SingleTauJet20_prescale");
133  singleThresholds_[L1ParticleMap::kSingleTauJet30] = iConfig.getParameter<double>("L1_SingleTauJet30_thresh");
134  prescales_[L1ParticleMap::kSingleTauJet30] = iConfig.getParameter<int>("L1_SingleTauJet30_prescale");
135  singleThresholds_[L1ParticleMap::kSingleTauJet35] = iConfig.getParameter<double>("L1_SingleTauJet35_thresh");
136  prescales_[L1ParticleMap::kSingleTauJet35] = iConfig.getParameter<int>("L1_SingleTauJet35_prescale");
137  singleThresholds_[L1ParticleMap::kSingleTauJet40] = iConfig.getParameter<double>("L1_SingleTauJet40_thresh");
138  prescales_[L1ParticleMap::kSingleTauJet40] = iConfig.getParameter<int>("L1_SingleTauJet40_prescale");
139  singleThresholds_[L1ParticleMap::kSingleTauJet60] = iConfig.getParameter<double>("L1_SingleTauJet60_thresh");
140  prescales_[L1ParticleMap::kSingleTauJet60] = iConfig.getParameter<int>("L1_SingleTauJet60_prescale");
141  singleThresholds_[L1ParticleMap::kSingleTauJet80] = iConfig.getParameter<double>("L1_SingleTauJet80_thresh");
142  prescales_[L1ParticleMap::kSingleTauJet80] = iConfig.getParameter<int>("L1_SingleTauJet80_prescale");
143  singleThresholds_[L1ParticleMap::kSingleTauJet100] = iConfig.getParameter<double>("L1_SingleTauJet100_thresh");
144  prescales_[L1ParticleMap::kSingleTauJet100] = iConfig.getParameter<int>("L1_SingleTauJet100_prescale");
145 
146  singleThresholds_[L1ParticleMap::kHTT100] = iConfig.getParameter<double>("L1_HTT100_thresh");
147  prescales_[L1ParticleMap::kHTT100] = iConfig.getParameter<int>("L1_HTT100_prescale");
148  singleThresholds_[L1ParticleMap::kHTT200] = iConfig.getParameter<double>("L1_HTT200_thresh");
149  prescales_[L1ParticleMap::kHTT200] = iConfig.getParameter<int>("L1_HTT200_prescale");
150  singleThresholds_[L1ParticleMap::kHTT250] = iConfig.getParameter<double>("L1_HTT250_thresh");
151  prescales_[L1ParticleMap::kHTT250] = iConfig.getParameter<int>("L1_HTT250_prescale");
152  singleThresholds_[L1ParticleMap::kHTT300] = iConfig.getParameter<double>("L1_HTT300_thresh");
153  prescales_[L1ParticleMap::kHTT300] = iConfig.getParameter<int>("L1_HTT300_prescale");
154  singleThresholds_[L1ParticleMap::kHTT400] = iConfig.getParameter<double>("L1_HTT400_thresh");
155  prescales_[L1ParticleMap::kHTT400] = iConfig.getParameter<int>("L1_HTT400_prescale");
156  singleThresholds_[L1ParticleMap::kHTT500] = iConfig.getParameter<double>("L1_HTT500_thresh");
157  prescales_[L1ParticleMap::kHTT500] = iConfig.getParameter<int>("L1_HTT500_prescale");
158 
159  singleThresholds_[L1ParticleMap::kETM10] = iConfig.getParameter<double>("L1_ETM10_thresh");
160  prescales_[L1ParticleMap::kETM10] = iConfig.getParameter<int>("L1_ETM10_prescale");
161  singleThresholds_[L1ParticleMap::kETM15] = iConfig.getParameter<double>("L1_ETM15_thresh");
162  prescales_[L1ParticleMap::kETM15] = iConfig.getParameter<int>("L1_ETM15_prescale");
163  singleThresholds_[L1ParticleMap::kETM20] = iConfig.getParameter<double>("L1_ETM20_thresh");
164  prescales_[L1ParticleMap::kETM20] = iConfig.getParameter<int>("L1_ETM20_prescale");
165  singleThresholds_[L1ParticleMap::kETM30] = iConfig.getParameter<double>("L1_ETM30_thresh");
166  prescales_[L1ParticleMap::kETM30] = iConfig.getParameter<int>("L1_ETM30_prescale");
167  singleThresholds_[L1ParticleMap::kETM40] = iConfig.getParameter<double>("L1_ETM40_thresh");
168  prescales_[L1ParticleMap::kETM40] = iConfig.getParameter<int>("L1_ETM40_prescale");
169  singleThresholds_[L1ParticleMap::kETM50] = iConfig.getParameter<double>("L1_ETM50_thresh");
170  prescales_[L1ParticleMap::kETM50] = iConfig.getParameter<int>("L1_ETM50_prescale");
171  singleThresholds_[L1ParticleMap::kETM60] = iConfig.getParameter<double>("L1_ETM60_thresh");
172  prescales_[L1ParticleMap::kETM60] = iConfig.getParameter<int>("L1_ETM60_prescale");
173 
174  singleThresholds_[L1ParticleMap::kETT60] = iConfig.getParameter<double>("L1_ETT60_thresh");
175  prescales_[L1ParticleMap::kETT60] = iConfig.getParameter<int>("L1_ETT60_prescale");
176 
177  // AA triggers
178 
179  singleThresholds_[L1ParticleMap::kDoubleMu3] = iConfig.getParameter<double>("L1_DoubleMu3_thresh");
180  prescales_[L1ParticleMap::kDoubleMu3] = iConfig.getParameter<int>("L1_DoubleMu3_prescale");
181 
182  singleThresholds_[L1ParticleMap::kDoubleIsoEG8] = iConfig.getParameter<double>("L1_DoubleIsoEG8_thresh");
183  prescales_[L1ParticleMap::kDoubleIsoEG8] = iConfig.getParameter<int>("L1_DoubleIsoEG8_prescale");
184  singleThresholds_[L1ParticleMap::kDoubleIsoEG10] = iConfig.getParameter<double>("L1_DoubleIsoEG10_thresh");
185  prescales_[L1ParticleMap::kDoubleIsoEG10] = iConfig.getParameter<int>("L1_DoubleIsoEG10_prescale");
186 
187  singleThresholds_[L1ParticleMap::kDoubleEG5] = iConfig.getParameter<double>("L1_DoubleEG5_thresh");
188  prescales_[L1ParticleMap::kDoubleEG5] = iConfig.getParameter<int>("L1_DoubleEG5_prescale");
189  singleThresholds_[L1ParticleMap::kDoubleEG10] = iConfig.getParameter<double>("L1_DoubleEG10_thresh");
190  prescales_[L1ParticleMap::kDoubleEG10] = iConfig.getParameter<int>("L1_DoubleEG10_prescale");
191  singleThresholds_[L1ParticleMap::kDoubleEG15] = iConfig.getParameter<double>("L1_DoubleEG15_thresh");
192  prescales_[L1ParticleMap::kDoubleEG15] = iConfig.getParameter<int>("L1_DoubleEG15_prescale");
193 
194  singleThresholds_[L1ParticleMap::kDoubleJet70] = iConfig.getParameter<double>("L1_DoubleJet70_thresh");
195  prescales_[L1ParticleMap::kDoubleJet70] = iConfig.getParameter<int>("L1_DoubleJet70_prescale");
196  singleThresholds_[L1ParticleMap::kDoubleJet100] = iConfig.getParameter<double>("L1_DoubleJet100_thresh");
197  prescales_[L1ParticleMap::kDoubleJet100] = iConfig.getParameter<int>("L1_DoubleJet100_prescale");
198 
199  singleThresholds_[L1ParticleMap::kDoubleTauJet20] = iConfig.getParameter<double>("L1_DoubleTauJet20_thresh");
200  prescales_[L1ParticleMap::kDoubleTauJet20] = iConfig.getParameter<int>("L1_DoubleTauJet20_prescale");
201  singleThresholds_[L1ParticleMap::kDoubleTauJet30] = iConfig.getParameter<double>("L1_DoubleTauJet30_thresh");
202  prescales_[L1ParticleMap::kDoubleTauJet30] = iConfig.getParameter<int>("L1_DoubleTauJet30_prescale");
203  singleThresholds_[L1ParticleMap::kDoubleTauJet35] = iConfig.getParameter<double>("L1_DoubleTauJet35_thresh");
204  prescales_[L1ParticleMap::kDoubleTauJet35] = iConfig.getParameter<int>("L1_DoubleTauJet35_prescale");
205  singleThresholds_[L1ParticleMap::kDoubleTauJet40] = iConfig.getParameter<double>("L1_DoubleTauJet40_thresh");
206  prescales_[L1ParticleMap::kDoubleTauJet40] = iConfig.getParameter<int>("L1_DoubleTauJet40_prescale");
207 
208  // AB triggers
209 
210  doubleThresholds_[L1ParticleMap::kMu3_IsoEG5].first = iConfig.getParameter<double>("L1_Mu3_IsoEG5_thresh1");
211  doubleThresholds_[L1ParticleMap::kMu3_IsoEG5].second = iConfig.getParameter<double>("L1_Mu3_IsoEG5_thresh2");
212  prescales_[L1ParticleMap::kMu3_IsoEG5] = iConfig.getParameter<int>("L1_Mu3_IsoEG5_prescale");
213  doubleThresholds_[L1ParticleMap::kMu5_IsoEG10].first = iConfig.getParameter<double>("L1_Mu5_IsoEG10_thresh1");
214  doubleThresholds_[L1ParticleMap::kMu5_IsoEG10].second = iConfig.getParameter<double>("L1_Mu5_IsoEG10_thresh2");
215  prescales_[L1ParticleMap::kMu5_IsoEG10] = iConfig.getParameter<int>("L1_Mu5_IsoEG10_prescale");
216 
217  doubleThresholds_[L1ParticleMap::kMu3_EG12].first = iConfig.getParameter<double>("L1_Mu3_EG12_thresh1");
218  doubleThresholds_[L1ParticleMap::kMu3_EG12].second = iConfig.getParameter<double>("L1_Mu3_EG12_thresh2");
219  prescales_[L1ParticleMap::kMu3_EG12] = iConfig.getParameter<int>("L1_Mu3_EG12_prescale");
220 
221  doubleThresholds_[L1ParticleMap::kMu3_Jet15].first = iConfig.getParameter<double>("L1_Mu3_Jet15_thresh1");
222  doubleThresholds_[L1ParticleMap::kMu3_Jet15].second = iConfig.getParameter<double>("L1_Mu3_Jet15_thresh2");
223  prescales_[L1ParticleMap::kMu3_Jet15] = iConfig.getParameter<int>("L1_Mu3_Jet15_prescale");
224  doubleThresholds_[L1ParticleMap::kMu5_Jet15].first = iConfig.getParameter<double>("L1_Mu5_Jet15_thresh1");
225  doubleThresholds_[L1ParticleMap::kMu5_Jet15].second = iConfig.getParameter<double>("L1_Mu5_Jet15_thresh2");
226  prescales_[L1ParticleMap::kMu5_Jet15] = iConfig.getParameter<int>("L1_Mu5_Jet15_prescale");
227  doubleThresholds_[L1ParticleMap::kMu3_Jet70].first = iConfig.getParameter<double>("L1_Mu3_Jet70_thresh1");
228  doubleThresholds_[L1ParticleMap::kMu3_Jet70].second = iConfig.getParameter<double>("L1_Mu3_Jet70_thresh2");
229  prescales_[L1ParticleMap::kMu3_Jet70] = iConfig.getParameter<int>("L1_Mu3_Jet70_prescale");
230  doubleThresholds_[L1ParticleMap::kMu5_Jet20].first = iConfig.getParameter<double>("L1_Mu5_Jet20_thresh1");
231  doubleThresholds_[L1ParticleMap::kMu5_Jet20].second = iConfig.getParameter<double>("L1_Mu5_Jet20_thresh2");
232  prescales_[L1ParticleMap::kMu5_Jet20] = iConfig.getParameter<int>("L1_Mu5_Jet20_prescale");
233 
234  doubleThresholds_[L1ParticleMap::kMu5_TauJet20].first = iConfig.getParameter<double>("L1_Mu5_TauJet20_thresh1");
235  doubleThresholds_[L1ParticleMap::kMu5_TauJet20].second = iConfig.getParameter<double>("L1_Mu5_TauJet20_thresh2");
236  prescales_[L1ParticleMap::kMu5_TauJet20] = iConfig.getParameter<int>("L1_Mu5_TauJet20_prescale");
237  doubleThresholds_[L1ParticleMap::kMu5_TauJet30].first = iConfig.getParameter<double>("L1_Mu5_TauJet30_thresh1");
238  doubleThresholds_[L1ParticleMap::kMu5_TauJet30].second = iConfig.getParameter<double>("L1_Mu5_TauJet30_thresh2");
239  prescales_[L1ParticleMap::kMu5_TauJet30] = iConfig.getParameter<int>("L1_Mu5_TauJet30_prescale");
240 
241  doubleThresholds_[L1ParticleMap::kIsoEG10_EG10].first = iConfig.getParameter<double>("L1_IsoEG10_EG10_thresh1");
242  doubleThresholds_[L1ParticleMap::kIsoEG10_EG10].second = iConfig.getParameter<double>("L1_IsoEG10_EG10_thresh2");
243  prescales_[L1ParticleMap::kIsoEG10_EG10] = iConfig.getParameter<int>("L1_IsoEG10_EG10_prescale");
244 
245  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet15].first = iConfig.getParameter<double>("L1_IsoEG10_Jet15_thresh1");
246  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet15].second = iConfig.getParameter<double>("L1_IsoEG10_Jet15_thresh2");
247  prescales_[L1ParticleMap::kIsoEG10_Jet15] = iConfig.getParameter<int>("L1_IsoEG10_Jet15_prescale");
248  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet30].first = iConfig.getParameter<double>("L1_IsoEG10_Jet30_thresh1");
249  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet30].second = iConfig.getParameter<double>("L1_IsoEG10_Jet30_thresh2");
250  prescales_[L1ParticleMap::kIsoEG10_Jet30] = iConfig.getParameter<int>("L1_IsoEG10_Jet30_prescale");
251  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet20].first = iConfig.getParameter<double>("L1_IsoEG10_Jet20_thresh1");
252  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet20].second = iConfig.getParameter<double>("L1_IsoEG10_Jet20_thresh2");
253  prescales_[L1ParticleMap::kIsoEG10_Jet20] = iConfig.getParameter<int>("L1_IsoEG10_Jet20_prescale");
254  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet70].first = iConfig.getParameter<double>("L1_IsoEG10_Jet70_thresh1");
255  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet70].second = iConfig.getParameter<double>("L1_IsoEG10_Jet70_thresh2");
256  prescales_[L1ParticleMap::kIsoEG10_Jet70] = iConfig.getParameter<int>("L1_IsoEG10_Jet70_prescale");
257 
258  doubleThresholds_[L1ParticleMap::kIsoEG10_TauJet20].first =
259  iConfig.getParameter<double>("L1_IsoEG10_TauJet20_thresh1");
260  doubleThresholds_[L1ParticleMap::kIsoEG10_TauJet20].second =
261  iConfig.getParameter<double>("L1_IsoEG10_TauJet20_thresh2");
262  prescales_[L1ParticleMap::kIsoEG10_TauJet20] = iConfig.getParameter<int>("L1_IsoEG10_TauJet20_prescale");
263  doubleThresholds_[L1ParticleMap::kIsoEG10_TauJet30].first =
264  iConfig.getParameter<double>("L1_IsoEG10_TauJet30_thresh1");
265  doubleThresholds_[L1ParticleMap::kIsoEG10_TauJet30].second =
266  iConfig.getParameter<double>("L1_IsoEG10_TauJet30_thresh2");
267  prescales_[L1ParticleMap::kIsoEG10_TauJet30] = iConfig.getParameter<int>("L1_IsoEG10_TauJet30_prescale");
268 
269  doubleThresholds_[L1ParticleMap::kEG10_Jet15].first = iConfig.getParameter<double>("L1_EG10_Jet15_thresh1");
270  doubleThresholds_[L1ParticleMap::kEG10_Jet15].second = iConfig.getParameter<double>("L1_EG10_Jet15_thresh2");
271  prescales_[L1ParticleMap::kEG10_Jet15] = iConfig.getParameter<int>("L1_EG10_Jet15_prescale");
272  doubleThresholds_[L1ParticleMap::kEG12_Jet20].first = iConfig.getParameter<double>("L1_EG12_Jet20_thresh1");
273  doubleThresholds_[L1ParticleMap::kEG12_Jet20].second = iConfig.getParameter<double>("L1_EG12_Jet20_thresh2");
274  prescales_[L1ParticleMap::kEG12_Jet20] = iConfig.getParameter<int>("L1_EG12_Jet20_prescale");
275  doubleThresholds_[L1ParticleMap::kEG12_Jet70].first = iConfig.getParameter<double>("L1_EG12_Jet70_thresh1");
276  doubleThresholds_[L1ParticleMap::kEG12_Jet70].second = iConfig.getParameter<double>("L1_EG12_Jet70_thresh2");
277  prescales_[L1ParticleMap::kEG12_Jet70] = iConfig.getParameter<int>("L1_EG12_Jet70_prescale");
278 
279  doubleThresholds_[L1ParticleMap::kEG12_TauJet40].first = iConfig.getParameter<double>("L1_EG12_TauJet40_thresh1");
280  doubleThresholds_[L1ParticleMap::kEG12_TauJet40].second = iConfig.getParameter<double>("L1_EG12_TauJet40_thresh2");
281  prescales_[L1ParticleMap::kEG12_TauJet40] = iConfig.getParameter<int>("L1_EG12_TauJet40_prescale");
282 
283  doubleThresholds_[L1ParticleMap::kJet70_TauJet40].first = iConfig.getParameter<double>("L1_Jet70_TauJet40_thresh1");
284  doubleThresholds_[L1ParticleMap::kJet70_TauJet40].second = iConfig.getParameter<double>("L1_Jet70_TauJet40_thresh2");
285  prescales_[L1ParticleMap::kJet70_TauJet40] = iConfig.getParameter<int>("L1_Jet70_TauJet40_prescale");
286 
287  doubleThresholds_[L1ParticleMap::kMu3_HTT200].first = iConfig.getParameter<double>("L1_Mu3_HTT200_thresh1");
288  doubleThresholds_[L1ParticleMap::kMu3_HTT200].second = iConfig.getParameter<double>("L1_Mu3_HTT200_thresh2");
289  prescales_[L1ParticleMap::kMu3_HTT200] = iConfig.getParameter<int>("L1_Mu3_HTT200_prescale");
290  doubleThresholds_[L1ParticleMap::kIsoEG10_HTT200].first = iConfig.getParameter<double>("L1_IsoEG10_HTT200_thresh1");
291  doubleThresholds_[L1ParticleMap::kIsoEG10_HTT200].second = iConfig.getParameter<double>("L1_IsoEG10_HTT200_thresh2");
292  prescales_[L1ParticleMap::kIsoEG10_HTT200] = iConfig.getParameter<int>("L1_IsoEG10_HTT200_prescale");
293  doubleThresholds_[L1ParticleMap::kEG12_HTT200].first = iConfig.getParameter<double>("L1_EG12_HTT200_thresh1");
294  doubleThresholds_[L1ParticleMap::kEG12_HTT200].second = iConfig.getParameter<double>("L1_EG12_HTT200_thresh2");
295  prescales_[L1ParticleMap::kEG12_HTT200] = iConfig.getParameter<int>("L1_EG12_HTT200_prescale");
296  doubleThresholds_[L1ParticleMap::kJet70_HTT200].first = iConfig.getParameter<double>("L1_Jet70_HTT200_thresh1");
297  doubleThresholds_[L1ParticleMap::kJet70_HTT200].second = iConfig.getParameter<double>("L1_Jet70_HTT200_thresh2");
298  prescales_[L1ParticleMap::kJet70_HTT200] = iConfig.getParameter<int>("L1_Jet70_HTT200_prescale");
299  doubleThresholds_[L1ParticleMap::kTauJet40_HTT200].first = iConfig.getParameter<double>("L1_TauJet40_HTT200_thresh1");
300  doubleThresholds_[L1ParticleMap::kTauJet40_HTT200].second =
301  iConfig.getParameter<double>("L1_TauJet40_HTT200_thresh2");
302  prescales_[L1ParticleMap::kTauJet40_HTT200] = iConfig.getParameter<int>("L1_TauJet40_HTT200_prescale");
303 
304  doubleThresholds_[L1ParticleMap::kMu3_ETM30].first = iConfig.getParameter<double>("L1_Mu3_ETM30_thresh1");
305  doubleThresholds_[L1ParticleMap::kMu3_ETM30].second = iConfig.getParameter<double>("L1_Mu3_ETM30_thresh2");
306  prescales_[L1ParticleMap::kMu3_ETM30] = iConfig.getParameter<int>("L1_Mu3_ETM30_prescale");
307  doubleThresholds_[L1ParticleMap::kIsoEG10_ETM30].first = iConfig.getParameter<double>("L1_IsoEG10_ETM30_thresh1");
308  doubleThresholds_[L1ParticleMap::kIsoEG10_ETM30].second = iConfig.getParameter<double>("L1_IsoEG10_ETM30_thresh2");
309  prescales_[L1ParticleMap::kIsoEG10_ETM30] = iConfig.getParameter<int>("L1_IsoEG10_ETM30_prescale");
310  doubleThresholds_[L1ParticleMap::kEG12_ETM30].first = iConfig.getParameter<double>("L1_EG12_ETM30_thresh1");
311  doubleThresholds_[L1ParticleMap::kEG12_ETM30].second = iConfig.getParameter<double>("L1_EG12_ETM30_thresh2");
312  prescales_[L1ParticleMap::kEG12_ETM30] = iConfig.getParameter<int>("L1_EG12_ETM30_prescale");
313  doubleThresholds_[L1ParticleMap::kJet70_ETM40].first = iConfig.getParameter<double>("L1_Jet70_ETM40_thresh1");
314  doubleThresholds_[L1ParticleMap::kJet70_ETM40].second = iConfig.getParameter<double>("L1_Jet70_ETM40_thresh2");
315  prescales_[L1ParticleMap::kJet70_ETM40] = iConfig.getParameter<int>("L1_Jet70_ETM40_prescale");
316 
317  doubleThresholds_[L1ParticleMap::kTauJet20_ETM20].first = iConfig.getParameter<double>("L1_TauJet20_ETM20_thresh1");
318  doubleThresholds_[L1ParticleMap::kTauJet20_ETM20].second = iConfig.getParameter<double>("L1_TauJet20_ETM20_thresh2");
319  prescales_[L1ParticleMap::kTauJet20_ETM20] = iConfig.getParameter<int>("L1_TauJet20_ETM20_prescale");
320  doubleThresholds_[L1ParticleMap::kTauJet30_ETM30].first = iConfig.getParameter<double>("L1_TauJet30_ETM30_thresh1");
321  doubleThresholds_[L1ParticleMap::kTauJet30_ETM30].second = iConfig.getParameter<double>("L1_TauJet30_ETM30_thresh2");
322  prescales_[L1ParticleMap::kTauJet30_ETM30] = iConfig.getParameter<int>("L1_TauJet30_ETM30_prescale");
323  doubleThresholds_[L1ParticleMap::kTauJet30_ETM40].first = iConfig.getParameter<double>("L1_TauJet30_ETM40_thresh1");
324  doubleThresholds_[L1ParticleMap::kTauJet30_ETM40].second = iConfig.getParameter<double>("L1_TauJet30_ETM40_thresh2");
325  prescales_[L1ParticleMap::kTauJet30_ETM40] = iConfig.getParameter<int>("L1_TauJet30_ETM40_prescale");
326 
327  doubleThresholds_[L1ParticleMap::kHTT100_ETM30].first = iConfig.getParameter<double>("L1_HTT100_ETM30_thresh1");
328  doubleThresholds_[L1ParticleMap::kHTT100_ETM30].second = iConfig.getParameter<double>("L1_HTT100_ETM30_thresh2");
329  prescales_[L1ParticleMap::kHTT100_ETM30] = iConfig.getParameter<int>("L1_HTT100_ETM30_prescale");
330 
331  // AAA triggers
332 
333  singleThresholds_[L1ParticleMap::kTripleMu3] = iConfig.getParameter<double>("L1_TripleMu3_thresh");
334  prescales_[L1ParticleMap::kTripleMu3] = iConfig.getParameter<int>("L1_TripleMu3_prescale");
335  singleThresholds_[L1ParticleMap::kTripleIsoEG5] = iConfig.getParameter<double>("L1_TripleIsoEG5_thresh");
336  prescales_[L1ParticleMap::kTripleIsoEG5] = iConfig.getParameter<int>("L1_TripleIsoEG5_prescale");
337  singleThresholds_[L1ParticleMap::kTripleEG10] = iConfig.getParameter<double>("L1_TripleEG10_thresh");
338  prescales_[L1ParticleMap::kTripleEG10] = iConfig.getParameter<int>("L1_TripleEG10_prescale");
339  singleThresholds_[L1ParticleMap::kTripleJet50] = iConfig.getParameter<double>("L1_TripleJet50_thresh");
340  prescales_[L1ParticleMap::kTripleJet50] = iConfig.getParameter<int>("L1_TripleJet50_prescale");
341  singleThresholds_[L1ParticleMap::kTripleTauJet40] = iConfig.getParameter<double>("L1_TripleTauJet40_thresh");
342  prescales_[L1ParticleMap::kTripleTauJet40] = iConfig.getParameter<int>("L1_TripleTauJet40_prescale");
343 
344  // AAB triggers
345 
346  doubleThresholds_[L1ParticleMap::kDoubleMu3_IsoEG5].first =
347  iConfig.getParameter<double>("L1_DoubleMu3_IsoEG5_thresh1");
348  doubleThresholds_[L1ParticleMap::kDoubleMu3_IsoEG5].second =
349  iConfig.getParameter<double>("L1_DoubleMu3_IsoEG5_thresh2");
350  prescales_[L1ParticleMap::kDoubleMu3_IsoEG5] = iConfig.getParameter<int>("L1_DoubleMu3_IsoEG5_prescale");
351  doubleThresholds_[L1ParticleMap::kDoubleMu3_EG10].first = iConfig.getParameter<double>("L1_DoubleMu3_EG10_thresh1");
352  doubleThresholds_[L1ParticleMap::kDoubleMu3_EG10].second = iConfig.getParameter<double>("L1_DoubleMu3_EG10_thresh2");
353  prescales_[L1ParticleMap::kDoubleMu3_EG10] = iConfig.getParameter<int>("L1_DoubleMu3_EG10_prescale");
354  doubleThresholds_[L1ParticleMap::kDoubleIsoEG5_Mu3].first =
355  iConfig.getParameter<double>("L1_DoubleIsoEG5_Mu3_thresh1");
356  doubleThresholds_[L1ParticleMap::kDoubleIsoEG5_Mu3].second =
357  iConfig.getParameter<double>("L1_DoubleIsoEG5_Mu3_thresh2");
358  prescales_[L1ParticleMap::kDoubleIsoEG5_Mu3] = iConfig.getParameter<int>("L1_DoubleIsoEG5_Mu3_prescale");
359  doubleThresholds_[L1ParticleMap::kDoubleEG10_Mu3].first = iConfig.getParameter<double>("L1_DoubleEG10_Mu3_thresh1");
360  doubleThresholds_[L1ParticleMap::kDoubleEG10_Mu3].second = iConfig.getParameter<double>("L1_DoubleEG10_Mu3_thresh2");
361  prescales_[L1ParticleMap::kDoubleEG10_Mu3] = iConfig.getParameter<int>("L1_DoubleEG10_Mu3_prescale");
362 
363  doubleThresholds_[L1ParticleMap::kDoubleMu3_HTT200].first =
364  iConfig.getParameter<double>("L1_DoubleMu3_HTT200_thresh1");
365  doubleThresholds_[L1ParticleMap::kDoubleMu3_HTT200].second =
366  iConfig.getParameter<double>("L1_DoubleMu3_HTT200_thresh2");
367  prescales_[L1ParticleMap::kDoubleMu3_HTT200] = iConfig.getParameter<int>("L1_DoubleMu3_HTT200_prescale");
368  doubleThresholds_[L1ParticleMap::kDoubleIsoEG5_HTT200].first =
369  iConfig.getParameter<double>("L1_DoubleIsoEG5_HTT200_thresh1");
370  doubleThresholds_[L1ParticleMap::kDoubleIsoEG5_HTT200].second =
371  iConfig.getParameter<double>("L1_DoubleIsoEG5_HTT200_thresh2");
372  prescales_[L1ParticleMap::kDoubleIsoEG5_HTT200] = iConfig.getParameter<int>("L1_DoubleIsoEG5_HTT200_prescale");
373  doubleThresholds_[L1ParticleMap::kDoubleEG10_HTT200].first =
374  iConfig.getParameter<double>("L1_DoubleEG10_HTT200_thresh1");
375  doubleThresholds_[L1ParticleMap::kDoubleEG10_HTT200].second =
376  iConfig.getParameter<double>("L1_DoubleEG10_HTT200_thresh2");
377  prescales_[L1ParticleMap::kDoubleEG10_HTT200] = iConfig.getParameter<int>("L1_DoubleEG10_HTT200_prescale");
378  doubleThresholds_[L1ParticleMap::kDoubleJet50_HTT200].first =
379  iConfig.getParameter<double>("L1_DoubleJet50_HTT200_thresh1");
380  doubleThresholds_[L1ParticleMap::kDoubleJet50_HTT200].second =
381  iConfig.getParameter<double>("L1_DoubleJet50_HTT200_thresh2");
382  prescales_[L1ParticleMap::kDoubleJet50_HTT200] = iConfig.getParameter<int>("L1_DoubleJet50_HTT200_prescale");
383  doubleThresholds_[L1ParticleMap::kDoubleTauJet40_HTT200].first =
384  iConfig.getParameter<double>("L1_DoubleTauJet40_HTT200_thresh1");
385  doubleThresholds_[L1ParticleMap::kDoubleTauJet40_HTT200].second =
386  iConfig.getParameter<double>("L1_DoubleTauJet40_HTT200_thresh2");
387  prescales_[L1ParticleMap::kDoubleTauJet40_HTT200] = iConfig.getParameter<int>("L1_DoubleTauJet40_HTT200_prescale");
388 
389  doubleThresholds_[L1ParticleMap::kDoubleMu3_ETM20].first = iConfig.getParameter<double>("L1_DoubleMu3_ETM20_thresh1");
390  doubleThresholds_[L1ParticleMap::kDoubleMu3_ETM20].second =
391  iConfig.getParameter<double>("L1_DoubleMu3_ETM20_thresh2");
392  prescales_[L1ParticleMap::kDoubleMu3_ETM20] = iConfig.getParameter<int>("L1_DoubleMu3_ETM20_prescale");
393  doubleThresholds_[L1ParticleMap::kDoubleIsoEG5_ETM20].first =
394  iConfig.getParameter<double>("L1_DoubleIsoEG5_ETM20_thresh1");
395  doubleThresholds_[L1ParticleMap::kDoubleIsoEG5_ETM20].second =
396  iConfig.getParameter<double>("L1_DoubleIsoEG5_ETM20_thresh2");
397  prescales_[L1ParticleMap::kDoubleIsoEG5_ETM20] = iConfig.getParameter<int>("L1_DoubleIsoEG5_ETM20_prescale");
398  doubleThresholds_[L1ParticleMap::kDoubleEG10_ETM20].first =
399  iConfig.getParameter<double>("L1_DoubleEG10_ETM20_thresh1");
400  doubleThresholds_[L1ParticleMap::kDoubleEG10_ETM20].second =
401  iConfig.getParameter<double>("L1_DoubleEG10_ETM20_thresh2");
402  prescales_[L1ParticleMap::kDoubleEG10_ETM20] = iConfig.getParameter<int>("L1_DoubleEG10_ETM20_prescale");
403  doubleThresholds_[L1ParticleMap::kDoubleJet50_ETM20].first =
404  iConfig.getParameter<double>("L1_DoubleJet50_ETM20_thresh1");
405  doubleThresholds_[L1ParticleMap::kDoubleJet50_ETM20].second =
406  iConfig.getParameter<double>("L1_DoubleJet50_ETM20_thresh2");
407  prescales_[L1ParticleMap::kDoubleJet50_ETM20] = iConfig.getParameter<int>("L1_DoubleJet50_ETM20_prescale");
408  doubleThresholds_[L1ParticleMap::kDoubleTauJet40_ETM20].first =
409  iConfig.getParameter<double>("L1_DoubleTauJet40_ETM20_thresh1");
410  doubleThresholds_[L1ParticleMap::kDoubleTauJet40_ETM20].second =
411  iConfig.getParameter<double>("L1_DoubleTauJet40_ETM20_thresh2");
412  prescales_[L1ParticleMap::kDoubleTauJet40_ETM20] = iConfig.getParameter<int>("L1_DoubleTauJet40_ETM20_prescale");
413 
414  singleThresholds_[L1ParticleMap::kQuadJet30] = iConfig.getParameter<double>("L1_QuadJet30_thresh");
415  prescales_[L1ParticleMap::kQuadJet30] = iConfig.getParameter<int>("L1_QuadJet30_prescale");
416 
417  // Diffractive triggers
418  doubleThresholds_[L1ParticleMap::kExclusiveDoubleIsoEG4].first =
419  iConfig.getParameter<double>("L1_ExclusiveDoubleIsoEG4_thresh1");
420  doubleThresholds_[L1ParticleMap::kExclusiveDoubleIsoEG4].second =
421  iConfig.getParameter<double>("L1_ExclusiveDoubleIsoEG4_thresh2"); // for jet rejection
422  prescales_[L1ParticleMap::kExclusiveDoubleIsoEG4] = iConfig.getParameter<int>("L1_ExclusiveDoubleIsoEG4_prescale");
423  singleThresholds_[L1ParticleMap::kExclusiveDoubleJet60] =
424  iConfig.getParameter<double>("L1_ExclusiveDoubleJet60_thresh");
425  prescales_[L1ParticleMap::kExclusiveDoubleJet60] = iConfig.getParameter<int>("L1_ExclusiveDoubleJet60_prescale");
426  singleThresholds_[L1ParticleMap::kExclusiveJet25_Gap_Jet25] =
427  iConfig.getParameter<double>("L1_ExclusiveJet25_Gap_Jet25_thresh");
428  prescales_[L1ParticleMap::kExclusiveJet25_Gap_Jet25] =
429  iConfig.getParameter<int>("L1_ExclusiveJet25_Gap_Jet25_prescale");
430  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet20_ForJet10].first =
431  iConfig.getParameter<double>("L1_IsoEG10_Jet20_ForJet10_thresh1");
432  doubleThresholds_[L1ParticleMap::kIsoEG10_Jet20_ForJet10].second =
433  iConfig.getParameter<double>("L1_IsoEG10_Jet20_ForJet10_thresh2");
434  singleThresholds_[L1ParticleMap::kIsoEG10_Jet20_ForJet10] =
435  iConfig.getParameter<double>("L1_IsoEG10_Jet20_ForJet10_thresh3");
436  prescales_[L1ParticleMap::kIsoEG10_Jet20_ForJet10] = iConfig.getParameter<int>("L1_IsoEG10_Jet20_ForJet10_prescale");
437 
438  prescales_[L1ParticleMap::kMinBias_HTT10] = iConfig.getParameter<int>("L1_MinBias_HTT10_prescale");
439  prescales_[L1ParticleMap::kZeroBias] = iConfig.getParameter<int>("L1_ZeroBias_prescale");
440 
441  // // Print trigger table in Twiki table format.
442  // std::cout << "| *Trigger Index* | *Trigger Name* | *E<sub>T</sub>
443  // Threshold (!GeV)* | *Prescale* |"
444  // << std::endl ;
445 
446  // for( int i = 0 ; i < L1ParticleMap::kNumOfL1TriggerTypes ; ++i )
447  // {
448  // std::cout
449  // << "| "
450  // << i
451  // << " | " ;
452  // if( prescales_[ i ] == 999999999 ) std::cout << "<strike>" ;
453  // std::cout
454  // << L1ParticleMap::triggerName( ( L1ParticleMap::L1TriggerType ) i ) ;
455  // if( prescales_[ i ] == 999999999 ) std::cout << "</strike>" ;
456  // std::cout << " | " ;
457 
458  // if( singleThresholds_[ i ] > 0 )
459  // {
460  // if( doubleThresholds_[ i ].first > 0 )
461  // {
462  // std::cout << doubleThresholds_[ i ].first << ", "
463  // << doubleThresholds_[ i ].second << ", " ;
464  // }
465 
466  // std::cout << singleThresholds_[ i ] ;
467  // }
468  // else if( doubleThresholds_[ i ].first > 0 )
469  // {
470  // std::cout << doubleThresholds_[ i ].first << ", "
471  // << doubleThresholds_[ i ].second ;
472  // }
473  // else
474  // {
475  // std::cout << "---" ;
476  // }
477 
478  // std::cout << " | " ;
479  // if( prescales_[ i ] != 999999999 ) std::cout << prescales_[ i ] ;
480  // std::cout << " |"
481  // << std::endl ;
482  // }
483 }
484 
486  // do anything here that needs to be done at desctruction time
487  // (e.g. close files, deallocate resources etc.)
488 }
489 
490 //
491 // member functions
492 //
493 
494 // ------------ method called to produce the data ------------
496  using namespace edm;
497  using namespace std;
498  using namespace reco;
499  using namespace l1extra;
500 
501  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
502  // ~~~~~~~~ Get L1Extra particles ~~~~~~~~
503  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
504 
505  Handle<L1EmParticleCollection> isoEmHandle;
506  iEvent.getByLabel(isoEmSource_, isoEmHandle);
507 
508  Handle<L1EmParticleCollection> nonIsoEmHandle;
509  iEvent.getByLabel(nonIsoEmSource_, nonIsoEmHandle);
510 
511  Handle<L1JetParticleCollection> cenJetHandle;
512  iEvent.getByLabel(cenJetSource_, cenJetHandle);
513 
514  Handle<L1JetParticleCollection> forJetHandle;
515  iEvent.getByLabel(forJetSource_, forJetHandle);
516 
517  Handle<L1JetParticleCollection> tauJetHandle;
518  iEvent.getByLabel(tauJetSource_, tauJetHandle);
519 
521  iEvent.getByLabel(muonSource_, muHandle);
522 
523  Handle<L1EtMissParticle> metHandle;
524  iEvent.getByLabel(etMissSource_, metHandle);
525 
526  Handle<L1EtMissParticle> mhtHandle;
527  iEvent.getByLabel(htMissSource_, mhtHandle);
528 
529  double met = metHandle->etMiss();
530  double ht = mhtHandle->etTotal();
531  double ett = metHandle->etTotal();
532 
533  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
534  // ~~~ Evaluate trigger conditions and make a L1ParticleMapCollection. ~~~
535  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
536 
537  // First, form the input vector<Ref>s that will be needed.
538  L1EmParticleVectorRef inputIsoEmRefs;
539  addToVectorRefs(isoEmHandle, inputIsoEmRefs);
540 
541  L1EmParticleVectorRef inputRelaxedEmRefs;
542  addToVectorRefs(isoEmHandle, inputRelaxedEmRefs);
543  addToVectorRefs(nonIsoEmHandle, inputRelaxedEmRefs);
544 
545  L1JetParticleVectorRef inputTauRefs;
546  addToVectorRefs(tauJetHandle, inputTauRefs);
547 
548  L1JetParticleVectorRef inputJetRefs;
549  addToVectorRefs(forJetHandle, inputJetRefs);
550  addToVectorRefs(cenJetHandle, inputJetRefs);
551  addToVectorRefs(tauJetHandle, inputJetRefs);
552 
553  L1JetParticleVectorRef inputForJetRefs;
554  addToVectorRefs(forJetHandle, inputForJetRefs);
555 
556  L1JetParticleVectorRef inputCenJetTauJetRefs;
557  addToVectorRefs(cenJetHandle, inputCenJetTauJetRefs);
558  addToVectorRefs(tauJetHandle, inputCenJetTauJetRefs);
559 
560  L1MuonParticleVectorRef inputMuonRefsSingle;
561  L1MuonParticleVectorRef inputMuonRefsDouble;
562  L1MuonParticleCollection::const_iterator muItr = muHandle->begin();
563  L1MuonParticleCollection::const_iterator muEnd = muHandle->end();
564 
565  for (size_t i = 0; muItr != muEnd; ++muItr, ++i) {
566  if (!muItr->gmtMuonCand().empty()) {
567  unsigned int qual = muItr->gmtMuonCand().quality();
568 
569  if (qual == 4 || qual == 5 || qual == 6 || qual == 7) {
570  inputMuonRefsSingle.push_back(edm::Ref<L1MuonParticleCollection>(muHandle, i));
571  }
572 
573  if (qual == 3 || qual == 5 || qual == 6 || qual == 7) {
574  inputMuonRefsDouble.push_back(edm::Ref<L1MuonParticleCollection>(muHandle, i));
575  }
576  }
577  }
578 
579  unique_ptr<L1ParticleMapCollection> mapColl(new L1ParticleMapCollection);
580  bool globalDecision = false;
581  std::vector<bool> decisionWord;
582 
583  for (int itrig = 0; itrig < L1ParticleMap::kNumOfL1TriggerTypes; ++itrig) {
584  bool decision = false;
585  std::vector<L1ParticleMap::L1ObjectType> objectTypes;
586  L1EmParticleVectorRef outputEmRefsTmp;
587  L1JetParticleVectorRef outputJetRefsTmp;
588  L1MuonParticleVectorRef outputMuonRefsTmp;
589  L1EtMissParticleRefProd metRefTmp;
590  L1ParticleMap::L1IndexComboVector combosTmp; // unfilled for single objs
591 
592  if (itrig == L1ParticleMap::kSingleMu3 || itrig == L1ParticleMap::kSingleMu5 ||
593  itrig == L1ParticleMap::kSingleMu7 || itrig == L1ParticleMap::kSingleMu10 ||
594  itrig == L1ParticleMap::kSingleMu14 || itrig == L1ParticleMap::kSingleMu20 ||
595  itrig == L1ParticleMap::kSingleMu25) {
597 
598  evaluateSingleObjectTrigger(inputMuonRefsSingle, singleThresholds_[itrig], decision, outputMuonRefsTmp);
599  } else if (itrig == L1ParticleMap::kSingleIsoEG5 || itrig == L1ParticleMap::kSingleIsoEG8 ||
600  itrig == L1ParticleMap::kSingleIsoEG10 || itrig == L1ParticleMap::kSingleIsoEG12 ||
601  itrig == L1ParticleMap::kSingleIsoEG15 || itrig == L1ParticleMap::kSingleIsoEG20 ||
602  itrig == L1ParticleMap::kSingleIsoEG25) {
603  objectTypes.push_back(L1ParticleMap::kEM);
604 
605  evaluateSingleObjectTrigger(inputIsoEmRefs, singleThresholds_[itrig], decision, outputEmRefsTmp);
606  } else if (itrig == L1ParticleMap::kSingleEG5 || itrig == L1ParticleMap::kSingleEG8 ||
607  itrig == L1ParticleMap::kSingleEG10 || itrig == L1ParticleMap::kSingleEG12 ||
608  itrig == L1ParticleMap::kSingleEG15 || itrig == L1ParticleMap::kSingleEG20 ||
609  itrig == L1ParticleMap::kSingleEG25) {
610  objectTypes.push_back(L1ParticleMap::kEM);
611 
612  evaluateSingleObjectTrigger(inputRelaxedEmRefs, singleThresholds_[itrig], decision, outputEmRefsTmp);
613  } else if (itrig == L1ParticleMap::kSingleJet15 || itrig == L1ParticleMap::kSingleJet20 ||
614  itrig == L1ParticleMap::kSingleJet30 || itrig == L1ParticleMap::kSingleJet50 ||
615  itrig == L1ParticleMap::kSingleJet70 || itrig == L1ParticleMap::kSingleJet100 ||
616  itrig == L1ParticleMap::kSingleJet150 || itrig == L1ParticleMap::kSingleJet200) {
617  objectTypes.push_back(L1ParticleMap::kJet);
618 
619  evaluateSingleObjectTrigger(inputJetRefs, singleThresholds_[itrig], decision, outputJetRefsTmp);
620  } else if (itrig == L1ParticleMap::kSingleTauJet10 || itrig == L1ParticleMap::kSingleTauJet20 ||
621  itrig == L1ParticleMap::kSingleTauJet30 || itrig == L1ParticleMap::kSingleTauJet35 ||
622  itrig == L1ParticleMap::kSingleTauJet40 || itrig == L1ParticleMap::kSingleTauJet60 ||
623  itrig == L1ParticleMap::kSingleTauJet80 || itrig == L1ParticleMap::kSingleTauJet100) {
624  objectTypes.push_back(L1ParticleMap::kJet);
625 
626  evaluateSingleObjectTrigger(inputTauRefs, singleThresholds_[itrig], decision, outputJetRefsTmp);
627  } else if (itrig == L1ParticleMap::kHTT100 || itrig == L1ParticleMap::kHTT200 || itrig == L1ParticleMap::kHTT250 ||
628  itrig == L1ParticleMap::kHTT300 || itrig == L1ParticleMap::kHTT400 || itrig == L1ParticleMap::kHTT500) {
629  objectTypes.push_back(L1ParticleMap::kEtHad);
630 
631  if (ht >= singleThresholds_[itrig]) {
632  decision = true;
633  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
634  }
635  } else if (itrig == L1ParticleMap::kETM10 || itrig == L1ParticleMap::kETM15 || itrig == L1ParticleMap::kETM20 ||
636  itrig == L1ParticleMap::kETM30 || itrig == L1ParticleMap::kETM40 || itrig == L1ParticleMap::kETM50 ||
637  itrig == L1ParticleMap::kETM60) {
638  objectTypes.push_back(L1ParticleMap::kEtMiss);
639 
640  if (met >= singleThresholds_[itrig]) {
641  decision = true;
642  metRefTmp = L1EtMissParticleRefProd(metHandle);
643  }
644  } else if (itrig == L1ParticleMap::kETT60) {
645  objectTypes.push_back(L1ParticleMap::kEtTotal);
646 
647  if (ett >= singleThresholds_[itrig]) {
648  decision = true;
649  metRefTmp = L1EtMissParticleRefProd(metHandle);
650  }
651  } else if (itrig == L1ParticleMap::kDoubleMu3) {
654 
656  inputMuonRefsDouble, singleThresholds_[itrig], decision, outputMuonRefsTmp, combosTmp);
657  } else if (itrig == L1ParticleMap::kDoubleIsoEG8 || itrig == L1ParticleMap::kDoubleIsoEG10) {
658  objectTypes.push_back(L1ParticleMap::kEM);
659  objectTypes.push_back(L1ParticleMap::kEM);
660 
661  evaluateDoubleSameObjectTrigger(inputIsoEmRefs, singleThresholds_[itrig], decision, outputEmRefsTmp, combosTmp);
662  } else if (itrig == L1ParticleMap::kDoubleEG5 || itrig == L1ParticleMap::kDoubleEG10 ||
663  itrig == L1ParticleMap::kDoubleEG15) {
664  objectTypes.push_back(L1ParticleMap::kEM);
665  objectTypes.push_back(L1ParticleMap::kEM);
666 
668  inputRelaxedEmRefs, singleThresholds_[itrig], decision, outputEmRefsTmp, combosTmp);
669  } else if (itrig == L1ParticleMap::kDoubleJet70 || itrig == L1ParticleMap::kDoubleJet100) {
670  objectTypes.push_back(L1ParticleMap::kJet);
671  objectTypes.push_back(L1ParticleMap::kJet);
672 
673  evaluateDoubleSameObjectTrigger(inputJetRefs, singleThresholds_[itrig], decision, outputJetRefsTmp, combosTmp);
674  } else if (itrig == L1ParticleMap::kDoubleTauJet20 || itrig == L1ParticleMap::kDoubleTauJet30 ||
675  itrig == L1ParticleMap::kDoubleTauJet35 || itrig == L1ParticleMap::kDoubleTauJet40) {
676  objectTypes.push_back(L1ParticleMap::kJet);
677  objectTypes.push_back(L1ParticleMap::kJet);
678 
679  evaluateDoubleSameObjectTrigger(inputTauRefs, singleThresholds_[itrig], decision, outputJetRefsTmp, combosTmp);
680  } else if (itrig == L1ParticleMap::kMu3_IsoEG5 || itrig == L1ParticleMap::kMu5_IsoEG10) {
682  objectTypes.push_back(L1ParticleMap::kEM);
683 
684  evaluateDoubleDifferentObjectTrigger(inputMuonRefsSingle,
685  inputIsoEmRefs,
686  doubleThresholds_[itrig].first,
687  doubleThresholds_[itrig].second,
688  decision,
689  outputMuonRefsTmp,
690  outputEmRefsTmp,
691  combosTmp);
692  } else if (itrig == L1ParticleMap::kMu3_EG12) {
694  objectTypes.push_back(L1ParticleMap::kEM);
695 
696  evaluateDoubleDifferentObjectTrigger(inputMuonRefsSingle,
697  inputRelaxedEmRefs,
698  doubleThresholds_[itrig].first,
699  doubleThresholds_[itrig].second,
700  decision,
701  outputMuonRefsTmp,
702  outputEmRefsTmp,
703  combosTmp);
704  } else if (itrig == L1ParticleMap::kMu3_Jet15 || itrig == L1ParticleMap::kMu5_Jet15 ||
705  itrig == L1ParticleMap::kMu3_Jet70 || itrig == L1ParticleMap::kMu5_Jet20) {
707  objectTypes.push_back(L1ParticleMap::kJet);
708 
709  evaluateDoubleDifferentObjectTrigger(inputMuonRefsSingle,
710  inputJetRefs,
711  doubleThresholds_[itrig].first,
712  doubleThresholds_[itrig].second,
713  decision,
714  outputMuonRefsTmp,
715  outputJetRefsTmp,
716  combosTmp);
717  } else if (itrig == L1ParticleMap::kMu5_TauJet20 || itrig == L1ParticleMap::kMu5_TauJet30) {
719  objectTypes.push_back(L1ParticleMap::kJet);
720 
721  evaluateDoubleDifferentObjectTrigger(inputMuonRefsSingle,
722  inputTauRefs,
723  doubleThresholds_[itrig].first,
724  doubleThresholds_[itrig].second,
725  decision,
726  outputMuonRefsTmp,
727  outputJetRefsTmp,
728  combosTmp);
729  } else if (itrig == L1ParticleMap::kIsoEG10_EG10) {
730  objectTypes.push_back(L1ParticleMap::kEM);
731  objectTypes.push_back(L1ParticleMap::kEM);
732 
734  inputRelaxedEmRefs,
735  doubleThresholds_[itrig].first,
736  doubleThresholds_[itrig].second,
737  decision,
738  outputEmRefsTmp,
739  combosTmp);
740  } else if (itrig == L1ParticleMap::kIsoEG10_Jet15 || itrig == L1ParticleMap::kIsoEG10_Jet30 ||
741  itrig == L1ParticleMap::kIsoEG10_Jet20 || itrig == L1ParticleMap::kIsoEG10_Jet70) {
742  objectTypes.push_back(L1ParticleMap::kEM);
743  objectTypes.push_back(L1ParticleMap::kJet);
744 
746  inputJetRefs,
747  doubleThresholds_[itrig].first,
748  doubleThresholds_[itrig].second,
749  decision,
750  outputEmRefsTmp,
751  outputJetRefsTmp,
752  combosTmp);
753  } else if (itrig == L1ParticleMap::kIsoEG10_TauJet20 || itrig == L1ParticleMap::kIsoEG10_TauJet30) {
754  objectTypes.push_back(L1ParticleMap::kEM);
755  objectTypes.push_back(L1ParticleMap::kJet);
756 
758  inputTauRefs,
759  doubleThresholds_[itrig].first,
760  doubleThresholds_[itrig].second,
761  decision,
762  outputEmRefsTmp,
763  outputJetRefsTmp,
764  combosTmp);
765  } else if (itrig == L1ParticleMap::kEG10_Jet15 || itrig == L1ParticleMap::kEG12_Jet20 ||
766  itrig == L1ParticleMap::kEG12_Jet70) {
767  objectTypes.push_back(L1ParticleMap::kEM);
768  objectTypes.push_back(L1ParticleMap::kJet);
769 
770  evaluateDoubleDifferentCaloObjectTrigger(inputRelaxedEmRefs,
771  inputJetRefs,
772  doubleThresholds_[itrig].first,
773  doubleThresholds_[itrig].second,
774  decision,
775  outputEmRefsTmp,
776  outputJetRefsTmp,
777  combosTmp);
778  } else if (itrig == L1ParticleMap::kEG12_TauJet40) {
779  objectTypes.push_back(L1ParticleMap::kEM);
780  objectTypes.push_back(L1ParticleMap::kJet);
781 
782  evaluateDoubleDifferentCaloObjectTrigger(inputRelaxedEmRefs,
783  inputTauRefs,
784  doubleThresholds_[itrig].first,
785  doubleThresholds_[itrig].second,
786  decision,
787  outputEmRefsTmp,
788  outputJetRefsTmp,
789  combosTmp);
790  } else if (itrig == L1ParticleMap::kJet70_TauJet40) {
791  objectTypes.push_back(L1ParticleMap::kJet);
792  objectTypes.push_back(L1ParticleMap::kJet);
793 
795  inputTauRefs,
796  doubleThresholds_[itrig].first,
797  doubleThresholds_[itrig].second,
798  decision,
799  outputJetRefsTmp,
800  combosTmp);
801  } else if (itrig == L1ParticleMap::kMu3_HTT200) {
803  objectTypes.push_back(L1ParticleMap::kEtHad);
804 
805  if (ht >= doubleThresholds_[itrig].second) {
806  evaluateSingleObjectTrigger(inputMuonRefsSingle, doubleThresholds_[itrig].first, decision, outputMuonRefsTmp);
807 
808  if (decision) {
809  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
810  }
811  }
812  } else if (itrig == L1ParticleMap::kIsoEG10_HTT200) {
813  objectTypes.push_back(L1ParticleMap::kEM);
814  objectTypes.push_back(L1ParticleMap::kEtHad);
815 
816  if (ht >= doubleThresholds_[itrig].second) {
817  evaluateSingleObjectTrigger(inputIsoEmRefs, doubleThresholds_[itrig].first, decision, outputEmRefsTmp);
818 
819  if (decision) {
820  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
821  }
822  }
823  } else if (itrig == L1ParticleMap::kEG12_HTT200) {
824  objectTypes.push_back(L1ParticleMap::kEM);
825  objectTypes.push_back(L1ParticleMap::kEtHad);
826 
827  if (ht >= doubleThresholds_[itrig].second) {
828  evaluateSingleObjectTrigger(inputRelaxedEmRefs, doubleThresholds_[itrig].first, decision, outputEmRefsTmp);
829 
830  if (decision) {
831  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
832  }
833  }
834  } else if (itrig == L1ParticleMap::kJet70_HTT200) {
835  objectTypes.push_back(L1ParticleMap::kJet);
836  objectTypes.push_back(L1ParticleMap::kEtHad);
837 
838  if (ht >= doubleThresholds_[itrig].second) {
839  evaluateSingleObjectTrigger(inputJetRefs, doubleThresholds_[itrig].first, decision, outputJetRefsTmp);
840 
841  if (decision) {
842  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
843  }
844  }
845  } else if (itrig == L1ParticleMap::kTauJet40_HTT200) {
846  objectTypes.push_back(L1ParticleMap::kJet);
847  objectTypes.push_back(L1ParticleMap::kEtHad);
848 
849  if (ht >= doubleThresholds_[itrig].second) {
850  evaluateSingleObjectTrigger(inputTauRefs, doubleThresholds_[itrig].first, decision, outputJetRefsTmp);
851 
852  if (decision) {
853  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
854  }
855  }
856  } else if (itrig == L1ParticleMap::kMu3_ETM30) {
858  objectTypes.push_back(L1ParticleMap::kEtMiss);
859 
860  if (met >= doubleThresholds_[itrig].second) {
861  evaluateSingleObjectTrigger(inputMuonRefsSingle, doubleThresholds_[itrig].first, decision, outputMuonRefsTmp);
862 
863  if (decision) {
864  metRefTmp = L1EtMissParticleRefProd(metHandle);
865  }
866  }
867  } else if (itrig == L1ParticleMap::kIsoEG10_ETM30) {
868  objectTypes.push_back(L1ParticleMap::kEM);
869  objectTypes.push_back(L1ParticleMap::kEtMiss);
870 
871  if (met >= doubleThresholds_[itrig].second) {
872  evaluateSingleObjectTrigger(inputIsoEmRefs, doubleThresholds_[itrig].first, decision, outputEmRefsTmp);
873 
874  if (decision) {
875  metRefTmp = L1EtMissParticleRefProd(metHandle);
876  }
877  }
878  } else if (itrig == L1ParticleMap::kEG12_ETM30) {
879  objectTypes.push_back(L1ParticleMap::kEM);
880  objectTypes.push_back(L1ParticleMap::kEtMiss);
881 
882  if (met >= doubleThresholds_[itrig].second) {
883  evaluateSingleObjectTrigger(inputRelaxedEmRefs, doubleThresholds_[itrig].first, decision, outputEmRefsTmp);
884 
885  if (decision) {
886  metRefTmp = L1EtMissParticleRefProd(metHandle);
887  }
888  }
889  } else if (itrig == L1ParticleMap::kJet70_ETM40) {
890  objectTypes.push_back(L1ParticleMap::kJet);
891  objectTypes.push_back(L1ParticleMap::kEtMiss);
892 
893  if (met >= doubleThresholds_[itrig].second) {
894  evaluateSingleObjectTrigger(inputJetRefs, doubleThresholds_[itrig].first, decision, outputJetRefsTmp);
895 
896  if (decision) {
897  metRefTmp = L1EtMissParticleRefProd(metHandle);
898  }
899  }
900  } else if (itrig == L1ParticleMap::kTauJet20_ETM20 || itrig == L1ParticleMap::kTauJet30_ETM30 ||
901  itrig == L1ParticleMap::kTauJet30_ETM40) {
902  objectTypes.push_back(L1ParticleMap::kJet);
903  objectTypes.push_back(L1ParticleMap::kEtMiss);
904 
905  if (met >= doubleThresholds_[itrig].second) {
906  evaluateSingleObjectTrigger(inputTauRefs, doubleThresholds_[itrig].first, decision, outputJetRefsTmp);
907 
908  if (decision) {
909  metRefTmp = L1EtMissParticleRefProd(metHandle);
910  }
911  }
912  } else if (itrig == L1ParticleMap::kHTT100_ETM30) {
913  objectTypes.push_back(L1ParticleMap::kEtHad);
914  objectTypes.push_back(L1ParticleMap::kEtMiss);
915 
916  if (ht >= doubleThresholds_[itrig].first && met >= doubleThresholds_[itrig].second) {
917  decision = true;
918  metRefTmp = L1EtMissParticleRefProd(metHandle);
919  }
920  } else if (itrig == L1ParticleMap::kTripleMu3) {
924 
926  inputMuonRefsDouble, singleThresholds_[itrig], decision, outputMuonRefsTmp, combosTmp);
927  } else if (itrig == L1ParticleMap::kTripleIsoEG5) {
928  objectTypes.push_back(L1ParticleMap::kEM);
929  objectTypes.push_back(L1ParticleMap::kEM);
930  objectTypes.push_back(L1ParticleMap::kEM);
931 
932  evaluateTripleSameObjectTrigger(inputIsoEmRefs, singleThresholds_[itrig], decision, outputEmRefsTmp, combosTmp);
933  } else if (itrig == L1ParticleMap::kTripleEG10) {
934  objectTypes.push_back(L1ParticleMap::kEM);
935  objectTypes.push_back(L1ParticleMap::kEM);
936  objectTypes.push_back(L1ParticleMap::kEM);
937 
939  inputRelaxedEmRefs, singleThresholds_[itrig], decision, outputEmRefsTmp, combosTmp);
940  } else if (itrig == L1ParticleMap::kTripleJet50) {
941  objectTypes.push_back(L1ParticleMap::kJet);
942  objectTypes.push_back(L1ParticleMap::kJet);
943  objectTypes.push_back(L1ParticleMap::kJet);
944 
945  evaluateTripleSameObjectTrigger(inputJetRefs, singleThresholds_[itrig], decision, outputJetRefsTmp, combosTmp);
946  } else if (itrig == L1ParticleMap::kTripleTauJet40) {
947  objectTypes.push_back(L1ParticleMap::kJet);
948  objectTypes.push_back(L1ParticleMap::kJet);
949  objectTypes.push_back(L1ParticleMap::kJet);
950 
951  evaluateTripleSameObjectTrigger(inputTauRefs, singleThresholds_[itrig], decision, outputJetRefsTmp, combosTmp);
952  } else if (itrig == L1ParticleMap::kDoubleMu3_IsoEG5) {
955  objectTypes.push_back(L1ParticleMap::kEM);
956 
957  evaluateDoublePlusSingleObjectTrigger(inputMuonRefsDouble,
958  inputIsoEmRefs,
959  doubleThresholds_[itrig].first,
960  doubleThresholds_[itrig].second,
961  decision,
962  outputMuonRefsTmp,
963  outputEmRefsTmp,
964  combosTmp);
965  } else if (itrig == L1ParticleMap::kDoubleMu3_EG10) {
968  objectTypes.push_back(L1ParticleMap::kEM);
969 
970  evaluateDoublePlusSingleObjectTrigger(inputMuonRefsDouble,
971  inputRelaxedEmRefs,
972  doubleThresholds_[itrig].first,
973  doubleThresholds_[itrig].second,
974  decision,
975  outputMuonRefsTmp,
976  outputEmRefsTmp,
977  combosTmp);
978  } else if (itrig == L1ParticleMap::kDoubleIsoEG5_Mu3) {
979  objectTypes.push_back(L1ParticleMap::kEM);
980  objectTypes.push_back(L1ParticleMap::kEM);
982 
984  inputMuonRefsSingle,
985  doubleThresholds_[itrig].first,
986  doubleThresholds_[itrig].second,
987  decision,
988  outputEmRefsTmp,
989  outputMuonRefsTmp,
990  combosTmp);
991  } else if (itrig == L1ParticleMap::kDoubleEG10_Mu3) {
992  objectTypes.push_back(L1ParticleMap::kEM);
993  objectTypes.push_back(L1ParticleMap::kEM);
995 
996  evaluateDoublePlusSingleObjectTrigger(inputRelaxedEmRefs,
997  inputMuonRefsSingle,
998  doubleThresholds_[itrig].first,
999  doubleThresholds_[itrig].second,
1000  decision,
1001  outputEmRefsTmp,
1002  outputMuonRefsTmp,
1003  combosTmp);
1004  } else if (itrig == L1ParticleMap::kDoubleMu3_HTT200) {
1005  objectTypes.push_back(L1ParticleMap::kMuon);
1006  objectTypes.push_back(L1ParticleMap::kMuon);
1007  objectTypes.push_back(L1ParticleMap::kEtHad);
1008 
1009  if (ht >= doubleThresholds_[itrig].second) {
1011  inputMuonRefsDouble, doubleThresholds_[itrig].first, decision, outputMuonRefsTmp, combosTmp, true);
1012 
1013  if (decision) {
1014  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
1015  }
1016  }
1017  } else if (itrig == L1ParticleMap::kDoubleIsoEG5_HTT200) {
1018  objectTypes.push_back(L1ParticleMap::kEM);
1019  objectTypes.push_back(L1ParticleMap::kEM);
1020  objectTypes.push_back(L1ParticleMap::kEtHad);
1021 
1022  if (ht >= doubleThresholds_[itrig].second) {
1024  inputIsoEmRefs, doubleThresholds_[itrig].first, decision, outputEmRefsTmp, combosTmp, true);
1025 
1026  if (decision) {
1027  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
1028  }
1029  }
1030  } else if (itrig == L1ParticleMap::kDoubleEG10_HTT200) {
1031  objectTypes.push_back(L1ParticleMap::kEM);
1032  objectTypes.push_back(L1ParticleMap::kEM);
1033  objectTypes.push_back(L1ParticleMap::kEtHad);
1034 
1035  if (ht >= doubleThresholds_[itrig].second) {
1037  inputRelaxedEmRefs, doubleThresholds_[itrig].first, decision, outputEmRefsTmp, combosTmp, true);
1038 
1039  if (decision) {
1040  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
1041  }
1042  }
1043  } else if (itrig == L1ParticleMap::kDoubleJet50_HTT200) {
1044  objectTypes.push_back(L1ParticleMap::kJet);
1045  objectTypes.push_back(L1ParticleMap::kJet);
1046  objectTypes.push_back(L1ParticleMap::kEtHad);
1047 
1048  if (ht >= doubleThresholds_[itrig].second) {
1050  inputJetRefs, doubleThresholds_[itrig].first, decision, outputJetRefsTmp, combosTmp, true);
1051 
1052  if (decision) {
1053  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
1054  }
1055  }
1056  } else if (itrig == L1ParticleMap::kDoubleTauJet40_HTT200) {
1057  objectTypes.push_back(L1ParticleMap::kJet);
1058  objectTypes.push_back(L1ParticleMap::kJet);
1059  objectTypes.push_back(L1ParticleMap::kEtHad);
1060 
1061  if (ht >= doubleThresholds_[itrig].second) {
1063  inputTauRefs, doubleThresholds_[itrig].first, decision, outputJetRefsTmp, combosTmp, true);
1064 
1065  if (decision) {
1066  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
1067  }
1068  }
1069  } else if (itrig == L1ParticleMap::kDoubleMu3_ETM20) {
1070  objectTypes.push_back(L1ParticleMap::kMuon);
1071  objectTypes.push_back(L1ParticleMap::kMuon);
1072  objectTypes.push_back(L1ParticleMap::kEtMiss);
1073 
1074  if (met >= doubleThresholds_[itrig].second) {
1076  inputMuonRefsDouble, doubleThresholds_[itrig].first, decision, outputMuonRefsTmp, combosTmp, true);
1077 
1078  if (decision) {
1079  metRefTmp = L1EtMissParticleRefProd(metHandle);
1080  }
1081  }
1082  } else if (itrig == L1ParticleMap::kDoubleIsoEG5_ETM20) {
1083  objectTypes.push_back(L1ParticleMap::kEM);
1084  objectTypes.push_back(L1ParticleMap::kEM);
1085  objectTypes.push_back(L1ParticleMap::kEtMiss);
1086 
1087  if (met >= doubleThresholds_[itrig].second) {
1089  inputIsoEmRefs, doubleThresholds_[itrig].first, decision, outputEmRefsTmp, combosTmp, true);
1090 
1091  if (decision) {
1092  metRefTmp = L1EtMissParticleRefProd(metHandle);
1093  }
1094  }
1095  } else if (itrig == L1ParticleMap::kDoubleEG10_ETM20) {
1096  objectTypes.push_back(L1ParticleMap::kEM);
1097  objectTypes.push_back(L1ParticleMap::kEM);
1098  objectTypes.push_back(L1ParticleMap::kEtMiss);
1099 
1100  if (met >= doubleThresholds_[itrig].second) {
1102  inputRelaxedEmRefs, doubleThresholds_[itrig].first, decision, outputEmRefsTmp, combosTmp, true);
1103 
1104  if (decision) {
1105  metRefTmp = L1EtMissParticleRefProd(metHandle);
1106  }
1107  }
1108  } else if (itrig == L1ParticleMap::kDoubleJet50_ETM20) {
1109  objectTypes.push_back(L1ParticleMap::kJet);
1110  objectTypes.push_back(L1ParticleMap::kJet);
1111  objectTypes.push_back(L1ParticleMap::kEtMiss);
1112 
1113  if (met >= doubleThresholds_[itrig].second) {
1115  inputJetRefs, doubleThresholds_[itrig].first, decision, outputJetRefsTmp, combosTmp, true);
1116 
1117  if (decision) {
1118  metRefTmp = L1EtMissParticleRefProd(metHandle);
1119  }
1120  }
1121  } else if (itrig == L1ParticleMap::kDoubleTauJet40_ETM20) {
1122  objectTypes.push_back(L1ParticleMap::kJet);
1123  objectTypes.push_back(L1ParticleMap::kJet);
1124  objectTypes.push_back(L1ParticleMap::kEtMiss);
1125 
1126  if (met >= doubleThresholds_[itrig].second) {
1128  inputTauRefs, doubleThresholds_[itrig].first, decision, outputJetRefsTmp, combosTmp, true);
1129 
1130  if (decision) {
1131  metRefTmp = L1EtMissParticleRefProd(metHandle);
1132  }
1133  }
1134  } else if (itrig == L1ParticleMap::kQuadJet30) {
1135  objectTypes.push_back(L1ParticleMap::kJet);
1136  objectTypes.push_back(L1ParticleMap::kJet);
1137  objectTypes.push_back(L1ParticleMap::kJet);
1138  objectTypes.push_back(L1ParticleMap::kJet);
1139 
1140  evaluateQuadSameObjectTrigger(inputJetRefs, singleThresholds_[itrig], decision, outputJetRefsTmp, combosTmp);
1141  } else if (itrig == L1ParticleMap::kExclusiveDoubleIsoEG4) {
1142  objectTypes.push_back(L1ParticleMap::kEM);
1143  objectTypes.push_back(L1ParticleMap::kEM);
1144 
1145  evaluateDoubleExclusiveIsoEG(inputIsoEmRefs,
1146  inputJetRefs,
1147  doubleThresholds_[itrig].first,
1148  doubleThresholds_[itrig].second,
1149  decision,
1150  outputEmRefsTmp,
1151  combosTmp);
1152 
1153  } else if (itrig == L1ParticleMap::kExclusiveDoubleJet60) {
1154  objectTypes.push_back(L1ParticleMap::kJet);
1155  objectTypes.push_back(L1ParticleMap::kJet);
1156 
1157  if (inputJetRefs.size() == 2) {
1158  evaluateDoubleSameObjectTrigger(inputJetRefs, singleThresholds_[itrig], decision, outputJetRefsTmp, combosTmp);
1159  }
1160  } else if (itrig == L1ParticleMap::kExclusiveJet25_Gap_Jet25) {
1161  objectTypes.push_back(L1ParticleMap::kJet);
1162  objectTypes.push_back(L1ParticleMap::kJet);
1163 
1164  if (inputJetRefs.size() == 2) {
1165  evaluateJetGapJetTrigger(inputForJetRefs, singleThresholds_[itrig], decision, outputJetRefsTmp, combosTmp);
1166  }
1167  } else if (itrig == L1ParticleMap::kIsoEG10_Jet20_ForJet10) {
1168  objectTypes.push_back(L1ParticleMap::kEM);
1169  objectTypes.push_back(L1ParticleMap::kJet);
1170 
1171  evaluateForwardRapidityGap(inputForJetRefs, singleThresholds_[itrig], decision);
1172 
1173  if (decision) {
1174  decision = false;
1176  inputCenJetTauJetRefs,
1177  doubleThresholds_[itrig].first,
1178  doubleThresholds_[itrig].second,
1179  decision,
1180  outputEmRefsTmp,
1181  outputJetRefsTmp,
1182  combosTmp);
1183  }
1184  } else if (itrig == L1ParticleMap::kMinBias_HTT10) {
1185  objectTypes.push_back(L1ParticleMap::kEtHad);
1186 
1187  if (ht >= 10.) {
1188  decision = true;
1189  metRefTmp = L1EtMissParticleRefProd(mhtHandle);
1190  }
1191  } else if (itrig == L1ParticleMap::kZeroBias) {
1192  decision = true;
1193  }
1194 
1195  L1EmParticleVectorRef outputEmRefs;
1196  L1JetParticleVectorRef outputJetRefs;
1197  L1MuonParticleVectorRef outputMuonRefs;
1198  L1EtMissParticleRefProd metRef;
1199  L1ParticleMap::L1IndexComboVector combos; // unfilled for single objs
1200 
1201  if (decision) {
1202  double rand = CLHEP::RandFlat::shoot() * (double)prescales_[itrig];
1203  if (rand > 1.) {
1204  decision = false;
1205  } else {
1206  outputEmRefs = outputEmRefsTmp;
1207  outputJetRefs = outputJetRefsTmp;
1208  outputMuonRefs = outputMuonRefsTmp;
1209  metRef = metRefTmp;
1210  combos = combosTmp;
1211  }
1212  }
1213 
1214  // Construct a L1ParticleMap and add it to the collection.
1215  mapColl->push_back(L1ParticleMap((L1ParticleMap::L1TriggerType)itrig,
1216  decision,
1217  objectTypes,
1218  outputEmRefs,
1219  outputJetRefs,
1220  outputMuonRefs,
1221  metRef,
1222  combos));
1223 
1224  globalDecision = globalDecision || decision;
1225  decisionWord.push_back(decision);
1226  }
1227 
1228  // Put the L1ParticleMapCollection into the event.
1229  iEvent.put(std::move(mapColl));
1230 
1231  // Make a L1GlobalTriggerReadoutRecord and put it into the event.
1232  unique_ptr<L1GlobalTriggerReadoutRecord> gtRecord(new L1GlobalTriggerReadoutRecord());
1233  gtRecord->setDecision(globalDecision);
1234  gtRecord->setDecisionWord(decisionWord);
1235  iEvent.put(std::move(gtRecord));
1236 
1237  return;
1238 }
1239 
1240 template <class TCollection>
1242  std::vector<edm::Ref<TCollection>> &vectorRefs) const // output
1243 {
1244  for (size_t i = 0; i < handle->size(); ++i) {
1245  vectorRefs.push_back(edm::Ref<TCollection>(handle, i));
1246  }
1247 }
1248 
1249 template <class TCollection>
1251  const double &etThreshold, // input
1252  bool &decision, // output
1253  std::vector<edm::Ref<TCollection>> &outputRefs) const // output
1254 {
1255  for (size_t i = 0; i < inputRefs.size(); ++i) {
1256  if (inputRefs[i].get()->et() >= etThreshold) {
1257  decision = true;
1258  outputRefs.push_back(inputRefs[i]);
1259  }
1260  }
1261 }
1262 
1263 template <class TCollection>
1265  const std::vector<edm::Ref<TCollection>> &inputRefs, // input
1266  const double &etThreshold, // input
1267  bool &decision, // output
1268  std::vector<edm::Ref<TCollection>> &outputRefs, // output
1270  bool combinedWithGlobalObject) const // input
1271 {
1272  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
1273  // because i is unsigned, and if size() is 0, then RHS undefined.
1274  for (size_t i = 0; i + 1 < inputRefs.size(); ++i) {
1275  const edm::Ref<TCollection> &refi = inputRefs[i];
1276  if (refi.get()->et() >= etThreshold) {
1277  for (size_t j = i + 1; j < inputRefs.size(); ++j) {
1278  const edm::Ref<TCollection> &refj = inputRefs[j];
1279  if (refj.get()->et() >= etThreshold) {
1280  decision = true;
1281 
1282  // If the two objects are already in the list, find
1283  // their indices.
1284  int iInList = kDefault;
1285  int jInList = kDefault;
1286  for (size_t iout = 0; iout < outputRefs.size(); ++iout) {
1287  if (refi == outputRefs[iout]) {
1288  iInList = iout;
1289  }
1290 
1291  if (refj == outputRefs[iout]) {
1292  jInList = iout;
1293  }
1294  }
1295 
1296  // If either object is not in the list, add it, and
1297  // record its index.
1298  if (iInList == kDefault) {
1299  iInList = outputRefs.size();
1300  outputRefs.push_back(refi);
1301  }
1302 
1303  if (jInList == kDefault) {
1304  jInList = outputRefs.size();
1305  outputRefs.push_back(refj);
1306  }
1307 
1308  // Record this object combination.
1310  combo.push_back(iInList);
1311  combo.push_back(jInList);
1312  if (combinedWithGlobalObject)
1313  combo.push_back(0);
1314  combos.push_back(combo);
1315  }
1316  }
1317  }
1318  }
1319 }
1320 
1321 template <class TCollection>
1323  const std::vector<edm::Ref<TCollection>> &inputRefs, // input
1324  const double &etThreshold, // input
1325  bool &decision, // output
1326  std::vector<edm::Ref<TCollection>> &outputRefs, // output
1327  l1extra::L1ParticleMap::L1IndexComboVector &combos) const // output
1328 {
1329  // Use i+2 < inputRefs.size() instead of i < inputRefs.size()-2
1330  // because i is unsigned, and if size() is 0, then RHS undefined.
1331  for (size_t i = 0; i + 2 < inputRefs.size(); ++i) {
1332  const edm::Ref<TCollection> &refi = inputRefs[i];
1333  if (refi.get()->et() >= etThreshold) {
1334  for (size_t j = i + 1; j + 1 < inputRefs.size(); ++j) {
1335  const edm::Ref<TCollection> &refj = inputRefs[j];
1336  if (refj.get()->et() >= etThreshold) {
1337  for (size_t k = j + 1; k < inputRefs.size(); ++k) {
1338  const edm::Ref<TCollection> &refk = inputRefs[k];
1339  if (refk.get()->et() >= etThreshold) {
1340  decision = true;
1341 
1342  // If the three objects are already in the list, find
1343  // their indices.
1344  int iInList = kDefault;
1345  int jInList = kDefault;
1346  int kInList = kDefault;
1347  for (size_t iout = 0; iout < outputRefs.size(); ++iout) {
1348  if (refi == outputRefs[iout]) {
1349  iInList = iout;
1350  }
1351 
1352  if (refj == outputRefs[iout]) {
1353  jInList = iout;
1354  }
1355 
1356  if (refk == outputRefs[iout]) {
1357  kInList = iout;
1358  }
1359  }
1360 
1361  // If any object is not in the list, add it, and
1362  // record its index.
1363  if (iInList == kDefault) {
1364  iInList = outputRefs.size();
1365  outputRefs.push_back(refi);
1366  }
1367 
1368  if (jInList == kDefault) {
1369  jInList = outputRefs.size();
1370  outputRefs.push_back(refj);
1371  }
1372 
1373  if (kInList == kDefault) {
1374  kInList = outputRefs.size();
1375  outputRefs.push_back(refk);
1376  }
1377 
1378  // Record this object combination.
1380  combo.push_back(iInList);
1381  combo.push_back(jInList);
1382  combo.push_back(kInList);
1383  combos.push_back(combo);
1384  }
1385  }
1386  }
1387  }
1388  }
1389  }
1390 }
1391 
1392 template <class TCollection1, class TCollection2>
1394  const std::vector<edm::Ref<TCollection1>> &inputRefs1, // input
1395  const std::vector<edm::Ref<TCollection2>> &inputRefs2, // input
1396  const double &etThreshold1, // input
1397  const double &etThreshold2, // input
1398  bool &decision, // output
1399  std::vector<edm::Ref<TCollection1>> &outputRefs1, // output
1400  std::vector<edm::Ref<TCollection2>> &outputRefs2, // output
1401  l1extra::L1ParticleMap::L1IndexComboVector &combos) const // output
1402 {
1403  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
1404  // because i is unsigned, and if size() is 0, then RHS undefined.
1405  for (size_t i = 0; i + 1 < inputRefs1.size(); ++i) {
1406  const edm::Ref<TCollection1> &refi = inputRefs1[i];
1407  if (refi.get()->et() >= etThreshold1) {
1408  for (size_t j = i + 1; j < inputRefs1.size(); ++j) {
1409  const edm::Ref<TCollection1> &refj = inputRefs1[j];
1410  if (refj.get()->et() >= etThreshold1) {
1411  for (size_t k = 0; k < inputRefs2.size(); ++k) {
1412  const edm::Ref<TCollection2> &refk = inputRefs2[k];
1413  if (refk.get()->et() >= etThreshold2) {
1414  decision = true;
1415 
1416  // If the three objects are already in the list, find
1417  // their indices.
1418  int iInList = kDefault;
1419  int jInList = kDefault;
1420 
1421  for (size_t iout = 0; iout < outputRefs1.size(); ++iout) {
1422  if (refi == outputRefs1[iout]) {
1423  iInList = iout;
1424  }
1425 
1426  if (refj == outputRefs1[iout]) {
1427  jInList = iout;
1428  }
1429  }
1430 
1431  int kInList = kDefault;
1432  for (size_t kout = 0; kout < outputRefs2.size(); ++kout) {
1433  if (refk == outputRefs2[kout]) {
1434  kInList = kout;
1435  }
1436  }
1437 
1438  // If any object is not in the list, add it, and
1439  // record its index.
1440  if (iInList == kDefault) {
1441  iInList = outputRefs1.size();
1442  outputRefs1.push_back(refi);
1443  }
1444 
1445  if (jInList == kDefault) {
1446  jInList = outputRefs1.size();
1447  outputRefs1.push_back(refj);
1448  }
1449 
1450  if (kInList == kDefault) {
1451  kInList = outputRefs2.size();
1452  outputRefs2.push_back(refk);
1453  }
1454 
1455  // Record this object combination.
1457  combo.push_back(iInList);
1458  combo.push_back(jInList);
1459  combo.push_back(kInList);
1460  combos.push_back(combo);
1461  }
1462  }
1463  }
1464  }
1465  }
1466  }
1467 }
1468 
1469 template <class TCollection>
1471  const std::vector<edm::Ref<TCollection>> &inputRefs, // input
1472  const double &etThreshold, // input
1473  bool &decision, // output
1474  std::vector<edm::Ref<TCollection>> &outputRefs, // output
1475  l1extra::L1ParticleMap::L1IndexComboVector &combos) const // output
1476 {
1477  // Use i+3 < inputRefs.size() instead of i < inputRefs.size()-3
1478  // because i is unsigned, and if size() is 0, then RHS undefined.
1479  for (size_t i = 0; i + 3 < inputRefs.size(); ++i) {
1480  const edm::Ref<TCollection> &refi = inputRefs[i];
1481  if (refi.get()->et() >= etThreshold) {
1482  for (size_t j = i + 1; j + 2 < inputRefs.size(); ++j) {
1483  const edm::Ref<TCollection> &refj = inputRefs[j];
1484  if (refj.get()->et() >= etThreshold) {
1485  for (size_t k = j + 1; k + 1 < inputRefs.size(); ++k) {
1486  const edm::Ref<TCollection> &refk = inputRefs[k];
1487  if (refk.get()->et() >= etThreshold) {
1488  for (size_t p = k + 1; p < inputRefs.size(); ++p) {
1489  const edm::Ref<TCollection> &refp = inputRefs[p];
1490  if (refp.get()->et() >= etThreshold) {
1491  decision = true;
1492 
1493  // If the objects are already in the list, find
1494  // their indices.
1495  int iInList = kDefault;
1496  int jInList = kDefault;
1497  int kInList = kDefault;
1498  int pInList = kDefault;
1499  for (size_t iout = 0; iout < outputRefs.size(); ++iout) {
1500  if (refi == outputRefs[iout]) {
1501  iInList = iout;
1502  }
1503 
1504  if (refj == outputRefs[iout]) {
1505  jInList = iout;
1506  }
1507 
1508  if (refk == outputRefs[iout]) {
1509  kInList = iout;
1510  }
1511 
1512  if (refp == outputRefs[iout]) {
1513  pInList = iout;
1514  }
1515  }
1516 
1517  // If any object is not in the list, add it, and
1518  // record its index.
1519  if (iInList == kDefault) {
1520  iInList = outputRefs.size();
1521  outputRefs.push_back(refi);
1522  }
1523 
1524  if (jInList == kDefault) {
1525  jInList = outputRefs.size();
1526  outputRefs.push_back(refj);
1527  }
1528 
1529  if (kInList == kDefault) {
1530  kInList = outputRefs.size();
1531  outputRefs.push_back(refk);
1532  }
1533 
1534  if (pInList == kDefault) {
1535  pInList = outputRefs.size();
1536  outputRefs.push_back(refp);
1537  }
1538 
1539  // Record this object combination.
1541  combo.push_back(iInList);
1542  combo.push_back(jInList);
1543  combo.push_back(kInList);
1544  combo.push_back(pInList);
1545  combos.push_back(combo);
1546  }
1547  }
1548  }
1549  }
1550  }
1551  }
1552  }
1553  }
1554 }
1555 
1556 template <class TCollection1, class TCollection2>
1558  const std::vector<edm::Ref<TCollection1>> &inputRefs1, // input
1559  const std::vector<edm::Ref<TCollection2>> &inputRefs2, // input
1560  const double &etThreshold1, // input
1561  const double &etThreshold2, // input
1562  bool &decision, // output
1563  std::vector<edm::Ref<TCollection1>> &outputRefs1, // output
1564  std::vector<edm::Ref<TCollection2>> &outputRefs2, // output
1565  l1extra::L1ParticleMap::L1IndexComboVector &combos) const // output
1566 {
1567  for (size_t i = 0; i < inputRefs1.size(); ++i) {
1568  const edm::Ref<TCollection1> &refi = inputRefs1[i];
1569  if (refi.get()->et() >= etThreshold1) {
1570  for (size_t j = 0; j < inputRefs2.size(); ++j) {
1571  const edm::Ref<TCollection2> &refj = inputRefs2[j];
1572 
1573  if (refj.get()->et() >= etThreshold2) {
1574  decision = true;
1575 
1576  // If the two objects are already in their respective lists,
1577  // find their indices.
1578  int iInList = kDefault;
1579  for (size_t iout = 0; iout < outputRefs1.size(); ++iout) {
1580  if (refi == outputRefs1[iout]) {
1581  iInList = iout;
1582  }
1583  }
1584 
1585  int jInList = kDefault;
1586  for (size_t jout = 0; jout < outputRefs2.size(); ++jout) {
1587  if (refj == outputRefs2[jout]) {
1588  jInList = jout;
1589  }
1590  }
1591 
1592  // If either object is not in the list, add it, and
1593  // record its index.
1594  if (iInList == kDefault) {
1595  iInList = outputRefs1.size();
1596  outputRefs1.push_back(refi);
1597  }
1598 
1599  if (jInList == kDefault) {
1600  jInList = outputRefs2.size();
1601  outputRefs2.push_back(refj);
1602  }
1603 
1604  // Record this object combination.
1606  combo.push_back(iInList);
1607  combo.push_back(jInList);
1608  combos.push_back(combo);
1609  }
1610  }
1611  }
1612  }
1613 }
1614 
1615 template <class TCollection>
1617  const std::vector<edm::Ref<TCollection>> &inputRefs1, // input
1618  const std::vector<edm::Ref<TCollection>> &inputRefs2, // input
1619  const double &etThreshold1, // input
1620  const double &etThreshold2, // input
1621  bool &decision, // output
1622  std::vector<edm::Ref<TCollection>> &outputRefs, // output
1623  l1extra::L1ParticleMap::L1IndexComboVector &combos) const // output
1624 {
1625  for (size_t i = 0; i < inputRefs1.size(); ++i) {
1626  const edm::Ref<TCollection> &refi = inputRefs1[i];
1627  if (refi.get()->et() >= etThreshold1) {
1628  for (size_t j = 0; j < inputRefs2.size(); ++j) {
1629  const edm::Ref<TCollection> &refj = inputRefs2[j];
1630 
1631  if (refj.get()->et() >= etThreshold2 && refi != refj) {
1632  decision = true;
1633 
1634  // If the two objects are already in their respective lists,
1635  // find their indices.
1636  int iInList = kDefault;
1637  for (size_t iout = 0; iout < outputRefs.size(); ++iout) {
1638  if (refi == outputRefs[iout]) {
1639  iInList = iout;
1640  }
1641  }
1642 
1643  int jInList = kDefault;
1644  for (size_t jout = 0; jout < outputRefs.size(); ++jout) {
1645  if (refj == outputRefs[jout]) {
1646  jInList = jout;
1647  }
1648  }
1649 
1650  // If either object is not in the list, add it, and
1651  // record its index.
1652  if (iInList == kDefault) {
1653  iInList = outputRefs.size();
1654  outputRefs.push_back(refi);
1655  }
1656 
1657  if (jInList == kDefault) {
1658  jInList = outputRefs.size();
1659  outputRefs.push_back(refj);
1660  }
1661 
1662  // Record this object combination.
1664  combo.push_back(iInList);
1665  combo.push_back(jInList);
1666  combos.push_back(combo);
1667  }
1668  }
1669  }
1670  }
1671 }
1672 
1674  const l1extra::L1EmParticleVectorRef &inputRefs1, // input
1675  const l1extra::L1JetParticleVectorRef &inputRefs2, // input
1676  const double &etThreshold1, // input
1677  const double &etThreshold2, // input
1678  bool &decision, // output
1679  l1extra::L1EmParticleVectorRef &outputRefs1, // output
1680  l1extra::L1JetParticleVectorRef &outputRefs2, // output
1681  l1extra::L1ParticleMap::L1IndexComboVector &combos) const // output
1682 {
1683  for (size_t i = 0; i < inputRefs1.size(); ++i) {
1684  const l1extra::L1EmParticleRef &refi = inputRefs1[i];
1685  if (refi.get()->et() >= etThreshold1) {
1686  for (size_t j = 0; j < inputRefs2.size(); ++j) {
1687  const l1extra::L1JetParticleRef &refj = inputRefs2[j];
1688 
1689  // Check for identical region only if both HW objects are non-null.
1690  if (refj.get()->et() >= etThreshold2 &&
1691  (refi.get()->gctEmCand() == nullptr || refj.get()->gctJetCand() == nullptr ||
1692  refi.get()->gctEmCand()->regionId() != refj.get()->gctJetCand()->regionId())) {
1693  decision = true;
1694 
1695  // If the two objects are already in their respective lists,
1696  // find their indices.
1697  int iInList = kDefault;
1698  for (size_t iout = 0; iout < outputRefs1.size(); ++iout) {
1699  if (refi == outputRefs1[iout]) {
1700  iInList = iout;
1701  }
1702  }
1703 
1704  int jInList = kDefault;
1705  for (size_t jout = 0; jout < outputRefs2.size(); ++jout) {
1706  if (refj == outputRefs2[jout]) {
1707  jInList = jout;
1708  }
1709  }
1710 
1711  // If either object is not in the list, add it, and
1712  // record its index.
1713  if (iInList == kDefault) {
1714  iInList = outputRefs1.size();
1715  outputRefs1.push_back(refi);
1716  }
1717 
1718  if (jInList == kDefault) {
1719  jInList = outputRefs2.size();
1720  outputRefs2.push_back(refj);
1721  }
1722 
1723  // Record this object combination.
1725  combo.push_back(iInList);
1726  combo.push_back(jInList);
1727  combos.push_back(combo);
1728  }
1729  }
1730  }
1731  }
1732 }
1733 
1734 // ok if both objects are above the threshold and are in opposite hemispheres
1736  const l1extra::L1JetParticleVectorRef &inputRefs, // input
1737  const double &etThreshold, // input
1738  bool &decision, // output
1739  l1extra::L1JetParticleVectorRef &outputRefs, // output
1740  l1extra::L1ParticleMap::L1IndexComboVector &combos) const // output
1741 {
1742  // Use i+1 < inputRefs.size() instead of i < inputRefs.size()-1
1743  // because i is unsigned, and if size() is 0, then RHS undefined.
1744  for (size_t i = 0; i + 1 < inputRefs.size(); ++i) {
1745  const l1extra::L1JetParticleRef &refi = inputRefs[i];
1746  if (refi.get()->et() >= etThreshold) {
1747  for (size_t j = i + 1; j < inputRefs.size(); ++j) {
1748  const l1extra::L1JetParticleRef &refj = inputRefs[j];
1749  if ((refj.get()->et() >= etThreshold) && (((refi.get()->eta() < 0.) && (refj.get()->eta() > 0.)) ||
1750  ((refi.get()->eta() > 0.) && (refj.get()->eta() < 0.)))) {
1751  decision = true;
1752 
1753  // If the two objects are already in the list, find
1754  // their indices.
1755  int iInList = kDefault;
1756  int jInList = kDefault;
1757  for (size_t iout = 0; iout < outputRefs.size(); ++iout) {
1758  if (refi == outputRefs[iout]) {
1759  iInList = iout;
1760  }
1761 
1762  if (refj == outputRefs[iout]) {
1763  jInList = iout;
1764  }
1765  }
1766 
1767  // If either object is not in the list, add it, and
1768  // record its index.
1769  if (iInList == kDefault) {
1770  iInList = outputRefs.size();
1771  outputRefs.push_back(refi);
1772  }
1773 
1774  if (jInList == kDefault) {
1775  jInList = outputRefs.size();
1776  outputRefs.push_back(refj);
1777  }
1778 
1779  // Record this object combination.
1781  combo.push_back(iInList);
1782  combo.push_back(jInList);
1783  combos.push_back(combo);
1784  }
1785  }
1786  }
1787  }
1788 }
1789 
1790 // veto if both forward regions see some jet with e_T > threshold
1792  const double &etThreshold, // input
1793  bool &decision // output
1794 ) const {
1795  decision = true;
1796 
1797  // search for forward pair
1798  for (size_t k = 0; k + 1 < inputRefs.size(); ++k) {
1799  const l1extra::L1JetParticleRef &refk = inputRefs[k];
1800  double etak = refk.get()->eta();
1801  if ((refk.get()->type() == l1extra::L1JetParticle::kForward) && (refk.get()->et() >= etThreshold)) {
1802  for (size_t l = k + 1; l < inputRefs.size(); ++l) {
1803  const l1extra::L1JetParticleRef &refl = inputRefs[l];
1804  double etal = refl.get()->eta();
1805  if ((refl.get()->type() == l1extra::L1JetParticle::kForward) && (refl.get()->et() >= etThreshold) &&
1806  ((etak > 0 && etal < 0) || (etak < 0 && etal > 0))) {
1807  decision = false;
1808  return; // no need for going further -- for a faster algorithm
1809  }
1810  }
1811  }
1812  }
1813 }
1814 
1816  const l1extra::L1EmParticleVectorRef &inputRefs1, // input
1817  const l1extra::L1JetParticleVectorRef &inputRefs2, // input
1818  const double &etThreshold1, // input
1819  const double &etThreshold2, // input
1820  bool &decision, // output
1821  l1extra::L1EmParticleVectorRef &outputRefs1, // output
1822  l1extra::L1ParticleMap::L1IndexComboVector &combos) const // output
1823 {
1824  if (inputRefs1.size() == 2) { // 2 iso EG
1825  decision = true;
1826  if (!inputRefs2.empty()) { // should veto if there are jets, with pt>thresh
1827  for (size_t j = 0; j < inputRefs2.size(); ++j) {
1828  if (inputRefs2[j].get()->gctJetCand()->regionId() == inputRefs1[0].get()->gctEmCand()->regionId())
1829  continue;
1830  if (inputRefs2[j].get()->gctJetCand()->regionId() == inputRefs1[1].get()->gctEmCand()->regionId())
1831  continue;
1832  if (inputRefs2[j].get()->et() > etThreshold2) {
1833  decision = false;
1834  break;
1835  }
1836  // break : for a faster algorithm
1837  }
1838  }
1839  if (decision) { // threshold evaluation for the Exclusive double isoEG
1840  decision = false;
1841  evaluateDoubleSameObjectTrigger(inputRefs1, etThreshold1, decision, outputRefs1, combos);
1842  }
1843  }
1844 }
1845 
1846 // define this as a plug-in
1847 // DEFINE_FWK_MODULE(L1ExtraParticleMapProd);
void evaluateTripleSameObjectTrigger(const std::vector< edm::Ref< TCollection >> &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection >> &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos) const
void evaluateSingleObjectTrigger(const std::vector< edm::Ref< TCollection >> &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection >> &outputRefs) const
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::pair< double, double > doubleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
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) const
std::vector< unsigned int > L1IndexCombo
void addToVectorRefs(const edm::Handle< TCollection > &handle, std::vector< edm::Ref< TCollection >> &vectorRefs) const
static const int kDefault
void evaluateForwardRapidityGap(const l1extra::L1JetParticleVectorRef &inputRefs, const double &etThreshold, bool &decision) const
U second(std::pair< T, U > const &p)
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
int iEvent
Definition: GenABIO.cc:224
std::vector< L1JetParticleRef > L1JetParticleVectorRef
std::vector< L1MuonParticleRef > L1MuonParticleVectorRef
void evaluateJetGapJetTrigger(const l1extra::L1JetParticleVectorRef &inputRefs, const double &etThreshold, bool &decision, l1extra::L1JetParticleVectorRef &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos) const
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) const
double singleThresholds_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
edm::RefProd< L1EtMissParticle > L1EtMissParticleRefProd
const double & etTotal() const
void evaluateQuadSameObjectTrigger(const std::vector< edm::Ref< TCollection >> &inputRefs, const double &etThreshold, bool &decision, std::vector< edm::Ref< TCollection >> &outputRefs, l1extra::L1ParticleMap::L1IndexComboVector &combos) const
std::vector< L1IndexCombo > L1IndexComboVector
fixed size matrix
HLT enums.
int prescales_[l1extra::L1ParticleMap::kNumOfL1TriggerTypes]
std::vector< L1EmParticleRef > L1EmParticleVectorRef
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:232
Pt3D refl(const Pt3D &p)
L1ExtraParticleMapProd(const edm::ParameterSet &)
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) const
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) const
def move(src, dest)
Definition: eostools.py:511
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) const
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) const