206 double suptmi = 500.;
207 double suptmixy = 250.;
208 double binphi = 3.15;
215 std::string name_met;
216 std::string name_sub;
217 std::vector<std::string> corrClus_names;
218 std::vector<std::string> corrTrk_names;
219 std::vector<std::string> sum_names;
222 corrClus_names.emplace_back(
"RefEle");
223 corrClus_names.emplace_back(
"RefGamma");
224 corrClus_names.emplace_back(
"RefTau");
225 corrClus_names.emplace_back(
"Muons");
226 corrClus_names.emplace_back(
"RefJet");
227 corrClus_names.emplace_back(
"SoftClus");
229 corrTrk_names.emplace_back(
"RefEle");
230 corrTrk_names.emplace_back(
"RefGamma");
231 corrTrk_names.emplace_back(
"RefTau");
232 corrTrk_names.emplace_back(
"Muons");
233 corrTrk_names.emplace_back(
"RefJet");
234 corrTrk_names.emplace_back(
"PVSoftTrk");
236 sum_names.emplace_back(
"RefEle");
237 sum_names.emplace_back(
"RefGamma");
238 sum_names.emplace_back(
"RefTau");
239 sum_names.emplace_back(
"Muons");
240 sum_names.emplace_back(
"RefJet");
245 name_met =
"MET_Reference_" +
type;
247 std::vector<TH1D*> v_MET_Ref;
248 std::vector<TH1D*> v_MET_Ref_x;
249 std::vector<TH1D*> v_MET_Ref_y;
250 std::vector<TH1D*> v_MET_Ref_phi;
251 std::vector<TH1D*> v_MET_Ref_sum;
252 std::vector<TH1D*> v_MET_Cumu_Ref;
253 std::vector<TH1D*> v_MET_Resolution_Ref;
254 std::vector<TH1D*> v_MET_Significance_Ref;
255 std::vector<TH1D*> v_MET_dPhi_Ref;
256 std::vector<TH2D*> v_MET_CorrFinalTrk_Ref;
257 std::vector<TH2D*> v_MET_CorrFinalClus_Ref;
258 std::vector<TH1D*> v_MET_Diff_Ref;
259 std::vector<TH1D*> v_MET_Diff_Ref_x;
260 std::vector<TH1D*> v_MET_Diff_Ref_y;
261 std::vector<TH1D*> v_MET_Diff_Ref_phi;
262 std::vector<TH1D*> v_MET_Diff_Ref_sum;
264 for(
const auto& term :
m_terms) {
265 v_MET_Ref.push_back(
new TH1D((name_met +
"_" + term).c_str(), (name_met +
" " +
m_names[term] +
"; E_{T}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinp, 0., suptmi) );
266 v_MET_Ref_x.push_back(
new TH1D((name_met +
"_" + term +
"_x").c_str(), (name_met +
" " +
m_names[term] +
" x; E_{x}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
267 v_MET_Ref_y.push_back(
new TH1D((name_met +
"_" + term +
"_y").c_str(), (name_met +
" " +
m_names[term] +
" y; E_{y}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
268 v_MET_Ref_phi.push_back(
new TH1D((name_met +
"_" + term +
"_phi").c_str(), (name_met +
" " +
m_names[term] +
" phi; #Phi; Entries / 0.1").c_str(), nbinphi,-binphi,binphi) );
269 v_MET_Ref_sum.push_back(
new TH1D((name_met +
"_" + term +
"_sum").c_str(), (name_met +
" " +
m_names[term] +
" sum; E_{T}^{sum} [GeV]; Entries / 25 GeV").c_str(), nbinE, lowET, suET) );
270 m_dir_met.push_back(
"MET/" + name_met +
"/Terms/" + term +
"/");
272 std::size_t n = v_MET_Ref.size();
279 for(std::size_t i = 0; i < n; ++i) {
287 name_sub = name_met +
"/Cumulative";
288 v_MET_Cumu_Ref.push_back(
new TH1D((name_met +
"_Cumulative_FinalClus").c_str(), (name_met +
" CST MET cumulative; E_{T}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinp, 0., suptmi) );
289 v_MET_Cumu_Ref.push_back(
new TH1D((name_met +
"_Cumulative_FinalTrk").c_str(), (name_met +
" TST MET cumulative; E_{T}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinp, 0., suptmi) );
293 for(std::vector<TH1D*>::size_type i = 0; i < v_MET_Cumu_Ref.size(); ++i) {
297 name_sub = name_met +
"/Residuals";
298 v_MET_Resolution_Ref.push_back(
new TH1D((name_met +
"_Resolution_FinalClus_x").c_str(), (
"x-Residual of CST MET in " + name_met +
"; #Delta(E_{T,CST}^{miss}, E_{T,truth}^{miss})_{x} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
299 v_MET_Resolution_Ref.push_back(
new TH1D((name_met +
"_Resolution_FinalClus_y").c_str(), (
"y-Residual of CST MET in " + name_met +
"; #Delta(E_{T,CST}^{miss}, E_{T,truth}^{miss})_{y} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
300 v_MET_Resolution_Ref.push_back(
new TH1D((name_met +
"_Resolution_FinalTrk_x").c_str(), (
"x-Residual of TST MET in " + name_met +
"; #Delta(E_{T,TST}^{miss}, E_{T,truth}^{miss})_{x} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
301 v_MET_Resolution_Ref.push_back(
new TH1D((name_met +
"_Resolution_FinalTrk_y").c_str(), (
"y-Residual of TST MET in " + name_met +
"; #Delta(E_{T,TST}^{miss}, E_{T,truth}^{miss})_{y} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
305 for(std::vector<TH1D*>::size_type i = 0; i < v_MET_Resolution_Ref.size(); ++i) {
309 name_sub = name_met +
"/Significance";
310 v_MET_Significance_Ref.push_back(
new TH1D((name_met +
"_Significance_FinalClus").c_str(), (
"MET / sqrt(sumet) for " + name_met +
" CST; MET/#sqrt{SET} [#sqrt{GeV}]; Entries / 0.25 #sqrt{GeV}").c_str(), nbinp, 0., 25.) );
311 v_MET_Significance_Ref.push_back(
new TH1D((name_met +
"_Significance_FinalTrk").c_str(), (
"MET / sqrt(sumet) for " + name_met +
" TST; MET/#sqrt{SET} [#sqrt{GeV}]; Entries / 0.25 #sqrt{GeV}").c_str(), nbinp, 0., 25.) );
315 for(std::vector<TH1D*>::size_type i = 0; i < v_MET_Significance_Ref.size(); ++i) {
319 name_sub = name_met +
"/dPhi";
320 v_MET_dPhi_Ref.push_back(
new TH1D((name_met +
"_dPhi_leadJetMET_FinalClus").c_str(), (
"MET deltaPhi vs leading jet for " + name_met +
" CST; #Delta#Phi(leadJet, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
321 v_MET_dPhi_Ref.push_back(
new TH1D((name_met +
"_dPhi_subleadJetMET_FinalClus").c_str(), (
"MET deltaPhi vs subleading jet for " + name_met +
" CST; #Delta#Phi(subleadJet, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
322 v_MET_dPhi_Ref.push_back(
new TH1D((name_met +
"_dPhi_leadLepMET_FinalClus").c_str(), (
"MET deltaPhi vs leading lepton for " + name_met +
" CST; #Delta#Phi(leadLep, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
323 v_MET_dPhi_Ref.push_back(
new TH1D((name_met +
"_dPhi_leadJetMET_FinalTrk").c_str(), (
"MET deltaPhi vs leading jet for " + name_met +
" TST; #Delta#Phi(leadJet, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
324 v_MET_dPhi_Ref.push_back(
new TH1D((name_met +
"_dPhi_subleadJetMET_FinalTrk").c_str(), (
"MET deltaPhi vs subleading jet for " + name_met +
" TST; #Delta#Phi(subleadJet, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
325 v_MET_dPhi_Ref.push_back(
new TH1D((name_met +
"_dPhi_leadLepMET_FinalTrk").c_str(), (
"MET deltaPhi vs leading lepton for " + name_met +
" TST; #Delta#Phi(leadLep, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
329 for(std::vector<TH1D*>::size_type i = 0; i < v_MET_dPhi_Ref.size(); ++i) {
333 name_sub = name_met +
"/Correlations";
335 v_MET_CorrFinalClus_Ref.reserve(corrClus_names.size());
337 for(
const auto& it : corrClus_names) {
338 v_MET_CorrFinalClus_Ref.push_back(
new TH2D((name_met +
"_" + it +
"_FinalClus").c_str(), (name_met +
" " +
m_names[it] +
" vs. CST MET; E_{T," + it +
"}^{miss} [GeV]; E_{T,CST}^{miss} [GeV]; Entries").c_str(), nbinp, 0., suptmi, nbinp, 0., suptmi) );
340 v_MET_CorrFinalTrk_Ref.reserve(corrTrk_names.size());
342 for(
const auto& it : corrTrk_names) {
343 v_MET_CorrFinalTrk_Ref.push_back(
new TH2D((name_met +
"_" + it +
"_FinalTrk").c_str(), (name_met +
" " +
m_names[it] +
" vs. TST MET; E_{T," + it +
"}^{miss} [GeV]; E_{T,TST}^{miss} [GeV]; Entries").c_str(), nbinp, 0., suptmi, nbinp, 0., suptmi) );
349 for(std::vector<TH2D*>::size_type i = 0; i < v_MET_CorrFinalTrk_Ref.size(); ++i) {
352 for(std::vector<TH2D*>::size_type i = 0; i < v_MET_CorrFinalClus_Ref.size(); ++i) {
358 for(
const auto& it : sum_names) {
359 v_MET_Diff_Ref.push_back(
new TH1D((name_met +
"_Diff_" + it).c_str(), (
"MET_Diff " +
m_names[it] +
" in " + name_met +
"; E_{T}^{miss} - #Sigma p_{T} [GeV]; Entries / 3 GeV").c_str(), nbinpxy, -150, 150));
360 v_MET_Diff_Ref_x.push_back(
new TH1D((name_met +
"_Diff_" + it +
"_x").c_str(), (
"MET_Diff x " +
m_names[it] +
" in " + name_met +
"; E_{x}^{miss} - #Sigma p_{x} [GeV]; Entries / 3 GeV").c_str(), nbinpxy, -150, 150) );
361 v_MET_Diff_Ref_y.push_back(
new TH1D((name_met +
"_Diff_" + it +
"_y").c_str(), (
"MET_Diff y " +
m_names[it] +
" in " + name_met +
"; E_{y}^{miss} - #Sigma p_{y} [GeV]; Entries / 3 GeV").c_str(), nbinpxy, -150, 150) );
362 v_MET_Diff_Ref_phi.push_back(
new TH1D((name_met +
"_Diff_" + it +
"_phi").c_str(), (
"MET_Diff phi " +
m_names[it] +
" in " + name_met +
"; #Delta#Phi(E_{T}^{miss},#Sigma p_{T}); Entries / 0.1").c_str(), nbinphi,-binphi,binphi) );
363 v_MET_Diff_Ref_sum.push_back(
new TH1D((name_met +
"_Diff_" + it +
"_sum").c_str(), (
"MET_Diff sumet " +
m_names[it] +
" in " + name_met +
"; E_{T}^{sum} - #Sigma |p_{T}| [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -250, 250) );
364 m_dir_met.push_back(
"MET/" + name_met +
"/Differences/" + it +
"/");
366 n = v_MET_Diff_Ref.size();
373 for(std::size_t i = 0; i < n; ++i) {
386 name_met =
"MET_Rebuilt_" +
type;
388 std::vector<TH1D*> v_MET_Reb;
389 std::vector<TH1D*> v_MET_Reb_x;
390 std::vector<TH1D*> v_MET_Reb_y;
391 std::vector<TH1D*> v_MET_Reb_phi;
392 std::vector<TH1D*> v_MET_Reb_sum;
393 std::vector<TH1D*> v_MET_Cumu_Reb;
394 std::vector<TH1D*> v_MET_Resolution_Reb;
395 std::vector<TH1D*> v_MET_Significance_Reb;
396 std::vector<TH1D*> v_MET_dPhi_Reb;
397 std::vector<TH2D*> v_MET_CorrFinalTrk_Reb;
398 std::vector<TH2D*> v_MET_CorrFinalClus_Reb;
399 std::vector<TH1D*> v_MET_Diff_Reb;
400 std::vector<TH1D*> v_MET_Diff_Reb_x;
401 std::vector<TH1D*> v_MET_Diff_Reb_y;
402 std::vector<TH1D*> v_MET_Diff_Reb_phi;
403 std::vector<TH1D*> v_MET_Diff_Reb_sum;
405 for(
const auto& term :
m_terms) {
406 v_MET_Reb.push_back(
new TH1D((name_met +
"_" + term).c_str(), (name_met +
" " +
m_names[term] +
"; E_{T}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinp, 0., suptmi) );
407 v_MET_Reb_x.push_back(
new TH1D((name_met +
"_" + term +
"_x").c_str(), (name_met +
" " +
m_names[term] +
" x; E_{x}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
408 v_MET_Reb_y.push_back(
new TH1D((name_met +
"_" + term +
"_y").c_str(), (name_met +
" " +
m_names[term] +
" y; E_{y}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
409 v_MET_Reb_phi.push_back(
new TH1D((name_met +
"_" + term +
"_phi").c_str(), (name_met +
" " +
m_names[term] +
" phi; #Phi; Entries / 0.1").c_str(), nbinphi,-binphi,binphi) );
410 v_MET_Reb_sum.push_back(
new TH1D((name_met +
"_" + term +
"_sum").c_str(), (name_met +
" " +
m_names[term] +
" sum; E_{T}^{sum} [GeV]; Entries / 25 GeV").c_str(), nbinE, lowET, suET) );
411 m_dir_met.push_back(
"MET/" + name_met +
"/Terms/" + term +
"/");
413 std::size_t n = v_MET_Reb.size();
420 for(std::size_t i = 0; i < n; ++i) {
428 name_sub = name_met +
"/Cumulative";
429 v_MET_Cumu_Reb.push_back(
new TH1D((name_met +
"_Cumulative_FinalClus").c_str(), (name_met +
" CST MET cumulative; E_{T}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinp, 0., suptmi) );
430 v_MET_Cumu_Reb.push_back(
new TH1D((name_met +
"_Cumulative_FinalTrk").c_str(), (name_met +
" TST MET cumulative; E_{T}^{miss} [GeV]; Entries / 5 GeV").c_str(), nbinp, 0., suptmi) );
434 for(std::vector<TH1D*>::size_type i = 0; i < v_MET_Cumu_Reb.size(); ++i) {
438 name_sub = name_met +
"/Residuals";
439 v_MET_Resolution_Reb.push_back(
new TH1D((name_met +
"_Resolution_FinalClus_x").c_str(), (
"x-Residual of CST MET in " + name_met +
"; #Delta(E_{T,CST}^{miss}, E_{T,truth}^{miss})_{x} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
440 v_MET_Resolution_Reb.push_back(
new TH1D((name_met +
"_Resolution_FinalClus_y").c_str(), (
"y-Residual of CST MET in " + name_met +
"; #Delta(E_{T,CST}^{miss}, E_{T,truth}^{miss})_{y} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
441 v_MET_Resolution_Reb.push_back(
new TH1D((name_met +
"_Resolution_FinalTrk_x").c_str(), (
"x-Residual of TST MET in " + name_met +
"; #Delta(E_{T,TST}^{miss}, E_{T,truth}^{miss})_{x} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
442 v_MET_Resolution_Reb.push_back(
new TH1D((name_met +
"_Resolution_FinalTrk_y").c_str(), (
"y-Residual of TST MET in " + name_met +
"; #Delta(E_{T,TST}^{miss}, E_{T,truth}^{miss})_{y} [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -suptmixy, suptmixy) );
445 for(std::vector<TH1D*>::size_type i = 0; i < v_MET_Resolution_Reb.size(); ++i) {
449 name_sub = name_met +
"/Significance";
450 v_MET_Significance_Reb.push_back(
new TH1D((name_met +
"_Significance_FinalClus").c_str(), (
"MET / sqrt(sumet) for " + name_met +
" CST; MET/#sqrt{SET} [#sqrt{GeV}]; Entries / 0.25 #sqrt{GeV}").c_str(), nbinp, 0., 25.) );
451 v_MET_Significance_Reb.push_back(
new TH1D((name_met +
"_Significance_FinalTrk").c_str(), (
"MET / sqrt(sumet) for " + name_met +
" TST; MET/sqrt{SET} [#sqrt{GeV}]; Entries / 0.25 #sqrt{GeV}").c_str(), nbinp, 0., 25.) );
455 for(std::vector<TH1D*>::size_type i = 0; i < v_MET_Significance_Reb.size(); ++i) {
459 name_sub = name_met +
"/dPhi";
460 v_MET_dPhi_Reb.push_back(
new TH1D((name_met +
"_dPhi_leadJetMET_FinalClus").c_str(), (
"MET deltaPhi vs leading jet for " + name_met +
" CST; #Delta#Phi(leadJet, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
461 v_MET_dPhi_Reb.push_back(
new TH1D((name_met +
"_dPhi_subleadJetMET_FinalClus").c_str(), (
"MET deltaPhi vs subleading jet for " + name_met +
" CST; #Delta#Phi(subleadJet, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
462 v_MET_dPhi_Reb.push_back(
new TH1D((name_met +
"_dPhi_leadLepMET_FinalClus").c_str(), (
"MET deltaPhi vs leading lepton for " + name_met +
" CST; #Delta#Phi(leadLep, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
463 v_MET_dPhi_Reb.push_back(
new TH1D((name_met +
"_dPhi_leadJetMET_FinalTrk").c_str(), (
"MET deltaPhi vs leading jet for " + name_met +
" TST; #Delta#Phi(leadJet, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
464 v_MET_dPhi_Reb.push_back(
new TH1D((name_met +
"_dPhi_subleadJetMET_FinalTrk").c_str(), (
"MET deltaPhi vs subleading jet for " + name_met +
" TST; #Delta#Phi(subleadJet, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
465 v_MET_dPhi_Reb.push_back(
new TH1D((name_met +
"_dPhi_leadLepMET_FinalTrk").c_str(), (
"MET deltaPhi vs leading lepton for " + name_met +
" TST; #Delta#Phi(leadLep, MET); Entries / 0.05").c_str(), nbinphi, 0., binphi) );
469 for(std::vector<TH1D*>::size_type i = 0; i < v_MET_dPhi_Reb.size(); ++i) {
473 name_sub = name_met +
"/Correlations";
474 v_MET_CorrFinalClus_Reb.reserve(corrClus_names.size());
476 for(
const auto& it : corrClus_names) {
477 v_MET_CorrFinalClus_Reb.push_back(
new TH2D((name_met +
"_" + it +
"_FinalClus").c_str(), (name_met +
" " +
m_names[it] +
" vs. CST MET; E_{T," + it +
"}^{miss} [GeV]; E_{T,CST}^{miss} [GeV]; Entries").c_str(), nbinp, 0., suptmi, nbinp, 0., suptmi) );
479 v_MET_CorrFinalTrk_Reb.reserve(corrTrk_names.size());
481 for(
const auto& it : corrTrk_names) {
482 v_MET_CorrFinalTrk_Reb.push_back(
new TH2D((name_met +
"_" + it +
"_FinalTrk").c_str(), (name_met +
" " +
m_names[it] +
" vs. TST MET; E_{T," + it +
"}^{miss} [GeV]; E_{T,TST}^{miss} [GeV]; Entries").c_str(), nbinp, 0., suptmi, nbinp, 0., suptmi) );
488 for(std::vector<TH2D*>::size_type i = 0; i < v_MET_CorrFinalTrk_Reb.size(); ++i) {
491 for(std::vector<TH2D*>::size_type i = 0; i < v_MET_CorrFinalClus_Reb.size(); ++i) {
497 for(
const auto& it : sum_names) {
498 v_MET_Diff_Reb.push_back(
new TH1D((name_met +
"_Diff_" + it).c_str(), (
"MET_Diff " +
m_names[it] +
" in " + name_met +
"; E_{T}^{miss} - #Sigma p_{T} [GeV]; Entries / 3 GeV").c_str(), nbinpxy, -150, 150));
499 v_MET_Diff_Reb_x.push_back(
new TH1D((name_met +
"_Diff_" + it +
"_x").c_str(), (
"MET_Diff x " +
m_names[it] +
" in " + name_met +
"; E_{x}^{miss} - #Sigma p_{x} [GeV]; Entries / 3 GeV").c_str(), nbinpxy, -150, 150) );
500 v_MET_Diff_Reb_y.push_back(
new TH1D((name_met +
"_Diff_" + it +
"_y").c_str(), (
"MET_Diff y " +
m_names[it] +
" in " + name_met +
"; E_{y}^{miss} - #Sigma p_{y} [GeV]; Entries / 3 GeV").c_str(), nbinpxy, -150, 150) );
501 v_MET_Diff_Reb_phi.push_back(
new TH1D((name_met +
"_Diff_" + it +
"_phi").c_str(), (
"MET_Diff phi " +
m_names[it] +
" in " + name_met +
"; #Delta#Phi(E_{T}^{miss}, #Sigma p_{T}); Entries / 0.1").c_str(), nbinphi,-binphi,binphi) );
502 v_MET_Diff_Reb_sum.push_back(
new TH1D((name_met +
"_Diff_" + it +
"_sum").c_str(), (
"MET_Diff sumet " +
m_names[it] +
" in " + name_met +
"; E_{T}^{sum} - #Sigma |p_{T}| [GeV]; Entries / 5 GeV").c_str(), nbinpxy, -250, 250) );
503 m_dir_met.push_back(
"MET/" + name_met +
"/Differences/" + it +
"/");
505 n = v_MET_Diff_Reb.size();
512 for(std::size_t i = 0; i < n; ++i) {
524 std::string name_met =
"MET_Track";
525 std::string dir =
"MET/" + name_met +
"/";
528 sub_dir = dir +
"Track/";
535 sub_dir = dir +
"PVTrack_Nominal/";
542 sub_dir = dir +
"PVTrack_Pileup/";
553 std::string name_met =
"MET_Calo";
554 std::string dir =
"MET/" + name_met +
"/";
564 return StatusCode::SUCCESS;
571 return StatusCode::SUCCESS;
576 return StatusCode::SUCCESS;
590 return StatusCode::FAILURE;
598 ATH_MSG_ERROR (
"Failed to retrieve Muon container. Exiting." );
599 return StatusCode::FAILURE;
603 for(
const auto mu : *muons) {
613 ATH_MSG_ERROR (
"Failed to retrieve Electron container. Exiting." );
614 return StatusCode::FAILURE;
617 bool is_electron = 0;
618 for(
const auto el : *electrons) {
628 ATH_MSG_ERROR (
"Failed to retrieve Photon container. Exiting." );
629 return StatusCode::FAILURE;
632 for(
const auto ph : *photons) {
642 return StatusCode::SUCCESS;
645 for(
const auto tau : *
taus) {
662 for(pho_itr = metPhotons.
begin(); pho_itr != metPhotons.
end(); ++pho_itr ) {
663 TLorentzVector phtlv = (*pho_itr)->p4();
665 for(ele_itr = metElectrons.
begin(); ele_itr != metElectrons.
end(); ++ele_itr) {
666 if(phtlv.DeltaR((*ele_itr)->p4()) < 0.2) {
680 for(taujet_itr = metTaus.
begin(); taujet_itr != metTaus.
end(); ++taujet_itr ) {
681 TLorentzVector tautlv = (*taujet_itr)->p4();
683 for(ele_itr = metElectrons.
begin(); ele_itr != metElectrons.
end(); ++ele_itr) {
684 if(tautlv.DeltaR((*ele_itr)->p4()) < 0.2) {
689 for(pho_itr = metPhotonsOR.
begin(); pho_itr != metPhotonsOR.
end(); ++pho_itr) {
690 if(tautlv.DeltaR((*pho_itr)->p4()) < 0.2) {
702 TLorentzVector el_tlv;
704 for(ele_itr = metElectrons.
begin(); ele_itr != metElectrons.
end(); ++ele_itr ) {
705 el_tlv += (*ele_itr)->p4();
706 sum_el += (*ele_itr)->pt();
709 TLorentzVector mu_tlv;
711 for(mu_itr = metMuons.
begin(); mu_itr != metMuons.
end(); ++mu_itr ) {
712 mu_tlv += (*mu_itr)->p4();
713 sum_mu += (*mu_itr)->pt();
716 TLorentzVector tau_tlv;
718 for(taujet_itr = metTausOR.
begin(); taujet_itr != metTausOR.
end(); ++taujet_itr ) {
719 tau_tlv += (*taujet_itr)->p4();
720 sum_tau += (*taujet_itr)->pt();
723 TLorentzVector photon_tlv;
724 double sum_photon = 0;
725 for(pho_itr = metPhotonsOR.
begin(); pho_itr != metPhotonsOR.
end(); ++pho_itr ) {
726 photon_tlv += (*pho_itr)->p4();
727 sum_photon += (*pho_itr)->pt();
731 ToolHandle<IJetUpdateJvt>* jvtTool(
nullptr);
732 double JvtCut = 0.59;
733 if (
type ==
"AntiKt4EMPFlow"){
737 else if (
type ==
"AntiKt4EMTopo"){
741 if(jvtTool ==
nullptr){
743 return StatusCode::FAILURE;
747 std::string name_jet =
type +
"Jets";
751 ATH_MSG_ERROR (
"Failed to retrieve Jet container: " << name_jet <<
". Exiting." );
752 return StatusCode::FAILURE;
755 for(
auto jet : *jets) {
756 float newjvt = (*jvtTool)->updateJvt(*
jet);
757 NewJvtDec(*
jet) = newjvt;
760 for(
const auto jet : *jets) {
766 for(jetc_itr = metJets.
begin(); jetc_itr != metJets.
end(); ++jetc_itr ) {
767 TLorentzVector jettlv = (*jetc_itr)->p4();
769 for(ele_itr = metElectrons.
begin(); ele_itr != metElectrons.
end(); ++ele_itr) {
770 if(jettlv.DeltaR((*ele_itr)->p4()) < 0.2) {
775 for(pho_itr = metPhotonsOR.
begin(); pho_itr != metPhotonsOR.
end(); ++pho_itr) {
776 if(jettlv.DeltaR((*pho_itr)->p4()) < 0.2) {
781 for(taujet_itr = metTausOR.
begin(); taujet_itr != metTausOR.
end(); ++taujet_itr) {
782 if(jettlv.DeltaR((*taujet_itr)->p4()) < 0.2) {
793 TLorentzVector jet_tlv;
795 for(jetc_itr = metJetsOR.
begin(); jetc_itr != metJetsOR.
end(); ++jetc_itr ) {
796 jet_tlv += (*jetc_itr)->p4();
797 sum_jet += (*jetc_itr)->pt();
801 std::string name_met =
"MET_Reference_" +
type;
811 return StatusCode::FAILURE;
815 for(
const auto it : *met_Ref) {
816 const std::string&
name = it->name();
817 if(
name ==
"RefEle"){
824 if(
name ==
"RefGamma"){
831 if(
name ==
"RefTau"){
845 if(
name ==
"RefJet"){
852 if(
name ==
"SoftClus"){
859 if(
name ==
"PVSoftTrk"){
866 if(
name ==
"FinalTrk"){
873 if(
name ==
"FinalClus"){
886 if(
evtStore()->record(met_Reb,(
"MET_Rebuilt"+
type).c_str()).isFailure() ) {
888 return StatusCode::FAILURE;
891 if(
evtStore()->record(met_RebAux,(
"MET_Rebuilt"+
type+
"Aux").c_str()).isFailure() ) {
893 return StatusCode::FAILURE;
895 met_Reb->setStore(met_RebAux);
902 return StatusCode::SUCCESS;
908 return StatusCode::SUCCESS;
919 return StatusCode::FAILURE;
925 return StatusCode::FAILURE;
931 return StatusCode::FAILURE;
937 return StatusCode::FAILURE;
941 if( (*m_metmaker)->rebuildJetMET(
"RefJet",
"SoftClus",
"PVSoftTrk", met_Reb, jets, coreMet, metHelper,
true).isFailure() ) {
943 return StatusCode::FAILURE;
946 if((*met_Reb)[
"PVSoftTrk"]) trksource = (*met_Reb)[
"PVSoftTrk"]->source();
947 if( met::buildMETSum(
"FinalTrk", met_Reb, trksource).isFailure() ){
949 return StatusCode::FAILURE;
955 if((*met_Reb)[
"SoftClus"]) clsource = (*met_Reb)[
"SoftClus"]->source();
956 if( met::buildMETSum(
"FinalClus", met_Reb, clsource).isFailure() ) {
958 return StatusCode::FAILURE;
962 for(
const auto it : *met_Reb) {
963 std::string
name = it->name();
964 if(
name ==
"RefEle"){
971 if(
name ==
"RefGamma"){
978 if(
name ==
"RefTau"){
992 if(
name ==
"RefJet"){
999 if(
name ==
"SoftClus"){
1006 if(
name ==
"PVSoftTrk"){
1013 if(
name ==
"FinalTrk"){
1020 if(
name ==
"FinalClus"){
1032 double leadPt = 0., subleadPt = 0., leadPhi = 0., subleadPhi = 0.;
1034 for (
auto jet_itr = jets->begin(); jet_itr != jets->end(); ++jet_itr) {
1035 if ((*jet_itr)->pt() > leadPt &&
Accept(*jet_itr,JvtCut,jvtTool)) {
1037 subleadPhi = leadPhi;
1038 leadPt = (*jet_itr)->pt();
1039 leadPhi = (*jet_itr)->phi();
1041 else if ((*jet_itr)->pt() > subleadPt &&
Accept(*jet_itr,JvtCut,jvtTool)) {
1042 subleadPt = (*jet_itr)->pt();
1043 subleadPhi = (*jet_itr)->phi();
1049 const auto * pClus = (*met_Ref)[
"FinalClus"];
1050 const auto * pTrk = (*met_Ref)[
"FinalTrk"];
1051 if (!pTrk or !pClus){
1053 return StatusCode::FAILURE;
1056 dPhiRef.at(0)->Fill( -
remainder( leadPhi - pClus->phi(), 2*
M_PI ), weight );
1057 dPhiRef.at(1)->Fill( -
remainder( subleadPhi - pClus->phi(), 2*
M_PI ), weight );
1058 dPhiRef.at(3)->Fill( -
remainder( leadPhi - pTrk->phi(), 2*
M_PI ), weight );
1059 dPhiRef.at(4)->Fill( -
remainder( subleadPhi - pTrk->phi(), 2*
M_PI ), weight );
1062 const auto * pClus = (*met_Reb)[
"FinalClus"];
1063 const auto * pTrk = (*met_Reb)[
"FinalTrk"];
1064 if (!pTrk or !pClus){
1066 return StatusCode::FAILURE;
1068 dPhiReb.at(0)->Fill( -
remainder( leadPhi - pClus->phi(), 2*
M_PI ), weight );
1069 dPhiReb.at(1)->Fill( -
remainder( subleadPhi - pClus->phi(), 2*
M_PI ), weight );
1070 dPhiReb.at(3)->Fill( -
remainder( leadPhi - pTrk->phi(), 2*
M_PI ), weight );
1071 dPhiReb.at(4)->Fill( -
remainder( subleadPhi - pTrk->phi(), 2*
M_PI ), weight );
1073 leadPt = 0.; leadPhi = 0.;
1078 for( ; muon_itr != muon_end; ++muon_itr ) {
1079 if((*muon_itr)->pt() > leadPt) {
1080 leadPt = (*muon_itr)->pt();
1081 leadPhi = (*muon_itr)->phi();
1088 for( ; electron_itr != electron_end; ++electron_itr ) {
1089 if((*electron_itr)->pt() > leadPt) {
1090 leadPt = (*electron_itr)->pt();
1091 leadPhi = (*electron_itr)->phi();
1105 for(
const auto it : *met_Ref) {
1106 const std::string&
name = it->name();
1107 if(
name ==
"RefEle"){
1111 if(
name ==
"RefGamma"){
1115 if(
name ==
"RefTau"){
1119 if(
name ==
"Muons"){
1123 if(
name ==
"RefJet"){
1127 if(
name ==
"PVSoftTrk"){
1130 if(
name ==
"SoftClus"){
1138 for(
const auto it : *met_Reb) {
1139 std::string
name = it->name();
1140 if(
name ==
"RefEle"){
1144 if(
name ==
"RefGamma"){
1148 if(
name ==
"RefTau"){
1152 if(
name ==
"Muons"){
1156 if(
name ==
"RefJet"){
1160 if(
name ==
"PVSoftTrk"){
1163 if(
name ==
"SoftClus"){
1172 (
m_MET_Resolution_Ref[
type]).at(0)->Fill(((*met_Ref)[
"FinalClus"]->mpx()-(*met_Truth)[
"NonInt"]->mpx())/1000., weight);
1173 (
m_MET_Resolution_Ref[
type]).at(1)->Fill(((*met_Ref)[
"FinalClus"]->mpy()-(*met_Truth)[
"NonInt"]->mpy())/1000., weight);
1174 (
m_MET_Resolution_Ref[
type]).at(2)->Fill(((*met_Ref)[
"FinalTrk"]->mpx()-(*met_Truth)[
"NonInt"]->mpx())/1000., weight);
1175 (
m_MET_Resolution_Ref[
type]).at(3)->Fill(((*met_Ref)[
"FinalTrk"]->mpy()-(*met_Truth)[
"NonInt"]->mpy())/1000., weight);
1177 (
m_MET_Resolution_Reb[
type]).at(0)->Fill(((*met_Reb)[
"FinalClus"]->mpx()-(*met_Truth)[
"NonInt"]->mpx())/1000., weight);
1178 (
m_MET_Resolution_Reb[
type]).at(1)->Fill(((*met_Reb)[
"FinalClus"]->mpy()-(*met_Truth)[
"NonInt"]->mpy())/1000., weight);
1179 (
m_MET_Resolution_Reb[
type]).at(2)->Fill(((*met_Reb)[
"FinalTrk"]->mpx()-(*met_Truth)[
"NonInt"]->mpx())/1000., weight);
1180 (
m_MET_Resolution_Reb[
type]).at(3)->Fill(((*met_Reb)[
"FinalTrk"]->mpy()-(*met_Truth)[
"NonInt"]->mpy())/1000., weight);
1185 if(
const auto sumet = (*met_Reb)[
"FinalClus"]->sumet(); sumet > 0){
1188 if(
const auto sumet = (*met_Reb)[
"FinalTrk"]->sumet(); sumet > 0){
1192 TLorentzVector target_tlv;
1196 if( (*met_Ref)[
"FinalClus"]->sumet() > 0) (
m_MET_Significance_Ref[
type]).at(0)->Fill((*met_Ref)[
"FinalClus"]->
met()/sqrt((*met_Ref)[
"FinalClus"]->sumet()*1000.), weight);
1197 if( (*met_Ref)[
"FinalTrk"]->sumet() > 0) (
m_MET_Significance_Ref[
type]).at(1)->Fill((*met_Ref)[
"FinalTrk"]->
met()/sqrt((*met_Ref)[
"FinalTrk"]->sumet()*1000.), weight);
1200 for(
const auto it : *met_Ref) {
1201 if(it->name() ==
"RefEle"){
1202 if(is_electron or (it->sumet() > 0)){
1203 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1211 if(it->name() ==
"RefGamma"){
1212 if(is_photon or (it->sumet() > 0)){
1213 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1214 (
m_MET_Diff_Ref[
type]).at(1)->Fill((target_tlv.Pt() - photon_tlv.Pt())/1000., weight);
1221 if(it->name() ==
"RefTau"){
1222 if(is_tau or (it->sumet() > 0)){
1223 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1231 if(it->name() ==
"Muons"){
1232 if(is_muon or (it->sumet() > 0)){
1233 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1241 if(it->name() ==
"RefJet"){
1242 if(is_jet or (it->sumet() > 0)){
1243 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1255 TLorentzVector jetReb_tlv;
1256 double sum_jetReb = 0;
1257 for(
const auto jet : metJetsOR) {
1259 jetReb_tlv +=
jet->p4();
1260 sum_jetReb +=
jet->pt();
1264 for(
const auto it : *met_Reb) {
1265 if(it->name() ==
"RefEle"){
1266 if(is_electron or (it->sumet() > 0)){
1267 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1275 if(it->name() ==
"RefGamma"){
1276 if(is_photon or (it->sumet() > 0)){
1277 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1278 (
m_MET_Diff_Reb[
type]).at(1)->Fill((target_tlv.Pt() - photon_tlv.Pt())/1000., weight);
1285 if(it->name() ==
"RefTau"){
1286 if(is_tau or (it->sumet() > 0)){
1287 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1295 if(it->name() ==
"Muons"){
1296 if(is_muon or (it->sumet() > 0)){
1297 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1305 if(it->name() ==
"RefJet"){
1306 if(is_jet or (it->sumet() > 0)){
1307 target_tlv.SetPxPyPzE(-it->mpx(), -it->mpy(), 0, it->met());
1308 (
m_MET_Diff_Reb[
type]).at(4)->Fill((target_tlv.Pt() - jetReb_tlv.Pt())/1000., weight);
1317 if(
type ==
"AntiKt4EMTopo") {
1322 if(
evtStore()->record(met_Calo,(
"MET_Calo"+
type).c_str()).isFailure() ) {
1324 return StatusCode::FAILURE;
1327 if(
evtStore()->record(met_CaloAux,(
"MET_Calo"+
type+
"Aux").c_str()).isFailure() ) {
1329 return StatusCode::FAILURE;
1331 met_Calo->setStore(met_CaloAux);
1333 if( (*m_metmaker)->rebuildJetMET(
"RefJet",
"SoftClus",
"PVSoftTrk", met_Calo, metJetsEmpty.
asDataVector(), coreMet, metHelper,
true).isFailure() ) {
1335 return StatusCode::FAILURE;
1338 if((*met_Calo)[
"SoftClus"]) clsource = (*met_Calo)[
"SoftClus"]->source();
1339 if( met::buildMETSum(
"FinalClus", met_Calo, clsource).isFailure() ) {
1341 return StatusCode::FAILURE;
1344 m_MET_Calo->Fill((*met_Calo)[
"FinalClus"]->
met()/1000., weight);
1345 m_MET_Calo_x->Fill((*met_Calo)[
"FinalClus"]->mpx()/1000., weight);
1346 m_MET_Calo_y->Fill((*met_Calo)[
"FinalClus"]->mpy()/1000., weight);
1348 m_MET_Calo_sum->Fill((*met_Calo)[
"FinalClus"]->sumet()/1000., weight);
1363 return StatusCode::FAILURE;
1370 m_MET_Track_x->Fill((*met_Track)[
"Track"]->mpx()/1000., weight);
1371 m_MET_Track_y->Fill((*met_Track)[
"Track"]->mpy()/1000., weight);
1377 for(
const auto vx : *vxCont) {
1378 int N = vx->index();
1379 const std::string
name =
"PVTrack_vx"+std::to_string(N);
1398 return StatusCode::SUCCESS;