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;
57 for(
auto pairObj : pairObjs ){
61 auto passBits=
tdt()->isPassedBits(info.trigger);
63 ATH_MSG_DEBUG(
"Prescaled trigger: " << info.trigger <<
" Skipping to normalize efficiencies");
67 float et =
getEt(el)/Gaudi::Units::GeV;
68 if(
et < info.etthr-5.0)
continue;
71 float et = getCluster_et(pairObj.first)/Gaudi::Units::GeV;
72 if(
et < info.etthr-5.0)
continue;
76 bool pass_CaloIso = getIsolation_topoetcone20(pairObj.first)/getCluster_et(pairObj.first) < 0.065;
77 bool pass_trkIso = getIsolation_ptcone20(pairObj.first)/getCluster_et(pairObj.first) < 0.05;
79 if (!pass_CaloIso || !pass_trkIso){
88 auto acceptData =
m_emulatorTool->emulate( pairObj.second, info.trigger , valid);
94 emu_accept_vec.push_back( acceptData );
96 if( IsolatedDec(*pairObj.first) ){
97 emu_accept_iso_vec.push_back(acceptData);
103 pair_vec.push_back(pairObj);
104 auto acceptData =
setAccept( pairObj.second, info, onlyHLT );
105 accept_vec.push_back(acceptData);
107 if( IsolatedDec(*pairObj.first) ){
108 pair_iso_vec.push_back(pairObj);
109 accept_iso_vec.push_back(acceptData);
116 std::string
dirname=
"Efficiency";
117 std::string l2step =
"FastElectron";
118 if( info.signature ==
"Electron" ){
119 l2step =
"FastElectron";
120 }
else if( info.signature ==
"Photon" ){
121 l2step =
"FastPhoton";
126 fillEfficiency(ctx,
"PrecisionCalo" ,
"EFCalo" , info.pidname, info, pair_vec , accept_vec,
dirname);
147 fillEfficiency(ctx,
"PrecisionCalo" ,
"EFCalo" , info.pidname, info, pair_vec , emu_accept_vec,
dirname);
158 const std::string &subgroup,
159 const std::string &level,
160 const std::string &pidword,
162 const std::vector< std::pair< const xAOD::Egamma *, const TrigCompositeUtils::Decision* >>& pairObjs,
163 const std::vector< asg::AcceptData >& acceptObjs ,
164 const std::string&
dirname )
const
166 const float etthr = info.etthr;
167 const std::string trigger = info.trigger;
170 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;
171 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;
172 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;
173 std::vector<bool> ptvarcone20rel_passed_vec, ptvarcone30rel_passed_vec, z0_passed_vec, d0_passed_vec;
174 std::vector<bool> et_slice0_passed_vec,et_slice1_passed_vec,et_slice2_passed_vec,et_slice3_passed_vec;
196 auto match_ptvarcone20rel_col =
Monitored::Collection(
"match_ptvarcone20rel" , match_ptvarcone20rel_vec );
197 auto match_ptvarcone30rel_col =
Monitored::Collection(
"match_ptvarcone30rel" , match_ptvarcone30rel_vec );
212 auto ptvarcone20rel_passed_col =
Monitored::Collection(
"ptvarcone20rel_passed" , ptvarcone20rel_passed_vec );
213 auto ptvarcone30rel_passed_col =
Monitored::Collection(
"ptvarcone30rel_passed" , ptvarcone30rel_passed_vec );
232 for(
auto pairObj : pairObjs ){
235 bool isPassed = acceptObjs[iObj].getCutResult( level );
237 float ptvarcone20rel = -99.0;
238 float ptvarcone30rel = -99.0;
241 const auto *eg = pairObj.first;
248 et =
getEt(el)/Gaudi::Units::GeV;
250 ptvarcone20rel = getIsolation_ptvarcone20(el)/el->pt();
251 ptvarcone30rel = getIsolation_ptvarcone30(el)/el->pt();
253 z0 = getTrack_z0(el);
254 d0 = getTrack_d0(el);
256 else et=eg->caloCluster()->et()/Gaudi::Units::GeV;
258 float eta = eg->caloCluster()->etaBE(2);
259 float phi = eg->phi();
260 float pt = eg->pt()/Gaudi::Units::GeV;
264 ATH_MSG_DEBUG(
"PID decision efficiency " << pidwordDec(*eg));
267 et_vec.push_back(
et );
268 pt_vec.push_back( pt );
269 highet_vec.push_back(
et );
272 eta_vec.push_back(
eta);
273 phi_vec.push_back(
phi);
274 avgmu_vec.push_back(avgmu);
275 npvtx_vec.push_back(npvtx);
276 ptvarcone20rel_vec.push_back(ptvarcone20rel);
277 ptvarcone30rel_vec.push_back(ptvarcone30rel);
278 z0_vec.push_back(z0);
279 d0_vec.push_back(d0);
283 et_slice0_vec.push_back(
et);
284 }
else if( abs(
eta) > 0.80 && abs(
eta) <= 1.37 ){
285 et_slice1_vec.push_back(
et);
286 }
else if( abs(
eta) > 1.37 && abs(
eta) <= 1.54 ){
287 et_slice2_vec.push_back(
et);
288 }
else if( abs(
eta) > 1.54 && abs(
eta) <= 2.50 ){
289 et_slice3_vec.push_back(
et);
293 match_et_vec.push_back(
et );
294 match_pt_vec.push_back( pt );
295 match_highet_vec.push_back(
et );
298 match_eta_vec.push_back(
eta);
299 match_phi_vec.push_back(
phi);
300 match_avgmu_vec.push_back(avgmu);
301 match_npvtx_vec.push_back(npvtx);
302 match_ptvarcone20rel_vec.push_back(ptvarcone20rel);
303 match_ptvarcone30rel_vec.push_back(ptvarcone30rel);
304 match_z0_vec.push_back(z0);
305 match_d0_vec.push_back(d0);
308 et_passed_vec.push_back(
true );
309 et_failed_vec.push_back(
false );
310 pt_passed_vec.push_back(
true );
311 highet_passed_vec.push_back(
true );
312 highet_failed_vec.push_back(
false );
315 et_slice0_passed_vec.push_back(
true);
316 }
else if( abs(
eta) > 0.80 && abs(
eta) <= 1.37 ){
317 et_slice1_passed_vec.push_back(
true);
318 }
else if( abs(
eta) > 1.37 && abs(
eta) <= 1.54 ){
319 et_slice2_passed_vec.push_back(
true);
320 }
else if( abs(
eta) > 1.54 && abs(
eta) <= 2.50 ){
321 et_slice3_passed_vec.push_back(
true);
325 eta_passed_vec.push_back(
true );
326 eta_failed_vec.push_back(
false );
327 phi_passed_vec.push_back(
true );
328 avgmu_passed_vec.push_back(
true );
329 npvtx_passed_vec.push_back(
true );
330 ptvarcone20rel_passed_vec.push_back(
true );
331 ptvarcone30rel_passed_vec.push_back(
true );
332 z0_passed_vec.push_back(
true );
333 d0_passed_vec.push_back(
true );
338 et_passed_vec.push_back(
false );
339 et_failed_vec.push_back(
true );
340 pt_passed_vec.push_back(
false );
341 highet_passed_vec.push_back(
false );
342 highet_failed_vec.push_back(
true );
345 et_slice0_passed_vec.push_back(
false);
346 }
else if( abs(
eta) > 0.80 && abs(
eta) <= 1.37 ){
347 et_slice1_passed_vec.push_back(
false);
348 }
else if( abs(
eta) > 1.37 && abs(
eta) <= 1.54 ){
349 et_slice2_passed_vec.push_back(
false);
350 }
else if( abs(
eta) > 1.54 && abs(
eta) <= 2.50 ){
351 et_slice3_passed_vec.push_back(
false);
355 eta_passed_vec.push_back(
false );
356 eta_failed_vec.push_back(
true );
357 phi_passed_vec.push_back(
false );
358 avgmu_passed_vec.push_back(
false );
359 npvtx_passed_vec.push_back(
false );
360 ptvarcone20rel_passed_vec.push_back(
false );
361 ptvarcone30rel_passed_vec.push_back(
false );
362 z0_passed_vec.push_back(
false );
363 d0_passed_vec.push_back(
false );
371 fill( monGroup, et_col, highet_col, pt_col, eta_col, phi_col, avgmu_col, npvtx_col, ptvarcone20rel_col, ptvarcone30rel_col, z0_col, d0_col,
372 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,
373 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,
374 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);
426 const std::string trigger = info.trigger;
431 std::vector<const xAOD::Egamma*> eg_vec;
432 std::vector<const xAOD::Electron*> el_vec;
433 for(
auto pairObj: pairObjs )
435 eg_vec.push_back(pairObj.first);
438 el_vec.push_back(elOff);
452 std::vector<const xAOD::EmTauRoI*> l1_vec;
453 for(
auto &initRoi: initRois ){
454 if( !initRoi.link.isValid() )
continue;
455 const auto *feat =
match()->getL1Feature( initRoi.source );
456 if(feat) l1_vec.push_back(feat);
460 std::vector<const xAOD::eFexEMRoI*> l1_vec;
461 for(
auto &initRoi: initRois ){
462 if( !initRoi.link.isValid() )
continue;
463 const auto *feat =
match()->getL1eEMFeature( initRoi.source );
464 if(feat) l1_vec.push_back(feat);
474 std::vector<const xAOD::TrigEMCluster*> emCluster_vec;
476 for(
auto &featLinkInfo :
vec ){
477 if(! featLinkInfo.isValid() )
continue;
478 const auto *feat = *(featLinkInfo.link);
480 emCluster_vec.push_back(feat);
486 std::string key =
match()->key(
"PrecisionCalo_Electron");
487 if(info.signature ==
"Photon") key =
match()->key(
"PrecisionCalo_Photon");
488 if(info.lrt) key =
match()->key(
"PrecisionCalo_LRT");
489 if(info.ion) key =
match()->key(
"PrecisionCalo_HI");
491 std::vector<const xAOD::CaloCluster* > clus_vec;
493 for(
auto &featLinkInfo :
vec ){
494 if(! featLinkInfo.isValid() )
continue;
495 const auto *feat = *(featLinkInfo.link);
497 clus_vec.push_back(feat);
502 if ( info.signature ==
"Electron" ){
506 std::string key =
match()->key(
"FastElectrons");
507 if(info.lrt) key =
match()->key(
"FastElectrons_LRT");
509 std::vector<const xAOD::TrigElectron*> el_vec;
512 for(
auto &featLinkInfo :
vec ){
513 if(! featLinkInfo.isValid() )
continue;
514 const auto *feat = *(featLinkInfo.link);
516 el_vec.push_back(feat);
522 std::string key =
match()->key(
"Electrons_GSF");
523 if(info.nogsf) key =
match()->key(
"Electrons");
524 if(info.lrt) key =
match()->key(
"Electrons_LRT");
526 std::vector<const xAOD::Electron*> el_vec;
527 std::vector<const xAOD::Egamma*> eg_vec;
529 for(
auto &featLinkInfo :
vec ){
530 if(! featLinkInfo.isValid() )
continue;
531 const auto *feat = *(featLinkInfo.link);
533 el_vec.push_back(feat);
534 eg_vec.push_back(feat);
539 }
else if ( info.signature ==
"Photon"){
542 std::string key =
match()->key(
"FastPhotons");
543 std::vector<const xAOD::TrigPhoton*> ph_vec;
546 for(
auto &featLinkInfo :
vec ){
547 if(! featLinkInfo.isValid() )
continue;
548 const auto *feat = *(featLinkInfo.link);
550 ph_vec.push_back(feat);
557 std::vector<const xAOD::Egamma*> ph_vec;
559 for(
auto &featLinkInfo :
vec ){
560 if(! featLinkInfo.isValid() )
continue;
561 const auto *feat = *(featLinkInfo.link);
563 ph_vec.push_back(feat);
716 auto monGroup =
getGroup( trigger +
"_Distributions_EFCalo" );
719 std::vector<float> energyBE0_vec, energyBE1_vec, energyBE2_vec, energyBE3_vec,
720 energy_vec, et_vec, eta_vec, phi_vec, eta_calo_vec, phi_calo_vec, highet_vec;
736 for (
const auto *clus : clus_vec )
738 double tmpeta = -999.;
741 double tmpphi = -999.;
745 energyBE0_vec.push_back( clus->energyBE(0)/Gaudi::Units::GeV );
746 energyBE1_vec.push_back( clus->energyBE(1)/Gaudi::Units::GeV );
747 energyBE2_vec.push_back( clus->energyBE(2)/Gaudi::Units::GeV );
748 energyBE3_vec.push_back( clus->energyBE(3)/Gaudi::Units::GeV );
749 energy_vec.push_back( clus->e()/Gaudi::Units::GeV );
750 et_vec.push_back( clus->et()/Gaudi::Units::GeV );
751 highet_vec.push_back( clus->et()/Gaudi::Units::GeV );
752 eta_vec.push_back( clus->eta() );
753 phi_vec.push_back( clus->phi() );
754 eta_calo_vec.push_back( tmpeta );
755 phi_calo_vec.push_back( tmpphi );
760 fill( monGroup, energyBE0_col, energyBE1_col, energyBE2_col, energyBE3_col,
761 energy_col, et_col, eta_col, phi_col, eta_calo_col, phi_calo_col, highet_col);
772 auto monGroup =
getGroup( trigger + (
online ?
"_Distributions_HLT" :
"_Distributions_Offline") );
774 std::vector<float> Rhad_vec, Rhad1_vec, Reta_vec, Rphi_vec, weta1_vec, weta2_vec,
775 f1_vec, f3_vec, eratio_vec, et_vec, highet_vec , eta_vec, phi_vec, topoetcone20_vec, topoetcone40_shift_vec,
776 topoetcone20_rel_vec, topoetcone40_shift_rel_vec;
795 auto topoetcone40_shift_rel_col =
Monitored::Collection(
"topoetcone40_shift_rel", topoetcone40_shift_rel_vec );
797 for (
const auto *eg : eg_vec ){
801 Rhad_vec.push_back( getShowerShape_Rhad(eg));
802 Rhad1_vec.push_back( getShowerShape_Rhad(eg));
803 Reta_vec.push_back( getShowerShape_Reta(eg));
804 Rphi_vec.push_back( getShowerShape_Rphi(eg));
805 weta1_vec.push_back( getShowerShape_weta1(eg));
806 weta2_vec.push_back( getShowerShape_weta2(eg));
807 f1_vec.push_back( getShowerShape_f1(eg));
808 f3_vec.push_back( getShowerShape_f3(eg));
809 eratio_vec.push_back( getShowerShape_Eratio(eg));
810 et_vec.push_back( eg->pt()/Gaudi::Units::GeV);
811 highet_vec.push_back( eg->pt()/Gaudi::Units::GeV);
812 eta_vec.push_back( eg->eta());
813 phi_vec.push_back( eg->phi());
814 topoetcone20_vec.push_back( getIsolation_topoetcone20(eg)/Gaudi::Units::GeV);
815 topoetcone40_shift_vec.push_back( (getIsolation_topoetcone40(eg)-2450)/Gaudi::Units::GeV );
818 topoetcone20_rel_vec.push_back( getIsolation_topoetcone20(eg)/eg->pt());
819 topoetcone40_shift_rel_vec.push_back( (getIsolation_topoetcone40(eg)-2450)/eg->pt() );
824 fill( monGroup, Rhad_col, Rhad1_col, Reta_col, Rphi_col, weta1_col, weta2_col,
825 f1_col, f3_col, eratio_col, et_col, highet_col , eta_col, phi_col, topoetcone20_col, topoetcone40_shift_col,
826 topoetcone20_rel_col, topoetcone40_shift_rel_col );
836 auto monGroup =
getGroup( trigger + (
online ?
"_Distributions_HLT" :
"_Distributions_Offline") );
838 std::vector<float> deta1_vec, deta1_EMECA_vec, deta1_EMECC_vec, deta1_EMEBA_vec, deta1_EMEBC_vec, deta2_vec, dphi2_vec,
839 dphiresc_vec, eprobht_vec, npixhits_vec, nscthits_vec, charge_vec, ptcone20_vec, ptvarcone20_vec, ptcone30_vec, ptvarcone30_vec, z0_vec, d0_vec, d0sig_vec,
840 pt_vec,pt_trk_vec, ptcone20_rel_vec, ptvarcone20_rel_vec, ptcone30_rel_vec, ptvarcone30_rel_vec, eta_vec, mu_vec;
872 for (
const auto *eg : eg_vec ){
877 if(eg->caloCluster()) cleta=eg->caloCluster()->eta();
878 else cleta=eg->eta();
880 deta1_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
882 if(cleta > 1.375 && cleta < 3.2)
883 deta1_EMECA_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
884 if(cleta < -1.375 && cleta > -3.2)
885 deta1_EMECC_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
886 if(cleta > 0 && cleta < 1.375)
887 deta1_EMEBA_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
888 if(cleta < 0 && cleta > -1.375)
889 deta1_EMEBC_vec.push_back( getCaloTrackMatch_deltaEta1(eg));
891 deta2_vec.push_back( getCaloTrackMatch_deltaEta2(eg));
892 dphi2_vec.push_back( getCaloTrackMatch_deltaPhi2(eg));
893 dphiresc_vec.push_back( getCaloTrackMatch_deltaPhiRescaled2(eg));
894 eprobht_vec.push_back( getTrackSummaryFloat_eProbabilityHT(eg));
895 npixhits_vec.push_back( getTrackSummary_numberOfPixelHits(eg));
896 nscthits_vec.push_back( getTrackSummary_numberOfSCTHits(eg));
897 charge_vec.push_back( eg->charge());
898 ptcone20_vec.push_back( getIsolation_ptcone20(eg)/Gaudi::Units::GeV);
899 ptvarcone20_vec.push_back( getIsolation_ptvarcone20(eg)/Gaudi::Units::GeV);
900 ptcone30_vec.push_back( getIsolation_ptcone30(eg)/Gaudi::Units::GeV);
901 ptvarcone30_vec.push_back( getIsolation_ptvarcone30(eg)/Gaudi::Units::GeV);
905 z0_vec.push_back( getTrack_z0(eg));
906 d0_vec.push_back( getTrack_d0(eg));
908 pt_vec.push_back( eg->pt()/Gaudi::Units::GeV);
909 pt_trk_vec.push_back( getTrack_pt(eg)/Gaudi::Units::GeV);
910 eta_vec.push_back(eg->eta());
913 mu_vec.push_back( avgmu );
916 ptcone20_rel_vec.push_back( getIsolation_ptcone20(eg)/eg->pt());
917 ptvarcone20_rel_vec.push_back( getIsolation_ptvarcone20(eg)/eg->pt());
918 ptcone30_rel_vec.push_back( getIsolation_ptcone30(eg)/eg->pt());
919 ptvarcone30_rel_vec.push_back( getIsolation_ptvarcone30(eg)/eg->pt());
925 fill( monGroup, deta1_col, deta1_EMECA_col, deta1_EMECC_col, deta1_EMEBA_col, deta1_EMEBC_col, deta2_col, dphi2_col,
926 dphiresc_col, eprobht_col, npixhits_col, nscthits_col, charge_col, ptcone20_col, ptvarcone20_col, ptcone30_col, ptvarcone30_col, z0_col, d0_col, d0sig_col,
927 pt_col, ptcone20_rel_col, ptvarcone20_rel_col, ptcone30_rel_col, ptvarcone30_rel_col, eta_col, mu_col,pt_trk_col);
1053 const std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >>& pairObjs,
1057 auto monGroup =
getGroup( trigger +
"_Resolutions_HLT" );
1059 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,
1060 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,
1061 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,
1062 et_vec, eta_vec, mu_vec;
1063 std::vector<float> res_ptcone20_vec, res_ptcone20_rel_vec, res_ptvarcone20_vec, res_ptvarcone20_rel_vec;
1064 std::vector<float> res_etInEta0_vec, res_etInEta1_vec, res_etInEta2_vec, res_etInEta3_vec;
1108 auto res_ptvarcone20_rel_col =
Monitored::Collection(
"res_ptvarcone20_rel" , res_ptvarcone20_rel_vec );
1116 std::string key =
match()->key(
"Electrons_GSF");
1117 if(info.nogsf) key =
match()->key(
"Electrons");
1118 if(info.lrt) key =
match()->key(
"Electrons_LRT");
1120 for (
const auto & pairObj : pairObjs ){
1127 float maxDeltaR=0.05;
1129 for(
auto &featLinkInfo :
vec ){
1130 if(! featLinkInfo.isValid() )
continue;
1131 const auto *feat = *(featLinkInfo.link);
1133 float deltaR =
dR( off->
eta(), off->
phi(), feat->eta(), feat->phi() );
1144 const float onl_eta=onl->eta();
1145 const float feta = abs(onl_eta);
1146 const float onl_et =
getEt(onl)/Gaudi::Units::GeV;
1148 const float dummy=-999;
1150 eta_vec.push_back( onl_eta );
1151 et_vec.push_back( onl_et );
1152 mu_vec.push_back( avgmu );
1154 val_off=getTrack_pt(off);
1156 res_pt_vec.push_back( (getTrack_pt(off)-val_off)/val_off );
1163 res_et_vec.push_back( (
getEt(onl)-val_off)/val_off );
1165 res_etInEta0_vec.push_back((
getEt(onl)-val_off)/val_off);
1166 else if( feta >=1.37 && feta <= 1.52 )
1167 res_etInEta1_vec.push_back((
getEt(onl)-val_off)/val_off);
1168 else if( feta >= 1.55 && feta < 1.8 )
1169 res_etInEta2_vec.push_back((
getEt(onl)-val_off)/val_off);
1170 else if( feta >= 1.8 && feta < 2.45 )
1171 res_etInEta3_vec.push_back((
getEt(onl)-val_off)/val_off);
1176 res_eta_vec.push_back( (onl_eta-val_off)/val_off );
1178 res_eta_vec.push_back( dummy );
1183 res_phi_vec.push_back( (onl->phi()-val_off)/val_off );
1185 res_phi_vec.push_back(dummy );
1188 val_off=getShowerShape_ethad(off);
1190 res_ethad_vec.push_back((getShowerShape_ethad(onl)-val_off)/val_off);
1192 res_ethad_vec.push_back( dummy );
1195 val_off=getShowerShape_ethad1(off);
1197 res_ethad1_vec.push_back((getShowerShape_ethad1(onl)-val_off)/val_off);
1199 res_ethad1_vec.push_back( dummy);
1202 val_off=getShowerShape_Rhad(off);
1204 res_Rhad_vec.push_back( (getShowerShape_Rhad(onl)-val_off)/val_off );
1206 res_Rhad_vec.push_back( dummy );
1209 val_off=getShowerShape_Rhad1(off);
1211 res_Rhad1_vec.push_back( (getShowerShape_Rhad1(onl)-val_off)/val_off );
1213 res_Rhad1_vec.push_back( dummy );
1216 val_off=getShowerShape_Reta(off);
1218 res_Reta_vec.push_back( (getShowerShape_Reta(onl)-val_off)/val_off );
1220 res_Reta_vec.push_back( dummy );
1223 val_off=getShowerShape_Rphi(off);
1225 res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off );
1227 res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off );
1230 val_off=getShowerShape_weta1(off);
1232 res_weta1_vec.push_back( (getShowerShape_weta1(onl)-val_off)/val_off );
1234 res_weta1_vec.push_back( dummy );
1237 val_off=getShowerShape_weta2(off);
1239 res_weta2_vec.push_back( (getShowerShape_weta2(onl)-val_off)/val_off );
1241 res_weta2_vec.push_back( dummy );
1244 val_off=getShowerShape_wtots1(off);
1246 res_wtots1_vec.push_back( (getShowerShape_wtots1(onl)-val_off)/val_off );
1248 res_wtots1_vec.push_back( dummy );
1251 val_off=getShowerShape_f1(off);
1253 res_f1_vec.push_back( (getShowerShape_f1(onl)-val_off)/val_off );
1255 res_f1_vec.push_back(dummy );
1258 val_off=getShowerShape_f3(off);
1260 res_f3_vec.push_back( (getShowerShape_f3(onl)-val_off)/val_off );
1262 res_f3_vec.push_back( dummy );
1265 val_off=getShowerShape_Eratio(off);
1267 res_eratio_vec.push_back( (getShowerShape_Eratio(onl)-val_off)/val_off );
1269 res_eratio_vec.push_back( dummy );
1277 val_off=getTrack_pt(off);
1279 res_pt_vec.push_back( (getTrack_pt(onl)-val_off)/val_off );
1281 res_pt_vec.push_back( dummy );
1286 res_et_vec.push_back( (
getEt(onl)-val_off)/val_off );
1288 res_et_vec.push_back( dummy );
1291 val_off=getCaloTrackMatch_deltaEta1(off);
1293 res_deta1_vec.push_back( (getCaloTrackMatch_deltaEta1(onl)-val_off)/val_off );
1295 res_deta1_vec.push_back( dummy );
1298 val_off=getCaloTrackMatch_deltaEta2(off);
1299 res_deta2_vec.push_back( (getCaloTrackMatch_deltaEta2(onl)-val_off)/val_off );
1300 val_off=getCaloTrackMatch_deltaPhi2(off);
1302 res_dphi2_vec.push_back( (getCaloTrackMatch_deltaPhi2(onl)-val_off)/val_off );
1304 res_dphi2_vec.push_back(dummy );
1307 val_off=getCaloTrackMatch_deltaPhiRescaled2(off);
1308 res_dphiresc_vec.push_back( (getCaloTrackMatch_deltaPhiRescaled2(onl)-val_off)/val_off );
1310 val_off=getTrack_z0(off);
1312 res_z0_vec.push_back( getTrack_z0(onl)-val_off );
1314 res_z0_vec.push_back( dummy );
1318 val_off=getTrack_d0(off);
1320 res_d0_vec.push_back( getTrack_d0(onl)-val_off );
1322 res_d0_vec.push_back( dummy );
1327 res_d0sig_vec.push_back(
getD0sig(onl)-val_off );
1329 res_d0sig_vec.push_back( dummy );
1333 val_off=getTrackSummaryFloat_eProbabilityHT(off);
1334 res_eprobht_vec.push_back( (getTrackSummaryFloat_eProbabilityHT(onl)-val_off) );
1335 res_npixhits_vec.push_back( getTrackSummary_numberOfPixelHits(onl)-getTrackSummary_numberOfPixelHits(onl) );
1336 res_nscthits_vec.push_back( getTrackSummary_numberOfSCTHits(onl)-getTrackSummary_numberOfSCTHits(onl) );
1343 float val_off=getIsolation_ptcone20(off);
1345 res_ptcone20_vec.push_back((getIsolation_ptcone20(onl)-val_off)/val_off);
1347 const float reliso_onl=getIsolation_ptcone20(onl)/
getEt(onl);
1348 const float reliso_off=getIsolation_ptcone20(off)/
getEt(off);
1349 res_ptcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off);
1351 res_ptcone20_rel_vec.push_back(dummy);
1354 res_ptcone20_vec.push_back(dummy);
1355 res_ptcone20_rel_vec.push_back(dummy);
1359 val_off=getIsolation_ptvarcone20(off);
1362 res_ptvarcone20_vec.push_back((getIsolation_ptvarcone20(onl)-val_off)/val_off);
1363 const float reliso_onl=getIsolation_ptvarcone20(onl)/
getEt(onl);
1364 const float reliso_off=getIsolation_ptvarcone20(off)/
getEt(off);
1365 res_ptvarcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off);
1367 res_ptvarcone20_rel_vec.push_back(dummy);
1370 res_ptvarcone20_vec.push_back(dummy);
1371 res_ptvarcone20_rel_vec.push_back(dummy);
1414 res_ptcone20_rel_col ,
1415 res_ptvarcone20_col ,
1416 res_ptvarcone20_rel_col ,
1431 const std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >>& pairObjs,
1435 auto monGroup =
getGroup( trigger +
"_Resolutions_HLT" );
1437 std::vector<float> res_phi_vec, res_eta_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec, res_ethad_vec, res_ethad1_vec,
1438 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;
1440 std::vector<float> res_et_vec, res_et_cnv_vec, res_et_uncnv_vec;
1441 std::vector<float> res_etInEta0_vec, res_etInEta1_vec, res_etInEta2_vec, res_etInEta3_vec;
1442 std::vector<float> res_cnv_etInEta0_vec, res_cnv_etInEta1_vec, res_cnv_etInEta2_vec, res_cnv_etInEta3_vec;
1443 std::vector<float> res_uncnv_etInEta0_vec, res_uncnv_etInEta1_vec, res_uncnv_etInEta2_vec, res_uncnv_etInEta3_vec;
1447 std::vector<float> res_topoetcone20_vec, res_topoetcone20_rel_vec;
1481 auto res_uncnv_etInEta0_col =
Monitored::Collection(
"res_uncnv_etInEta0" , res_uncnv_etInEta0_vec);
1482 auto res_uncnv_etInEta1_col =
Monitored::Collection(
"res_uncnv_etInEta1" , res_uncnv_etInEta1_vec);
1483 auto res_uncnv_etInEta2_col =
Monitored::Collection(
"res_uncnv_etInEta2" , res_uncnv_etInEta2_vec);
1484 auto res_uncnv_etInEta3_col =
Monitored::Collection(
"res_uncnv_etInEta3" , res_uncnv_etInEta3_vec);
1488 auto res_topoetcone20_rel_col =
Monitored::Collection(
"res_topoetcone20_rel" , res_topoetcone20_rel_vec );
1498 for (
const auto & pairObj : pairObjs ){
1505 float maxDeltaR=0.05;
1507 for(
auto &featLinkInfo :
vec ){
1508 if(! featLinkInfo.isValid() )
continue;
1509 const auto *feat = *(featLinkInfo.link);
1511 float deltaR =
dR( off->
eta(), off->
phi(), feat->eta(), feat->phi() );
1523 const float onl_eta=onl->eta();
1524 const float feta = abs(onl_eta);
1525 const float onl_et = getCluster_et(onl)/Gaudi::Units::GeV;
1526 const float dummy=-999;
1529 et_vec.push_back( onl_et );
1530 eta_vec.push_back( onl_eta );
1531 mu_vec.push_back( avgmu );
1534 val_off=getCluster_et(off);
1536 res_et_vec.push_back( (getCluster_et(onl)-val_off)/val_off );
1538 res_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1539 else if( feta >=1.37 && feta <= 1.52 )
1540 res_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1541 else if( feta >= 1.55 && feta < 1.8 )
1542 res_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1543 else if( feta >= 1.8 && feta < 2.45 )
1544 res_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1547 res_et_cnv_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1549 res_cnv_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1550 else if( feta >=1.37 && feta <= 1.52 )
1551 res_cnv_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1552 else if( feta >= 1.55 && feta < 1.8 )
1553 res_cnv_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1554 else if( feta >= 1.8 && feta < 2.45 )
1555 res_cnv_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1557 res_et_uncnv_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1559 res_uncnv_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1560 else if( feta >=1.37 && feta <= 1.52 )
1561 res_uncnv_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1562 else if( feta >= 1.55 && feta < 1.8 )
1563 res_uncnv_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1564 else if( feta >= 1.8 && feta < 2.45 )
1565 res_uncnv_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off);
1571 res_eta_vec.push_back( (onl_eta-val_off)/val_off ) ;
1573 res_eta_vec.push_back( dummy ) ;
1578 res_phi_vec.push_back( (onl->phi()-val_off)/val_off );
1580 res_phi_vec.push_back(dummy );
1583 val_off=getShowerShape_ethad(off);
1585 res_ethad_vec.push_back((getShowerShape_ethad(onl)-val_off)/val_off);
1587 res_ethad_vec.push_back(dummy);
1590 val_off=getShowerShape_ethad1(off);
1592 res_ethad1_vec.push_back((getShowerShape_ethad1(onl)-val_off)/val_off);
1594 res_ethad1_vec.push_back(dummy);
1597 val_off=getShowerShape_Rhad(off);
1599 res_Rhad_vec.push_back( (getShowerShape_Rhad(onl)-val_off)/val_off );
1601 res_Rhad_vec.push_back(dummy );
1604 val_off=getShowerShape_Rhad1(off);
1606 res_Rhad1_vec.push_back( (getShowerShape_Rhad1(onl)-val_off)/val_off );
1608 res_Rhad1_vec.push_back(dummy );
1611 val_off=getShowerShape_Reta(off);
1613 res_Reta_vec.push_back( (getShowerShape_Reta(onl)-val_off)/val_off );
1615 res_Reta_vec.push_back( dummy );
1618 val_off=getShowerShape_Rphi(off);
1620 res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off );
1622 res_Rphi_vec.push_back(dummy );
1625 val_off=getShowerShape_weta1(off);
1627 res_weta1_vec.push_back( (getShowerShape_weta1(onl)-val_off)/val_off );
1629 res_weta1_vec.push_back( dummy );
1632 val_off=getShowerShape_weta2(off);
1634 res_weta2_vec.push_back( (getShowerShape_weta2(onl)-val_off)/val_off );
1636 res_weta2_vec.push_back(dummy);
1639 val_off=getShowerShape_wtots1(off);
1641 res_wtots1_vec.push_back( (getShowerShape_wtots1(onl)-val_off)/val_off );
1643 res_wtots1_vec.push_back( dummy );
1646 val_off=getShowerShape_f1(off);
1648 res_f1_vec.push_back( (getShowerShape_f1(onl)-val_off)/val_off );
1650 res_f1_vec.push_back( dummy );
1653 val_off=getShowerShape_f3(off);
1655 res_f3_vec.push_back( (getShowerShape_f3(onl)-val_off)/val_off );
1657 res_f3_vec.push_back( dummy );
1660 val_off=getShowerShape_Eratio(off);
1662 res_eratio_vec.push_back( (getShowerShape_Eratio(onl)-val_off)/val_off);
1664 res_eratio_vec.push_back( dummy);
1668 if( info.isolated ){
1670 float val_off=getIsolation_topoetcone20(off);
1671 float etonl=onl->pt();
1672 float etoff=off->
pt();
1674 res_topoetcone20_vec.push_back((getIsolation_topoetcone20(onl)-val_off)/val_off);
1675 if (etonl > 0. && etoff > 0.) {
1676 const float reliso_onl=getIsolation_topoetcone20(onl)/etonl;
1677 const float reliso_off=getIsolation_topoetcone20(off)/etoff;
1678 res_topoetcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off);
1680 res_topoetcone20_rel_vec.push_back(dummy);
1683 res_topoetcone20_vec.push_back(dummy);
1684 res_topoetcone20_rel_vec.push_back(dummy);
1712 res_topoetcone20_col ,
1713 res_topoetcone20_rel_col ,
1719 res_cnv_etInEta0_col,
1720 res_cnv_etInEta1_col,
1721 res_cnv_etInEta2_col,
1722 res_cnv_etInEta3_col,
1724 res_uncnv_etInEta0_col,
1725 res_uncnv_etInEta1_col,
1726 res_uncnv_etInEta2_col,
1727 res_uncnv_etInEta3_col
1736 const std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >>& pairObjs )
const
1741 auto monGroup =
getGroup( trigger +
"_Resolutions_L2Calo" );
1743 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,
1744 res_Rphi_vec, res_weta2_vec, res_f1_vec, res_f3_vec, res_eratio_vec, et_vec, eta_vec;
1764 for (
const auto & pairObj : pairObjs ){
1771 float maxDeltaR=0.05;
1773 for(
auto &featLinkInfo :
vec ){
1774 if(! featLinkInfo.isValid() )
continue;
1775 const auto *feat = *(featLinkInfo.link);
1777 float deltaR =
dR( off->
eta(), off->
phi(), feat->eta(), feat->phi() );
1787 et_vec.push_back(onl->et()*1e-3);
1788 eta_vec.push_back(onl->eta());
1789 const float dummy=-999;
1795 res_et_vec.push_back(((onl->et())-val_off)/val_off);
1797 res_et_vec.push_back(dummy);
1802 res_eta_vec.push_back((onl->eta()-val_off)/val_off);
1804 res_eta_vec.push_back(dummy);
1809 res_phi_vec.push_back((onl->phi()-val_off)/val_off);
1811 res_phi_vec.push_back((onl->phi()-val_off)/val_off);
1814 float elonl_ethad = onl->energy( CaloSampling::HEC0 ); elonl_ethad += onl->energy( CaloSampling::HEC1 );
1815 elonl_ethad += onl->energy( CaloSampling::HEC2 ); elonl_ethad += onl->energy( CaloSampling::HEC3 );
1816 elonl_ethad += onl->energy( CaloSampling::TileBar0 ); elonl_ethad += onl->energy( CaloSampling::TileExt0 );
1817 elonl_ethad += onl->energy( CaloSampling::TileBar1 ); elonl_ethad += onl->energy( CaloSampling::TileExt1 );
1818 elonl_ethad += onl->energy( CaloSampling::TileBar2 ); elonl_ethad += onl->energy( CaloSampling::TileExt2 );
1819 elonl_ethad /= TMath::CosH(onl->eta() );
1820 val_off=getShowerShape_ethad(off);
1822 res_ethad_vec.push_back((elonl_ethad-val_off)/val_off);
1824 res_ethad_vec.push_back(dummy);
1827 val_off=getShowerShape_ethad1(off);
1829 res_ethad1_vec.push_back(( (onl->ehad1()/TMath::Abs(onl->eta()) )-val_off)/val_off);
1831 res_ethad1_vec.push_back(dummy);
1834 float elonl_Rhad = elonl_ethad / onl->energy() ;
1835 val_off=getShowerShape_Rhad(off);
1837 res_Rhad_vec.push_back(( elonl_Rhad-val_off)/val_off);
1839 res_Rhad_vec.push_back(dummy);
1842 float elonl_Rhad1 = onl->ehad1() / onl->energy() ;
1843 val_off=getShowerShape_Rhad1(off);
1845 res_Rhad1_vec.push_back(( elonl_Rhad1-val_off)/val_off);
1847 res_Rhad1_vec.push_back(dummy);
1850 float onl_reta= 999.0;
1851 if ( fabsf ( onl->e277() ) > 0.01 ) onl_reta = onl->e237() / onl->e277();
1852 val_off=getShowerShape_Reta(off);
1854 res_Reta_vec.push_back( (onl_reta -val_off)/val_off);
1856 res_Reta_vec.push_back(dummy);
1859 val_off=getShowerShape_weta2(off);
1861 res_weta2_vec.push_back(( (onl->weta2())-val_off)/val_off);
1863 res_weta2_vec.push_back(dummy);
1866 float onl_f1 = onl->energy(CaloSampling::EMB1)+onl->energy(CaloSampling::EME1);
1867 onl_f1 /= onl->energy();
1868 val_off=getShowerShape_f1(off);
1870 res_f1_vec.push_back(( (onl_f1)-val_off)/val_off);
1872 res_f1_vec.push_back(dummy);
1875 float onl_f3 = onl->energy(CaloSampling::EMB3)+onl->energy(CaloSampling::EME3);
1876 onl_f3 /= onl->energy();
1877 val_off=getShowerShape_f3(off);
1879 res_f3_vec.push_back(( (onl_f3)-val_off)/val_off);
1881 res_f3_vec.push_back(dummy);
1884 float onl_eratio = 999.0;
1885 if ( fabsf(onl->emaxs1() + onl->e2tsts1()) > 0.01 )
1886 onl_eratio = (onl->emaxs1() - onl->e2tsts1()) / (onl->emaxs1() + onl->e2tsts1());
1887 val_off=getShowerShape_Eratio(off);
1889 res_eratio_vec.push_back(( (onl_eratio)-val_off)/val_off);
1891 res_eratio_vec.push_back(dummy);