57 return StatusCode::SUCCESS;
60 if (
m_trigDecTool->ExperimentalAndExpertMethods().isHLTTruncated()){
62 return StatusCode::SUCCESS;
67 if (! hltCluster_readHandle.
isValid() ) {
69 return StatusCode::FAILURE;
74 if (! offCluster_readHandle.
isValid() ) {
76 return StatusCode::FAILURE;
80 int bcid = ctx.eventID().bunch_crossing_id();
85 ATH_MSG_ERROR(
"Unable to retrieve BunchCrossing conditions object" );
86 return StatusCode::FAILURE;
97 std::vector<clus_kin> vec_hlt_clusters;
101 if (accepted_hlt_clusters.size()>0){
102 for (
const auto* hlt_cluster : accepted_hlt_clusters) {
103 auto hlt_clus_et = hlt_cluster->et();
106 bool HLT_type_match =
false;
109 if (hlt_cluster->clusterSize() ==
m_HLT_types[
n]) { HLT_type_match =
true;
break; }
112 if (!
m_HLT_types.empty() && !HLT_type_match)
continue;
113 vec_hlt_clusters.push_back({hlt_clus_et*0.001, hlt_cluster->eta(), hlt_cluster->phi(), hlt_cluster});
117 for (
const auto hlt_cluster : *hltCluster_readHandle) {
118 auto hlt_clus_et = hlt_cluster->et();
121 bool HLT_type_match =
false;
124 if (hlt_cluster->clusterSize() ==
m_HLT_types[
n]) { HLT_type_match =
true;
break; }
127 if (!
m_HLT_types.empty() && !HLT_type_match)
continue;
128 vec_hlt_clusters.push_back({hlt_clus_et*0.001, hlt_cluster->eta(), hlt_cluster->phi(), hlt_cluster});
133 float off_clus_eta = 0;
134 float off_clus_phi = 0;
135 float off_clus_et = 0;
136 std::vector<clus_kin> vec_off_clusters;
137 for (
const auto off_cluster : *offCluster_readHandle) {
139 off_clus_et = off_cluster->et();
140 off_clus_eta = off_cluster->eta();
141 off_clus_phi = off_cluster->phi();
144 off_clus_et = off_cluster->rawE()/std::cosh(std::abs(off_cluster->rawEta()));
145 off_clus_eta = off_cluster->rawEta();
146 off_clus_phi = off_cluster->rawPhi();
150 bool OFF_type_match =
false;
153 if (off_cluster->clusterSize() ==
m_OFF_types[
n]) { OFF_type_match =
true;
break; }
156 if (!
m_OFF_types.empty() && !OFF_type_match)
continue;
157 vec_off_clusters.push_back({off_clus_et*0.001, off_clus_eta, off_clus_phi, off_cluster});
165 unsigned int n_hlt_clusters = 0;
166 unsigned int n_hlt_barrel_high_et_clusters = 0;
167 unsigned int n_hlt_clusters_no_match = 0;
168 unsigned int n_hlt_clusters_with_match = 0;
184 std::vector<char> vec_hlt_barrel_high_et, vec_hlt_no_off_match, vec_hlt_with_off_match;
194 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;
197 auto HLT_vs_OFF_minimum_delta_r =
Monitored::Collection(
"HLT_vs_OFF_minimum_delta_r", vec_hlt_vs_off_minimum_delta_r);
200 auto HLT_vs_OFF_delta_time =
Monitored::Collection(
"HLT_vs_OFF_delta_time", vec_hlt_vs_off_delta_time);
201 auto HLT_vs_OFF_resolution =
Monitored::Collection(
"HLT_vs_OFF_resolution", vec_hlt_vs_off_resolution);
204 const clus_kin *off_match =
nullptr;
208 for (
const auto& hlt_cluster : vec_hlt_clusters) {
213 if (hlt_cluster.et > (
m_HLT_high_et * 0.001) && std::abs(hlt_cluster.eta) < 2.5) {
214 ++n_hlt_barrel_high_et_clusters;
215 vec_hlt_barrel_high_et.push_back(1);
217 else vec_hlt_barrel_high_et.push_back(0);
221 float min_delta_r = 999999.9;
223 for (
const auto& off_cluster : vec_off_clusters) {
226 if (delta_r < min_delta_r) {
228 min_delta_r = delta_r;
229 off_match = &off_cluster;
234 vec_hlt_vs_off_minimum_delta_r.push_back(min_delta_r);
239 ++n_hlt_clusters_no_match;
241 vec_off_match_et.push_back(0.);
243 vec_hlt_vs_off_resolution.push_back(0.);
244 vec_hlt_vs_off_delta_eta.push_back(0.);
245 vec_hlt_vs_off_delta_phi.push_back(0.);
246 vec_hlt_vs_off_delta_time.push_back(0.);
248 vec_hlt_no_off_match.push_back(1);
249 vec_hlt_with_off_match.push_back(0);
255 ++n_hlt_clusters_with_match;
257 vec_off_match_et.push_back(off_match->
et);
259 vec_hlt_vs_off_resolution.push_back(((off_match->
et - hlt_cluster.et) / off_match->
et) * 100);
260 vec_hlt_vs_off_delta_eta.push_back(off_match->
eta - hlt_cluster.eta);
262 vec_hlt_vs_off_delta_time.push_back(off_match->
parent->time() - hlt_cluster.parent->time());
264 vec_hlt_no_off_match.push_back(0);
265 vec_hlt_with_off_match.push_back(1);
270 HLT_num = n_hlt_clusters;
271 HLT_barrel_high_et_num = n_hlt_barrel_high_et_clusters;
272 HLT_no_OFF_match_num = n_hlt_clusters_no_match;
273 HLT_with_OFF_match_num = n_hlt_clusters_with_match;
274 if (n_hlt_clusters>0) {
275 HLT_matched_fraction =
static_cast<float>(n_hlt_clusters_with_match) / n_hlt_clusters;
282 unsigned int n_off_clusters = 0;
283 unsigned int n_off_clusters_no_match = 0;
284 unsigned int n_off_clusters_with_match = 0;
287 std::vector<float> vec_off_et, vec_off_eta, vec_off_phi, vec_off_time;
288 std::vector<int> vec_off_type;
298 std::vector<char> vec_off_no_hlt_match, vec_off_with_hlt_match;
306 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;
309 auto OFF_vs_HLT_minimum_delta_r =
Monitored::Collection(
"OFF_vs_HLT_minimum_delta_r", vec_off_vs_hlt_minimum_delta_r);
312 auto OFF_vs_HLT_delta_time =
Monitored::Collection(
"OFF_vs_HLT_delta_time", vec_off_vs_hlt_delta_time);
313 auto OFF_vs_HLT_resolution =
Monitored::Collection(
"OFF_vs_HLT_resolution", vec_off_vs_hlt_resolution);
316 const clus_kin *hlt_match =
nullptr;
320 for (
const auto& off_cluster: vec_off_clusters) {
326 float min_delta_r = 999999.9;
328 for (
const auto& hlt_cluster : vec_hlt_clusters) {
332 if (delta_r < min_delta_r) {
334 min_delta_r = delta_r;
335 hlt_match = &hlt_cluster;
340 vec_off_vs_hlt_minimum_delta_r.push_back(min_delta_r);
345 ++n_off_clusters_no_match;
347 vec_hlt_match_et.push_back(0.);
349 vec_off_vs_hlt_resolution.push_back(0.);
350 vec_off_vs_hlt_delta_eta.push_back(0.);
351 vec_off_vs_hlt_delta_phi.push_back(0.);
352 vec_off_vs_hlt_delta_time.push_back(0.);
354 vec_off_no_hlt_match.push_back(1);
355 vec_off_with_hlt_match.push_back(0);
360 ++n_off_clusters_with_match;
362 vec_hlt_match_et.push_back(hlt_match->
et);
364 vec_off_vs_hlt_resolution.push_back(((off_cluster.et - hlt_match->
et) / off_cluster.et) * 100);
365 vec_off_vs_hlt_delta_eta.push_back(off_cluster.eta - hlt_match->
eta);
367 vec_off_vs_hlt_delta_time.push_back(off_cluster.parent->time() - hlt_match->
parent->time());
369 vec_off_no_hlt_match.push_back(0);
370 vec_off_with_hlt_match.push_back(1);
376 OFF_num = n_off_clusters;
377 OFF_no_HLT_match_num = n_off_clusters_no_match;
378 OFF_with_HLT_match_num = n_off_clusters_with_match;
379 if (n_off_clusters>0) {
380 OFF_matched_fraction =
static_cast<float>(n_off_clusters_with_match) / n_off_clusters;
385 if(accepted_hlt_clusters.size()>0){
390 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
393 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
396 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
399 OFF_no_HLT_match, OFF_with_HLT_match,
402 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
403 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
406 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
407 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
415 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
418 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
421 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
424 OFF_no_HLT_match, OFF_with_HLT_match,
427 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
428 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
431 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
432 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
440 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
443 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
446 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
449 OFF_no_HLT_match, OFF_with_HLT_match,
452 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
453 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
456 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
457 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
461 return StatusCode::SUCCESS;
467 if (std::abs(eta_1-eta_2) > max_deltar)
return 99.9;
469 if (DeltaPhi > max_deltar)
return 99.9;
470 return sqrt( ((eta_1-eta_2)*(eta_1-eta_2)) + (DeltaPhi*DeltaPhi) );
474 return std::abs( std::abs( std::abs( phi_1 - phi_2 ) - TMath::Pi() ) - TMath::Pi() );
480 featureRequestDescriptor.
setCondition(TrigDefs::includeFailedDecisions);
482 std::vector<const xAOD::CaloCluster*> clustersToMonitorForChain;
485 clustersToMonitorForChain.
push_back( *(
f.link) );
488 ATH_MSG_DEBUG(
"clustersToMonitorForChain.size(): "<<clustersToMonitorForChain.size());
489 for(
auto &
p: clustersToMonitorForChain)
491 return clustersToMonitorForChain;