ATLAS Offline Software
Loading...
Searching...
No Matches
CP::FFJetSmearingTool Class Reference

#include <FFJetSmearingTool.h>

Inheritance diagram for CP::FFJetSmearingTool:

Classes

struct  SysData

Public Member Functions

 FFJetSmearingTool (const std::string &name)
 Proper constructor for Athena.
virtual ~FFJetSmearingTool ()
virtual StatusCode initialize () override
 Dummy implementation of the initialisation function.
virtual CP::CorrectionCode applyCorrection (xAOD::Jet &jet_reco) const override
 Apply a systematic variation of get a new copy.
virtual CP::CorrectionCode correctedCopy (const xAOD::Jet &input, xAOD::Jet *&output) const override
virtual CP::CorrectionCode applyContainerCorrection (xAOD::JetContainer &inputs) const override
StatusCode getMatchedTruthJet (xAOD::Jet &jet_reco, xAOD::Jet &jet_truth_matched) const
virtual void print () const
 Print the state of the tool.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
Methods implementing the ISystematicsTool interface
virtual bool isAffectedBySystematic (const CP::SystematicVariation &systematic) const override
 Specify whether tool is affected by provided systematic.
virtual CP::SystematicSet affectingSystematics () const override
 List of all systematics affecting this tool.
virtual CP::SystematicSet recommendedSystematics () const override
 List of all systematics recommended for this tool.
virtual StatusCode applySystematicVariation (const CP::SystematicSet &systematics) override
 Configure tool to apply systematic variation.
Additional helper functions, not directly mimicking Athena
template<class T>
const T * getProperty (const std::string &name) const
 Get one of the tool's properties.
const std::string & msg_level_name () const __attribute__((deprecated))
 A deprecated function for getting the message level's name.
const std::string & getName (const void *ptr) const
 Get the name of an object that is / should be in the event store.
SG::sgkey_t getKey (const void *ptr) const
 Get the (hashed) key of an object that is in the event store.

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

StatusCode readFFJetSmearingToolSimplifiedData (TEnv &settings)
StatusCode getJMSJMR (xAOD::Jet &jet_reco, double jet_mass, JetTools::FFJetAllowedMassDefEnum MassDef_of_syst, const std::string &jetTopology, double &JMS_err, double &JMR_err) const
StatusCode getJetTopology (xAOD::Jet &jet_reco, std::string &jetTopology) const
double Read3DHistogram (const TH3 *histo, double x, double y, double z) const
double Interpolate2D (const TH2 *histo, double x, double y) const
void replaceAllOccurrences (std::string &str, const std::string &to_find, const std::string &to_replace)
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

bool m_isInit {}
std::string m_release
std::string m_truth_jetColl
std::string m_truthlabelaccessor
std::string m_supportedmctypes
float m_EtaRange {}
float m_MaxMass {}
float m_MaxPt {}
std::string m_calibArea
std::string m_histFileName
std::string m_MassDef_string
std::string m_MCType_string
JetTools::FFJetAllowedMassDefEnum m_MassDef {}
std::string m_configFile
std::string m_path
std::string m_HistogramsFilePath
bool m_doGaussianSmearing {}
std::unique_ptr< TH2 > m_CALO_ResponseMap
std::unique_ptr< TH2 > m_TA_ResponseMap
std::unique_ptr< TH2 > m_UFO_ResponseMap
std::unique_ptr< TH3F > m_caloMassWeight
std::unique_ptr< TH3F > m_TAMassWeight
CP::SystematicSet m_SysList {}
std::map< std::string, std::string > m_Syst_MassDefAffected_map
std::map< std::string, std::string > m_Syst_TopologyAffected_map
std::map< std::string, std::string > m_Syst_HistPath_map
std::map< std::string, std::unique_ptr< TH2 > > m_Syst_Hist_map
std::map< std::string, std::unique_ptr< TH3F > > m_Syst_Hist_map3d
std::map< std::string, std::string > m_Syst_HistTAPath_map
std::map< std::string, std::unique_ptr< TH2 > > m_Syst_HistTA_map
std::map< std::string, std::unique_ptr< TH3F > > m_Syst_HistTA_map3d
std::map< std::string, std::string > m_Syst_Affects_JMSorJMR
std::map< std::string, std::string > m_Syst_uncertparam
std::unordered_map< CP::SystematicSet, SysDatam_sysData
SysDatam_currentSysData {nullptr}
 Points to the current systematic configuration.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Static Private Attributes

static constexpr float m_MeVtoGeV = 1.e-3

Detailed Description

Definition at line 101 of file FFJetSmearingTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ FFJetSmearingTool()

CP::FFJetSmearingTool::FFJetSmearingTool ( const std::string & name)

Proper constructor for Athena.

Definition at line 33 of file FFJetSmearingTool.cxx.

34 : asg::AsgTool(name)
35 , m_isInit(false)
36 , m_release("")
37 , m_truth_jetColl("")
38 , m_EtaRange(0)
39 , m_calibArea("CalibArea-08")
40 , m_histFileName("")
41 {
42 declareProperty("MassDef",m_MassDef_string = "");
43 declareProperty("MCType",m_MCType_string = "");
44 declareProperty("ConfigFile",m_configFile = ""); // Path to the config file, by default it points to XXX
45 declareProperty("Path",m_path);
46 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ ~FFJetSmearingTool()

CP::FFJetSmearingTool::~FFJetSmearingTool ( )
virtualdefault

Member Function Documentation

◆ affectingSystematics()

CP::SystematicSet CP::FFJetSmearingTool::affectingSystematics ( ) const
overridevirtual

List of all systematics affecting this tool.

Implements CP::IReentrantSystematicsTool.

Definition at line 197 of file FFJetSmearingTool.cxx.

197 {
198 CP::SystematicSet result;
199 result.insert(m_SysList);
200
201 return result;
202 }
CP::SystematicSet m_SysList

◆ applyContainerCorrection()

CP::CorrectionCode CP::FFJetSmearingTool::applyContainerCorrection ( xAOD::JetContainer & inputs) const
overridevirtual

Implements ICPJetCorrectionTool.

Definition at line 941 of file FFJetSmearingTool.cxx.

941 {
942 CP::CorrectionCode result = CP::CorrectionCode::Ok;
943
944 // Loop over the container
945 for (size_t iJet = 0; iJet < inputs.size(); ++iJet)
946 {
947 result = applyCorrection(*inputs.at(iJet));
948 if (result == CP::CorrectionCode::Error){
949 break;
950 }
951 }
952 return result;
953 }
@ Error
Some error happened during the object correction.
@ Ok
The correction was done successfully.
virtual CP::CorrectionCode applyCorrection(xAOD::Jet &jet_reco) const override
Apply a systematic variation of get a new copy.

◆ applyCorrection()

CP::CorrectionCode CP::FFJetSmearingTool::applyCorrection ( xAOD::Jet & jet_reco) const
overridevirtual

Apply a systematic variation of get a new copy.

Implements ICPJetCorrectionTool.

Definition at line 659 of file FFJetSmearingTool.cxx.

659 {
660
661 ATH_MSG_VERBOSE("//---------------------------------------------------------------//");
662 ATH_MSG_VERBOSE("Reco Jet to Smear: pt = " << jet_reco.pt() << ", mass = " << jet_reco.m() << ", eta = " << jet_reco.eta());
663
664 if (std::abs(jet_reco.eta()) > m_EtaRange){//JetCalibTools do not properly for jets with |eta|>2
665 ATH_MSG_DEBUG("This jet exceeds the eta range that the tool allows (|eta|<" << m_EtaRange << ")");
667 }
668 if (jet_reco.m() > m_MaxMass){
669 ATH_MSG_DEBUG("This jet exceeds the mass range that the tool allows jet_mass <" << m_MaxMass << " MeV)");
671 }
672 if (jet_reco.pt() > m_MaxPt){
673 ATH_MSG_DEBUG("This jet exceeds the maximum pt that the tool allows jet_pt <" << m_MaxPt << " MeV)");
675 }
676 if (jet_reco.m() <= 0){
677 ATH_MSG_DEBUG("This jet has negative mass");
679 }
680
681 // Find matched truth jet
682 xAOD::Jet jet_truth_matched;
683 jet_truth_matched.makePrivateStore();
684
685 if (!(getMatchedTruthJet(jet_reco, jet_truth_matched).isSuccess())){
686 ATH_MSG_VERBOSE("No truth jet match with this reco jet. The jet will not be smeared.");
688 }
689
690 ATH_MSG_VERBOSE("Matched truth Jet: pt = " << jet_truth_matched.pt() << ", mass = " << jet_truth_matched.m() << ", eta = " << jet_truth_matched.eta());
691
692 // Get the jet topology
693 std::string jetTopology;
694
695 if (!(getJetTopology( jet_reco, jetTopology)).isSuccess()){
696 ATH_MSG_ERROR("Imposible to obtain the jetTopology");
698 }
699 if (jetTopology == "no_match"){
701 }
702
703 // The TA mass is saved in an attribute so you can not access to it using ->m(). (if calibrated as Calo mass and not as Combined Mass), The Calo mass is not set as an attribute so you can not access it using ->getAttribute.
704
705 double jet_mass_UFO = 0;
706 double jet_mass_CALO = 0;
707 double jet_mass_TA = 0;
708 double calo_mass_weight=1; // m_comb = Weight*m_Calo + (1-Weight)*m_TA
709
710 float JetTrackAssistedMassCalibrated_from_JetCalibTools;
711
713
714 xAOD::JetFourMom_t jet_reco_CALO;
715 xAOD::JetFourMom_t jet_reco_TA;
716 xAOD::JetFourMom_t jet_reco_Comb;
717
718 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumCalo",jet_reco_CALO);
719 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumTA",jet_reco_TA);
720 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumCombQCD",jet_reco_Comb);
721
722 ATH_MSG_VERBOSE("CALO jet mass " << jet_reco_CALO.mass());
723 ATH_MSG_VERBOSE("TA jet mass " << jet_reco_TA.mass() );
724 ATH_MSG_VERBOSE("Comb jet mass " << jet_reco_Comb.mass() );
725
726 jet_mass_CALO = jet_reco_CALO.mass();
727 jet_mass_TA = jet_reco_TA.mass();
728 jet_reco.getAttribute<float>("JetTrackAssistedMassCalibrated", JetTrackAssistedMassCalibrated_from_JetCalibTools);
729
731 jet_mass_CALO = jet_reco.m();
732 calo_mass_weight = 1;
734 jet_mass_TA = jet_reco.m();
735 jet_reco.getAttribute<float>("JetTrackAssistedMassCalibrated", JetTrackAssistedMassCalibrated_from_JetCalibTools);
736 calo_mass_weight = 0;
738 jet_mass_UFO = jet_reco.m();
739 calo_mass_weight = 1;
740 }
741
742 // Obtain the average mass response of the jet. The response will depend in the chosed topology (top, W or QCD) and also in the mass definition (CALO, TA, Combined). By default the map used correspond to QCD jets
743
744 double avg_response_UFO=1;
745 double avg_response_CALO=1;
746 double avg_response_TA=1;
747
749 avg_response_CALO = FFJetSmearingTool::Interpolate2D(m_CALO_ResponseMap.get(), jet_reco.pt()*m_MeVtoGeV, jet_truth_matched.m()*m_MeVtoGeV);
750 if (avg_response_CALO == 0) avg_response_CALO=1; // If we look outside the Th2 histogram, we would obtain 0, so we apply the nominal response (1)
751 }
752
754 avg_response_TA = FFJetSmearingTool::Interpolate2D(m_TA_ResponseMap.get(), jet_reco.pt()*m_MeVtoGeV, jet_truth_matched.m()*m_MeVtoGeV);
755 if (avg_response_TA == 0) avg_response_TA = 1; // If we look outside the Th2 histogram, we would obtain 0, so we apply the nominal response (1)
756 }
757
759 avg_response_UFO = FFJetSmearingTool::Interpolate2D(m_UFO_ResponseMap.get(), jet_reco.pt()*m_MeVtoGeV, jet_truth_matched.m()*m_MeVtoGeV);
760 if (avg_response_UFO == 0) avg_response_UFO = 1; // If we look outside the Th2 histogram, we would obtain 0, so we apply the nominal response (1)
761 }
762
763 // Obtain the jet mass scale (JMS) and the jet mass resolution (JMR) nominal values and variation that correspond to the jet_reco
764
765 double JMS(1), JMS_err(0), JMR(1), JMR_err(0);
766 double scale;
767 double resolution;
768
769 double smeared_UFO_mass = jet_mass_UFO;
770 double smeared_CALO_mass = jet_mass_CALO;
771 double smeared_TA_mass = jet_mass_TA;
772
773 bool is_UFO_mass_smeared = false;
774 bool is_CALO_mass_smeared = false;
775 bool is_TA_mass_smeared = false;
776
778
779 if (!(getJMSJMR(jet_reco, jet_mass_CALO, JetTools::FFJetAllowedMassDefEnum::Calo, jetTopology, JMS_err, JMR_err)).isSuccess()){
781 }
782
783 scale = JMS + JMS_err;
784 resolution = JMR + JMR_err;
785
786 if (TMath::Abs(scale-1) > 0.0001 || TMath::Abs(resolution-1) > 0.0001){
787 is_CALO_mass_smeared = true;
788
789 ATH_MSG_VERBOSE("Forward Folding CALO procedure will use scale=" << scale << ", resolution=" << resolution << " and average respose=" << avg_response_CALO);
790
791 //FF procedure
792 smeared_CALO_mass = jet_mass_CALO * scale + (jet_mass_CALO - avg_response_CALO*jet_truth_matched.m())*(resolution-scale); // FF formula
793 }
794
795 }
796
798
799 if (!(getJMSJMR(jet_reco, jet_mass_TA, JetTools::FFJetAllowedMassDefEnum::TA, jetTopology, JMS_err, JMR_err))){
801 }
802
803 scale = JMS + JMS_err;
804 resolution = JMR + JMR_err;
805
806 if (TMath::Abs(scale-1) > 0.0001 || TMath::Abs(resolution-1) > 0.0001){
807
808 is_TA_mass_smeared = true;
809
810 ATH_MSG_VERBOSE("Forward Folding TA procedure will use scale=" << scale << ", resolution=" << resolution << " and average respose=" << avg_response_TA);
811
812 //FF procedure
813 smeared_TA_mass = jet_mass_TA * scale + (jet_mass_TA - avg_response_TA*jet_truth_matched.m())*(resolution-scale); // FF formula
814 }
815
816 }
817
819
820 if (!(getJMSJMR(jet_reco, jet_mass_UFO, JetTools::FFJetAllowedMassDefEnum::UFO, jetTopology, JMS_err, JMR_err)).isSuccess()){
822 }
823
824 scale = JMS + JMS_err;
825 resolution = JMR + JMR_err;
826
827 if (TMath::Abs(scale-1) > 0.0001 || TMath::Abs(resolution-1) > 0.0001){
828 is_UFO_mass_smeared = true;
829
830 ATH_MSG_VERBOSE("Forward Folding UFO procedure will use scale=" << scale << ", resolution=" << resolution << " and average respose=" << avg_response_UFO);
831
832 //FF procedure
833 smeared_UFO_mass = jet_mass_UFO * scale + (jet_mass_UFO - avg_response_UFO*jet_truth_matched.m())*(resolution-scale); // FF formula
834 }
835
836 }
837
838 // We only smear the jet if we have to. If not, avoid doing extra calculations
839 if (!is_CALO_mass_smeared && !is_TA_mass_smeared && !is_UFO_mass_smeared){
840 ATH_MSG_VERBOSE("This jet is not affected by the systematic. The jet won't be modified");
841 ATH_MSG_VERBOSE("//---------------------------------------------------------------//");
842
844 }
845
846 // Recalculate the weights after the smearing
847 if (m_MassDef == JetTools::FFJetAllowedMassDefEnum::Comb && JetTrackAssistedMassCalibrated_from_JetCalibTools != 0 && jet_mass_CALO != 0){
848 //we check that JetTrackAssistedMassCalibrated_from_JetCalibTools != 0 instead of jet_mass_TA != 0 becuase
849 //there is a problem in the conversion between the mass itself and the four-vector representation (due to a
850 //limitation of floating). This makes the value of jet_mass_TA!=0 in situations where it should be 0.
851 //In order to work arround it we check JetTrackAssistedMassCalibrated_from_JetCalibTools != 0 insead.
852 double caloRes;
853 double TARes;
854
855 xAOD::JetFourMom_t jet_reco_CALO;
856 xAOD::JetFourMom_t jet_reco_TA;
857
858 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumCalo",jet_reco_CALO);
859 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumTA",jet_reco_TA);
860
861
862 //The smearing do not change the pt but it changes the mass (so the energy too) so, if we want to perform the smearing properly, we have to change
863 //the Calo and TA four momenta before looking at the weights map
864 jet_reco_CALO = xAOD::JetFourMom_t(jet_reco_CALO.pt(),jet_reco_CALO.eta(),jet_reco_CALO.phi(),smeared_CALO_mass);//The smearing do not change the pt but it changes the Energy
865
866 jet_reco_TA = xAOD::JetFourMom_t(jet_reco_TA.pt(),jet_reco_TA.eta(),jet_reco_TA.phi(),smeared_TA_mass);
867
868
869 caloRes=FFJetSmearingTool::Read3DHistogram(m_caloMassWeight.get() ,jet_reco_CALO.e()*m_MeVtoGeV,TMath::Log(jet_reco_CALO.M()/jet_reco_CALO.e()),std::abs(jet_reco_CALO.eta()));
870
871 TARes=FFJetSmearingTool::Read3DHistogram(m_TAMassWeight.get() ,jet_reco_TA.e()*m_MeVtoGeV,TMath::Log(jet_reco_TA.M()/jet_reco_TA.e()),std::abs(jet_reco_TA.eta()));
872
873 //The histograms with the weights that we are reading were defined with the code "e_LOGmOe_eta" which means that each axis correspond to:
874 //-X: Jet Energy
875 //-Y: Log(Jet_Energy/Jet_mass)
876 //-Z:Eta
877 //Domain is [200-6000],[-6,0],[0,2] but, the ReadHistogram function put the value of the extream of the histogram to the values outside the domain.
878 //We have to use a custom "My_Interpolate" because the Z axis has just one bin (and this makes the Root Interpolate function fail)
879
880 double caloFactor;
881 double TAFactor;
882
883 if (caloRes == 0 ){
884 caloFactor = 0; TAFactor = 1;
885 }else if (TARes == 0){
886 caloFactor = 1; TAFactor = 0;
887 }else{
888 caloFactor = 1./(caloRes*caloRes);
889 TAFactor = 1./(TARes*TARes);
890 }
891
892 calo_mass_weight = caloFactor /(caloFactor + TAFactor);
893
894 ATH_MSG_VERBOSE(" Map Calo weight = " << calo_mass_weight );
895 ATH_MSG_VERBOSE(" Map TA weight = " << 1 - calo_mass_weight );
896 }else if (JetTrackAssistedMassCalibrated_from_JetCalibTools == 0){
897 calo_mass_weight = 1;
898 }else if (jet_mass_CALO == 0){
899 calo_mass_weight = 0;
900 }
901
902 // Calculate the final smeared mass
903 double smeared_mass = 0;
905 smeared_mass = smeared_UFO_mass;
906 ATH_MSG_VERBOSE("Smeared UFO mass " << smeared_UFO_mass);
907 }else{
908 smeared_mass = calo_mass_weight*smeared_CALO_mass + (1 - calo_mass_weight)*smeared_TA_mass;
909 ATH_MSG_VERBOSE("Smeared CALO mass " << smeared_CALO_mass);
910 ATH_MSG_VERBOSE("Smeared TA mass " << smeared_TA_mass);
911 }
912
913 xAOD::JetFourMom_t p4 = jet_reco.jetP4();
914
915 p4 = xAOD::JetFourMom_t(jet_reco.pt(),jet_reco.eta(),jet_reco.phi(),smeared_mass);
916 jet_reco.setJetP4(p4);
917
918 ATH_MSG_VERBOSE("Smeared Reco Jet: pt = " << jet_reco.pt() << ", mass = " << jet_reco.m() << ", eta = " << jet_reco.eta());
919
920 ATH_MSG_VERBOSE("//---------------------------------------------------------------//");
921
923 }
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
@ OutOfValidityRange
Input object is out of validity range.
std::unique_ptr< TH2 > m_TA_ResponseMap
StatusCode getMatchedTruthJet(xAOD::Jet &jet_reco, xAOD::Jet &jet_truth_matched) const
static constexpr float m_MeVtoGeV
StatusCode getJetTopology(xAOD::Jet &jet_reco, std::string &jetTopology) const
double Interpolate2D(const TH2 *histo, double x, double y) const
StatusCode getJMSJMR(xAOD::Jet &jet_reco, double jet_mass, JetTools::FFJetAllowedMassDefEnum MassDef_of_syst, const std::string &jetTopology, double &JMS_err, double &JMR_err) const
std::unique_ptr< TH3F > m_caloMassWeight
JetTools::FFJetAllowedMassDefEnum m_MassDef
std::unique_ptr< TH3F > m_TAMassWeight
std::unique_ptr< TH2 > m_CALO_ResponseMap
std::unique_ptr< TH2 > m_UFO_ResponseMap
double Read3DHistogram(const TH3 *histo, double x, double y, double z) const
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition Jet_v1.cxx:54
void setJetP4(const JetFourMom_t &p4)
Definition Jet_v1.cxx:182
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition Jet_v1.cxx:44
virtual double m() const
The invariant mass of the particle.
Definition Jet_v1.cxx:59
bool getAttribute(AttributeID type, T &value) const
Retrieve attribute moment by enum.
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition Jet_v1.cxx:49
JetFourMom_t jetP4() const
The full 4-momentum of the particle : internal jet type.
Definition Jet_v1.cxx:76
double resolution[nGasTypes][nParametersResolution]
Jet_v1 Jet
Definition of the current "jet version".
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition JetTypes.h:17

◆ applySystematicVariation()

StatusCode CP::FFJetSmearingTool::applySystematicVariation ( const CP::SystematicSet & systematics)
overridevirtual

Configure tool to apply systematic variation.

Implements CP::ISystematicsTool.

Definition at line 257 of file FFJetSmearingTool.cxx.

257 {
258 // First check if we already know this systematic configuration.
259 // Look for it in our sysData map.
260 auto iter = m_sysData.find (systematics);
261
262 // If this is a new input set, we need to filter it.
263 if (iter == m_sysData.end()){
264 // Filter the input systematics with my affecting systematics.
265 const CP::SystematicSet affectingSysts = affectingSystematics();
266 CP::SystematicSet filteredSysts;
267 if ( CP::SystematicSet::
268 filterForAffectingSystematics(systematics, affectingSysts, filteredSysts) != StatusCode::SUCCESS ){
269 ATH_MSG_ERROR("Received unsupported systematics: " << systematics.name());
270 return StatusCode::FAILURE;
271 }
272
273 // At this point, we can do some additional checks for consistency
274 // with the JMS/JMR functionality. For example, if the tool can only handle
275 // one type of systematic at a time, we return an error if the filtered
276 // set has more than one item:
277 if (filteredSysts.size() > 1){
278 ATH_MSG_ERROR("No support for more than one JMS/JMR sys at a time: " << filteredSysts.name());
279 return StatusCode::FAILURE;
280 }
281 if (filteredSysts.size() == 0) {
282 ATH_MSG_VERBOSE("Found zero systematics!");
283 return StatusCode::SUCCESS;
284 }
285
286 // Insert the new systematic data onto our map
287 SysData myData;
288
289 const CP::SystematicVariation& sys = *filteredSysts.begin();
290
291 myData.SysParameter = sys.parameter(); //Up (+1) and Down (-1) systematic variation
292 myData.SysBaseName = sys.basename(); //Name of the systematic variation
293
294 iter = m_sysData.emplace (systematics, myData).first;
295 }
296
297 // Apply the filtered systematics
298 m_currentSysData = &iter->second;
299
300 return StatusCode::SUCCESS;
301 }
static const std::vector< std::string > systematics
virtual CP::SystematicSet affectingSystematics() const override
List of all systematics affecting this tool.
SysData * m_currentSysData
Points to the current systematic configuration.
std::unordered_map< CP::SystematicSet, SysData > m_sysData
std::string name() const
returns: the systematics joined into a single string.
const_iterator begin() const
description: const iterator to the beginning of the set
size_t size() const
returns: size of the set

◆ correctedCopy()

CP::CorrectionCode CP::FFJetSmearingTool::correctedCopy ( const xAOD::Jet & input,
xAOD::Jet *& output ) const
overridevirtual

Implements ICPJetCorrectionTool.

Definition at line 927 of file FFJetSmearingTool.cxx.

927 {
928 xAOD::Jet* copy = new xAOD::Jet(input);
929
930 // Call the implemented function
932 delete copy;
934 }
935 output = copy;
937 }
bool copy
Definition calibdata.py:26
output
Definition merge.py:16

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ getJetTopology()

StatusCode CP::FFJetSmearingTool::getJetTopology ( xAOD::Jet & jet_reco,
std::string & jetTopology ) const
private

Definition at line 525 of file FFJetSmearingTool.cxx.

525 {
526 const SG::AuxElement::ConstAccessor<int> accTruthLabel(m_truthlabelaccessor);
527 if (!accTruthLabel.isAvailable(jet_reco) )
528 {
529 ATH_MSG_ERROR("Unable to retrieve the FatjetTruthLabel from the jet. Please call the BoostedJetTaggers decorateTruthLabel() function before calling this function.");
530 return StatusCode::FAILURE;
531 }
532
533 LargeRJetTruthLabel::TypeEnum jetTruthLabel = LargeRJetTruthLabel::intToEnum(accTruthLabel(jet_reco));
534
535 if (jetTruthLabel == LargeRJetTruthLabel::tqqb || jetTruthLabel == LargeRJetTruthLabel::other_From_t){
536 jetTopology="Top";
537 }else if (jetTruthLabel == LargeRJetTruthLabel::Wqq || jetTruthLabel == LargeRJetTruthLabel::Zqq || jetTruthLabel == LargeRJetTruthLabel::Wqq_From_t || jetTruthLabel == LargeRJetTruthLabel::other_From_V){
538 jetTopology="V";
539 }else if (jetTruthLabel == LargeRJetTruthLabel::qcd){
540 jetTopology="QCD";
541 }else if (jetTruthLabel == LargeRJetTruthLabel::Hbb || jetTruthLabel == LargeRJetTruthLabel::other_From_H){
542 jetTopology="H";
543 }else if (jetTruthLabel == LargeRJetTruthLabel::notruth){
544 jetTopology="no_match";
545 ATH_MSG_DEBUG("No truth jet match with this reco jet. The jet will not be smeared.");
546 }else{
547 jetTopology="QCD"; // We should never arrive here
548 }
549
550 ATH_MSG_VERBOSE("The topology of this jet correspond to a " << jetTopology << " large-R jet");
551
552 return StatusCode::SUCCESS;
553 }
TypeEnum intToEnum(const int type)

◆ getJMSJMR()

StatusCode CP::FFJetSmearingTool::getJMSJMR ( xAOD::Jet & jet_reco,
double jet_mass,
JetTools::FFJetAllowedMassDefEnum MassDef_of_syst,
const std::string & jetTopology,
double & JMS_err,
double & JMR_err ) const
private

Definition at line 560 of file FFJetSmearingTool.cxx.

560 {
561
562 // JMS/JMR systematic variations
563 JMS_err = 0;
564 JMR_err = 0;
565
566 // Some variables to simplify the logic in the "if" structure found below
571
572 const auto & massAffectedSys = m_Syst_MassDefAffected_map.at(m_currentSysData->SysBaseName);
573 const auto & topologyAffected = m_Syst_TopologyAffected_map.at(m_currentSysData->SysBaseName);
574 const auto & uncertparam = m_Syst_uncertparam.at(m_currentSysData->SysBaseName);
575
576 if (massAffectedSys == JetTools::enumToString(MassDef_of_syst) || massAffectedSys == JetTools::enumToString(comb) ){
577 ATH_MSG_VERBOSE("This uncertainty affects to the " << JetTools::enumToString(MassDef_of_syst) << " mass");
578 }else{ // Only apply the systematic to the proper mass definition
579 return StatusCode::SUCCESS;
580 }
581
582 if (topologyAffected != "All" && !TString(topologyAffected).Contains(jetTopology)){
583 ATH_MSG_VERBOSE("The systematic does not affect to this jet topology");
584 return StatusCode::SUCCESS;
585 }
586
587 float jet_mass = jet_mass_value*m_MeVtoGeV; // jet_reco->m()*m_MeVtoGeV; The TA mass can not be extracted this way
588 float jet_pT = jet_reco.pt()*m_MeVtoGeV;
589
590 if (m_Syst_Affects_JMSorJMR.at(m_currentSysData->SysBaseName) == "JMS"){
591
592 JMR_err = 0;
593
594 const TH2* hist = nullptr; // This variable will contain the pointer to the proper histogram to use in the interpolation
595
596 // TA and Calo mass defs take values from one hisogram only
597 if (massAffectedSys == JetTools::enumToString(calo) || massAffectedSys == JetTools::enumToString(ta) ){
598 hist = m_Syst_Hist_map.at(m_currentSysData->SysBaseName).get();
599 }else if (massAffectedSys == JetTools::enumToString(comb) ){ // Comb mass defs can take values from two histograms, depending ifits Calo- or TA- part is affected
600 if (MassDef_of_syst == calo){
601 hist = m_Syst_Hist_map.at(m_currentSysData->SysBaseName).get();
602 }else if (MassDef_of_syst == ta){
603 hist = m_Syst_HistTA_map.at(m_currentSysData->SysBaseName).get();
604 }
605 }
606 JMS_err = FFJetSmearingTool::Interpolate2D(hist, jet_pT, jet_mass) * m_currentSysData->SysParameter;
607
608 }else if (m_Syst_Affects_JMSorJMR.at(m_currentSysData->SysBaseName) == "JMR"){
609
610 JMS_err = 0;
611
612 const TH2* hist = nullptr;
613 const TH3F* hist3d = nullptr;
614
615 // TA and Calo mass defs take values from one hisogram only
616 if (massAffectedSys == JetTools::enumToString(calo) || massAffectedSys == JetTools::enumToString(ta) || massAffectedSys == JetTools::enumToString(ufo)){
617 if (uncertparam == "eLOGmOeAbsEta"){
618 hist3d = m_Syst_Hist_map3d.at(m_currentSysData->SysBaseName).get();
619 }else{ // Usually, uncertparam == "PtAbsMass"
620 hist = m_Syst_Hist_map.at(m_currentSysData->SysBaseName).get();
621 }
622 }else if (massAffectedSys == JetTools::enumToString(comb) ){ // Comb mass defs can take values from two histograms, depending ifits Calo- or TA- part is affected
623 if (MassDef_of_syst == calo){
624 if (uncertparam == "eLOGmOeAbsEta"){
625 hist3d = m_Syst_Hist_map3d.at(m_currentSysData->SysBaseName).get();
626 }else{ // Usually, uncertparam == "PtAbsMass"
627 hist = m_Syst_Hist_map.at(m_currentSysData->SysBaseName).get();
628 }
629 }else if (MassDef_of_syst == ta){
630 if (uncertparam == "eLOGmOeAbsEta"){
631 hist3d = m_Syst_HistTA_map3d.at(m_currentSysData->SysBaseName).get();
632 }else{ // Usually, uncertparam == "PtAbsMass"
633 hist = m_Syst_HistTA_map.at(m_currentSysData->SysBaseName).get();
634 }
635 }
636 }
637
638 if (uncertparam == "eLOGmOeAbsEta"){
639 JMR_err = FFJetSmearingTool::Read3DHistogram(hist3d, jet_reco.e()*m_MeVtoGeV, TMath::Log(jet_reco.m()/jet_reco.e()), std::abs(jet_reco.eta())) * m_currentSysData->SysParameter;
640 }else{ // uncertparam == "PtAbsMass"
641 JMR_err = FFJetSmearingTool::Interpolate2D(hist, jet_pT, jet_mass) * m_currentSysData->SysParameter;
642 }
643
644 }
645
646 ATH_MSG_DEBUG("Systematic applied: " << m_currentSysData->SysBaseName);
647
648 ATH_MSG_VERBOSE("JMS_err: " << JMS_err);
649 ATH_MSG_VERBOSE("JMR_err: " << JMR_err);
650
651 return StatusCode::SUCCESS;
652 }
std::map< std::string, std::string > m_Syst_uncertparam
std::map< std::string, std::unique_ptr< TH3F > > m_Syst_Hist_map3d
std::map< std::string, std::unique_ptr< TH3F > > m_Syst_HistTA_map3d
std::map< std::string, std::string > m_Syst_Affects_JMSorJMR
std::map< std::string, std::unique_ptr< TH2 > > m_Syst_HistTA_map
std::map< std::string, std::string > m_Syst_TopologyAffected_map
std::map< std::string, std::string > m_Syst_MassDefAffected_map
std::map< std::string, std::unique_ptr< TH2 > > m_Syst_Hist_map
virtual double e() const
The total energy of the particle.
Definition Jet_v1.cxx:63
TString enumToString(const FFJetAllowedMassDefEnum type)

◆ getKey()

SG::sgkey_t asg::AsgTool::getKey ( const void * ptr) const
inherited

Get the (hashed) key of an object that is in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::Event both provide ways for getting the SG::sgkey_t key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getName
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The hashed key of the object in the store. If not found, an invalid (zero) key.

Definition at line 119 of file AsgTool.cxx.

119 {
120
121#ifdef XAOD_STANDALONE
122 // In case we use @c xAOD::Event, we have a direct function call
123 // for this.
124 return evtStore()->event()->getKey( ptr );
125#else
126 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
127 return ( proxy == nullptr ? 0 : proxy->sgkey() );
128#endif // XAOD_STANDALONE
129 }
ServiceHandle< StoreGateSvc > & evtStore()

◆ getMatchedTruthJet()

StatusCode CP::FFJetSmearingTool::getMatchedTruthJet ( xAOD::Jet & jet_reco,
xAOD::Jet & jet_truth_matched ) const

Definition at line 493 of file FFJetSmearingTool.cxx.

493 {
494
495 // Get the truth jets of the event
496 const xAOD::JetContainer* jets_truth = nullptr;
497
498 ATH_CHECK(evtStore()->retrieve(jets_truth,m_truth_jetColl));//If fail, it means that we are "Unable to retrieve jetColl Info". It shows an Error message and exits
499
500 double dRmax_truthJet = 0.75;// matching condition
501 double dRmin=9999; //we will take the closest jet reco-truth
502
503 //Loop over the truth jets in the event to match
504 const xAOD::Jet* close_jet = nullptr;
505 for (const auto *const jet_truth : *jets_truth){
506 float dR_Test = jet_reco.p4().DeltaR(jet_truth->p4());
507 if (dR_Test < dRmax_truthJet){
508 if (dR_Test < dRmin){
509 close_jet = jet_truth;
510 dRmin = dR_Test;
511 }
512 }
513 }
514 if (dRmin > 999){ return StatusCode::FAILURE;}
515
516 jet_truth_matched.setJetP4(close_jet->jetP4());
517 return StatusCode::SUCCESS;
518 }
#define ATH_CHECK
Evaluate an expression and check for errors.
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition Jet_v1.cxx:71
JetContainer_v1 JetContainer
Definition of the current "jet container version".

◆ getName()

const std::string & asg::AsgTool::getName ( const void * ptr) const
inherited

Get the name of an object that is / should be in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::Event both provide ways for getting the std::string name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getKey
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The string name of the object in the store. If not found, an empty string.

Definition at line 106 of file AsgTool.cxx.

106 {
107
108#ifdef XAOD_STANDALONE
109 // In case we use @c xAOD::Event, we have a direct function call
110 // for this.
111 return evtStore()->event()->getName( ptr );
112#else
113 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
114 static const std::string dummy = "";
115 return ( proxy == nullptr ? dummy : proxy->name() );
116#endif // XAOD_STANDALONE
117 }

◆ getProperty()

template<class T>
const T * asg::AsgTool::getProperty ( const std::string & name) const
inherited

Get one of the tool's properties.

◆ initialize()

StatusCode CP::FFJetSmearingTool::initialize ( void )
overridevirtual

Dummy implementation of the initialisation function.

It's here to allow the dual-use tools to skip defining an initialisation function. Since many are doing so...

Reimplemented from asg::AsgTool.

Definition at line 54 of file FFJetSmearingTool.cxx.

54 {
55 // Ensure it hasn't been initialized already
56 if (m_isInit){
57 ATH_MSG_FATAL(Form("Blocking re-initialization of tool named %s",AsgTool::name().c_str())); //AsgTool::name() calls the name
58 return StatusCode::FAILURE;
59 }
60
61 ATH_MSG_INFO(Form("Preparing to initialize the FFJetSmearingTool named %s",AsgTool::name().c_str()));
62
63 if (AsgTool::name().empty()){
64 ATH_MSG_FATAL("No name specified. Aborting.");
65 return StatusCode::FAILURE;
66 }
67
68 if (m_MassDef_string.empty()){
69 ATH_MSG_FATAL("No jet mass type specified. Aborting.");
70 return StatusCode::FAILURE;
71 }
72
73 if (m_MCType_string.empty()){
74 ATH_MSG_FATAL("No MC campaign specified. Aborting.");
75 return StatusCode::FAILURE;
76 }
77
78 // Make sure we have a valid mass definition
79 ATH_CHECK(JetTools::stringToEnum(m_MassDef_string, m_MassDef)); //If it fails it means that there is No Systematic Uncertainties derived for to the given mass definition.
80 //The mass definition should be 'Calo', 'TA' or 'Comb'. Show an error and exits.
81
82 //reading the config file as in JetUncertaintiesTool
83 TEnv settings;
84
85 const TString configFilePath = jet::utils::findFilePath(m_configFile.c_str(),m_path.c_str(),m_calibArea.c_str());
86
87 if (settings.ReadFile( configFilePath.Data(),kEnvGlobal)){
88 ATH_MSG_ERROR("Cannot read config file: " << configFilePath.Data());
89 return StatusCode::FAILURE;
90 }
91 // We can read it - start printing
92 ATH_MSG_INFO("================================================");
93 ATH_MSG_INFO(Form(" Initializing the FFJetSmearingTool named %s",AsgTool::name().c_str()));
94 ATH_MSG_INFO(" Configuration file: " << m_configFile);
95 ATH_MSG_INFO(" Location: " << configFilePath.Data());
96
97 m_release = settings.GetValue("UncertaintyRelease","UNKNOWN");
98 ATH_MSG_INFO(" Uncertainty release: " << m_release.c_str());
99
100 // Check the jet definition
101 m_truth_jetColl = settings.GetValue("TruthJetColl","");
102 if (m_truth_jetColl.empty()){
103 ATH_MSG_ERROR("Cannot find the truth jet collection to use in config");
104 return StatusCode::FAILURE;
105 }
106 ATH_MSG_INFO(" Truth Jet Collection: " << m_truth_jetColl);
107
108 // Check the name of the truth label accessor for BoostjetTaggers
109 m_truthlabelaccessor = settings.GetValue("TruthLabelAccessor","");
110 if (m_truthlabelaccessor.empty()){
111 ATH_MSG_ERROR("Cannot find the TruthLabelAccessor to use in config");
112 return StatusCode::FAILURE;
113 }
114 ATH_MSG_INFO(" Truth Label Accessor: " << m_truthlabelaccessor);
115
116 // Check the MC campaign
117 m_supportedmctypes = settings.GetValue("SupportedMCTypes","");
118 if (m_supportedmctypes.empty()){
119 ATH_MSG_ERROR("Cannot find the SupportedMCTypes to use in config");
120 return StatusCode::FAILURE;
121 }
122 ATH_MSG_INFO(" Supported MC types: " << m_supportedmctypes);
123 // Protection for the MCType
124 if (m_supportedmctypes.find(m_MCType_string)!=std::string::npos){
125 ATH_MSG_INFO(" You are running with MC type: " << m_MCType_string);
126 }else{
127 ATH_MSG_ERROR("You are not running with a supported MC type");
128 return StatusCode::FAILURE;
129 }
130
131 // Eta range of the tool
132 m_EtaRange = settings.GetValue("EtaRange",0);
133 if (m_EtaRange == 0){
134 ATH_MSG_ERROR("Cannot find the EtaRange parameter in the config file");
135 return StatusCode::FAILURE;
136 }
137 ATH_MSG_INFO(" EtaRange : Abs(eta) < " << m_EtaRange);
138
139 // Mass range of the tool
140 m_MaxMass = settings.GetValue("MaxMass",0);
141 if (m_MaxMass == 0){
142 ATH_MSG_ERROR("Cannot find the MaxMass parameter in the config file");
143 return StatusCode::FAILURE;
144 }
145 ATH_MSG_INFO(" MaxMass : jet_mass < " << m_MaxMass);
146
147 // Pt range of the tool
148 m_MaxPt = settings.GetValue("MaxPt",0);
149 if (m_MaxPt == 0){
150 ATH_MSG_ERROR("Cannot find the MaxPt parameter in the config file");
151 return StatusCode::FAILURE;
152 }
153 ATH_MSG_INFO(" MaxPt : jet_pt < " << m_MaxPt);
154
155 // Get the file to read uncertainties in from
156 m_histFileName = settings.GetValue("UncertaintyRootFile","");
158 if (m_histFileName.empty()){
159 ATH_MSG_ERROR("Cannot find uncertainty histogram file in the config file");
160 return StatusCode::FAILURE;
161 }
162 ATH_MSG_INFO(" UncertaintyFile: " << m_histFileName);
163 ATH_MSG_INFO(" Location: " << m_HistogramsFilePath);
164
165 // Read all the histogram files where the jms jmr variations are saved
166 // If fail, it shows an Error message and exits
168
169 // Add the affecting systematics to the global registry
170 CP::SystematicRegistry& registry = CP::SystematicRegistry::getInstance();
171 if (registry.registerSystematics(*this) != StatusCode::SUCCESS){
172 ATH_MSG_ERROR("Unable to register systematics!");
173 return StatusCode::FAILURE;
174 }
175
176 m_isInit = true;
177
178 // ANA_CHECK (applySystematicVariation (CP::SystematicSet()));
179
180 return StatusCode::SUCCESS;
181 }
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
static const Attributes_t empty
StatusCode readFFJetSmearingToolSimplifiedData(TEnv &settings)
static SystematicRegistry & getInstance()
Get the singleton instance of the registry for the curren thread.
StatusCode registerSystematics(const IReentrantSystematicsTool &tool)
effects: register all the systematics from the tool
StatusCode stringToEnum(const TString &name, FFJetAllowedMassDefEnum &result)
TString findFilePath(const TString &fileName, const TString &path="", const TString &calibArea="")

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ Interpolate2D()

double CP::FFJetSmearingTool::Interpolate2D ( const TH2 * histo,
double x,
double y ) const
private

Definition at line 994 of file FFJetSmearingTool.cxx.

994 {
995 if (not histo){
996 ATH_MSG_ERROR("Histogram pointer is null in FFJetSmearingTool::Interpolate2D");
997 return 0.;
998 }
999 Int_t bin_x = histo->GetXaxis()->FindFixBin(x);
1000 Int_t bin_y = histo->GetYaxis()->FindFixBin(y);
1001 if (bin_x<1 || bin_x>histo->GetNbinsX() || bin_y<1 || bin_y>histo->GetNbinsY()){
1002 ATH_MSG_VERBOSE("The point is outside the histogram domain.");
1003 return 0.;
1004 }
1005
1006 double interpolated_value = JetHelpers::Interpolate(histo, x, y);
1007 return interpolated_value;
1008 }
#define y
#define x
double Interpolate(const TH1 *histo, const double x)

◆ isAffectedBySystematic()

bool CP::FFJetSmearingTool::isAffectedBySystematic ( const CP::SystematicVariation & systematic) const
overridevirtual

Specify whether tool is affected by provided systematic.

Implements CP::ISystematicsTool.

Definition at line 188 of file FFJetSmearingTool.cxx.

188 {
189 // Using 'find' is sufficient until this tool supports continuous
190 // // variations, at which point I'll need to use the 'match' method.
191 CP::SystematicSet sys = affectingSystematics();
192 return sys.find(systematic) != sys.end();
193 }

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msg_level_name()

const std::string & asg::AsgTool::msg_level_name ( ) const
inherited

A deprecated function for getting the message level's name.

Instead of using this, weirdly named function, user code should get the string name of the current minimum message level (in case they really need it...), with:

MSG::name( msg().level() )

This function's name doesn't follow the ATLAS coding rules, and as such will be removed in the not too distant future.

Returns
The string name of the current minimum message level that's printed

Definition at line 101 of file AsgTool.cxx.

101 {
102
103 return MSG::name( msg().level() );
104 }
MsgStream & msg() const
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
Definition MsgLevel.cxx:19

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ print()

◆ Read3DHistogram()

double CP::FFJetSmearingTool::Read3DHistogram ( const TH3 * histo,
double x,
double y,
double z ) const
private

Definition at line 957 of file FFJetSmearingTool.cxx.

957 {
958
959 if (not histo){
960 ATH_MSG_ERROR("Histogram pointer is null in FFJetSmearingTool::Read3DHistogram");
961 return 0.;
962 }
963
964 double aux_x = x;
965 double aux_y = y;
966 double aux_z = z;
967
968 // Asymptotic values
969 //If the value is outside the histogram region, we take the closest value to that one
970
971 double xMax = histo->GetXaxis()->GetBinLowEdge(histo->GetNbinsX()+1);
972 double xMin = histo->GetXaxis()->GetBinLowEdge(1);
973 double yMax = histo->GetYaxis()->GetBinLowEdge(histo->GetNbinsY()+1);
974 double yMin = histo->GetYaxis()->GetBinLowEdge(1);
975 double zMax = histo->GetZaxis()->GetBinLowEdge(histo->GetNbinsZ()+1);
976 double zMin = histo->GetZaxis()->GetBinLowEdge(1);
977
978 if (x >= xMax) aux_x = xMax-1e-6 ; //so it fits the up-most x-bin
979 if (x <= xMin) aux_x = xMin+1e-6 ; //so it fits the low-most x-bin
980 if (std::isnan(y)) return 0; // no weight if the input is NaN, can happen for log(X)
981 if (y >= yMax) aux_y = yMax-1e-6 ; //so it fits the up-most y-bin
982 if (y <= yMin) aux_y = yMin+1e-6 ; //so it fits the low-most y-bin
983 if (z >= zMax) aux_z = zMax-1e-6 ; //so it fits the up-most z-bin
984 if (z <= zMin) aux_z = zMin+1e-6 ; //so it fits the low-most z-bin
985
986 //Use the interpolate function from JetHelpers.cxx
987 double weight = JetHelpers::Interpolate(histo, aux_x, aux_y, aux_z);
988
989 return weight;
990 }
#define z

◆ readFFJetSmearingToolSimplifiedData()

StatusCode CP::FFJetSmearingTool::readFFJetSmearingToolSimplifiedData ( TEnv & settings)
private

Definition at line 308 of file FFJetSmearingTool.cxx.

308 {
309 std::unique_ptr<TFile> data_file ( TFile::Open(m_HistogramsFilePath.c_str()));
310 if (!data_file || data_file->IsZombie()){
311 ATH_MSG_FATAL( "Could not open the first input file: " << m_HistogramsFilePath );
312 return StatusCode::FAILURE;
313 }
314
315 // Check whether we need the ResponseMap or not
316 m_doGaussianSmearing = settings.GetValue("doGaussianSmearing",true);
317 ATH_MSG_INFO(" doGaussianSmearing: " << m_doGaussianSmearing);
318
320 TString CaloResponseMap_path = settings.GetValue("CaloResponseMap","");
321
322 if (CaloResponseMap_path.IsNull()){
323 ATH_MSG_ERROR("Cannot find the CaloResponseMap in the config file");
324 return StatusCode::FAILURE;
325 }
326
327 m_CALO_ResponseMap = std::unique_ptr<TH2>(static_cast<TH2*>(data_file->Get( CaloResponseMap_path )));
328 m_CALO_ResponseMap->SetDirectory(nullptr);
329
330 ATH_MSG_INFO(" ResponseMap: " << CaloResponseMap_path);
331 }
332
334 TString TAResponseMap_path = settings.GetValue("TAResponseMap","");
335
336 if (TAResponseMap_path.IsNull()){
337 ATH_MSG_ERROR("Cannot find the TAResponseMap in the config file");
338 return StatusCode::FAILURE;
339 }
340
341 m_TA_ResponseMap = std::unique_ptr<TH2>(static_cast<TH2*>(data_file->Get( TAResponseMap_path )));
342 m_TA_ResponseMap->SetDirectory(nullptr);//To keep it open when we close the .root file
343
344 ATH_MSG_INFO(" ResponseMap: " << TAResponseMap_path);
345 }
346
348 TString UFOResponseMap_path = settings.GetValue("UFOResponseMap","");
349
350 if (UFOResponseMap_path.IsNull()){
351 ATH_MSG_ERROR("Cannot find the UFOResponseMap in the config file");
352 return StatusCode::FAILURE;
353 }
354
355 m_UFO_ResponseMap = std::unique_ptr<TH2>(dynamic_cast<TH2*>(data_file->Get( UFOResponseMap_path )));
356 m_UFO_ResponseMap->SetDirectory(nullptr);
357
358 ATH_MSG_INFO(" ResponseMap: " << UFOResponseMap_path);
359 }
360
361 // JMS systematics
362 for (size_t iComp = 0; iComp < 999; ++iComp){
363
364 const TString prefix = Form("JMSComponent.%zu.",iComp);
365 std::string Syst_Name = settings.GetValue(prefix+"Name","");
366
367 if (!Syst_Name.empty()){
368
369 m_SysList.insert( CP::SystematicVariation(Syst_Name, 1) );
370 m_SysList.insert( CP::SystematicVariation(Syst_Name, -1) );
371 m_Syst_MassDefAffected_map[Syst_Name] = settings.GetValue(prefix+"MassDef","");
372 m_Syst_TopologyAffected_map[Syst_Name] = settings.GetValue(prefix+"Topology","");
373 m_Syst_Affects_JMSorJMR[Syst_Name] = "JMS";
374 m_Syst_HistPath_map[Syst_Name] = settings.GetValue(prefix+"Hist","");
375
376 // Processing the input histogram name
377 m_Syst_Hist_map[Syst_Name] = std::unique_ptr<TH2>(static_cast<TH2*>(data_file->Get(m_Syst_HistPath_map[Syst_Name].c_str())));
378 m_Syst_Hist_map[Syst_Name]->SetDirectory(nullptr);
379
380 // For Comb mass we need to read two histograms
382 m_Syst_HistTAPath_map[Syst_Name] = settings.GetValue(prefix+"HistTA","");
383 if (!m_Syst_HistTAPath_map[Syst_Name].empty()){
384 m_Syst_HistTA_map[Syst_Name] = std::unique_ptr<TH2>(static_cast<TH2*>(data_file->Get(m_Syst_HistTAPath_map[Syst_Name].c_str())));
385 m_Syst_HistTA_map[Syst_Name]->SetDirectory(nullptr);
386 }
387 }
388
389 }
390 }
391
392 // JMR Systematics
393 const std::string to_find = "MCTYPE";
394 const std::string to_replace = m_MCType_string;
395 for (size_t iComp = 0; iComp < 999; ++iComp){
396 const TString prefix = Form("JMRComponent.%zu.",iComp);
397 std::string Syst_Name = settings.GetValue(prefix+"Name","");
398 replaceAllOccurrences(Syst_Name, to_find, to_replace);
399
400 if (!Syst_Name.empty()){
401
402 m_SysList.insert( CP::SystematicVariation(Syst_Name, 1) );
403 m_SysList.insert( CP::SystematicVariation(Syst_Name, -1) );
404 m_Syst_MassDefAffected_map[Syst_Name] = settings.GetValue(prefix+"MassDef","");
405 m_Syst_TopologyAffected_map[Syst_Name] = settings.GetValue(prefix+"Topology","");
406 m_Syst_Affects_JMSorJMR[Syst_Name] = "JMR";
407 m_Syst_HistPath_map[Syst_Name] = settings.GetValue(prefix+"Hist","");
408 m_Syst_uncertparam[Syst_Name] = settings.GetValue(prefix+"Param","");
409
410 replaceAllOccurrences(m_Syst_HistPath_map[Syst_Name], to_find, to_replace);
411
412 // Processing the input histogram name
413 if (m_Syst_uncertparam[Syst_Name] == "PtAbsMass"){
414 m_Syst_Hist_map[Syst_Name] = std::unique_ptr<TH2>(dynamic_cast<TH2*>(data_file->Get(m_Syst_HistPath_map[Syst_Name].c_str())));
415 m_Syst_Hist_map[Syst_Name]->SetDirectory(nullptr);
416 }else if (m_Syst_uncertparam[Syst_Name] == "eLOGmOeAbsEta"){
417 m_Syst_Hist_map3d[Syst_Name] = std::unique_ptr<TH3F>(dynamic_cast<TH3F*>(data_file->Get(m_Syst_HistPath_map[Syst_Name].c_str())));
418 m_Syst_Hist_map3d[Syst_Name]->SetDirectory(nullptr);
419 }
420
421 // For Comb mass we need to read two histograms
423 m_Syst_HistTAPath_map[Syst_Name] = settings.GetValue(prefix+"HistTA","");
424 if (!m_Syst_HistTAPath_map[Syst_Name].empty()){
425 if (m_Syst_uncertparam[Syst_Name] == "PtAbsMass"){
426 m_Syst_HistTA_map[Syst_Name] = std::unique_ptr<TH2>(dynamic_cast<TH2*>(data_file->Get(m_Syst_HistTAPath_map[Syst_Name].c_str())));
427 m_Syst_HistTA_map[Syst_Name]->SetDirectory(nullptr);
428 }else if (m_Syst_uncertparam[Syst_Name] == "eLOGmOeAbsEta"){
429 m_Syst_HistTA_map3d[Syst_Name] = std::unique_ptr<TH3F>(dynamic_cast<TH3F*>(data_file->Get(m_Syst_HistTAPath_map[Syst_Name].c_str())));
430 m_Syst_HistTA_map3d[Syst_Name]->SetDirectory(nullptr);
431 }
432 }
433 }
434
435 }
436 }
437
438 data_file->Close();
439
440 // Skip for UFO -> Read the Calo and TA mass weight histograms from the same file that JetUncertainties uses
442
443 TString Calo_TA_weight_file_name = settings.GetValue("JetUncertainties_UncertaintyRootFile","");
444 const TString Calo_TA_weight_file_path = jet::utils::findFilePath(Calo_TA_weight_file_name.Data(),m_path.c_str(),m_calibArea.c_str());
445
446 if (Calo_TA_weight_file_path.IsNull()){
447 ATH_MSG_ERROR("Cannot find the file with the Calo and TA weights");
448 return StatusCode::FAILURE;
449 }
450
451 TString Calo_weight_hist_name = settings.GetValue("CombMassWeightCaloHist","");
452 if (Calo_weight_hist_name.IsNull()){
453 ATH_MSG_ERROR("Cannot find the histogram name that contains the Calo weights in the config file");
454 return StatusCode::FAILURE;
455 }
456
457 TString TA_weight_hist_name = settings.GetValue("CombMassWeightTAHist","");
458 if (TA_weight_hist_name.IsNull()){
459 ATH_MSG_ERROR("Cannot find the histogram name that contains the TA weights in the config file");
460 return StatusCode::FAILURE;
461 }
462
463 ATH_MSG_INFO(Form(" Calo weights hist: \"%s\"",Calo_weight_hist_name.Data()));
464 ATH_MSG_INFO(Form(" TA weights hist: \"%s\"",TA_weight_hist_name.Data()));
465 ATH_MSG_INFO(Form(" Location: %s",Calo_TA_weight_file_path.Data()));
466
467
468 std::unique_ptr<TFile> Calo_TA_weight_file ( TFile::Open(Calo_TA_weight_file_path));
469 if (!Calo_TA_weight_file || Calo_TA_weight_file->IsZombie()){
470 ATH_MSG_FATAL( "Could not open the first input file: " << Calo_TA_weight_file_path );
471 return StatusCode::FAILURE;
472 }
473
474 m_caloMassWeight = std::unique_ptr<TH3F>(static_cast<TH3F*>(Calo_TA_weight_file->Get(Calo_weight_hist_name)));
475 m_TAMassWeight = std::unique_ptr<TH3F>(static_cast<TH3F*>(Calo_TA_weight_file->Get(TA_weight_hist_name)));
476
477 m_caloMassWeight->SetDirectory(nullptr);
478 m_TAMassWeight->SetDirectory(nullptr);//To keep it open when we close the .root file
479
480
481 Calo_TA_weight_file->Close();
482
483 }
484
485 return StatusCode::SUCCESS;
486 }
std::map< std::string, std::string > m_Syst_HistPath_map
void replaceAllOccurrences(std::string &str, const std::string &to_find, const std::string &to_replace)
std::map< std::string, std::string > m_Syst_HistTAPath_map

◆ recommendedSystematics()

CP::SystematicSet CP::FFJetSmearingTool::recommendedSystematics ( ) const
overridevirtual

List of all systematics recommended for this tool.

Implements CP::IReentrantSystematicsTool.

Definition at line 206 of file FFJetSmearingTool.cxx.

206 {
207 CP::SystematicSet filteredSysts;
208
209 // Take only Calo-like uncertainties
211 for (auto ci = m_SysList.begin(); ci != m_SysList.end(); ci++){
212 if ((*ci).basename().find("CALO_")!=std::string::npos){
213 filteredSysts.insert(*ci);
214 }
215 }
216 return filteredSysts;
217 }
218
219 // Take only TA-like uncertainties
221 for (auto ci = m_SysList.begin(); ci != m_SysList.end(); ci++){
222 if ((*ci).basename().find("TA_") !=std::string::npos){
223 filteredSysts.insert(*ci);
224 }
225 }
226 return filteredSysts;
227 }
228
229 // Take only Comb-like uncertainties
231 for (auto ci = m_SysList.begin(); ci != m_SysList.end(); ci++){
232 if ((*ci).basename().find("COMB_")!=std::string::npos){
233 filteredSysts.insert(*ci);
234 }
235 }
236 return filteredSysts;
237 }
238
239 // Take only UFO-like uncertainties
241 for (auto ci = m_SysList.begin(); ci != m_SysList.end(); ci++){
242 if ((*ci).basename().find("JET_JMRUnc_")!=std::string::npos){
243 filteredSysts.insert(*ci);
244 }
245 }
246 return filteredSysts;
247 }
248
249 return m_SysList;
250 }
void insert(const SystematicVariation &systematic)
description: insert a systematic into the set

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ replaceAllOccurrences()

void CP::FFJetSmearingTool::replaceAllOccurrences ( std::string & str,
const std::string & to_find,
const std::string & to_replace )
private

Definition at line 1012 of file FFJetSmearingTool.cxx.

1012 {
1013 size_t pos = 0;
1014 while ((pos = str.find(to_find, pos)) != std::string::npos){
1015 str.replace(pos, to_find.length(), to_replace);
1016 pos += to_replace.length(); // Move past the last replaced position
1017 }
1018 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_calibArea

std::string CP::FFJetSmearingTool::m_calibArea
private

Definition at line 165 of file FFJetSmearingTool.h.

◆ m_CALO_ResponseMap

std::unique_ptr<TH2> CP::FFJetSmearingTool::m_CALO_ResponseMap
private

Definition at line 176 of file FFJetSmearingTool.h.

◆ m_caloMassWeight

std::unique_ptr<TH3F> CP::FFJetSmearingTool::m_caloMassWeight
private

Definition at line 181 of file FFJetSmearingTool.h.

◆ m_configFile

std::string CP::FFJetSmearingTool::m_configFile
private

Definition at line 170 of file FFJetSmearingTool.h.

◆ m_currentSysData

SysData* CP::FFJetSmearingTool::m_currentSysData {nullptr}
private

Points to the current systematic configuration.

Definition at line 208 of file FFJetSmearingTool.h.

208{nullptr};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doGaussianSmearing

bool CP::FFJetSmearingTool::m_doGaussianSmearing {}
private

Definition at line 175 of file FFJetSmearingTool.h.

175{};

◆ m_EtaRange

float CP::FFJetSmearingTool::m_EtaRange {}
private

Definition at line 162 of file FFJetSmearingTool.h.

162{};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_histFileName

std::string CP::FFJetSmearingTool::m_histFileName
private

Definition at line 166 of file FFJetSmearingTool.h.

◆ m_HistogramsFilePath

std::string CP::FFJetSmearingTool::m_HistogramsFilePath
private

Definition at line 172 of file FFJetSmearingTool.h.

◆ m_isInit

bool CP::FFJetSmearingTool::m_isInit {}
private

Definition at line 157 of file FFJetSmearingTool.h.

157{};

◆ m_MassDef

JetTools::FFJetAllowedMassDefEnum CP::FFJetSmearingTool::m_MassDef {}
private

Definition at line 169 of file FFJetSmearingTool.h.

169{};

◆ m_MassDef_string

std::string CP::FFJetSmearingTool::m_MassDef_string
private

Definition at line 167 of file FFJetSmearingTool.h.

◆ m_MaxMass

float CP::FFJetSmearingTool::m_MaxMass {}
private

Definition at line 163 of file FFJetSmearingTool.h.

163{};

◆ m_MaxPt

float CP::FFJetSmearingTool::m_MaxPt {}
private

Definition at line 164 of file FFJetSmearingTool.h.

164{};

◆ m_MCType_string

std::string CP::FFJetSmearingTool::m_MCType_string
private

Definition at line 168 of file FFJetSmearingTool.h.

◆ m_MeVtoGeV

float CP::FFJetSmearingTool::m_MeVtoGeV = 1.e-3
staticconstexprprivate

Definition at line 210 of file FFJetSmearingTool.h.

◆ m_path

std::string CP::FFJetSmearingTool::m_path
private

Definition at line 171 of file FFJetSmearingTool.h.

◆ m_release

std::string CP::FFJetSmearingTool::m_release
private

Definition at line 158 of file FFJetSmearingTool.h.

◆ m_supportedmctypes

std::string CP::FFJetSmearingTool::m_supportedmctypes
private

Definition at line 161 of file FFJetSmearingTool.h.

◆ m_sysData

std::unordered_map<CP::SystematicSet,SysData> CP::FFJetSmearingTool::m_sysData
private

Definition at line 206 of file FFJetSmearingTool.h.

◆ m_SysList

CP::SystematicSet CP::FFJetSmearingTool::m_SysList {}
private

Definition at line 186 of file FFJetSmearingTool.h.

186{};

◆ m_Syst_Affects_JMSorJMR

std::map<std::string,std::string> CP::FFJetSmearingTool::m_Syst_Affects_JMSorJMR
private

Definition at line 197 of file FFJetSmearingTool.h.

◆ m_Syst_Hist_map

std::map<std::string,std::unique_ptr<TH2> > CP::FFJetSmearingTool::m_Syst_Hist_map
private

Definition at line 192 of file FFJetSmearingTool.h.

◆ m_Syst_Hist_map3d

std::map<std::string,std::unique_ptr<TH3F> > CP::FFJetSmearingTool::m_Syst_Hist_map3d
private

Definition at line 193 of file FFJetSmearingTool.h.

◆ m_Syst_HistPath_map

std::map<std::string,std::string> CP::FFJetSmearingTool::m_Syst_HistPath_map
private

Definition at line 191 of file FFJetSmearingTool.h.

◆ m_Syst_HistTA_map

std::map<std::string,std::unique_ptr<TH2> > CP::FFJetSmearingTool::m_Syst_HistTA_map
private

Definition at line 195 of file FFJetSmearingTool.h.

◆ m_Syst_HistTA_map3d

std::map<std::string,std::unique_ptr<TH3F> > CP::FFJetSmearingTool::m_Syst_HistTA_map3d
private

Definition at line 196 of file FFJetSmearingTool.h.

◆ m_Syst_HistTAPath_map

std::map<std::string,std::string> CP::FFJetSmearingTool::m_Syst_HistTAPath_map
private

Definition at line 194 of file FFJetSmearingTool.h.

◆ m_Syst_MassDefAffected_map

std::map<std::string,std::string> CP::FFJetSmearingTool::m_Syst_MassDefAffected_map
private

Definition at line 189 of file FFJetSmearingTool.h.

◆ m_Syst_TopologyAffected_map

std::map<std::string,std::string> CP::FFJetSmearingTool::m_Syst_TopologyAffected_map
private

Definition at line 190 of file FFJetSmearingTool.h.

◆ m_Syst_uncertparam

std::map<std::string,std::string> CP::FFJetSmearingTool::m_Syst_uncertparam
private

Definition at line 198 of file FFJetSmearingTool.h.

◆ m_TA_ResponseMap

std::unique_ptr<TH2> CP::FFJetSmearingTool::m_TA_ResponseMap
private

Definition at line 177 of file FFJetSmearingTool.h.

◆ m_TAMassWeight

std::unique_ptr<TH3F> CP::FFJetSmearingTool::m_TAMassWeight
private

Definition at line 182 of file FFJetSmearingTool.h.

◆ m_truth_jetColl

std::string CP::FFJetSmearingTool::m_truth_jetColl
private

Definition at line 159 of file FFJetSmearingTool.h.

◆ m_truthlabelaccessor

std::string CP::FFJetSmearingTool::m_truthlabelaccessor
private

Definition at line 160 of file FFJetSmearingTool.h.

◆ m_UFO_ResponseMap

std::unique_ptr<TH2> CP::FFJetSmearingTool::m_UFO_ResponseMap
private

Definition at line 178 of file FFJetSmearingTool.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: