ATLAS Offline Software
SmoothedWZTagger.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
9 SmoothedWZTagger::SmoothedWZTagger( const std::string& name ) :
11 {
12 
14  declareProperty( "MassCutLowFunc", m_strMassCutLow = "", "Lower mass cut");
15  declareProperty( "MassCutHighFunc", m_strMassCutHigh = "", "Higher mass cut");
16  declareProperty( "D2CutFunc", m_strD2Cut = "", "Upper cut on D2");
17  declareProperty( "NtrkCutFunc", m_strNtrkCut = "", "Upper cut on Ntrk");
18 
19 }
20 
22 
23  ATH_MSG_INFO( "Initializing SmoothedWZTagger tool" );
24 
26  m_ptGeV = true;
27 
29  m_useMassCut = true;
30 
31  if ( ! m_configFile.empty() ) {
32 
35 
36  if ( m_wkpt.empty() ) {
37  m_strMassCutLow = m_configReader.GetValue("MassCutLow", "");
38  m_strMassCutHigh = m_configReader.GetValue("MassCutHigh", "");
39  m_strD2Cut = m_configReader.GetValue("D2Cut", "");
40  m_strNtrkCut = m_configReader.GetValue("NtrkCut", "");
41  }
42  else {
43  m_strMassCutLow = m_configReader.GetValue((m_wkpt+".MassCutLow").c_str(), "");
44  m_strMassCutHigh = m_configReader.GetValue((m_wkpt+".MassCutHigh").c_str(), "");
45  m_strD2Cut = m_configReader.GetValue((m_wkpt+".D2Cut").c_str(), "");
46  m_strNtrkCut = m_configReader.GetValue((m_wkpt+".NtrkCut").c_str(), "");
47  }
48 
50  m_jetPtMin = m_configReader.GetValue("pTCutLow", 200.0);
51  m_jetPtMax = m_configReader.GetValue("pTCutHigh", 4000.0);
52 
54  m_decorationName = m_configReader.GetValue("DecorationName", "");
55 
57  m_calcSF = m_configReader.GetValue("CalcSF", false);
58  if ( m_calcSF ) {
59  m_weightDecorationName = m_configReader.GetValue("WeightDecorationName", "");
60  m_weightFileName = m_configReader.GetValue("WeightFile", "");
61  m_weightHistogramName = m_configReader.GetValue("WeightHistogramName", "");
62  m_efficiencyHistogramName = m_configReader.GetValue("EfficiencyHistogramName", "");
63  m_weightFlavors = m_configReader.GetValue("WeightFlavors", "");
64 
66  m_truthLabelName = m_configReader.GetValue("TruthLabelName", "R10TruthLabel_R21Consolidated");
67 
68  if ( m_calibArea.compare("Local") == 0 ) {
69  m_weightConfigPath = PathResolverFindCalibFile(("$WorkDir_DIR/data/BoostedJetTaggers/SmoothedWZTaggers/"+m_weightFileName).c_str());
70  }
71  else if ( m_calibArea.find("eos") != std::string::npos ) {
73  }
74  else {
75  m_weightConfigPath = PathResolverFindCalibFile(("BoostedJetTaggers/"+m_calibArea+"/"+m_weightFileName).c_str());
76  }
77  }
78 
79  }
80  else {
81  if( m_strD2Cut.empty() || m_strMassCutLow.empty() || m_strMassCutHigh.empty() ||
84  ((m_weightDecorationName.empty() ||
85  m_weightHistogramName.empty() ||
86  m_weightFlavors.empty()) && m_calcSF) ) {
87  ATH_MSG_ERROR( "No config file provided AND no parameters specified." ) ;
88  return StatusCode::FAILURE;
89  }
90  }
91 
93  m_useNtrk = !m_strNtrkCut.empty();
94 
96  m_funcD2Cut = std::make_unique<TF1>("strD2Cut", m_strD2Cut.c_str(), 0, 14000);
97  if ( m_useNtrk ) m_funcNtrkCut = std::make_unique<TF1>("strNtrkCut", m_strNtrkCut.c_str(), 0, 14000);
98 
99  ATH_MSG_INFO( "Smoothed WZ Tagger tool initialized" );
100  ATH_MSG_INFO( " Mass cut low : " << m_strMassCutLow );
101  ATH_MSG_INFO( " Mass cut High : " << m_strMassCutHigh );
102  ATH_MSG_INFO( " D2 cut low : " << m_strD2Cut );
103  if ( m_useNtrk )
104  ATH_MSG_INFO( " Ntrk cut low : " << m_strNtrkCut );
105  ATH_MSG_INFO( " DecorationName : " << m_decorationName );
106  if ( m_calcSF ) {
107  ATH_MSG_INFO( "weightDecorationName : " << m_weightDecorationName );
108  ATH_MSG_INFO( "weightFile : " << m_weightFileName );
109  ATH_MSG_INFO( "weightHistogramName : " << m_weightHistogramName );
110  ATH_MSG_INFO( "efficiencyHistogramName : " << m_efficiencyHistogramName );
111  ATH_MSG_INFO( "weightFlavors : " << m_weightFlavors );
112  ATH_MSG_INFO( "TruthLabelName : " << m_truthLabelName );
113  }
114  ATH_MSG_INFO( " Pt cut low : " << m_jetPtMin );
115  ATH_MSG_INFO( " Pt cut high : " << m_jetPtMax );
116 
118  m_acceptInfo.addCut( "PassMassLow", "mJet > mCutLow" );
119  m_acceptInfo.addCut( "PassMassHigh", "mJet < mCutHigh" );
120  m_acceptInfo.addCut( "PassD2", "D2Jet < D2Cut" );
121  if ( m_useNtrk ) {
122  m_acceptInfo.addCut( "PassNtrk", "NtrkJet < NtrkCut" );
123  }
124 
126  printCuts();
127 
130 
132  ATH_MSG_INFO( "Additional decorators that will be attached to jet :" );
133 
136 
137  ATH_CHECK( m_decPassD2Key.initialize() );
138  ATH_CHECK( m_decCutD2Key.initialize() );
139 
140  ATH_MSG_INFO( " " << m_decPassD2Key.key() << " : pass D2 cut" );
141  ATH_MSG_INFO( " " << m_decCutD2Key.key() << " : D2 cut" );
142 
145 
146  ATH_CHECK( m_decPassNtrkKey.initialize() );
147  ATH_CHECK( m_decCutNtrkKey.initialize() );
148 
149  ATH_MSG_INFO( " " << m_decPassNtrkKey.key() << " : pass Ntrk cut" );
150  ATH_MSG_INFO( " " << m_decCutNtrkKey.key() << " : Ntrk cut" );
151 
153  ATH_CHECK( m_decAcceptKey.initialize() );
154 
155 #ifndef XAOD_STANDALONE
167  }
168 #endif
169 
171  ATH_CHECK( m_decAcceptKey.initialize() );
172 
173  return StatusCode::SUCCESS;
174 
175 }
176 
178 
179  ATH_MSG_DEBUG( "Obtaining Smooth WZ result" );
180 
182  asg::AcceptData acceptData( &m_acceptInfo );
183 
185  ATH_CHECK( resetCuts( acceptData ) );
186 
188  ATH_CHECK( checkKinRange( jet, acceptData ) );
189 
192  float jet_pt = jet.pt()/1000.0;
193  float jet_mass = jet.m()/1000.0;
194 
196  float jet_d2 = 0;
197 
200 
203 
205  jet_d2 = readD2(jet);
206 
208  float cut_mass_low = m_funcMassCutLow ->Eval(jet_pt);
209  float cut_mass_high = m_funcMassCutHigh->Eval(jet_pt);
210  float cut_d2 = m_funcD2Cut ->Eval(jet_pt);
211 
213 
221 
223  decCutMLow(jet) = cut_mass_low;
224  decCutMHigh(jet) = cut_mass_high;
225  decCutD2(jet) = cut_d2;
226 
228  ATH_MSG_VERBOSE( "Cut Values : MassWindow = [" << cut_mass_low << "," << cut_mass_high << "], D2Cut = " << cut_d2 );
229  ATH_MSG_VERBOSE( "Cut Values : JetMass = " << jet_mass << ", D2 = " << jet_d2 );
230 
231  if ( jet_mass >= cut_mass_low ) acceptData.setCutResult( "PassMassLow", true );
232 
233  if ( jet_mass <= cut_mass_high ) acceptData.setCutResult( "PassMassHigh", true );
234 
235  if ( jet_d2 < cut_d2 ) acceptData.setCutResult( "PassD2", true );
236 
237  decPassMass(jet) = acceptData.getCutResult( "PassMassLow" ) && acceptData.getCutResult( "PassMassHigh" );
238  decPassD2(jet) = acceptData.getCutResult( "PassD2" );
239 
240  bool passCuts = acceptData.getCutResult( "PassMassLow" ) && acceptData.getCutResult( "PassMassHigh" );
241  passCuts = passCuts && acceptData.getCutResult( "PassD2" );
242 
244  if ( m_useNtrk ) {
245 
246  float cut_ntrk = m_funcNtrkCut->Eval(jet_pt);
247 
249 
255 
257  decCutNtrk(jet) = cut_ntrk;
258 
259  int pv_location = findPV();
260 
261  if(pv_location != -1){
262 
263  if( GetUnGroomTracks(jet, pv_location).isSuccess()){
264 
266 
267  int jet_ntrk = readNtrk500(jet);
268 
269  if ( jet_ntrk < cut_ntrk ) acceptData.setCutResult( "PassNtrk", true );
270  decPassNtrk(jet) = acceptData.getCutResult( "PassNtrk" );
271  passCuts = passCuts && acceptData.getCutResult( "PassNtrk" );
272 
273  }
274  else{
275  acceptData.setCutResult( "ValidJetContent", false );
276  decValidJetContent(jet) = false;
277  return StatusCode::FAILURE;
278  }
279  }
280  else {
281  acceptData.setCutResult( "ValidEventContent", false );
282  }
283 
284  decValidJetContent(jet) = acceptData.getCutResult( "ValidJetContent" );
285  decValidEventContent(jet) = acceptData.getCutResult( "ValidEventContent" );
286 
287  }
288 
290  decTagged(jet) = passCuts;
291 
293  TagResult::TypeEnum myCutResultForSF = TagResult::UNKNOWN;
294  if ( !m_useNtrk ) {
296  if ( acceptData.getCutResult("PassMassLow") && acceptData.getCutResult("PassMassHigh") ) {
297  if ( acceptData.getCutResult("PassD2") ) {
298  myCutResultForSF = TagResult::passMpassD2_2Var;
299  }
300  else {
301  myCutResultForSF = TagResult::passMfailD2_2Var;
302  }
303  }
305  else {
306  if ( acceptData.getCutResult("PassD2") ) {
307  myCutResultForSF = TagResult::failMpassD2_2Var;
308  }
309  else {
310  myCutResultForSF = TagResult::failMfailD2_2Var;
311  }
312  }
313  }
314 
316  ATH_CHECK( getWeight( jet, (bool)acceptData, acceptData ) );
317 
318  if ( m_calcSF ) {
319 
322 
324  decAccept(jet) = myCutResultForSF;
325 
326  }
327 
328  return StatusCode::SUCCESS;
329 
330 }
JSSTaggerBase::m_suppressOutputDependence
bool m_suppressOutputDependence
Definition: JSSTaggerBase.h:189
SmoothedWZTagger::m_useNtrk
bool m_useNtrk
Flag to indicate if Ntrk is used.
Definition: SmoothedWZTagger.h:28
JSSTaggerBase::m_strMassCutLow
std::string m_strMassCutLow
Strings for cut functions.
Definition: JSSTaggerBase.h:192
TagResult::passMpassD2_2Var
@ passMpassD2_2Var
Definition: TagResultEnum.h:13
JSSTaggerBase::resetCuts
StatusCode resetCuts(asg::AcceptData &acceptData) const
Reset cuts.
Definition: JSSTaggerBase.cxx:338
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
JSSTaggerBase::m_readNtrk500Key
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readNtrk500Key
Definition: JSSTaggerBase.h:187
JSSTaggerBase::m_useMassCut
bool m_useMassCut
Flag to indicate if mass window cut is used.
Definition: JSSTaggerBase.h:93
SmoothedWZTagger::m_decPassD2Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decPassD2Key
WriteDecorHandle keys.
Definition: SmoothedWZTagger.h:39
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
JSSTaggerBase::m_configFile
std::string m_configFile
Configuration file name.
Definition: JSSTaggerBase.h:111
JSSTaggerBase::m_configReader
TEnv m_configReader
TEnv instance to read config files.
Definition: JSSTaggerBase.h:62
JSSTaggerBase::m_weightFileName
std::string m_weightFileName
Definition: JSSTaggerBase.h:210
AthCommonDataStore< AthCommonMsg< AlgTool > >::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 > renounce(T &h)
Definition: AthCommonDataStore.h:380
JSSTaggerBase::getWeight
StatusCode getWeight(const xAOD::Jet &jet, bool passSel, asg::AcceptData &acceptData) const
Get SF weight.
Definition: JSSTaggerBase.cxx:596
JSSTaggerBase::m_jetPtMin
float m_jetPtMin
Kinematic bounds for the jet - the units are controlled by m_ptGeV.
Definition: JSSTaggerBase.h:132
JSSTaggerBase::m_decCutMLowKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decCutMLowKey
WriteDecorHandle keys for cut values.
Definition: JSSTaggerBase.h:231
JSSTaggerBase::m_decorationName
std::string m_decorationName
Decoration name.
Definition: JSSTaggerBase.h:202
SmoothedWZTagger::m_decPassNtrkKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decPassNtrkKey
Definition: SmoothedWZTagger.h:40
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TagResult::TypeEnum
TypeEnum
Definition: TagResultEnum.h:11
JSSTaggerBase::m_funcMassCutHigh
std::unique_ptr< TF1 > m_funcMassCutHigh
Definition: JSSTaggerBase.h:198
TagResult::failMpassD2_2Var
@ failMpassD2_2Var
Definition: TagResultEnum.h:15
SmoothedWZTagger::m_funcD2Cut
std::unique_ptr< TF1 > m_funcD2Cut
Functions that are configurable for specific cut values.
Definition: SmoothedWZTagger.h:35
JSSTaggerBase::m_weightHistogramName
std::string m_weightHistogramName
Definition: JSSTaggerBase.h:211
JSSTaggerBase::m_decValidJetContentKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decValidJetContentKey
Definition: JSSTaggerBase.h:76
JSSTaggerBase::m_jetPtMax
float m_jetPtMax
Definition: JSSTaggerBase.h:133
JSSTaggerBase::m_calibArea
std::string m_calibArea
Location where config files live on cvmfs.
Definition: JSSTaggerBase.h:114
TagResult::UNKNOWN
@ UNKNOWN
Definition: TagResultEnum.h:12
JSSTaggerBase::m_truthLabelName
std::string m_truthLabelName
Definition: JSSTaggerBase.h:225
SmoothedWZTagger::SmoothedWZTagger
SmoothedWZTagger(const std::string &name)
Constructor.
Definition: SmoothedWZTagger.cxx:9
JSSTaggerBase::m_decCutMHighKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decCutMHighKey
Definition: JSSTaggerBase.h:232
JSSTaggerBase::m_ptGeV
bool m_ptGeV
Flag to indicate units pT is defined in Set to false by default.
Definition: JSSTaggerBase.h:90
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
JSSTaggerBase::checkKinRange
StatusCode checkKinRange(const xAOD::Jet &jet, asg::AcceptData &acceptData) const
Check and record if jet passes kinematic constraints.
Definition: JSSTaggerBase.cxx:370
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
JSSTaggerBase::m_efficiencyHistogramName
std::string m_efficiencyHistogramName
Definition: JSSTaggerBase.h:212
JSSTaggerBase::calculateJSSRatios
int calculateJSSRatios(const xAOD::Jet &jet) const
Calculate JSS moment ratios in case they are not already saved TODO: Remove this once JSSMomentTools ...
Definition: JSSTaggerBase.cxx:416
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SmoothedWZTagger::m_funcNtrkCut
std::unique_ptr< TF1 > m_funcNtrkCut
Definition: SmoothedWZTagger.h:36
JSSTaggerBase::m_wkpt
std::string m_wkpt
Tagger information.
Definition: JSSTaggerBase.h:128
JSSTaggerBase::m_calcSF
bool m_calcSF
Flag to calculate scale factor.
Definition: JSSTaggerBase.h:205
JSSTaggerBase::m_decValidEventContentKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decValidEventContentKey
Definition: JSSTaggerBase.h:77
JSSTaggerBase::GetUnGroomTracks
StatusCode GetUnGroomTracks(const xAOD::Jet &jet, int indexPV) const
Retrieve Ntrk variable from the ungroomed parent jet.
Definition: JSSTaggerBase.cxx:553
JSSTaggerBase
Definition: JSSTaggerBase.h:39
JSSTaggerBase::findPV
int findPV() const
Find the PV (to be used for Ntrk)
Definition: JSSTaggerBase.cxx:529
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
JSSTaggerBase::initialize
virtual StatusCode initialize() override
Initialize the tool.
Definition: JSSTaggerBase.cxx:73
JSSTaggerBase::m_acceptInfo
asg::AcceptInfo m_acceptInfo
Object that stores the results for a jet.
Definition: JSSTaggerBase.h:65
SmoothedWZTagger::tag
virtual StatusCode tag(const xAOD::Jet &jet) const override
Decorate single jet with tagging info.
Definition: SmoothedWZTagger.cxx:177
SmoothedWZTagger::initialize
virtual StatusCode initialize() override
Run once at the start of the job to setup everything.
Definition: SmoothedWZTagger.cxx:21
SmoothedWZTagger.h
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
SmoothedWZTagger::m_strNtrkCut
std::string m_strNtrkCut
Definition: SmoothedWZTagger.h:32
JSSTaggerBase::printCuts
void printCuts() const
Print configured cuts.
Definition: JSSTaggerBase.cxx:817
JSSTaggerBase::m_weightDecorationName
std::string m_weightDecorationName
String for scale factor decoration names.
Definition: JSSTaggerBase.h:209
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
VertexContainer.h
asg::AcceptData::setCutResult
void setCutResult(const std::string &cutName, bool cutResult)
Set the result of a cut, based on the cut name (safer)
Definition: AcceptData.h:134
SmoothedWZTagger::m_decCutNtrkKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decCutNtrkKey
Definition: SmoothedWZTagger.h:43
asg::AcceptData::getCutResult
bool getCutResult(const std::string &cutName) const
Get the result of a cut, based on the cut name (safer)
Definition: AcceptData.h:98
SmoothedWZTagger::m_decCutD2Key
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decCutD2Key
Definition: SmoothedWZTagger.h:42
JSSTaggerBase::m_readD2Key
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readD2Key
Definition: JSSTaggerBase.h:167
JSSTaggerBase::getConfigReader
StatusCode getConfigReader()
Get configReader StatusCode.
Definition: JSSTaggerBase.cxx:300
JSSTaggerBase::m_decPassMassKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decPassMassKey
Definition: JSSTaggerBase.h:79
SmoothedWZTagger::m_decAcceptKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decAcceptKey
Definition: SmoothedWZTagger.h:44
JSSTaggerBase::m_funcMassCutLow
std::unique_ptr< TF1 > m_funcMassCutLow
TF1 for cut functions.
Definition: JSSTaggerBase.h:197
TagResult::passMfailD2_2Var
@ passMfailD2_2Var
Definition: TagResultEnum.h:14
SmoothedWZTagger::m_strD2Cut
std::string m_strD2Cut
Store functional form of cuts.
Definition: SmoothedWZTagger.h:31
JSSTaggerBase::m_strMassCutHigh
std::string m_strMassCutHigh
Definition: JSSTaggerBase.h:193
JSSTaggerBase::m_weightConfigPath
std::string m_weightConfigPath
Path to the SF configuration root file.
Definition: JSSTaggerBase.h:108
JSSTaggerBase::m_weightFlavors
std::string m_weightFlavors
Definition: JSSTaggerBase.h:213
asg::AcceptData
Definition: AcceptData.h:30
TagResult::failMfailD2_2Var
@ failMfailD2_2Var
Definition: TagResultEnum.h:16
JSSTaggerBase::m_decTaggedKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decTaggedKey
WriteDecorHandle keys for tagging bools.
Definition: JSSTaggerBase.h:71
asg::AcceptInfo::addCut
int addCut(const std::string &cutName, const std::string &cutDescription)
Add a cut; returning the cut position.
Definition: AcceptInfo.h:53
JSSTaggerBase::m_containerName
std::string m_containerName
Configurable members.
Definition: JSSTaggerBase.h:105