43 const std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >>& pairObjs,
44 const TrigInfo& info,
const bool onlyHLT )
const
47 std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pair_vec;
48 std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pair_iso_vec;
50 std::vector<asg::AcceptData> accept_vec;
51 std::vector<asg::AcceptData> accept_iso_vec;
53 std::vector<asg::AcceptData> emu_accept_vec;
54 std::vector<asg::AcceptData> emu_accept_iso_vec;
56 ATH_MSG_DEBUG(
"Inside fillEfficiencies: pairObject which is passed to function is: " << pairObjs.size());
58 for(
auto pairObj : pairObjs ){
62 auto passBits=
tdt()->isPassedBits(info.trigger);
64 ATH_MSG_DEBUG(
"Prescaled trigger: " << info.trigger <<
" Skipping to normalize efficiencies");
68 float et =
getEt(el)/Gaudi::Units::GeV;
69 if(
et < info.etthr-5.0)
continue;
73 float et = getCluster_et(pairObj.first)/Gaudi::Units::GeV;
74 ATH_MSG_DEBUG(
"raw cluster et (MeV?) = " << getCluster_et(pairObj.first));
77 if(
et < info.etthr-5.0)
continue;
81 bool pass_CaloIso = getIsolation_topoetcone20(pairObj.first)/getCluster_et(pairObj.first) < 0.065;
82 bool pass_trkIso = getIsolation_ptcone20(pairObj.first)/getCluster_et(pairObj.first) < 0.05;
87 if (!pass_CaloIso || !pass_trkIso){
88 ATH_MSG_DEBUG(
"Did not passed FixedCutLoose offline isolationFixedCutLoose offline isolation");
98 auto acceptData =
m_emulatorTool->emulate( pairObj.second, info.trigger , valid);
104 emu_accept_vec.push_back( acceptData );
106 if( IsolatedDec(*pairObj.first) ){
107 emu_accept_iso_vec.push_back(acceptData);
113 pair_vec.push_back(pairObj);
114 auto acceptData =
setAccept( pairObj.second, info, onlyHLT );
115 accept_vec.push_back(acceptData);
117 if( IsolatedDec(*pairObj.first) ){
118 pair_iso_vec.push_back(pairObj);
119 accept_iso_vec.push_back(acceptData);
126 std::string
dirname=
"Efficiency";
127 std::string l2step =
"FastElectron";
128 if( info.signature ==
"Electron" or info.signature ==
"e" ){
129 l2step =
"FastElectron";
130 }
else if( info.signature ==
"Photon" or info.signature ==
"g" ){
131 l2step =
"FastPhoton";
136 fillEfficiency(ctx,
"PrecisionCalo" ,
"EFCalo" , info.pidname, info, pair_vec , accept_vec,
dirname);
139 ATH_MSG_DEBUG(
"THE SIZE OF PAIR_VEC IS: " << pair_vec.size());
140 ATH_MSG_DEBUG(
"THE SIZE OF accept_VEC IS: " << accept_vec.size());
161 fillEfficiency(ctx,
"PrecisionCalo" ,
"EFCalo" , info.pidname, info, pair_vec , emu_accept_vec,
dirname);
174 const std::string &subgroup,
175 const std::string &level,
176 const std::string &pidword,
180 const std::vector< asg::AcceptData >& acceptObjs ,
181 const std::string&
dirname )
const
183 const float etthr = info.etthr;
184 const std::string trigger = info.trigger;
187 std::vector<float> et_vec, highet_vec, pt_vec, eta_vec, phi_vec, avgmu_vec, npvtx_vec,et_slice0_vec,et_slice1_vec,et_slice2_vec,et_slice3_vec, ptvarcone20rel_vec, ptvarcone30rel_vec, z0_vec, d0_vec;
188 std::vector<float> match_et_vec, match_highet_vec, match_pt_vec, match_eta_vec, match_phi_vec, match_avgmu_vec, match_npvtx_vec, match_ptvarcone20rel_vec, match_ptvarcone30rel_vec, match_z0_vec, match_d0_vec;
189 std::vector<bool> et_passed_vec, et_failed_vec, highet_passed_vec, highet_failed_vec, pt_passed_vec, eta_passed_vec, eta_failed_vec, phi_passed_vec, avgmu_passed_vec, npvtx_passed_vec;
190 std::vector<bool> ptvarcone20rel_passed_vec, ptvarcone30rel_passed_vec, z0_passed_vec, d0_passed_vec;
191 std::vector<bool> et_slice0_passed_vec,et_slice1_passed_vec,et_slice2_passed_vec,et_slice3_passed_vec;
213 auto match_ptvarcone20rel_col =
Monitored::Collection(
"match_ptvarcone20rel" , match_ptvarcone20rel_vec );
214 auto match_ptvarcone30rel_col =
Monitored::Collection(
"match_ptvarcone30rel" , match_ptvarcone30rel_vec );
229 auto ptvarcone20rel_passed_col =
Monitored::Collection(
"ptvarcone20rel_passed" , ptvarcone20rel_passed_vec );
230 auto ptvarcone30rel_passed_col =
Monitored::Collection(
"ptvarcone30rel_passed" , ptvarcone30rel_passed_vec );
249 for(
auto pairObj : pairObjs ){
252 bool isPassed = acceptObjs[iObj].getCutResult( level );
254 float ptvarcone20rel = -99.0;
255 float ptvarcone30rel = -99.0;
258 const auto *eg = pairObj.first;
265 et =
getEt(el)/Gaudi::Units::GeV;
267 ptvarcone20rel = getIsolation_ptvarcone20(el)/el->pt();
268 ptvarcone30rel = getIsolation_ptvarcone30(el)/el->pt();
270 z0 = getTrack_z0(el);
271 d0 = getTrack_d0(el);
273 else et=eg->caloCluster()->et()/Gaudi::Units::GeV;
275 float eta = eg->caloCluster()->etaBE(2);
276 float phi = eg->phi();
277 float pt = eg->pt()/Gaudi::Units::GeV;
281 ATH_MSG_DEBUG(
"PID decision efficiency " << pidwordDec(*eg));
284 et_vec.push_back(
et );
285 pt_vec.push_back( pt );
286 highet_vec.push_back(
et );
289 eta_vec.push_back(
eta);
290 phi_vec.push_back(
phi);
291 avgmu_vec.push_back(avgmu);
292 npvtx_vec.push_back(npvtx);
293 ptvarcone20rel_vec.push_back(ptvarcone20rel);
294 ptvarcone30rel_vec.push_back(ptvarcone30rel);
295 z0_vec.push_back(z0);
296 d0_vec.push_back(d0);
300 et_slice0_vec.push_back(
et);
301 }
else if( abs(
eta) > 0.80 && abs(
eta) <= 1.37 ){
302 et_slice1_vec.push_back(
et);
303 }
else if( abs(
eta) > 1.37 && abs(
eta) <= 1.54 ){
304 et_slice2_vec.push_back(
et);
305 }
else if( abs(
eta) > 1.54 && abs(
eta) <= 2.50 ){
306 et_slice3_vec.push_back(
et);
310 match_et_vec.push_back(
et );
311 match_pt_vec.push_back( pt );
312 match_highet_vec.push_back(
et );
315 match_eta_vec.push_back(
eta);
316 match_phi_vec.push_back(
phi);
317 match_avgmu_vec.push_back(avgmu);
318 match_npvtx_vec.push_back(npvtx);
319 match_ptvarcone20rel_vec.push_back(ptvarcone20rel);
320 match_ptvarcone30rel_vec.push_back(ptvarcone30rel);
321 match_z0_vec.push_back(z0);
322 match_d0_vec.push_back(d0);
325 et_passed_vec.push_back(
true );
326 et_failed_vec.push_back(
false );
327 pt_passed_vec.push_back(
true );
328 highet_passed_vec.push_back(
true );
329 highet_failed_vec.push_back(
false );
332 et_slice0_passed_vec.push_back(
true);
333 }
else if( abs(
eta) > 0.80 && abs(
eta) <= 1.37 ){
334 et_slice1_passed_vec.push_back(
true);
335 }
else if( abs(
eta) > 1.37 && abs(
eta) <= 1.54 ){
336 et_slice2_passed_vec.push_back(
true);
337 }
else if( abs(
eta) > 1.54 && abs(
eta) <= 2.50 ){
338 et_slice3_passed_vec.push_back(
true);
342 eta_passed_vec.push_back(
true );
343 eta_failed_vec.push_back(
false );
344 phi_passed_vec.push_back(
true );
345 avgmu_passed_vec.push_back(
true );
346 npvtx_passed_vec.push_back(
true );
347 ptvarcone20rel_passed_vec.push_back(
true );
348 ptvarcone30rel_passed_vec.push_back(
true );
349 z0_passed_vec.push_back(
true );
350 d0_passed_vec.push_back(
true );
355 et_passed_vec.push_back(
false );
356 et_failed_vec.push_back(
true );
357 pt_passed_vec.push_back(
false );
358 highet_passed_vec.push_back(
false );
359 highet_failed_vec.push_back(
true );
362 et_slice0_passed_vec.push_back(
false);
363 }
else if( abs(
eta) > 0.80 && abs(
eta) <= 1.37 ){
364 et_slice1_passed_vec.push_back(
false);
365 }
else if( abs(
eta) > 1.37 && abs(
eta) <= 1.54 ){
366 et_slice2_passed_vec.push_back(
false);
367 }
else if( abs(
eta) > 1.54 && abs(
eta) <= 2.50 ){
368 et_slice3_passed_vec.push_back(
false);
372 eta_passed_vec.push_back(
false );
373 eta_failed_vec.push_back(
true );
374 phi_passed_vec.push_back(
false );
375 avgmu_passed_vec.push_back(
false );
376 npvtx_passed_vec.push_back(
false );
377 ptvarcone20rel_passed_vec.push_back(
false );
378 ptvarcone30rel_passed_vec.push_back(
false );
379 z0_passed_vec.push_back(
false );
380 d0_passed_vec.push_back(
false );
388 fill( monGroup, et_col, highet_col, pt_col, eta_col, phi_col, avgmu_col, npvtx_col, ptvarcone20rel_col, ptvarcone30rel_col, z0_col, d0_col,
389 match_et_col, match_highet_col, match_pt_col, match_eta_col, match_phi_col, match_avgmu_col, match_npvtx_col, match_ptvarcone20rel_col, match_ptvarcone30rel_col,match_z0_col,match_d0_col,
390 et_passed_col, et_failed_col, highet_passed_col, highet_failed_col, pt_passed_col, eta_passed_col, eta_failed_col, phi_passed_col, avgmu_passed_col, npvtx_passed_col, ptvarcone20rel_passed_col, ptvarcone30rel_passed_col, z0_passed_col, d0_passed_col,
391 et_slice0_col,et_slice1_col,et_slice2_col,et_slice3_col,et_slice0_passed_col,et_slice1_passed_col,et_slice2_passed_col,et_slice3_passed_col);
444 const std::string trigger = info.trigger;
449 std::vector<const xAOD::Egamma*> eg_vec;
450 std::vector<const xAOD::Electron*> el_vec;
451 for(
auto pairObj: pairObjs )
453 eg_vec.push_back(pairObj.first);
456 el_vec.push_back(elOff);
470 std::vector<const xAOD::EmTauRoI*> l1_vec;
471 for(
auto &initRoi: initRois ){
472 if( !initRoi.link.isValid() )
continue;
473 const auto *feat =
match()->getL1Feature( initRoi.source );
474 if(feat) l1_vec.push_back(feat);
478 std::vector<const xAOD::eFexEMRoI*> l1_vec;
479 for(
auto &initRoi: initRois ){
480 if( !initRoi.link.isValid() )
continue;
481 const auto *feat =
match()->getL1eEMFeature( initRoi.source );
482 if(feat) l1_vec.push_back(feat);
492 std::vector<const xAOD::TrigEMCluster*> emCluster_vec;
494 for(
auto &featLinkInfo :
vec ){
495 if(! featLinkInfo.isValid() )
continue;
496 const auto *feat = *(featLinkInfo.link);
498 emCluster_vec.push_back(feat);
504 std::string key =
match()->key(
"PrecisionCalo_Electron");
505 if(info.signature ==
"Photon" or info.signature ==
"g") key =
match()->key(
"PrecisionCalo_Photon");
506 if(info.lrt) key =
match()->key(
"PrecisionCalo_LRT");
507 if(info.ion) key =
match()->key(
"PrecisionCalo_HI");
509 std::vector<const xAOD::CaloCluster* > clus_vec;
511 for(
auto &featLinkInfo :
vec ){
512 if(! featLinkInfo.isValid() )
continue;
513 const auto *feat = *(featLinkInfo.link);
515 clus_vec.push_back(feat);
520 if ( info.signature ==
"Electron" or info.signature ==
"e" ){
524 std::string key =
match()->key(
"FastElectrons");
525 if(info.lrt) key =
match()->key(
"FastElectrons_LRT");
527 std::vector<const xAOD::TrigElectron*> el_vec;
530 for(
auto &featLinkInfo :
vec ){
531 if(! featLinkInfo.isValid() )
continue;
532 const auto *feat = *(featLinkInfo.link);
534 el_vec.push_back(feat);
540 std::string key =
match()->key(
"Electrons_GSF");
541 if(info.nogsf) key =
match()->key(
"Electrons");
542 if(info.lrt) key =
match()->key(
"Electrons_LRT");
544 std::vector<const xAOD::Electron*> el_vec;
545 std::vector<const xAOD::Egamma*> eg_vec;
547 for(
auto &featLinkInfo :
vec ){
548 if(! featLinkInfo.isValid() )
continue;
549 const auto *feat = *(featLinkInfo.link);
551 el_vec.push_back(feat);
552 eg_vec.push_back(feat);
557 }
else if ( info.signature ==
"Photon" or info.signature ==
"g"){
560 std::string key =
match()->key(
"FastPhotons");
561 std::vector<const xAOD::TrigPhoton*> ph_vec;
564 for(
auto &featLinkInfo :
vec ){
565 if(! featLinkInfo.isValid() )
continue;
566 const auto *feat = *(featLinkInfo.link);
568 ph_vec.push_back(feat);
575 std::vector<const xAOD::Egamma*> ph_vec;
577 for(
auto &featLinkInfo :
vec ){
578 if(! featLinkInfo.isValid() )
continue;
579 const auto *feat = *(featLinkInfo.link);
581 ph_vec.push_back(feat);
733 auto monGroup =
getGroup( trigger +
"_Distributions_EFCalo" );
736 std::vector<float> energyBE0_vec, energyBE1_vec, energyBE2_vec, energyBE3_vec,
737 energy_vec, et_vec, eta_vec, phi_vec, eta_calo_vec, phi_calo_vec, highet_vec;
753 for (
const auto *clus : clus_vec )
755 double tmpeta = -999.;
758 double tmpphi = -999.;
762 energyBE0_vec.push_back( clus->energyBE(0)/Gaudi::Units::GeV );
763 energyBE1_vec.push_back( clus->energyBE(1)/Gaudi::Units::GeV );
764 energyBE2_vec.push_back( clus->energyBE(2)/Gaudi::Units::GeV );
765 energyBE3_vec.push_back( clus->energyBE(3)/Gaudi::Units::GeV );
766 energy_vec.push_back( clus->e()/Gaudi::Units::GeV );
767 et_vec.push_back( clus->et()/Gaudi::Units::GeV );
768 highet_vec.push_back( clus->et()/Gaudi::Units::GeV );
769 eta_vec.push_back( clus->eta() );
770 phi_vec.push_back( clus->phi() );
771 eta_calo_vec.push_back( tmpeta );
772 phi_calo_vec.push_back( tmpphi );
777 fill( monGroup, energyBE0_col, energyBE1_col, energyBE2_col, energyBE3_col,
778 energy_col, et_col, eta_col, phi_col, eta_calo_col, phi_calo_col, highet_col);
789 auto monGroup =
getGroup( trigger + (
online ?
"_Distributions_HLT" :
"_Distributions_Offline") );
791 std::vector<float> Rhad_vec, Rhad1_vec, Reta_vec, Rphi_vec, weta1_vec, weta2_vec,
792 f1_vec, f3_vec, eratio_vec, et_vec, highet_vec , eta_vec, phi_vec, topoetcone20_vec, topoetcone40_shift_vec,
793 topoetcone20_rel_vec, topoetcone40_shift_rel_vec, ptvarcone20_rel_vec, pt_vec, mu_vec, pt_track_vec, z0_vec, res_etVsEt_vec, res_eprobht_vec, res_cnv_et_vec;
811 auto topoetcone40_shift_rel_col =
Monitored::Collection(
"topoetcone40_shift_rel", topoetcone40_shift_rel_vec );
821 for (
const auto *eg : eg_vec ){
825 Rhad_vec.push_back( getShowerShape_Rhad(eg));
826 Rhad1_vec.push_back( getShowerShape_Rhad(eg));
827 Reta_vec.push_back( getShowerShape_Reta(eg));
828 Rphi_vec.push_back( getShowerShape_Rphi(eg));
829 weta1_vec.push_back( getShowerShape_weta1(eg));
830 weta2_vec.push_back( getShowerShape_weta2(eg));
831 f1_vec.push_back( getShowerShape_f1(eg));
832 f3_vec.push_back( getShowerShape_f3(eg));
833 eratio_vec.push_back( getShowerShape_Eratio(eg));
834 et_vec.push_back( eg->pt()/Gaudi::Units::GeV);
835 highet_vec.push_back( eg->pt()/Gaudi::Units::GeV);
836 eta_vec.push_back( eg->eta());
837 phi_vec.push_back( eg->phi());
838 topoetcone20_vec.push_back( getIsolation_topoetcone20(eg)/Gaudi::Units::GeV);
839 topoetcone40_shift_vec.push_back( (getIsolation_topoetcone40(eg)-2450)/Gaudi::Units::GeV );
842 topoetcone20_rel_vec.push_back( getIsolation_topoetcone20(eg)/eg->pt());
843 topoetcone40_shift_rel_vec.push_back( (getIsolation_topoetcone40(eg)-2450)/eg->pt() );
848 fill( monGroup, Rhad_col, Rhad1_col, Reta_col, Rphi_col, weta1_col, weta2_col,
849 f1_col, f3_col, eratio_col, et_col, highet_col , eta_col, phi_col, topoetcone20_col, topoetcone40_shift_col,
850 topoetcone20_rel_col, topoetcone40_shift_rel_col, ptvarcone20_rel_col, pt_col, mu_col, pt_track_col, z0_col, res_etVsEt_col, res_eprobht_col, res_cnv_et_col);
860 auto monGroup =
getGroup( trigger + (
online ?
"_Distributions_HLT" :
"_Distributions_Offline") );
862 std::vector<float> deta1_vec, deta1_EMECA_vec, deta1_EMECC_vec, deta1_EMEBA_vec, deta1_EMEBC_vec, deta2_vec, dphi2_vec,
863 dphiresc_vec, eprobht_vec, npixhits_vec, nscthits_vec, charge_vec, ptcone20_vec, ptvarcone20_vec, ptcone30_vec, ptvarcone30_vec, z0_vec, d0_vec, d0sig_vec,
864 pt_vec,pt_trk_vec, ptcone20_rel_vec, ptvarcone20_rel_vec, ptcone30_rel_vec, ptvarcone30_rel_vec, eta_vec, mu_vec;
896 for (
const auto *eg : eg_vec ){
901 if(eg->caloCluster()) cleta=eg->caloCluster()->eta();
902 else cleta=eg->eta();
904 deta1_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
906 if(cleta > 1.375 && cleta < 3.2)
907 deta1_EMECA_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
908 if(cleta < -1.375 && cleta > -3.2)
909 deta1_EMECC_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
910 if(cleta > 0 && cleta < 1.375)
911 deta1_EMEBA_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
912 if(cleta < 0 && cleta > -1.375)
913 deta1_EMEBC_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
915 deta2_vec.push_back( getCaloTrackMatch_deltaEta2(eg));
916 dphi2_vec.push_back( getCaloTrackMatch_deltaPhi2(eg));
917 dphiresc_vec.push_back( getCaloTrackMatch_deltaPhiRescaled2(eg));
918 eprobht_vec.push_back( getTrackSummaryFloat_eProbabilityHT(eg));
919 npixhits_vec.push_back( getTrackSummary_numberOfPixelHits(eg));
920 nscthits_vec.push_back( getTrackSummary_numberOfSCTHits(eg));
921 charge_vec.push_back( eg->charge());
922 ptcone20_vec.push_back( getIsolation_ptcone20(eg)/Gaudi::Units::GeV);
923 ptvarcone20_vec.push_back( getIsolation_ptvarcone20(eg)/Gaudi::Units::GeV);
924 ptcone30_vec.push_back( getIsolation_ptcone30(eg)/Gaudi::Units::GeV);
925 ptvarcone30_vec.push_back( getIsolation_ptvarcone30(eg)/Gaudi::Units::GeV);
929 z0_vec.push_back( getTrack_z0(eg));
930 d0_vec.push_back( getTrack_d0(eg));
932 pt_vec.push_back( eg->pt()/Gaudi::Units::GeV);
933 pt_trk_vec.push_back( getTrack_pt(eg)/Gaudi::Units::GeV);
934 eta_vec.push_back(eg->eta());
937 mu_vec.push_back( avgmu );
940 ptcone20_rel_vec.push_back( getIsolation_ptcone20(eg)/eg->pt());
941 ptvarcone20_rel_vec.push_back( getIsolation_ptvarcone20(eg)/eg->pt());
942 ptcone30_rel_vec.push_back( getIsolation_ptcone30(eg)/eg->pt());
943 ptvarcone30_rel_vec.push_back( getIsolation_ptvarcone30(eg)/eg->pt());
949 fill( monGroup, deta1_col, deta1_EMECA_col, deta1_EMECC_col, deta1_EMEBA_col, deta1_EMEBC_col, deta2_col, dphi2_col,
950 dphiresc_col, eprobht_col, npixhits_col, nscthits_col, charge_col, ptcone20_col, ptvarcone20_col, ptcone30_col, ptvarcone30_col, z0_col, d0_col, d0sig_col,
951 pt_col, ptcone20_rel_col, ptvarcone20_rel_col, ptcone30_rel_col, ptvarcone30_rel_col, eta_col, mu_col,pt_trk_col);
1077 const std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >>& pairObjs,
1081 auto monGroup =
getGroup( trigger +
"_Resolutions_HLT" );
1083 std::vector<float> res_pt_vec, res_et_vec, res_phi_vec, res_eta_vec, res_deta1_vec, res_deta2_vec, res_dphi2_vec, res_dphiresc_vec,
1084 res_z0_vec, res_d0_vec, res_d0sig_vec, res_eprobht_vec, res_npixhits_vec, res_nscthits_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec,
1085 res_Rphi_vec, res_weta1_vec, res_weta2_vec, res_wtots1_vec, res_f1_vec, res_f3_vec, res_eratio_vec, res_ethad_vec, res_ethad1_vec,
1086 et_vec, eta_vec, mu_vec, pt_vec;
1087 std::vector<float> res_ptcone20_vec, res_ptcone20_rel_vec, res_ptvarcone20_vec, res_ptvarcone20_rel_vec;
1088 std::vector<float> res_etInEta0_vec, res_etInEta1_vec, res_etInEta2_vec, res_etInEta3_vec;
1133 auto res_ptvarcone20_rel_col =
Monitored::Collection(
"res_ptvarcone20_rel" , res_ptvarcone20_rel_vec );
1141 std::string key =
match()->key(
"Electrons_GSF");
1142 if(info.nogsf) key =
match()->key(
"Electrons");
1143 if(info.lrt) key =
match()->key(
"Electrons_LRT");
1145 for (
const auto & pairObj : pairObjs ){
1152 float maxDeltaR=0.05;
1154 for(
auto &featLinkInfo :
vec ){
1155 if(! featLinkInfo.isValid() )
continue;
1156 const auto *feat = *(featLinkInfo.link);
1158 float deltaR =
dR( off->
eta(), off->
phi(), feat->eta(), feat->phi() );
1169 const float onl_eta=onl->eta();
1170 const float feta = abs(onl_eta);
1171 const float onl_et =
getEt(onl)/Gaudi::Units::GeV;
1173 const float dummy=-999;
1175 eta_vec.push_back( onl_eta );
1176 et_vec.push_back( onl_et );
1177 mu_vec.push_back( avgmu );
1179 val_off=getTrack_pt(off);
1181 res_pt_vec.push_back( (getTrack_pt(off)-val_off)/val_off );
1188 res_et_vec.push_back( (
getEt(onl)-val_off)/val_off );
1190 res_etInEta0_vec.push_back((
getEt(onl)-val_off)/val_off);
1191 else if( feta >=1.37 && feta <= 1.52 )
1192 res_etInEta1_vec.push_back((
getEt(onl)-val_off)/val_off);
1193 else if( feta >= 1.55 && feta < 1.8 )
1194 res_etInEta2_vec.push_back((
getEt(onl)-val_off)/val_off);
1195 else if( feta >= 1.8 && feta < 2.45 )
1196 res_etInEta3_vec.push_back((
getEt(onl)-val_off)/val_off);
1201 res_eta_vec.push_back( (onl_eta-val_off)/val_off );
1203 res_eta_vec.push_back( dummy );
1208 res_phi_vec.push_back( (onl->phi()-val_off)/val_off );
1210 res_phi_vec.push_back(dummy );
1213 val_off=getShowerShape_ethad(off);
1215 res_ethad_vec.push_back((getShowerShape_ethad(onl)-val_off)/val_off);
1217 res_ethad_vec.push_back( dummy );
1220 val_off=getShowerShape_ethad1(off);
1222 res_ethad1_vec.push_back((getShowerShape_ethad1(onl)-val_off)/val_off);
1224 res_ethad1_vec.push_back( dummy);
1227 val_off=getShowerShape_Rhad(off);
1229 res_Rhad_vec.push_back( (getShowerShape_Rhad(onl)-val_off)/val_off );
1231 res_Rhad_vec.push_back( dummy );
1234 val_off=getShowerShape_Rhad1(off);
1236 res_Rhad1_vec.push_back( (getShowerShape_Rhad1(onl)-val_off)/val_off );
1238 res_Rhad1_vec.push_back( dummy );
1241 val_off=getShowerShape_Reta(off);
1243 res_Reta_vec.push_back( (getShowerShape_Reta(onl)-val_off)/val_off );
1245 res_Reta_vec.push_back( dummy );
1248 val_off=getShowerShape_Rphi(off);
1250 res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off );
1252 res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off );
1255 val_off=getShowerShape_weta1(off);
1257 res_weta1_vec.push_back( (getShowerShape_weta1(onl)-val_off)/val_off );
1259 res_weta1_vec.push_back( dummy );
1262 val_off=getShowerShape_weta2(off);
1264 res_weta2_vec.push_back( (getShowerShape_weta2(onl)-val_off)/val_off );
1266 res_weta2_vec.push_back( dummy );
1269 val_off=getShowerShape_wtots1(off);
1271 res_wtots1_vec.push_back( (getShowerShape_wtots1(onl)-val_off)/val_off );
1273 res_wtots1_vec.push_back( dummy );
1276 val_off=getShowerShape_f1(off);
1278 res_f1_vec.push_back( (getShowerShape_f1(onl)-val_off)/val_off );
1280 res_f1_vec.push_back(dummy );
1283 val_off=getShowerShape_f3(off);
1285 res_f3_vec.push_back( (getShowerShape_f3(onl)-val_off)/val_off );
1287 res_f3_vec.push_back( dummy );
1290 val_off=getShowerShape_Eratio(off);
1292 res_eratio_vec.push_back( (getShowerShape_Eratio(onl)-val_off)/val_off );
1294 res_eratio_vec.push_back( dummy );
1302 val_off=getTrack_pt(off);
1304 res_pt_vec.push_back( (getTrack_pt(onl)-val_off)/val_off );
1306 res_pt_vec.push_back( dummy );
1311 res_et_vec.push_back( (
getEt(onl)-val_off)/val_off );
1313 res_et_vec.push_back( dummy );
1316 val_off=getCaloTrackMatch_deltaEta1(off);
1318 res_deta1_vec.push_back( (getCaloTrackMatch_deltaEta1(onl)-val_off)/val_off );
1320 res_deta1_vec.push_back( dummy );
1323 val_off=getCaloTrackMatch_deltaEta2(off);
1324 res_deta2_vec.push_back( (getCaloTrackMatch_deltaEta2(onl)-val_off)/val_off );
1325 val_off=getCaloTrackMatch_deltaPhi2(off);
1327 res_dphi2_vec.push_back( (getCaloTrackMatch_deltaPhi2(onl)-val_off)/val_off );
1329 res_dphi2_vec.push_back(dummy );
1332 val_off=getCaloTrackMatch_deltaPhiRescaled2(off);
1333 res_dphiresc_vec.push_back( (getCaloTrackMatch_deltaPhiRescaled2(onl)-val_off)/val_off );
1335 val_off=getTrack_z0(off);
1337 res_z0_vec.push_back( getTrack_z0(onl)-val_off );
1339 res_z0_vec.push_back( dummy );
1343 val_off=getTrack_d0(off);
1345 res_d0_vec.push_back( getTrack_d0(onl)-val_off );
1347 res_d0_vec.push_back( dummy );
1352 res_d0sig_vec.push_back(
getD0sig(onl)-val_off );
1354 res_d0sig_vec.push_back( dummy );
1358 val_off=getTrackSummaryFloat_eProbabilityHT(off);
1359 res_eprobht_vec.push_back( (getTrackSummaryFloat_eProbabilityHT(onl)-val_off) );
1360 res_npixhits_vec.push_back( getTrackSummary_numberOfPixelHits(onl)-getTrackSummary_numberOfPixelHits(onl) );
1361 res_nscthits_vec.push_back( getTrackSummary_numberOfSCTHits(onl)-getTrackSummary_numberOfSCTHits(onl) );
1368 float val_off=getIsolation_ptcone20(off);
1370 res_ptcone20_vec.push_back((getIsolation_ptcone20(onl)-val_off)/val_off);
1372 const float reliso_onl=getIsolation_ptcone20(onl)/
getEt(onl);
1373 const float reliso_off=getIsolation_ptcone20(off)/
getEt(off);
1374 res_ptcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off);
1376 res_ptcone20_rel_vec.push_back(dummy);
1379 res_ptcone20_vec.push_back(dummy);
1380 res_ptcone20_rel_vec.push_back(dummy);
1384 val_off=getIsolation_ptvarcone20(off);
1387 res_ptvarcone20_vec.push_back((getIsolation_ptvarcone20(onl)-val_off)/val_off);
1388 const float reliso_onl=getIsolation_ptvarcone20(onl)/
getEt(onl);
1389 const float reliso_off=getIsolation_ptvarcone20(off)/
getEt(off);
1390 res_ptvarcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off);
1392 res_ptvarcone20_rel_vec.push_back(dummy);
1395 res_ptvarcone20_vec.push_back(dummy);
1396 res_ptvarcone20_rel_vec.push_back(dummy);
1440 res_ptcone20_rel_col ,
1441 res_ptvarcone20_col ,
1442 res_ptvarcone20_rel_col ,
1457 const std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >>& pairObjs,
1461 auto monGroup =
getGroup( trigger +
"_Resolutions_HLT" );
1463 std::vector<float> res_phi_vec, res_eta_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec, res_ethad_vec, res_ethad1_vec,
1464 res_Rphi_vec, res_weta1_vec, res_weta2_vec, res_wtots1_vec, res_f1_vec, res_f3_vec, res_eratio_vec, et_vec, eta_vec, mu_vec;
1466 std::vector<float> res_et_vec, res_et_cnv_vec, res_et_uncnv_vec, res_cnv_et_vec, res_uncnv_et_vec;
1467 std::vector<float> res_etInEta0_vec, res_etInEta1_vec, res_etInEta2_vec, res_etInEta3_vec;
1468 std::vector<float> res_cnv_etInEta0_vec, res_cnv_etInEta1_vec, res_cnv_etInEta2_vec, res_cnv_etInEta3_vec;
1469 std::vector<float> res_uncnv_etInEta0_vec, res_uncnv_etInEta1_vec, res_uncnv_etInEta2_vec, res_uncnv_etInEta3_vec;
1473 std::vector<float> res_topoetcone20_vec, res_topoetcone20_rel_vec;
1509 auto res_uncnv_etInEta0_col =
Monitored::Collection(
"res_uncnv_etInEta0" , res_uncnv_etInEta0_vec);
1510 auto res_uncnv_etInEta1_col =
Monitored::Collection(
"res_uncnv_etInEta1" , res_uncnv_etInEta1_vec);
1511 auto res_uncnv_etInEta2_col =
Monitored::Collection(
"res_uncnv_etInEta2" , res_uncnv_etInEta2_vec);
1512 auto res_uncnv_etInEta3_col =
Monitored::Collection(
"res_uncnv_etInEta3" , res_uncnv_etInEta3_vec);
1516 auto res_topoetcone20_rel_col =
Monitored::Collection(
"res_topoetcone20_rel" , res_topoetcone20_rel_vec );
1526 for (
const auto & pairObj : pairObjs ){
1533 float maxDeltaR=0.05;
1535 for(
auto &featLinkInfo :
vec ){
1536 if(! featLinkInfo.isValid() )
continue;
1537 const auto *feat = *(featLinkInfo.link);
1539 float deltaR =
dR( off->
eta(), off->
phi(), feat->eta(), feat->phi() );
1551 const float onl_eta=onl->eta();
1552 const float feta = abs(onl_eta);
1553 const float onl_et = getCluster_et(onl)/Gaudi::Units::GeV;
1554 const float dummy=-999;
1557 et_vec.push_back( onl_et );
1558 eta_vec.push_back( onl_eta );
1559 mu_vec.push_back( avgmu );
1562 val_off=getCluster_et(off);
1564 res_et_vec.push_back( (getCluster_et(onl)-val_off)/val_off );
1566 res_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1567 else if( feta >=1.37 && feta <= 1.52 )
1568 res_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1569 else if( feta >= 1.55 && feta < 1.8 )
1570 res_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1571 else if( feta >= 1.8 && feta < 2.45 )
1572 res_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1575 res_et_cnv_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1577 res_cnv_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1578 else if( feta >=1.37 && feta <= 1.52 )
1579 res_cnv_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1580 else if( feta >= 1.55 && feta < 1.8 )
1581 res_cnv_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1582 else if( feta >= 1.8 && feta < 2.45 )
1583 res_cnv_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1585 res_et_uncnv_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1587 res_uncnv_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1588 else if( feta >=1.37 && feta <= 1.52 )
1589 res_uncnv_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1590 else if( feta >= 1.55 && feta < 1.8 )
1591 res_uncnv_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1592 else if( feta >= 1.8 && feta < 2.45 )
1593 res_uncnv_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1599 res_eta_vec.push_back( (onl_eta-val_off)/val_off ) ;
1601 res_eta_vec.push_back( dummy ) ;
1606 res_phi_vec.push_back( (onl->phi()-val_off)/val_off );
1608 res_phi_vec.push_back(dummy );
1611 val_off=getShowerShape_ethad(off);
1613 res_ethad_vec.push_back((getShowerShape_ethad(onl)-val_off)/val_off);
1615 res_ethad_vec.push_back(dummy);
1618 val_off=getShowerShape_ethad1(off);
1620 res_ethad1_vec.push_back((getShowerShape_ethad1(onl)-val_off)/val_off);
1622 res_ethad1_vec.push_back(dummy);
1625 val_off=getShowerShape_Rhad(off);
1627 res_Rhad_vec.push_back( (getShowerShape_Rhad(onl)-val_off)/val_off );
1629 res_Rhad_vec.push_back(dummy );
1632 val_off=getShowerShape_Rhad1(off);
1634 res_Rhad1_vec.push_back( (getShowerShape_Rhad1(onl)-val_off)/val_off );
1636 res_Rhad1_vec.push_back(dummy );
1639 val_off=getShowerShape_Reta(off);
1641 res_Reta_vec.push_back( (getShowerShape_Reta(onl)-val_off)/val_off );
1643 res_Reta_vec.push_back( dummy );
1646 val_off=getShowerShape_Rphi(off);
1648 res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off );
1650 res_Rphi_vec.push_back(dummy );
1653 val_off=getShowerShape_weta1(off);
1655 res_weta1_vec.push_back( (getShowerShape_weta1(onl)-val_off)/val_off );
1657 res_weta1_vec.push_back( dummy );
1660 val_off=getShowerShape_weta2(off);
1662 res_weta2_vec.push_back( (getShowerShape_weta2(onl)-val_off)/val_off );
1664 res_weta2_vec.push_back(dummy);
1667 val_off=getShowerShape_wtots1(off);
1669 res_wtots1_vec.push_back( (getShowerShape_wtots1(onl)-val_off)/val_off );
1671 res_wtots1_vec.push_back( dummy );
1674 val_off=getShowerShape_f1(off);
1676 res_f1_vec.push_back( (getShowerShape_f1(onl)-val_off)/val_off );
1678 res_f1_vec.push_back( dummy );
1681 val_off=getShowerShape_f3(off);
1683 res_f3_vec.push_back( (getShowerShape_f3(onl)-val_off)/val_off );
1685 res_f3_vec.push_back( dummy );
1688 val_off=getShowerShape_Eratio(off);
1690 res_eratio_vec.push_back( (getShowerShape_Eratio(onl)-val_off)/val_off);
1692 res_eratio_vec.push_back( dummy);
1696 if( info.isolated ){
1698 float val_off=getIsolation_topoetcone20(off);
1699 float etonl=onl->pt();
1700 float etoff=off->
pt();
1702 res_topoetcone20_vec.push_back((getIsolation_topoetcone20(onl)-val_off)/val_off);
1703 if (etonl > 0. && etoff > 0.) {
1704 const float reliso_onl=getIsolation_topoetcone20(onl)/etonl;
1705 const float reliso_off=getIsolation_topoetcone20(off)/etoff;
1706 res_topoetcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off);
1708 res_topoetcone20_rel_vec.push_back(dummy);
1711 res_topoetcone20_vec.push_back(dummy);
1712 res_topoetcone20_rel_vec.push_back(dummy);
1740 res_topoetcone20_col ,
1741 res_topoetcone20_rel_col ,
1747 res_cnv_etInEta0_col,
1748 res_cnv_etInEta1_col,
1749 res_cnv_etInEta2_col,
1750 res_cnv_etInEta3_col,
1754 res_uncnv_etInEta0_col,
1755 res_uncnv_etInEta1_col,
1756 res_uncnv_etInEta2_col,
1757 res_uncnv_etInEta3_col
1766 const std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >>& pairObjs )
const
1771 auto monGroup =
getGroup( trigger +
"_Resolutions_L2Calo" );
1773 std::vector<float> res_et_vec, res_phi_vec, res_eta_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec, res_ethad_vec, res_ethad1_vec,
1774 res_Rphi_vec, res_weta2_vec, res_f1_vec, res_f3_vec, res_eratio_vec, et_vec, eta_vec, res_etVsEt_vec;
1797 for (
const auto & pairObj : pairObjs ){
1804 float maxDeltaR=0.05;
1806 for(
auto &featLinkInfo :
vec ){
1807 if(! featLinkInfo.isValid() )
continue;
1808 const auto *feat = *(featLinkInfo.link);
1810 float deltaR =
dR( off->
eta(), off->
phi(), feat->eta(), feat->phi() );
1820 et_vec.push_back(onl->et()*1e-3);
1821 eta_vec.push_back(onl->eta());
1822 const float dummy=-999;
1828 res_et_vec.push_back(((onl->et())-val_off)/val_off);
1830 res_et_vec.push_back(dummy);
1835 res_eta_vec.push_back((onl->eta()-val_off)/val_off);
1837 res_eta_vec.push_back(dummy);
1842 res_phi_vec.push_back((onl->phi()-val_off)/val_off);
1844 res_phi_vec.push_back((onl->phi()-val_off)/val_off);
1847 float elonl_ethad = onl->energy( CaloSampling::HEC0 ); elonl_ethad += onl->energy( CaloSampling::HEC1 );
1848 elonl_ethad += onl->energy( CaloSampling::HEC2 ); elonl_ethad += onl->energy( CaloSampling::HEC3 );
1849 elonl_ethad += onl->energy( CaloSampling::TileBar0 ); elonl_ethad += onl->energy( CaloSampling::TileExt0 );
1850 elonl_ethad += onl->energy( CaloSampling::TileBar1 ); elonl_ethad += onl->energy( CaloSampling::TileExt1 );
1851 elonl_ethad += onl->energy( CaloSampling::TileBar2 ); elonl_ethad += onl->energy( CaloSampling::TileExt2 );
1852 elonl_ethad /= TMath::CosH(onl->eta() );
1853 val_off=getShowerShape_ethad(off);
1855 res_ethad_vec.push_back((elonl_ethad-val_off)/val_off);
1857 res_ethad_vec.push_back(dummy);
1860 val_off=getShowerShape_ethad1(off);
1862 res_ethad1_vec.push_back(( (onl->ehad1()/TMath::Abs(onl->eta()) )-val_off)/val_off);
1864 res_ethad1_vec.push_back(dummy);
1867 float elonl_Rhad = elonl_ethad / onl->energy() ;
1868 val_off=getShowerShape_Rhad(off);
1870 res_Rhad_vec.push_back(( elonl_Rhad-val_off)/val_off);
1872 res_Rhad_vec.push_back(dummy);
1875 float elonl_Rhad1 = onl->ehad1() / onl->energy() ;
1876 val_off=getShowerShape_Rhad1(off);
1878 res_Rhad1_vec.push_back(( elonl_Rhad1-val_off)/val_off);
1880 res_Rhad1_vec.push_back(dummy);
1883 float onl_reta= 999.0;
1884 if ( fabsf ( onl->e277() ) > 0.01 ) onl_reta = onl->e237() / onl->e277();
1885 val_off=getShowerShape_Reta(off);
1887 res_Reta_vec.push_back( (onl_reta -val_off)/val_off);
1889 res_Reta_vec.push_back(dummy);
1892 val_off=getShowerShape_weta2(off);
1894 res_weta2_vec.push_back(( (onl->weta2())-val_off)/val_off);
1896 res_weta2_vec.push_back(dummy);
1899 float onl_f1 = onl->energy(CaloSampling::EMB1)+onl->energy(CaloSampling::EME1);
1900 onl_f1 /= onl->energy();
1901 val_off=getShowerShape_f1(off);
1903 res_f1_vec.push_back(( (onl_f1)-val_off)/val_off);
1905 res_f1_vec.push_back(dummy);
1908 float onl_f3 = onl->energy(CaloSampling::EMB3)+onl->energy(CaloSampling::EME3);
1909 onl_f3 /= onl->energy();
1910 val_off=getShowerShape_f3(off);
1912 res_f3_vec.push_back(( (onl_f3)-val_off)/val_off);
1914 res_f3_vec.push_back(dummy);
1917 float onl_eratio = 999.0;
1918 if ( fabsf(onl->emaxs1() + onl->e2tsts1()) > 0.01 )
1919 onl_eratio = (onl->emaxs1() - onl->e2tsts1()) / (onl->emaxs1() + onl->e2tsts1());
1920 val_off=getShowerShape_Eratio(off);
1922 res_eratio_vec.push_back(( (onl_eratio)-val_off)/val_off);
1924 res_eratio_vec.push_back(dummy);