21 #include "GaudiKernel/IToolSvc.h"
54 PhysValMET::PhysValMET(
const std::string&
type,
55 const std::string&
name,
56 const IInterface*
parent) :
120 m_names[
"RefEle"] =
"Electron term";
121 m_names[
"RefGamma"] =
"Photon term";
122 m_names[
"RefTau"] =
"Tau term";
123 m_names[
"Muons"] =
"Muon term";
124 m_names[
"RefJet"] =
"Jet term";
125 m_names[
"SoftClus"] =
"Cluster-based soft term";
126 m_names[
"PVSoftTrk"] =
"Track-based soft term (PV-matched)";
127 m_names[
"FinalTrk"] =
"Total MET with TST";
128 m_names[
"FinalClus"] =
"Total MET with CST";
129 m_names[
"Track"] =
"Track MET, loose selection";
130 m_names[
"PVTrack_Nominal"] =
"Track MET for highest sum p_{T}^{2} PV";
131 m_names[
"PVTrack_Pileup"] =
"Track MET for each pileup vertex";
134 m_types.emplace_back(
"AntiKt4EMTopo");
135 m_types.emplace_back(
"AntiKt4EMPFlow");
138 m_terms.emplace_back(
"RefEle");
139 m_terms.emplace_back(
"RefGamma");
140 m_terms.emplace_back(
"RefTau");
142 m_terms.emplace_back(
"RefJet");
143 m_terms.emplace_back(
"SoftClus");
144 m_terms.emplace_back(
"PVSoftTrk");
145 m_terms.emplace_back(
"FinalTrk");
146 m_terms.emplace_back(
"FinalClus");
191 return StatusCode::SUCCESS;
204 double suptmi = 500.;
205 double suptmixy = 250.;
206 double binphi = 3.15;
213 std::string name_met;
214 std::string name_sub;
215 std::vector<std::string> corrClus_names;
216 std::vector<std::string> corrTrk_names;
217 std::vector<std::string> sum_names;
220 corrClus_names.emplace_back(
"RefEle");
221 corrClus_names.emplace_back(
"RefGamma");
222 corrClus_names.emplace_back(
"RefTau");
223 corrClus_names.emplace_back(
"Muons");
224 corrClus_names.emplace_back(
"RefJet");
225 corrClus_names.emplace_back(
"SoftClus");
227 corrTrk_names.emplace_back(
"RefEle");
228 corrTrk_names.emplace_back(
"RefGamma");
229 corrTrk_names.emplace_back(
"RefTau");
230 corrTrk_names.emplace_back(
"Muons");
231 corrTrk_names.emplace_back(
"RefJet");
232 corrTrk_names.emplace_back(
"PVSoftTrk");
234 sum_names.emplace_back(
"RefEle");
235 sum_names.emplace_back(
"RefGamma");
236 sum_names.emplace_back(
"RefTau");
237 sum_names.emplace_back(
"Muons");
238 sum_names.emplace_back(
"RefJet");
243 name_met =
"MET_Reference_" +
type;
245 std::vector<TH1D*> v_MET_Ref;
246 std::vector<TH1D*> v_MET_Ref_x;
247 std::vector<TH1D*> v_MET_Ref_y;
248 std::vector<TH1D*> v_MET_Ref_phi;
249 std::vector<TH1D*> v_MET_Ref_sum;
250 std::vector<TH1D*> v_MET_Cumu_Ref;
251 std::vector<TH1D*> v_MET_Resolution_Ref;
252 std::vector<TH1D*> v_MET_Significance_Ref;
253 std::vector<TH1D*> v_MET_dPhi_Ref;
254 std::vector<TH2D*> v_MET_CorrFinalTrk_Ref;
255 std::vector<TH2D*> v_MET_CorrFinalClus_Ref;
256 std::vector<TH1D*> v_MET_Diff_Ref;
257 std::vector<TH1D*> v_MET_Diff_Ref_x;
258 std::vector<TH1D*> v_MET_Diff_Ref_y;
259 std::vector<TH1D*> v_MET_Diff_Ref_phi;
260 std::vector<TH1D*> v_MET_Diff_Ref_sum;
262 for(
const auto& term :
m_terms) {
263 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) );
264 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) );
265 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) );
266 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) );
267 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) );
268 m_dir_met.push_back(
"MET/" + name_met +
"/Terms/" + term +
"/");
277 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Ref.size(); ++
i) {
285 name_sub = name_met +
"/Cumulative";
286 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) );
287 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) );
291 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Cumu_Ref.size(); ++
i) {
295 name_sub = name_met +
"/Residuals";
296 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) );
297 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) );
298 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) );
299 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) );
303 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Resolution_Ref.size(); ++
i) {
307 name_sub = name_met +
"/Significance";
308 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.) );
309 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.) );
313 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Significance_Ref.size(); ++
i) {
317 name_sub = name_met +
"/dPhi";
318 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) );
319 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) );
320 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) );
321 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) );
322 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) );
323 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) );
327 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_dPhi_Ref.size(); ++
i) {
331 name_sub = name_met +
"/Correlations";
333 v_MET_CorrFinalClus_Ref.reserve(corrClus_names.size());
335 for(
const auto&
it : corrClus_names) {
336 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) );
338 v_MET_CorrFinalTrk_Ref.reserve(corrTrk_names.size());
340 for(
const auto&
it : corrTrk_names) {
341 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) );
347 for(std::vector<TH2D*>::size_type
i = 0;
i < v_MET_CorrFinalTrk_Ref.size(); ++
i) {
350 for(std::vector<TH2D*>::size_type
i = 0;
i < v_MET_CorrFinalClus_Ref.size(); ++
i) {
356 for(
const auto&
it : sum_names) {
357 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));
358 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) );
359 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) );
360 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) );
361 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) );
362 m_dir_met.push_back(
"MET/" + name_met +
"/Differences/" +
it +
"/");
371 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Diff_Ref.size(); ++
i) {
384 name_met =
"MET_Rebuilt_" +
type;
386 std::vector<TH1D*> v_MET_Reb;
387 std::vector<TH1D*> v_MET_Reb_x;
388 std::vector<TH1D*> v_MET_Reb_y;
389 std::vector<TH1D*> v_MET_Reb_phi;
390 std::vector<TH1D*> v_MET_Reb_sum;
391 std::vector<TH1D*> v_MET_Cumu_Reb;
392 std::vector<TH1D*> v_MET_Resolution_Reb;
393 std::vector<TH1D*> v_MET_Significance_Reb;
394 std::vector<TH1D*> v_MET_dPhi_Reb;
395 std::vector<TH2D*> v_MET_CorrFinalTrk_Reb;
396 std::vector<TH2D*> v_MET_CorrFinalClus_Reb;
397 std::vector<TH1D*> v_MET_Diff_Reb;
398 std::vector<TH1D*> v_MET_Diff_Reb_x;
399 std::vector<TH1D*> v_MET_Diff_Reb_y;
400 std::vector<TH1D*> v_MET_Diff_Reb_phi;
401 std::vector<TH1D*> v_MET_Diff_Reb_sum;
403 for(
const auto& term :
m_terms) {
404 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) );
405 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) );
406 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) );
407 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) );
408 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) );
409 m_dir_met.push_back(
"MET/" + name_met +
"/Terms/" + term +
"/");
418 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Reb.size(); ++
i) {
426 name_sub = name_met +
"/Cumulative";
427 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) );
428 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) );
432 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Cumu_Reb.size(); ++
i) {
436 name_sub = name_met +
"/Residuals";
437 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) );
438 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) );
439 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) );
440 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) );
443 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Resolution_Reb.size(); ++
i) {
447 name_sub = name_met +
"/Significance";
448 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.) );
449 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.) );
453 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Significance_Reb.size(); ++
i) {
457 name_sub = name_met +
"/dPhi";
458 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) );
459 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) );
460 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) );
461 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) );
462 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) );
463 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) );
467 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_dPhi_Reb.size(); ++
i) {
471 name_sub = name_met +
"/Correlations";
472 v_MET_CorrFinalClus_Reb.reserve(corrClus_names.size());
474 for(
const auto&
it : corrClus_names) {
475 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) );
477 v_MET_CorrFinalTrk_Reb.reserve(corrTrk_names.size());
479 for(
const auto&
it : corrTrk_names) {
480 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) );
486 for(std::vector<TH2D*>::size_type
i = 0;
i < v_MET_CorrFinalTrk_Reb.size(); ++
i) {
489 for(std::vector<TH2D*>::size_type
i = 0;
i < v_MET_CorrFinalClus_Reb.size(); ++
i) {
495 for(
const auto&
it : sum_names) {
496 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));
497 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) );
498 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) );
499 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) );
500 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) );
501 m_dir_met.push_back(
"MET/" + name_met +
"/Differences/" +
it +
"/");
510 for(std::vector<TH1D*>::size_type
i = 0;
i < v_MET_Diff_Reb.size(); ++
i) {
522 std::string name_met =
"MET_Track";
523 std::string
dir =
"MET/" + name_met +
"/";
526 sub_dir =
dir +
"Track/";
533 sub_dir =
dir +
"PVTrack_Nominal/";
540 sub_dir =
dir +
"PVTrack_Pileup/";
551 std::string name_met =
"MET_Calo";
552 std::string
dir =
"MET/" + name_met +
"/";
562 return StatusCode::SUCCESS;
571 return StatusCode::SUCCESS;
585 return StatusCode::FAILURE;
593 ATH_MSG_ERROR (
"Failed to retrieve Muon container. Exiting." );
594 return StatusCode::FAILURE;
598 for(
const auto&
mu : *muons) {
608 ATH_MSG_ERROR (
"Failed to retrieve Electron container. Exiting." );
609 return StatusCode::FAILURE;
612 bool is_electron = 0;
623 ATH_MSG_ERROR (
"Failed to retrieve Photon container. Exiting." );
624 return StatusCode::FAILURE;
627 for(
const auto& ph : *photons) {
637 return StatusCode::SUCCESS;
640 for(
const auto& tau : *taus) {
657 for(pho_itr = metPhotons.
begin(); pho_itr != metPhotons.
end(); ++pho_itr ) {
658 TLorentzVector phtlv = (*pho_itr)->p4();
660 for(ele_itr = metElectrons.
begin(); ele_itr != metElectrons.
end(); ++ele_itr) {
661 if(phtlv.DeltaR((*ele_itr)->p4()) < 0.2) {
675 for(taujet_itr = metTaus.
begin(); taujet_itr != metTaus.
end(); ++taujet_itr ) {
676 TLorentzVector tautlv = (*taujet_itr)->p4();
678 for(ele_itr = metElectrons.
begin(); ele_itr != metElectrons.
end(); ++ele_itr) {
679 if(tautlv.DeltaR((*ele_itr)->p4()) < 0.2) {
684 for(pho_itr = metPhotonsOR.
begin(); pho_itr != metPhotonsOR.
end(); ++pho_itr) {
685 if(tautlv.DeltaR((*pho_itr)->p4()) < 0.2) {
697 TLorentzVector el_tlv;
699 for(ele_itr = metElectrons.
begin(); ele_itr != metElectrons.
end(); ++ele_itr ) {
700 el_tlv += (*ele_itr)->p4();
701 sum_el += (*ele_itr)->pt();
704 TLorentzVector mu_tlv;
706 for(mu_itr = metMuons.
begin(); mu_itr != metMuons.
end(); ++mu_itr ) {
707 mu_tlv += (*mu_itr)->p4();
708 sum_mu += (*mu_itr)->pt();
711 TLorentzVector tau_tlv;
713 for(taujet_itr = metTausOR.
begin(); taujet_itr != metTausOR.
end(); ++taujet_itr ) {
714 tau_tlv += (*taujet_itr)->p4();
715 sum_tau += (*taujet_itr)->pt();
718 TLorentzVector photon_tlv;
719 double sum_photon = 0;
720 for(pho_itr = metPhotonsOR.
begin(); pho_itr != metPhotonsOR.
end(); ++pho_itr ) {
721 photon_tlv += (*pho_itr)->p4();
722 sum_photon += (*pho_itr)->pt();
726 ToolHandle<IJetUpdateJvt>* jvtTool(
nullptr);
727 double JvtCut = 0.59;
728 if (
type ==
"AntiKt4EMPFlow"){
732 else if (
type ==
"AntiKt4EMTopo"){
736 if(jvtTool ==
nullptr){
738 return StatusCode::FAILURE;
742 std::string name_jet =
type +
"Jets";
746 ATH_MSG_ERROR (
"Failed to retrieve Jet container: " << name_jet <<
". Exiting." );
747 return StatusCode::FAILURE;
750 float newjvt = (*jvtTool)->updateJvt(*
jet);
751 jet->auxdecor<
float>(
"NewJvt") = newjvt;
760 for(jetc_itr = metJets.
begin(); jetc_itr != metJets.
end(); ++jetc_itr ) {
761 TLorentzVector jettlv = (*jetc_itr)->p4();
763 for(ele_itr = metElectrons.
begin(); ele_itr != metElectrons.
end(); ++ele_itr) {
764 if(jettlv.DeltaR((*ele_itr)->p4()) < 0.2) {
769 for(pho_itr = metPhotonsOR.
begin(); pho_itr != metPhotonsOR.
end(); ++pho_itr) {
770 if(jettlv.DeltaR((*pho_itr)->p4()) < 0.2) {
775 for(taujet_itr = metTausOR.
begin(); taujet_itr != metTausOR.
end(); ++taujet_itr) {
776 if(jettlv.DeltaR((*taujet_itr)->p4()) < 0.2) {
787 TLorentzVector jet_tlv;
789 for(jetc_itr = metJetsOR.
begin(); jetc_itr != metJetsOR.
end(); ++jetc_itr ) {
790 jet_tlv += (*jetc_itr)->p4();
791 sum_jet += (*jetc_itr)->pt();
795 std::string name_met =
"MET_Reference_" +
type;
805 return StatusCode::FAILURE;
809 for(
const auto&
it : *met_Ref) {
810 const std::string&
name =
it->name();
811 if(
name ==
"RefEle"){
818 if(
name ==
"RefGamma"){
825 if(
name ==
"RefTau"){
839 if(
name ==
"RefJet"){
846 if(
name ==
"SoftClus"){
853 if(
name ==
"PVSoftTrk"){
860 if(
name ==
"FinalTrk"){
867 if(
name ==
"FinalClus"){
880 if(
evtStore()->record(met_Reb,(
"MET_Rebuilt"+
type).c_str()).isFailure() ) {
882 return StatusCode::FAILURE;
885 if(
evtStore()->record(met_RebAux,(
"MET_Rebuilt"+
type+
"Aux").c_str()).isFailure() ) {
887 return StatusCode::FAILURE;
889 met_Reb->setStore(met_RebAux);
896 return StatusCode::SUCCESS;
902 return StatusCode::SUCCESS;
931 if( (*m_metmaker)->rebuildJetMET(
"RefJet",
"SoftClus",
"PVSoftTrk", met_Reb,
jets, coreMet, metHelper,
true).isFailure() ) {
935 if((*met_Reb)[
"PVSoftTrk"]) trksource = (*met_Reb)[
"PVSoftTrk"]->source();
943 if((*met_Reb)[
"SoftClus"]) clsource = (*met_Reb)[
"SoftClus"]->source();
949 for(
const auto&
it : *met_Reb) {
950 std::string
name =
it->name();
951 if(
name ==
"RefEle"){
958 if(
name ==
"RefGamma"){
965 if(
name ==
"RefTau"){
979 if(
name ==
"RefJet"){
986 if(
name ==
"SoftClus"){
993 if(
name ==
"PVSoftTrk"){
1000 if(
name ==
"FinalTrk"){
1007 if(
name ==
"FinalClus"){
1019 double leadPt = 0., subleadPt = 0., leadPhi = 0., subleadPhi = 0.;
1021 for (
auto jet_itr =
jets->begin(); jet_itr !=
jets->end(); ++jet_itr) {
1022 if ((*jet_itr)->pt() > leadPt &&
Accept(*jet_itr,JvtCut,jvtTool)) {
1024 subleadPhi = leadPhi;
1025 leadPt = (*jet_itr)->pt();
1026 leadPhi = (*jet_itr)->phi();
1028 else if ((*jet_itr)->pt() > subleadPt &&
Accept(*jet_itr,JvtCut,jvtTool)) {
1029 subleadPt = (*jet_itr)->pt();
1030 subleadPhi = (*jet_itr)->phi();
1046 leadPt = 0.; leadPhi = 0.;
1051 for( ; muon_itr != muon_end; ++muon_itr ) {
1052 if((*muon_itr)->pt() > leadPt) {
1053 leadPt = (*muon_itr)->pt();
1054 leadPhi = (*muon_itr)->phi();
1061 for( ; electron_itr != electron_end; ++electron_itr ) {
1062 if((*electron_itr)->pt() > leadPt) {
1063 leadPt = (*electron_itr)->pt();
1064 leadPhi = (*electron_itr)->phi();
1078 for(
const auto&
it : *met_Ref) {
1079 const std::string&
name =
it->name();
1080 if(
name ==
"RefEle"){
1084 if(
name ==
"RefGamma"){
1088 if(
name ==
"RefTau"){
1092 if(
name ==
"Muons"){
1096 if(
name ==
"RefJet"){
1100 if(
name ==
"PVSoftTrk"){
1103 if(
name ==
"SoftClus"){
1111 for(
const auto&
it : *met_Reb) {
1112 std::string
name =
it->name();
1113 if(
name ==
"RefEle"){
1117 if(
name ==
"RefGamma"){
1121 if(
name ==
"RefTau"){
1125 if(
name ==
"Muons"){
1129 if(
name ==
"RefJet"){
1133 if(
name ==
"PVSoftTrk"){
1136 if(
name ==
"SoftClus"){
1157 if( (*met_Reb)[
"FinalClus"]->sumet() != 0) (
m_MET_Significance_Reb[
type]).at(0)->Fill((*met_Reb)[
"FinalClus"]->met()/sqrt((*met_Reb)[
"FinalClus"]->sumet()*1000.),
weight);
1158 if( (*met_Reb)[
"FinalTrk"]->sumet() != 0) (
m_MET_Significance_Reb[
type]).at(1)->Fill((*met_Reb)[
"FinalTrk"]->met()/sqrt((*met_Reb)[
"FinalTrk"]->sumet()*1000.),
weight);
1160 TLorentzVector target_tlv;
1164 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);
1165 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);
1168 for(
const auto&
it : *met_Ref) {
1169 if(
it->name() ==
"RefEle"){
1170 if(is_electron or (
it->sumet() > 0)){
1171 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1179 if(
it->name() ==
"RefGamma"){
1180 if(is_photon or (
it->sumet() > 0)){
1181 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1189 if(
it->name() ==
"RefTau"){
1190 if(is_tau or (
it->sumet() > 0)){
1191 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1199 if(
it->name() ==
"Muons"){
1200 if(is_muon or (
it->sumet() > 0)){
1201 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1209 if(
it->name() ==
"RefJet"){
1210 if(is_jet or (
it->sumet() > 0)){
1211 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1223 TLorentzVector jetReb_tlv;
1224 double sum_jetReb = 0;
1225 for(
const auto jet : metJetsOR) {
1227 jetReb_tlv +=
jet->p4();
1228 sum_jetReb +=
jet->pt();
1232 for(
const auto&
it : *met_Reb) {
1233 if(
it->name() ==
"RefEle"){
1234 if(is_electron or (
it->sumet() > 0)){
1235 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1243 if(
it->name() ==
"RefGamma"){
1244 if(is_photon or (
it->sumet() > 0)){
1245 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1253 if(
it->name() ==
"RefTau"){
1254 if(is_tau or (
it->sumet() > 0)){
1255 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1263 if(
it->name() ==
"Muons"){
1264 if(is_muon or (
it->sumet() > 0)){
1265 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1273 if(
it->name() ==
"RefJet"){
1274 if(is_jet or (
it->sumet() > 0)){
1275 target_tlv.SetPxPyPzE(-
it->mpx(), -
it->mpy(), 0,
it->met());
1285 if(
type ==
"AntiKt4EMTopo") {
1290 if(
evtStore()->record(met_Calo,(
"MET_Calo"+
type).c_str()).isFailure() ) {
1292 return StatusCode::FAILURE;
1295 if(
evtStore()->record(met_CaloAux,(
"MET_Calo"+
type+
"Aux").c_str()).isFailure() ) {
1297 return StatusCode::FAILURE;
1299 met_Calo->setStore(met_CaloAux);
1301 if( (*m_metmaker)->rebuildJetMET(
"RefJet",
"SoftClus",
"PVSoftTrk", met_Calo, metJetsEmpty.
asDataVector(), coreMet, metHelper,
true).isFailure() ) {
1305 if((*met_Calo)[
"SoftClus"]) clsource = (*met_Calo)[
"SoftClus"]->source();
1329 return StatusCode::FAILURE;
1343 for(
const auto& vx : *vxCont) {
1344 int N = vx->index();
1364 return StatusCode::SUCCESS;
1485 return StatusCode::SUCCESS;
1497 if(
mu->pt()<2.5e3 ||
mu->pt()/cosh(
mu->eta())<4
e3 )
return false;
1503 if( fabs(
el->eta())>2.47 ||
el->pt()<10
e3 )
return false;
1509 if( !(ph->
author()&20) || fabs(ph->
eta())>2.47 || ph->
pt()<10
e3 )
return false;
1514 {
return static_cast<bool> (
m_tauSelTool->accept( *tau )); }
1518 if(
jet->pt()<20
e3 || jvtTool ==
nullptr)
return false;
1519 return (fabs(
jet->eta()) > 2.4 ||
jet->pt() > 60
e3 || (*jvtTool)->updateJvt(*
jet) > JvtCut);