ATLAS Offline Software
Loading...
Searching...
No Matches
SSVWeightsAlg.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6#ifndef SSV_Weights_ALG_H
7#define SSV_Weights_ALG_H
8
9// Algorithm includes
17
18// Framework includes
21#include "xAODTracking/Vertex.h"
27
28// Additionally include
29
30#include <nlohmann/json.hpp>
31
32namespace CP{
33 class SSVWeightsAlg final : public EL::AnaAlgorithm{
34
35 public:
36 SSVWeightsAlg(const std::string &name, ISvcLocator *pSvcLocator);
37 virtual StatusCode initialize() override;
38 virtual StatusCode execute() override;
39
40 private:
42 std::string m_BTagging_WP;
44 std::string m_OverlapRemoval;
45 std::string m_Jvt;
47 std::string m_nF_Method;
49 const double m_lowMuHighMuThreshold = 42.93;
50
51 std::vector<const xAOD::Vertex*> create_good_SSVs(
52 const std::vector<const xAOD::Jet*> &jets,
53 const std::vector<const xAOD::Electron*> &electrons,
54 const std::vector<const xAOD::Muon*> &muons,
55 const std::vector<const xAOD::Vertex*> &SSVs)const;
56
57 std::vector<const xAOD::TruthParticle*> create_accepted_truthBhs(
58 const std::vector<const xAOD::TruthParticle*> &truthBhs,
59 const std::vector<const xAOD::Jet*> &jets)const;
60
62 const std::vector<const xAOD::TruthParticle*> &truthBhs,
63 const std::vector<const xAOD::Vertex*> &SSVs)const;
64
65 std::vector<bool> truthBh_to_SSV_matching(
66 const std::vector<const xAOD::TruthParticle*> &truthBhs,
67 const std::vector<const xAOD::Vertex*> &SSVs)const;
68
69 const std::vector<const xAOD::TruthParticle*> construct_not_matched_vectors(
70 const std::vector<const xAOD::TruthParticle*> &truthBhs,
71 const std::vector<bool> &matched_vector)const;
72
74 const xAOD::Vertex* vtx,
75 const xAOD::IParticle * part) const;
76
77 double poisson_pmf(
78 const int k,
79 const double lambda)const;
80
82 const std::vector<bool> &matching_vector)const;
83
85 const std::vector<bool> &matching_vector)const;
86
88 const xAOD::TruthParticle *part,
89 const int type) const;
90
92 const std::vector<const xAOD::TruthParticle*> &accepted_truthBh,
93 const std::vector<bool> &truthBh_to_SSV_matched,
94 double SF_eff) const;
95
97 const int b_jet_count,
98 const int N_missed,
99 const double SF_eff) const;
100
102 const double muactual,
103 const int b_jet_count,
104 const int N_fake,
105 const double SF_fake_low,
106 const double SF_fake_high) const;
107
109 const double muactual,
110 const int N_fake) const;
111
113 const double muactual,
114 const int N_fake,
115 const double SF_fake_low,
116 const double SF_fake_high) const;
117
120 this, "eventInfo", "EventInfo", "the EventInfo container"};
121
123 this, "TruthParticleContainer", "TruthParticles", "input TruthParticles container"};
124
126 this, "jets", "", "the jet container to use"};
127
128
130 this, "electrons", "", "the electron container to use"};
131
133 this, "muons", "", "the muon container to use"};
134
135
137 this, "NVSI_WP", "", "The NewVrtSecInclusiveTool output container to use (NewVrtSecInclusiveTool = algorithm that constructs the soft secondary vertices (SSVs))"};
138
143
144 CP::SysWriteDecorHandle<float> m_SSV_weight_decor{this, "SSV_weight", "SSV_weight_%SYS%", "SSV weight defined as a product of the correction factors: SSV_weight = P_eff * P_ineff * P_fake"};
145
146 CP::SysWriteDecorHandle<float> m_N_matched_decor{this, "N_matched", "N_matched_%SYS%", "number of matched b-hadrons in an event; so number of b-hadrons in acceptance that satisfy ΔR(b-hadron in acceptance, good SSV)<0.3"};
147 CP::SysWriteDecorHandle<float> m_N_missed_decor{this, "N_missed", "N_missed_%SYS%", "number of missed b-hadrons in an event; so number of b-hadrons that do not satisfy ΔR(b-hadron in acceptance, good SSV)<0.3"};
148 CP::SysWriteDecorHandle<float> m_N_fake_decor{this, "N_fake", "N_fake_%SYS%", "number of fake SSVs in an event; so number of good SSVs in acceptance that do not satisfy ΔR(b-hadron in acceptance, good SSV)<0.3"};
149
150 CP::SysWriteDecorHandle<float> m_P_eff_decor{this, "P_eff", "P_eff_%SYS%", "efficiency correction factor"};
151 CP::SysWriteDecorHandle<float> m_P_ineff_decor{this, "P_ineff", "P_ineff_%SYS%", "inefficiency correction factor"};
152 CP::SysWriteDecorHandle<float> m_P_fake_decor{this, "P_fake", "P_fake_%SYS%", "fake correction factor"};
153
154 CP::SysWriteDecorHandle<float> m_number_of_bjets_decor{this, "number_of_bjets", "number_of_bjets_%SYS%", "number of b-jets in an event"};
155 CP::SysWriteDecorHandle<float> m_number_of_accepted_Bhadrons_decor{this, "number_of_accepted_Bhadrons", "number_of_accepted_Bhadrons_%SYS%", "number of b-hadrons in acceptance in an event"};
156 CP::SysWriteDecorHandle<float> m_number_of_good_SSVs_decor{this, "number_of_good_SSVs", "number_of_good_SSVs_%SYS%", "number of good SSVs in an event"};
157
158 CP::SysWriteDecorHandle<float> m_P_ineff_bjet_based_decor{this, "P_ineff_bjet_based", "P_ineff_bjet_based_%SYS%", "inefficiency correction factor calculated according to the 'bjet_based' efficiency_Method"};
159 CP::SysWriteDecorHandle<float> m_P_ineff_pt_eta_based_decor{this, "P_ineff_pt_eta_based", "P_ineff_pt_eta_based_%SYS%", "inefficiency correction factor calculated according to the 'Bhadron_pT_eta_based' efficiency_Method"};
160 CP::SysWriteDecorHandle<float> m_P_fake_pileup_bjet_based_decor{this, "P_fake_pileup_bjet_based", "P_fake_pileup_bjet_based_%SYS%", "fake correction factor calculated according to the 'pileup_bjet_based' nF_Method"};
161 CP::SysWriteDecorHandle<float> m_P_fake_pileup_based_linearfit_decor{this, "P_fake_pileup_based_linearfit", "P_fake_pileup_based_linearfit_%SYS%", "fake correction factor calculated according to the 'pileup_based_linearfit' nF_Method"};
162 CP::SysWriteDecorHandle<float> m_P_fake_pileup_based_binned_decor{this, "P_fake_pileup_based_binned", "P_fake_pileup_based_binned_%SYS%", "fake correction factor calculated accoring to the 'pileup_based_binned' nF_Method"};
163 };
164}
165#endif
static const SG::AuxElement::ConstAccessor< float > m_ssv_pt_accessor
std::vector< bool > truthBh_to_SSV_matching(const std::vector< const xAOD::TruthParticle * > &truthBhs, const std::vector< const xAOD::Vertex * > &SSVs) const
int count_not_matched_objects(const std::vector< bool > &matching_vector) const
CP::SysWriteDecorHandle< float > m_number_of_good_SSVs_decor
const double m_lowMuHighMuThreshold
CP::SysReadHandle< xAOD::JetContainer > m_jetsHandle
CP::SysReadHandle< xAOD::VertexContainer > m_ssvHandle
CP::SysWriteDecorHandle< float > m_SSV_weight_decor
std::string m_OutputVariable_Size
std::vector< const xAOD::Vertex * > create_good_SSVs(const std::vector< const xAOD::Jet * > &jets, const std::vector< const xAOD::Electron * > &electrons, const std::vector< const xAOD::Muon * > &muons, const std::vector< const xAOD::Vertex * > &SSVs) const
CP::SysReadHandle< xAOD::MuonContainer > m_muonsHandle
virtual StatusCode initialize() override
double compute_DeltaR_between_SSV_and_particle(const xAOD::Vertex *vtx, const xAOD::IParticle *part) const
static const SG::AuxElement::ConstAccessor< float > m_ssv_phi_accessor
CP::SysWriteDecorHandle< float > m_P_fake_pileup_based_linearfit_decor
double calculate_P_ineff_bjet_based(const int b_jet_count, const int N_missed, const double SF_eff) const
double calculate_P_fake_pileup_based_binned(const double muactual, const int N_fake, const double SF_fake_low, const double SF_fake_high) const
nlohmann::json m_jsonConfig_SSVWeightsAlg
std::string m_nF_Method
bool isHFHadronFinalState(const xAOD::TruthParticle *part, const int type) const
std::vector< const xAOD::TruthParticle * > create_accepted_truthBhs(const std::vector< const xAOD::TruthParticle * > &truthBhs, const std::vector< const xAOD::Jet * > &jets) const
double calculate_P_fake_pileup_bjet_based(const double muactual, const int b_jet_count, const int N_fake, const double SF_fake_low, const double SF_fake_high) const
double calculate_P_ineff_Bhadron_pt_eta_based(const std::vector< const xAOD::TruthParticle * > &accepted_truthBh, const std::vector< bool > &truthBh_to_SSV_matched, double SF_eff) const
CP::SysWriteDecorHandle< float > m_N_missed_decor
CP::SysWriteDecorHandle< float > m_number_of_accepted_Bhadrons_decor
CP::SysWriteDecorHandle< float > m_number_of_bjets_decor
virtual StatusCode execute() override
int count_matched_objects(const std::vector< bool > &matching_vector) const
CP::SysWriteDecorHandle< float > m_N_matched_decor
CP::SysWriteDecorHandle< float > m_P_fake_pileup_bjet_based_decor
CP::SysReadHandle< xAOD::TruthParticleContainer > m_truthParticlesHandle
double poisson_pmf(const int k, const double lambda) const
CP::SysWriteDecorHandle< float > m_P_ineff_bjet_based_decor
CP::SysWriteDecorHandle< float > m_P_ineff_decor
SSVWeightsAlg(const std::string &name, ISvcLocator *pSvcLocator)
int count_number_of_fake_SSVs(const std::vector< const xAOD::TruthParticle * > &truthBhs, const std::vector< const xAOD::Vertex * > &SSVs) const
CP::SysReadHandle< xAOD::EventInfo > m_eventInfoHandle
CP::SysListHandle m_systematicsList
double calculate_P_fake_pileup_based_linearfit(const double muactual, const int N_fake) const
static const SG::AuxElement::ConstAccessor< float > m_ssv_m_accessor
std::string m_OverlapRemoval
const std::vector< const xAOD::TruthParticle * > construct_not_matched_vectors(const std::vector< const xAOD::TruthParticle * > &truthBhs, const std::vector< bool > &matched_vector) const
CP::SysWriteDecorHandle< float > m_P_ineff_pt_eta_based_decor
CP::SysWriteDecorHandle< float > m_P_fake_pileup_based_binned_decor
std::string m_efficiency_Method
CP::SysWriteDecorHandle< float > m_N_fake_decor
std::string m_BTagging_WP
std::string m_Jvt
std::string m_jsonConfigPath_SSVWeightsAlg
CP::SysWriteDecorHandle< float > m_P_fake_decor
CP::SysReadHandle< xAOD::ElectronContainer > m_electronsHandle
static const SG::AuxElement::ConstAccessor< float > m_ssv_eta_accessor
CP::SysWriteDecorHandle< float > m_P_eff_decor
a class managing the property to configure the list of systematics to process
a data handle for reading systematics varied input data
a data handle for reading systematics varied input data
the (new) base class for EventLoop algorithms
SG::ConstAccessor< T, ALLOC > ConstAccessor
Definition AuxElement.h:569
Class providing the definition of the 4-vector interface.
Select isolated Photons, Electrons and Muons.
Vertex_v1 Vertex
Define the latest version of the vertex class.
TruthParticle_v1 TruthParticle
Typedef to implementation.