56 return StatusCode::SUCCESS;
59 if (
m_trigDecTool->ExperimentalAndExpertMethods().isHLTTruncated()){
61 return StatusCode::SUCCESS;
66 if (! hltCluster_readHandle.
isValid() ) {
68 return StatusCode::FAILURE;
73 if (! offCluster_readHandle.
isValid() ) {
75 return StatusCode::FAILURE;
79 int bcid = ctx.eventID().bunch_crossing_id();
84 ATH_MSG_ERROR(
"Unable to retrieve BunchCrossing conditions object" );
85 return StatusCode::FAILURE;
96 std::vector<clus_kin> vec_hlt_clusters;
100 if (accepted_hlt_clusters.size()>0){
101 for (
const auto* hlt_cluster : accepted_hlt_clusters) {
102 auto hlt_clus_et = hlt_cluster->et();
105 bool HLT_type_match =
false;
108 if (hlt_cluster->clusterSize() ==
m_HLT_types[
n]) { HLT_type_match =
true;
break; }
111 if (!
m_HLT_types.empty() && !HLT_type_match)
continue;
112 vec_hlt_clusters.push_back({hlt_clus_et*0.001, hlt_cluster->eta(), hlt_cluster->phi(), hlt_cluster});
116 for (
const auto hlt_cluster : *hltCluster_readHandle) {
117 auto hlt_clus_et = hlt_cluster->et();
120 bool HLT_type_match =
false;
123 if (hlt_cluster->clusterSize() ==
m_HLT_types[
n]) { HLT_type_match =
true;
break; }
126 if (!
m_HLT_types.empty() && !HLT_type_match)
continue;
127 vec_hlt_clusters.push_back({hlt_clus_et*0.001, hlt_cluster->eta(), hlt_cluster->phi(), hlt_cluster});
132 float off_clus_eta = 0;
133 float off_clus_phi = 0;
134 float off_clus_et = 0;
135 std::vector<clus_kin> vec_off_clusters;
136 for (
const auto off_cluster : *offCluster_readHandle) {
138 off_clus_et = off_cluster->et();
139 off_clus_eta = off_cluster->eta();
140 off_clus_phi = off_cluster->phi();
143 off_clus_et = off_cluster->rawE()/std::cosh(std::abs(off_cluster->rawEta()));
144 off_clus_eta = off_cluster->rawEta();
145 off_clus_phi = off_cluster->rawPhi();
149 bool OFF_type_match =
false;
152 if (off_cluster->clusterSize() ==
m_OFF_types[
n]) { OFF_type_match =
true;
break; }
155 if (!
m_OFF_types.empty() && !OFF_type_match)
continue;
156 vec_off_clusters.push_back({off_clus_et*0.001, off_clus_eta, off_clus_phi, off_cluster});
164 unsigned int n_hlt_clusters = 0;
165 unsigned int n_hlt_barrel_high_et_clusters = 0;
166 unsigned int n_hlt_clusters_no_match = 0;
167 unsigned int n_hlt_clusters_with_match = 0;
183 std::vector<char> vec_hlt_barrel_high_et, vec_hlt_no_off_match, vec_hlt_with_off_match;
193 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_delta_time, vec_hlt_vs_off_resolution, vec_off_match_et;
196 auto HLT_vs_OFF_minimum_delta_r =
Monitored::Collection(
"HLT_vs_OFF_minimum_delta_r", vec_hlt_vs_off_minimum_delta_r);
199 auto HLT_vs_OFF_delta_time =
Monitored::Collection(
"HLT_vs_OFF_delta_time", vec_hlt_vs_off_delta_time);
200 auto HLT_vs_OFF_resolution =
Monitored::Collection(
"HLT_vs_OFF_resolution", vec_hlt_vs_off_resolution);
203 const clus_kin *off_match =
nullptr;
207 for (
const auto& hlt_cluster : vec_hlt_clusters) {
212 if (hlt_cluster.et > (
m_HLT_high_et * 0.001) && std::abs(hlt_cluster.eta) < 2.5) {
213 ++n_hlt_barrel_high_et_clusters;
214 vec_hlt_barrel_high_et.push_back(1);
216 else vec_hlt_barrel_high_et.push_back(0);
220 float min_delta_r = 999999.9;
222 for (
const auto& off_cluster : vec_off_clusters) {
225 if (delta_r < min_delta_r) {
227 min_delta_r = delta_r;
228 off_match = &off_cluster;
233 vec_hlt_vs_off_minimum_delta_r.push_back(min_delta_r);
238 ++n_hlt_clusters_no_match;
240 vec_off_match_et.push_back(0.);
242 vec_hlt_vs_off_resolution.push_back(0.);
243 vec_hlt_vs_off_delta_eta.push_back(0.);
244 vec_hlt_vs_off_delta_phi.push_back(0.);
245 vec_hlt_vs_off_delta_time.push_back(0.);
247 vec_hlt_no_off_match.push_back(1);
248 vec_hlt_with_off_match.push_back(0);
254 ++n_hlt_clusters_with_match;
256 vec_off_match_et.push_back(off_match->
et);
258 vec_hlt_vs_off_resolution.push_back(((off_match->
et - hlt_cluster.et) / off_match->
et) * 100);
259 vec_hlt_vs_off_delta_eta.push_back(off_match->
eta - hlt_cluster.eta);
261 vec_hlt_vs_off_delta_time.push_back(off_match->
parent->time() - hlt_cluster.parent->time());
263 vec_hlt_no_off_match.push_back(0);
264 vec_hlt_with_off_match.push_back(1);
269 HLT_num = n_hlt_clusters;
270 HLT_barrel_high_et_num = n_hlt_barrel_high_et_clusters;
271 HLT_no_OFF_match_num = n_hlt_clusters_no_match;
272 HLT_with_OFF_match_num = n_hlt_clusters_with_match;
273 if (n_hlt_clusters>0) {
274 HLT_matched_fraction =
static_cast<float>(n_hlt_clusters_with_match) / n_hlt_clusters;
281 unsigned int n_off_clusters = 0;
282 unsigned int n_off_clusters_no_match = 0;
283 unsigned int n_off_clusters_with_match = 0;
286 std::vector<float> vec_off_et, vec_off_eta, vec_off_phi, vec_off_time;
287 std::vector<int> vec_off_type;
297 std::vector<char> vec_off_no_hlt_match, vec_off_with_hlt_match;
305 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_delta_time, vec_off_vs_hlt_resolution, vec_hlt_match_et;
308 auto OFF_vs_HLT_minimum_delta_r =
Monitored::Collection(
"OFF_vs_HLT_minimum_delta_r", vec_off_vs_hlt_minimum_delta_r);
311 auto OFF_vs_HLT_delta_time =
Monitored::Collection(
"OFF_vs_HLT_delta_time", vec_off_vs_hlt_delta_time);
312 auto OFF_vs_HLT_resolution =
Monitored::Collection(
"OFF_vs_HLT_resolution", vec_off_vs_hlt_resolution);
315 const clus_kin *hlt_match =
nullptr;
319 for (
const auto& off_cluster: vec_off_clusters) {
325 float min_delta_r = 999999.9;
327 for (
const auto& hlt_cluster : vec_hlt_clusters) {
331 if (delta_r < min_delta_r) {
333 min_delta_r = delta_r;
334 hlt_match = &hlt_cluster;
339 vec_off_vs_hlt_minimum_delta_r.push_back(min_delta_r);
344 ++n_off_clusters_no_match;
346 vec_hlt_match_et.push_back(0.);
348 vec_off_vs_hlt_resolution.push_back(0.);
349 vec_off_vs_hlt_delta_eta.push_back(0.);
350 vec_off_vs_hlt_delta_phi.push_back(0.);
351 vec_off_vs_hlt_delta_time.push_back(0.);
353 vec_off_no_hlt_match.push_back(1);
354 vec_off_with_hlt_match.push_back(0);
359 ++n_off_clusters_with_match;
361 vec_hlt_match_et.push_back(hlt_match->
et);
363 vec_off_vs_hlt_resolution.push_back(((off_cluster.et - hlt_match->
et) / off_cluster.et) * 100);
364 vec_off_vs_hlt_delta_eta.push_back(off_cluster.eta - hlt_match->
eta);
366 vec_off_vs_hlt_delta_time.push_back(off_cluster.parent->time() - hlt_match->
parent->time());
368 vec_off_no_hlt_match.push_back(0);
369 vec_off_with_hlt_match.push_back(1);
375 OFF_num = n_off_clusters;
376 OFF_no_HLT_match_num = n_off_clusters_no_match;
377 OFF_with_HLT_match_num = n_off_clusters_with_match;
378 if (n_off_clusters>0) {
379 OFF_matched_fraction =
static_cast<float>(n_off_clusters_with_match) / n_off_clusters;
384 if(accepted_hlt_clusters.size()>0){
389 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
392 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
395 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
398 OFF_no_HLT_match, OFF_with_HLT_match,
401 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
402 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
405 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
406 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
414 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
417 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
420 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
423 OFF_no_HLT_match, OFF_with_HLT_match,
426 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
427 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
430 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
431 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
439 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
442 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
445 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
448 OFF_no_HLT_match, OFF_with_HLT_match,
451 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
452 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
455 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
456 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
460 return StatusCode::SUCCESS;
466 if (std::abs(eta_1-eta_2) > max_deltar)
return 99.9;
468 if (DeltaPhi > max_deltar)
return 99.9;
469 return sqrt( ((eta_1-eta_2)*(eta_1-eta_2)) + (DeltaPhi*DeltaPhi) );
473 return std::abs( std::abs( std::abs( phi_1 - phi_2 ) - TMath::Pi() ) - TMath::Pi() );
479 featureRequestDescriptor.
setCondition(TrigDefs::includeFailedDecisions);
481 std::vector<const xAOD::CaloCluster*> clustersToMonitorForChain;
484 clustersToMonitorForChain.
push_back( *(
f.link) );
487 ATH_MSG_DEBUG(
"clustersToMonitorForChain.size(): "<<clustersToMonitorForChain.size());
488 for(
auto &
p: clustersToMonitorForChain)
490 return clustersToMonitorForChain;