49 return StatusCode::SUCCESS;
53 if (! hltCluster_readHandle.
isValid() ) {
55 return StatusCode::FAILURE;
60 if (! offCluster_readHandle.
isValid() ) {
62 return StatusCode::FAILURE;
66 int bcid = ctx.eventID().bunch_crossing_id();
71 ATH_MSG_ERROR(
"Unable to retrieve BunchCrossing conditions object" );
72 return StatusCode::FAILURE;
85 std::vector<clus_kin<const xAOD::TrigEMCluster*> > vec_hlt_clusters;
90 for (
const auto hlt_cluster : *hltCluster_readHandle) {
91 auto hlt_clus_et = hlt_cluster->et();
93 vec_hlt_clusters.push_back({hlt_clus_et*0.001, hlt_cluster->eta(), hlt_cluster->phi(), hlt_cluster});
97 else if (accepted_hlt_clusters.size()>0){
98 for (
const auto* hlt_cluster : accepted_hlt_clusters) {
99 auto hlt_clus_et = hlt_cluster->et();
101 vec_hlt_clusters.push_back({hlt_clus_et*0.001, hlt_cluster->eta(), hlt_cluster->phi(), hlt_cluster});
105 std::vector<clus_kin<const xAOD::CaloCluster*> > vec_off_clusters;
106 for (
const auto off_cluster : *offCluster_readHandle) {
107 auto off_clus_et = off_cluster->et();
110 bool OFF_type_match =
false;
113 if (off_cluster->clusterSize() ==
m_OFF_types[
n]) { OFF_type_match =
true;
break; }
116 if (!
m_OFF_types.empty() && !OFF_type_match)
continue;
118 vec_off_clusters.push_back({off_clus_et*0.001, off_cluster->eta(), off_cluster->phi(), off_cluster});
125 unsigned int n_hlt_clusters = 0;
126 unsigned int n_hlt_barrel_high_et_clusters = 0;
127 unsigned int n_hlt_clusters_no_match = 0;
128 unsigned int n_hlt_clusters_with_match = 0;
138 std::vector<char> vec_hlt_barrel_high_et, vec_hlt_no_off_match, vec_hlt_with_off_match;
148 std::vector<float> vec_hlt_vs_off_minimum_delta_r, vec_hlt_vs_off_delta_eta, vec_hlt_vs_off_delta_phi, vec_hlt_vs_off_resolution, vec_off_match_et;
151 auto HLT_vs_OFF_minimum_delta_r =
Monitored::Collection(
"HLT_vs_OFF_minimum_delta_r", vec_hlt_vs_off_minimum_delta_r);
152 auto HLT_vs_OFF_minimum_delta_eta =
Monitored::Collection(
"HLT_vs_OFF_minimum_delta_eta", vec_hlt_vs_off_delta_eta);
153 auto HLT_vs_OFF_minimum_delta_phi =
Monitored::Collection(
"HLT_vs_OFF_minimum_delta_phi", vec_hlt_vs_off_delta_phi);
154 auto HLT_vs_OFF_resolution =
Monitored::Collection(
"HLT_vs_OFF_resolution", vec_hlt_vs_off_resolution);
161 for (
const auto& hlt_cluster : vec_hlt_clusters) {
166 if (hlt_cluster.et > (
m_HLT_high_et*0.001) && fabs(hlt_cluster.eta) < 2.5) {
168 ++n_hlt_barrel_high_et_clusters;
170 vec_hlt_barrel_high_et.push_back(1);
172 else vec_hlt_barrel_high_et.push_back(0);
176 float min_delta_r = 999999.9;
178 for (
const auto& off_cluster : vec_off_clusters) {
182 if (delta_r < min_delta_r) {
184 min_delta_r = delta_r;
185 off_match = &off_cluster;
190 vec_hlt_vs_off_minimum_delta_r.push_back(min_delta_r);
195 ++n_hlt_clusters_no_match;
197 vec_off_match_et.push_back(0.);
198 vec_hlt_vs_off_resolution.push_back(0.);
199 vec_hlt_vs_off_delta_eta.push_back(0.);
200 vec_hlt_vs_off_delta_phi.push_back(0.);
202 vec_hlt_no_off_match.push_back(1);
203 vec_hlt_with_off_match.push_back(0);
209 ++n_hlt_clusters_with_match;
211 vec_off_match_et.push_back(off_match->
et);
212 vec_hlt_vs_off_resolution.push_back(((off_match->
et - hlt_cluster.et) / off_match->
et) * 100);
213 vec_hlt_vs_off_delta_eta.push_back(off_match->
eta - hlt_cluster.eta);
216 vec_hlt_no_off_match.push_back(0);
217 vec_hlt_with_off_match.push_back(1);
222 HLT_num = n_hlt_clusters;
223 HLT_barrel_high_et_num = n_hlt_barrel_high_et_clusters;
224 HLT_no_OFF_match_num = n_hlt_clusters_no_match;
225 HLT_with_OFF_match_num = n_hlt_clusters_with_match;
226 if (n_hlt_clusters>0) {
227 HLT_matched_fraction =
static_cast<float>(n_hlt_clusters_with_match) / n_hlt_clusters;
234 unsigned int n_off_clusters = 0;
235 unsigned int n_off_clusters_no_match = 0;
236 unsigned int n_off_clusters_with_match = 0;
246 std::vector<char> vec_off_no_hlt_match, vec_off_with_hlt_match;
254 std::vector<float> vec_off_vs_hlt_minimum_delta_r, vec_off_vs_hlt_delta_eta, vec_off_vs_hlt_delta_phi, vec_off_vs_hlt_resolution, vec_hlt_match_et;
257 auto OFF_vs_HLT_minimum_delta_r =
Monitored::Collection(
"OFF_vs_HLT_minimum_delta_r", vec_off_vs_hlt_minimum_delta_r);
258 auto OFF_vs_HLT_minimum_delta_eta =
Monitored::Collection(
"OFF_vs_HLT_minimum_delta_eta", vec_off_vs_hlt_delta_eta);
259 auto OFF_vs_HLT_minimum_delta_phi =
Monitored::Collection(
"OFF_vs_HLT_minimum_delta_phi", vec_off_vs_hlt_delta_phi);
260 auto OFF_vs_HLT_resolution =
Monitored::Collection(
"OFF_vs_HLT_resolution", vec_off_vs_hlt_resolution);
267 for (
const auto& off_cluster : vec_off_clusters) {
273 float min_delta_r = 999999.9;
275 for (
const auto& hlt_cluster : vec_hlt_clusters) {
279 if (delta_r < min_delta_r) {
281 min_delta_r = delta_r;
282 hlt_match = &hlt_cluster;
287 vec_off_vs_hlt_minimum_delta_r.push_back(min_delta_r);
292 ++n_off_clusters_no_match;
294 vec_hlt_match_et.push_back(0.);
296 vec_off_vs_hlt_resolution.push_back(0.);
297 vec_off_vs_hlt_delta_eta.push_back(0.);
298 vec_off_vs_hlt_delta_phi.push_back(0.);
300 vec_off_no_hlt_match.push_back(1);
301 vec_off_with_hlt_match.push_back(0);
307 ++n_off_clusters_with_match;
309 vec_hlt_match_et.push_back(hlt_match->
et);
311 vec_off_vs_hlt_resolution.push_back(((off_cluster.et - hlt_match->
et) / off_cluster.et) * 100);
312 vec_off_vs_hlt_delta_eta.push_back(off_cluster.eta - hlt_match->
eta);
315 vec_off_no_hlt_match.push_back(0);
316 vec_off_with_hlt_match.push_back(1);
321 OFF_num = n_off_clusters;
322 OFF_no_HLT_match_num = n_off_clusters_no_match;
323 OFF_with_HLT_match_num = n_off_clusters_with_match;
324 if (n_off_clusters>0) {
325 OFF_matched_fraction =
static_cast<float>(n_off_clusters_with_match) / n_off_clusters;
332 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_size, HLT_barrel_high_et_num, HLT_bc,
335 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
338 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_type,
341 OFF_no_HLT_match, OFF_with_HLT_match,
344 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
345 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_minimum_delta_eta, HLT_vs_OFF_minimum_delta_phi,
348 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
349 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_minimum_delta_eta, OFF_vs_HLT_minimum_delta_phi
352 else if(accepted_hlt_clusters.size()>0){
356 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_size, HLT_barrel_high_et_num, HLT_bc,
359 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
362 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_type,
365 OFF_no_HLT_match, OFF_with_HLT_match,
368 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
369 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_minimum_delta_eta, HLT_vs_OFF_minimum_delta_phi,
372 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
373 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_minimum_delta_eta, OFF_vs_HLT_minimum_delta_phi
376 return StatusCode::SUCCESS;
382 if (fabs(eta_1-eta_2) > max_deltar)
return 99.9;
384 if (DeltaPhi > max_deltar)
return 99.9;
385 return sqrt( ((eta_1-eta_2)*(eta_1-eta_2)) + (DeltaPhi*DeltaPhi) );
391 featureRequestDescriptor.
setCondition(TrigDefs::includeFailedDecisions);
393 std::vector<const xAOD::TrigEMCluster*> clustersToMonitorForChain;
396 clustersToMonitorForChain.
push_back( *(
f.link) );
399 ATH_MSG_DEBUG(
"clustersToMonitorForChain.size(): "<<clustersToMonitorForChain.size());
400 for(
auto &
p: clustersToMonitorForChain)
402 return clustersToMonitorForChain;