6#ifndef SSV_Weights_ALG_H
7#define SSV_Weights_ALG_H
30#include <nlohmann/json.hpp>
38 virtual StatusCode
execute()
override;
41 Gaudi::Property<std::string>
m_jsonConfigPath_SSVWeightsAlg {
this,
"JsonConfigFile_SSVWeightsAlg",
"",
"Path to the JSON config file that contains the SSV calibration results which are needed to calculate the SSV weights"};
42 Gaudi::Property<std::string>
m_BTaggingWP {
this,
"BTaggingWP",
"",
"b-tagging working point that is used to count the number of b-jets in the event for b-jet based SSV weight calculation"};
43 Gaudi::Property<std::string>
m_EfficiencyMethod {
this,
"EfficiencyMethod",
"",
"efficiency definition that will be used to calculate the SSV weights, string can be 'Bhadron_pT_eta_based' or 'bjet_based'"};
44 Gaudi::Property<std::string>
m_nFMethod {
this,
"nFMethod",
"",
"average number of fake SSV definition that will be used to calculate the SSV weights, string can be 'pileup_bjet_based','pileup_based_linearfit' or 'pileup_based_binned'"};
45 Gaudi::Property<std::string>
m_OutputVariableSize {
this,
"OutputVariableSize",
"",
"number of variables that will be saved to the output, string can be 'standard','extended','additional' or 'all'"};
74 const double muactual,
75 const int N_fake)
const;
87 const double muactual,
89 const double SF_fake_low,
90 const double SF_fake_high)
const;
101 const double muactual,
102 const int b_jet_count,
104 const double SF_fake_low,
105 const double SF_fake_high)
const;
116 const std::vector<const xAOD::TruthParticle*> &accepted_truthBh,
117 const std::vector<bool> &truthBh_to_SSV_matched,
118 double SF_eff)
const;
129 const int b_jet_count,
131 const double SF_eff)
const;
153 const std::vector<const xAOD::Jet*> &jets,
154 const std::vector<const xAOD::Electron*> &electrons,
155 const std::vector<const xAOD::Muon*> &muons,
156 const std::vector<const xAOD::Vertex*> &SSVs)
const;
159 const std::vector<const xAOD::TruthParticle*> &truthBhs,
160 const std::vector<const xAOD::Jet*> &jets)
const;
163 const std::vector<const xAOD::TruthParticle*> &truthBhs,
164 const std::vector<const xAOD::Vertex*> &SSVs)
const;
167 const std::vector<const xAOD::TruthParticle*> &truthBhs,
168 const std::vector<const xAOD::Vertex*> &SSVs)
const;
171 const std::vector<const xAOD::TruthParticle*> &truthBhs,
172 const std::vector<bool> &matched_vector);
180 const double lambda);
183 const std::vector<bool> &matching_vector)
const;
186 const std::vector<bool> &matching_vector)
const;
190 const int type)
const;
193 const std::vector<const xAOD::TruthParticle*> &accepted_truthBh,
194 const std::vector<bool> &truthBh_to_SSV_matched,
195 double SF_eff)
const;
198 const int b_jet_count,
200 const double SF_eff)
const;
203 const double muactual,
204 const int b_jet_count,
206 const double SF_fake_low,
207 const double SF_fake_high)
const;
210 const double muactual,
211 const int N_fake)
const;
214 const double muactual,
216 const double SF_fake_low,
217 const double SF_fake_high)
const;
221 this,
"eventInfo",
"EventInfo",
"the EventInfo container"};
224 this,
"TruthParticleContainer",
"TruthParticles",
"input TruthParticles container"};
227 this,
"jets",
"",
"the jet container to use"};
230 this,
"electrons",
"",
"the electron container to use"};
233 this,
"muons",
"",
"the muon container to use"};
236 this,
"NVSI_WP",
"",
"The NewVrtSecInclusiveTool output container to use (NewVrtSecInclusiveTool = algorithm that constructs the soft secondary vertices (SSVs))"};
239 this,
"jetSelection",
"",
"the jet selection to apply on the jets that are used to check if they overlap with a SSV or a b-hadron"};
242 this,
"electronSelection",
"",
"the electron selection to apply on the electrons that are used to check if they overlap with a SSV or a b-hadron"};
245 this,
"muonSelection",
"",
"the muon selection to apply on the muons that are used to check if they overlap with a SSV or a b-hadron"};
EfficiencyMethodBJetBasedClass(const nlohmann::json &jsonConfig)
double getPIneff(const int b_jet_count, const int N_missed, const double SF_eff) const
std::map< std::string, double > m_bjetEfficiencyMap
EfficiencyMethodBhadronPtEtaBasedClass(const nlohmann::json &jsonConfig)
std::map< std::string, std::map< std::string, std::vector< double > > > m_BhadronPtEtaEfficiencyMap
double getPIneff(const std::vector< const xAOD::TruthParticle * > &accepted_truthBh, const std::vector< bool > &truthBh_to_SSV_matched, double SF_eff) const
std::vector< double > m_ptbins
double getPFake(const double muactual, const int b_jet_count, const int N_fake, const double SF_fake_low, const double SF_fake_high) const
double m_lowMuHighMuThreshold
nFMethodPileupBJetBasedClass(const nlohmann::json &jsonConfig)
std::map< std::string, std::map< std::string, double > > m_nFPileupBJetMap
std::vector< double > m_muactualBins
double getPFake(const double muactual, const int N_fake, const double SF_fake_low, const double SF_fake_high) const
nFMethodPileupBasedBinnedClass(const nlohmann::json &jsonConfig)
std::vector< double > m_nFBins
double m_lowMuHighMuThreshold
double getPFake(const double muactual, const int N_fake) const
nFMethodPileupBasedLinearFitClass(const nlohmann::json &jsonConfig)
double m_interceptUnscaled
static const SG::AuxElement::ConstAccessor< float > m_ssv_pt_accessor
CP::SysReadSelectionHandle m_muonSelection
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
CP::SysReadHandle< xAOD::JetContainer > m_jetsHandle
OutputVariableSizeType m_OutputVariableSizeType
CP::SysReadHandle< xAOD::VertexContainer > m_ssvHandle
std::unique_ptr< nFMethodPileupBasedLinearFitClass > m_nFPileupBasedLinearFitPtr
CP::SysWriteDecorHandle< float > m_SSV_weight_decor
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
std::unique_ptr< EfficiencyMethodBJetBasedClass > m_EfficiencyMethodBJetBasedPtr
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
static const std::vector< const xAOD::TruthParticle * > construct_not_matched_vectors(const std::vector< const xAOD::TruthParticle * > &truthBhs, const std::vector< bool > &matched_vector)
std::unique_ptr< EfficiencyMethodBhadronPtEtaBasedClass > m_EfficiencyMethodBhadronPtEtaBasedPtr
nlohmann::json m_jsonConfig_SSVWeightsAlg
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::SysReadSelectionHandle m_electronSelection
static double poisson_pmf(const int k, const double lambda)
CP::SysWriteDecorHandle< float > m_number_of_bjets_decor
virtual StatusCode execute() override
int count_matched_objects(const std::vector< bool > &matching_vector) const
Gaudi::Property< std::string > m_jsonConfigPath_SSVWeightsAlg
nFMethodType m_nFMethodType
CP::SysWriteDecorHandle< float > m_N_matched_decor
CP::SysWriteDecorHandle< float > m_P_fake_pileup_bjet_based_decor
Gaudi::Property< std::string > m_nFMethod
Gaudi::Property< std::string > m_EfficiencyMethod
CP::SysReadHandle< xAOD::TruthParticleContainer > m_truthParticlesHandle
std::unique_ptr< nFMethodPileupBJetBasedClass > m_nFPileupBJetBasedPtr
CP::SysWriteDecorHandle< float > m_P_ineff_bjet_based_decor
CP::SysWriteDecorHandle< float > m_P_ineff_decor
SSVWeightsAlg(const std::string &name, ISvcLocator *pSvcLocator)
CP::SysReadSelectionHandle m_jetSelection
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
Gaudi::Property< std::string > m_OutputVariableSize
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
Gaudi::Property< std::string > m_BTaggingWP
CP::SysWriteDecorHandle< float > m_P_ineff_pt_eta_based_decor
CP::SysWriteDecorHandle< float > m_P_fake_pileup_based_binned_decor
CP::SysWriteDecorHandle< float > m_N_fake_decor
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
EfficiencyMethodType m_EfficiencyMethodType
std::unique_ptr< nFMethodPileupBasedBinnedClass > m_nFPileupBasedBinnedPtr
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 systematically varied selection properties from objects
a data handle for reading systematics varied input data
the (new) base class for EventLoop algorithms
SG::ConstAccessor< T, ALLOC > ConstAccessor
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.