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 943 of file FFJetSmearingTool.cxx.

943 {
944 CP::CorrectionCode result = CP::CorrectionCode::Ok;
945
946 // Loop over the container
947 for (size_t iJet = 0; iJet < inputs.size(); ++iJet)
948 {
949 result = applyCorrection(*inputs.at(iJet));
950 if (result == CP::CorrectionCode::Error){
951 break;
952 }
953 }
954 return result;
955 }
@ 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 661 of file FFJetSmearingTool.cxx.

661 {
662
663 ATH_MSG_VERBOSE("//---------------------------------------------------------------//");
664 ATH_MSG_VERBOSE("Reco Jet to Smear: pt = " << jet_reco.pt() << ", mass = " << jet_reco.m() << ", eta = " << jet_reco.eta());
665
666 if (std::abs(jet_reco.eta()) > m_EtaRange){//JetCalibTools do not properly for jets with |eta|>2
667 ATH_MSG_DEBUG("This jet exceeds the eta range that the tool allows (|eta|<" << m_EtaRange << ")");
669 }
670 if (jet_reco.m() > m_MaxMass){
671 ATH_MSG_DEBUG("This jet exceeds the mass range that the tool allows jet_mass <" << m_MaxMass << " MeV)");
673 }
674 if (jet_reco.pt() > m_MaxPt){
675 ATH_MSG_DEBUG("This jet exceeds the maximum pt that the tool allows jet_pt <" << m_MaxPt << " MeV)");
677 }
678 if (jet_reco.m() <= 0){
679 ATH_MSG_DEBUG("This jet has negative mass");
681 }
682
683 // Find matched truth jet
684 xAOD::Jet jet_truth_matched;
685 jet_truth_matched.makePrivateStore();
686
687 if (!(getMatchedTruthJet(jet_reco, jet_truth_matched).isSuccess())){
688 ATH_MSG_VERBOSE("No truth jet match with this reco jet. The jet will not be smeared.");
690 }
691
692 ATH_MSG_VERBOSE("Matched truth Jet: pt = " << jet_truth_matched.pt() << ", mass = " << jet_truth_matched.m() << ", eta = " << jet_truth_matched.eta());
693
694 // Get the jet topology
695 std::string jetTopology;
696
697 if (!(getJetTopology( jet_reco, jetTopology)).isSuccess()){
698 ATH_MSG_ERROR("Imposible to obtain the jetTopology");
700 }
701 if (jetTopology == "no_match"){
703 }
704
705 // 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.
706
707 double jet_mass_UFO = 0;
708 double jet_mass_CALO = 0;
709 double jet_mass_TA = 0;
710 double calo_mass_weight=1; // m_comb = Weight*m_Calo + (1-Weight)*m_TA
711
712 float JetTrackAssistedMassCalibrated_from_JetCalibTools;
713
715
716 xAOD::JetFourMom_t jet_reco_CALO;
717 xAOD::JetFourMom_t jet_reco_TA;
718 xAOD::JetFourMom_t jet_reco_Comb;
719
720 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumCalo",jet_reco_CALO);
721 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumTA",jet_reco_TA);
722 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumCombQCD",jet_reco_Comb);
723
724 ATH_MSG_VERBOSE("CALO jet mass " << jet_reco_CALO.mass());
725 ATH_MSG_VERBOSE("TA jet mass " << jet_reco_TA.mass() );
726 ATH_MSG_VERBOSE("Comb jet mass " << jet_reco_Comb.mass() );
727
728 jet_mass_CALO = jet_reco_CALO.mass();
729 jet_mass_TA = jet_reco_TA.mass();
730 jet_reco.getAttribute<float>("JetTrackAssistedMassCalibrated", JetTrackAssistedMassCalibrated_from_JetCalibTools);
731
733 jet_mass_CALO = jet_reco.m();
734 calo_mass_weight = 1;
736 jet_mass_TA = jet_reco.m();
737 jet_reco.getAttribute<float>("JetTrackAssistedMassCalibrated", JetTrackAssistedMassCalibrated_from_JetCalibTools);
738 calo_mass_weight = 0;
740 jet_mass_UFO = jet_reco.m();
741 calo_mass_weight = 1;
742 }
743
744 // 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
745
746 double avg_response_UFO=1;
747 double avg_response_CALO=1;
748 double avg_response_TA=1;
749
751 avg_response_CALO = FFJetSmearingTool::Interpolate2D(m_CALO_ResponseMap.get(), jet_reco.pt()*m_MeVtoGeV, jet_truth_matched.m()*m_MeVtoGeV);
752 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)
753 }
754
756 avg_response_TA = FFJetSmearingTool::Interpolate2D(m_TA_ResponseMap.get(), jet_reco.pt()*m_MeVtoGeV, jet_truth_matched.m()*m_MeVtoGeV);
757 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)
758 }
759
761 avg_response_UFO = FFJetSmearingTool::Interpolate2D(m_UFO_ResponseMap.get(), jet_reco.pt()*m_MeVtoGeV, jet_truth_matched.m()*m_MeVtoGeV);
762 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)
763 }
764
765 // Obtain the jet mass scale (JMS) and the jet mass resolution (JMR) nominal values and variation that correspond to the jet_reco
766
767 double JMS(1), JMS_err(0), JMR(1), JMR_err(0);
768 double scale;
769 double resolution;
770
771 double smeared_UFO_mass = jet_mass_UFO;
772 double smeared_CALO_mass = jet_mass_CALO;
773 double smeared_TA_mass = jet_mass_TA;
774
775 bool is_UFO_mass_smeared = false;
776 bool is_CALO_mass_smeared = false;
777 bool is_TA_mass_smeared = false;
778
780
781 if (!(getJMSJMR(jet_reco, jet_mass_CALO, JetTools::FFJetAllowedMassDefEnum::Calo, jetTopology, JMS_err, JMR_err)).isSuccess()){
783 }
784
785 scale = JMS + JMS_err;
786 resolution = JMR + JMR_err;
787
788 if (TMath::Abs(scale-1) > 0.0001 || TMath::Abs(resolution-1) > 0.0001){
789 is_CALO_mass_smeared = true;
790
791 ATH_MSG_VERBOSE("Forward Folding CALO procedure will use scale=" << scale << ", resolution=" << resolution << " and average respose=" << avg_response_CALO);
792
793 //FF procedure
794 smeared_CALO_mass = jet_mass_CALO * scale + (jet_mass_CALO - avg_response_CALO*jet_truth_matched.m())*(resolution-scale); // FF formula
795 }
796
797 }
798
800
801 if (!(getJMSJMR(jet_reco, jet_mass_TA, JetTools::FFJetAllowedMassDefEnum::TA, jetTopology, JMS_err, JMR_err))){
803 }
804
805 scale = JMS + JMS_err;
806 resolution = JMR + JMR_err;
807
808 if (TMath::Abs(scale-1) > 0.0001 || TMath::Abs(resolution-1) > 0.0001){
809
810 is_TA_mass_smeared = true;
811
812 ATH_MSG_VERBOSE("Forward Folding TA procedure will use scale=" << scale << ", resolution=" << resolution << " and average respose=" << avg_response_TA);
813
814 //FF procedure
815 smeared_TA_mass = jet_mass_TA * scale + (jet_mass_TA - avg_response_TA*jet_truth_matched.m())*(resolution-scale); // FF formula
816 }
817
818 }
819
821
822 if (!(getJMSJMR(jet_reco, jet_mass_UFO, JetTools::FFJetAllowedMassDefEnum::UFO, jetTopology, JMS_err, JMR_err)).isSuccess()){
824 }
825
826 scale = JMS + JMS_err;
827 resolution = JMR + JMR_err;
828
829 if (TMath::Abs(scale-1) > 0.0001 || TMath::Abs(resolution-1) > 0.0001){
830 is_UFO_mass_smeared = true;
831
832 ATH_MSG_VERBOSE("Forward Folding UFO procedure will use scale=" << scale << ", resolution=" << resolution << " and average respose=" << avg_response_UFO);
833
834 //FF procedure
835 smeared_UFO_mass = jet_mass_UFO * scale + (jet_mass_UFO - avg_response_UFO*jet_truth_matched.m())*(resolution-scale); // FF formula
836 }
837
838 }
839
840 // We only smear the jet if we have to. If not, avoid doing extra calculations
841 if (!is_CALO_mass_smeared && !is_TA_mass_smeared && !is_UFO_mass_smeared){
842 ATH_MSG_VERBOSE("This jet is not affected by the systematic. The jet won't be modified");
843 ATH_MSG_VERBOSE("//---------------------------------------------------------------//");
844
846 }
847
848 // Recalculate the weights after the smearing
849 if (m_MassDef == JetTools::FFJetAllowedMassDefEnum::Comb && JetTrackAssistedMassCalibrated_from_JetCalibTools != 0 && jet_mass_CALO != 0){
850 //we check that JetTrackAssistedMassCalibrated_from_JetCalibTools != 0 instead of jet_mass_TA != 0 becuase
851 //there is a problem in the conversion between the mass itself and the four-vector representation (due to a
852 //limitation of floating). This makes the value of jet_mass_TA!=0 in situations where it should be 0.
853 //In order to work arround it we check JetTrackAssistedMassCalibrated_from_JetCalibTools != 0 insead.
854 double caloRes;
855 double TARes;
856
857 xAOD::JetFourMom_t jet_reco_CALO;
858 xAOD::JetFourMom_t jet_reco_TA;
859
860 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumCalo",jet_reco_CALO);
861 jet_reco.getAttribute<xAOD::JetFourMom_t>("JetJMSScaleMomentumTA",jet_reco_TA);
862
863
864 //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
865 //the Calo and TA four momenta before looking at the weights map
866 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
867
868 jet_reco_TA = xAOD::JetFourMom_t(jet_reco_TA.pt(),jet_reco_TA.eta(),jet_reco_TA.phi(),smeared_TA_mass);
869
870
871 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()));
872
873 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()));
874
875 //The histograms with the weights that we are reading were defined with the code "e_LOGmOe_eta" which means that each axis correspond to:
876 //-X: Jet Energy
877 //-Y: Log(Jet_Energy/Jet_mass)
878 //-Z:Eta
879 //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.
880 //We have to use a custom "My_Interpolate" because the Z axis has just one bin (and this makes the Root Interpolate function fail)
881
882 double caloFactor;
883 double TAFactor;
884
885 if (caloRes == 0 ){
886 caloFactor = 0; TAFactor = 1;
887 }else if (TARes == 0){
888 caloFactor = 1; TAFactor = 0;
889 }else{
890 caloFactor = 1./(caloRes*caloRes);
891 TAFactor = 1./(TARes*TARes);
892 }
893
894 calo_mass_weight = caloFactor /(caloFactor + TAFactor);
895
896 ATH_MSG_VERBOSE(" Map Calo weight = " << calo_mass_weight );
897 ATH_MSG_VERBOSE(" Map TA weight = " << 1 - calo_mass_weight );
898 }else if (JetTrackAssistedMassCalibrated_from_JetCalibTools == 0){
899 calo_mass_weight = 1;
900 }else if (jet_mass_CALO == 0){
901 calo_mass_weight = 0;
902 }
903
904 // Calculate the final smeared mass
905 double smeared_mass = 0;
907 smeared_mass = smeared_UFO_mass;
908 ATH_MSG_VERBOSE("Smeared UFO mass " << smeared_UFO_mass);
909 }else{
910 smeared_mass = calo_mass_weight*smeared_CALO_mass + (1 - calo_mass_weight)*smeared_TA_mass;
911 ATH_MSG_VERBOSE("Smeared CALO mass " << smeared_CALO_mass);
912 ATH_MSG_VERBOSE("Smeared TA mass " << smeared_TA_mass);
913 }
914
915 xAOD::JetFourMom_t p4 = jet_reco.jetP4();
916
917 p4 = xAOD::JetFourMom_t(jet_reco.pt(),jet_reco.eta(),jet_reco.phi(),smeared_mass);
918 jet_reco.setJetP4(p4);
919
920 ATH_MSG_VERBOSE("Smeared Reco Jet: pt = " << jet_reco.pt() << ", mass = " << jet_reco.m() << ", eta = " << jet_reco.eta());
921
922 ATH_MSG_VERBOSE("//---------------------------------------------------------------//");
923
925 }
#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
void makePrivateStore()
Create a new (empty) private store for this object.
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:171
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 929 of file FFJetSmearingTool.cxx.

929 {
930 xAOD::Jet* copy = new xAOD::Jet(input);
931
932 // Call the implemented function
934 delete copy;
936 }
937 output = copy;
939 }
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 527 of file FFJetSmearingTool.cxx.

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

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

495 {
496
497 // Get the truth jets of the event
498 const xAOD::JetContainer* jets_truth = nullptr;
499
500 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
501
502 double dRmax_truthJet = 0.75;// matching condition
503 double dRmin=9999; //we will take the closest jet reco-truth
504
505 //Loop over the truth jets in the event to match
506 const xAOD::Jet* close_jet = nullptr;
507 for (const auto *const jet_truth : *jets_truth){
508 float dR_Test = jet_reco.p4().DeltaR(jet_truth->p4());
509 if (dR_Test < dRmax_truthJet){
510 if (dR_Test < dRmin){
511 close_jet = jet_truth;
512 dRmin = dR_Test;
513 }
514 }
515 }
516 if (dRmin > 999){ return StatusCode::FAILURE;}
517
518 jet_truth_matched.setJetP4(close_jet->jetP4());
519 return StatusCode::SUCCESS;
520 }
#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
retrieve(aClass, aKey=None)
Definition PyKernel.py:110
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::TEvent 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::TEvent, 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 996 of file FFJetSmearingTool.cxx.

996 {
997 if (not histo){
998 ATH_MSG_ERROR("Histogram pointer is null in FFJetSmearingTool::Interpolate2D");
999 return 0.;
1000 }
1001 Int_t bin_x = histo->GetXaxis()->FindFixBin(x);
1002 Int_t bin_y = histo->GetYaxis()->FindFixBin(y);
1003 if (bin_x<1 || bin_x>histo->GetNbinsX() || bin_y<1 || bin_y>histo->GetNbinsY()){
1004 ATH_MSG_VERBOSE("The point is outside the histogram domain.");
1005 return 0.;
1006 }
1007
1008 double interpolated_value = JetHelpers::Interpolate(histo, x, y);
1009 return interpolated_value;
1010 }
#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 959 of file FFJetSmearingTool.cxx.

959 {
960
961 if (not histo){
962 ATH_MSG_ERROR("Histogram pointer is null in FFJetSmearingTool::Read3DHistogram");
963 return 0.;
964 }
965
966 double aux_x = x;
967 double aux_y = y;
968 double aux_z = z;
969
970 // Asymptotic values
971 //If the value is outside the histogram region, we take the closest value to that one
972
973 double xMax = histo->GetXaxis()->GetBinLowEdge(histo->GetNbinsX()+1);
974 double xMin = histo->GetXaxis()->GetBinLowEdge(1);
975 double yMax = histo->GetYaxis()->GetBinLowEdge(histo->GetNbinsY()+1);
976 double yMin = histo->GetYaxis()->GetBinLowEdge(1);
977 double zMax = histo->GetZaxis()->GetBinLowEdge(histo->GetNbinsZ()+1);
978 double zMin = histo->GetZaxis()->GetBinLowEdge(1);
979
980 if (x >= xMax) aux_x = xMax-1e-6 ; //so it fits the up-most x-bin
981 if (x <= xMin) aux_x = xMin+1e-6 ; //so it fits the low-most x-bin
982 if (std::isnan(y)) return 0; // no weight if the input is NaN, can happen for log(X)
983 if (y >= yMax) aux_y = yMax-1e-6 ; //so it fits the up-most y-bin
984 if (y <= yMin) aux_y = yMin+1e-6 ; //so it fits the low-most y-bin
985 if (z >= zMax) aux_z = zMax-1e-6 ; //so it fits the up-most z-bin
986 if (z <= zMin) aux_z = zMin+1e-6 ; //so it fits the low-most z-bin
987
988 //Use the interpolate function from JetHelpers.cxx
989 double weight = JetHelpers::Interpolate(histo, aux_x, aux_y, aux_z);
990
991 return weight;
992 }
#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>(dynamic_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>(dynamic_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 for (size_t iComp = 0; iComp < 999; ++iComp){
394
395 const TString prefix = Form("JMRComponent.%zu.",iComp);
396 std::string Syst_Name = settings.GetValue(prefix+"Name","");
397
398 std::string to_find = "MCTYPE";
399 std::string to_replace = m_MCType_string;
400 replaceAllOccurrences(Syst_Name, to_find, to_replace);
401
402 if (!Syst_Name.empty()){
403
404 m_SysList.insert( CP::SystematicVariation(Syst_Name, 1) );
405 m_SysList.insert( CP::SystematicVariation(Syst_Name, -1) );
406 m_Syst_MassDefAffected_map[Syst_Name] = settings.GetValue(prefix+"MassDef","");
407 m_Syst_TopologyAffected_map[Syst_Name] = settings.GetValue(prefix+"Topology","");
408 m_Syst_Affects_JMSorJMR[Syst_Name] = "JMR";
409 m_Syst_HistPath_map[Syst_Name] = settings.GetValue(prefix+"Hist","");
410 m_Syst_uncertparam[Syst_Name] = settings.GetValue(prefix+"Param","");
411
412 replaceAllOccurrences(m_Syst_HistPath_map[Syst_Name], to_find, to_replace);
413
414 // Processing the input histogram name
415 if (m_Syst_uncertparam[Syst_Name] == "PtAbsMass"){
416 m_Syst_Hist_map[Syst_Name] = std::unique_ptr<TH2>(dynamic_cast<TH2*>(data_file->Get(m_Syst_HistPath_map[Syst_Name].c_str())));
417 m_Syst_Hist_map[Syst_Name]->SetDirectory(nullptr);
418 }else if (m_Syst_uncertparam[Syst_Name] == "eLOGmOeAbsEta"){
419 m_Syst_Hist_map3d[Syst_Name] = std::unique_ptr<TH3F>(dynamic_cast<TH3F*>(data_file->Get(m_Syst_HistPath_map[Syst_Name].c_str())));
420 m_Syst_Hist_map3d[Syst_Name]->SetDirectory(nullptr);
421 }
422
423 // For Comb mass we need to read two histograms
425 m_Syst_HistTAPath_map[Syst_Name] = settings.GetValue(prefix+"HistTA","");
426 if (!m_Syst_HistTAPath_map[Syst_Name].empty()){
427 if (m_Syst_uncertparam[Syst_Name] == "PtAbsMass"){
428 m_Syst_HistTA_map[Syst_Name] = std::unique_ptr<TH2>(dynamic_cast<TH2*>(data_file->Get(m_Syst_HistTAPath_map[Syst_Name].c_str())));
429 m_Syst_HistTA_map[Syst_Name]->SetDirectory(nullptr);
430 }else if (m_Syst_uncertparam[Syst_Name] == "eLOGmOeAbsEta"){
431 m_Syst_HistTA_map3d[Syst_Name] = std::unique_ptr<TH3F>(dynamic_cast<TH3F*>(data_file->Get(m_Syst_HistTAPath_map[Syst_Name].c_str())));
432 m_Syst_HistTA_map3d[Syst_Name]->SetDirectory(nullptr);
433 }
434 }
435 }
436
437 }
438 }
439
440 data_file->Close();
441
442 // Skip for UFO -> Read the Calo and TA mass weight histograms from the same file that JetUncertainties uses
444
445 TString Calo_TA_weight_file_name = settings.GetValue("JetUncertainties_UncertaintyRootFile","");
446 const TString Calo_TA_weight_file_path = jet::utils::findFilePath(Calo_TA_weight_file_name.Data(),m_path.c_str(),m_calibArea.c_str());
447
448 if (Calo_TA_weight_file_path.IsNull()){
449 ATH_MSG_ERROR("Cannot find the file with the Calo and TA weights");
450 return StatusCode::FAILURE;
451 }
452
453 TString Calo_weight_hist_name = settings.GetValue("CombMassWeightCaloHist","");
454 if (Calo_weight_hist_name.IsNull()){
455 ATH_MSG_ERROR("Cannot find the histogram name that contains the Calo weights in the config file");
456 return StatusCode::FAILURE;
457 }
458
459 TString TA_weight_hist_name = settings.GetValue("CombMassWeightTAHist","");
460 if (TA_weight_hist_name.IsNull()){
461 ATH_MSG_ERROR("Cannot find the histogram name that contains the TA weights in the config file");
462 return StatusCode::FAILURE;
463 }
464
465 ATH_MSG_INFO(Form(" Calo weights hist: \"%s\"",Calo_weight_hist_name.Data()));
466 ATH_MSG_INFO(Form(" TA weights hist: \"%s\"",TA_weight_hist_name.Data()));
467 ATH_MSG_INFO(Form(" Location: %s",Calo_TA_weight_file_path.Data()));
468
469
470 std::unique_ptr<TFile> Calo_TA_weight_file ( TFile::Open(Calo_TA_weight_file_path));
471 if (!Calo_TA_weight_file || Calo_TA_weight_file->IsZombie()){
472 ATH_MSG_FATAL( "Could not open the first input file: " << Calo_TA_weight_file_path );
473 return StatusCode::FAILURE;
474 }
475
476 m_caloMassWeight = std::unique_ptr<TH3F>(static_cast<TH3F*>(Calo_TA_weight_file->Get(Calo_weight_hist_name)));
477 m_TAMassWeight = std::unique_ptr<TH3F>(static_cast<TH3F*>(Calo_TA_weight_file->Get(TA_weight_hist_name)));
478
479 m_caloMassWeight->SetDirectory(nullptr);
480 m_TAMassWeight->SetDirectory(nullptr);//To keep it open when we close the .root file
481
482
483 Calo_TA_weight_file->Close();
484
485 }
486
487 return StatusCode::SUCCESS;
488 }
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 1014 of file FFJetSmearingTool.cxx.

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

◆ 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: