![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
17 m_BDTmethod(
"BDT_method"),
18 m_trkSelectionTool(
name+
"_trackselectiontool", this)
27 m_calibArea =
"BoostedJetTaggers/JetQGTaggerBDT/Oct18/";
50 ATH_MSG_ERROR(
"You need to specify where the calibArea is as either being Local or on CVMFS" );
51 return StatusCode::FAILURE;
54 std::string localCalibArea =
"BoostedJetTaggers/share/JetQGTaggerBDT/";
55 ATH_MSG_INFO(
"Using Local calibArea " << localCalibArea );
70 return StatusCode::FAILURE;
83 TMVA::Tools::Instance();
84 for (
auto& tagger : m_bdtTagger) {
85 tagger.tmva = std::make_unique<TMVA::Reader>(
"!Color:!Silent" );
87 tagger.tmva->AddVariable(
"NTracks", &tagger.ntracks );
88 tagger.tmva->AddVariable(
"TrackWidth", &tagger.trackwidth );
89 tagger.tmva->AddVariable(
"JetPt", &tagger.pt );
90 tagger.tmva->AddVariable(
"JetEta", &tagger.eta );
91 tagger.tmva->AddVariable(
"TrackC1", &tagger.trackC1 );
105 return StatusCode::SUCCESS;
128 decTagged(
jet) =
false;
129 return StatusCode::SUCCESS;
140 decScore(
jet) = jet_score;
146 return StatusCode::SUCCESS;
156 float bdt_score(-666.);
158 ATH_MSG_WARNING(
"One (or more) tagger input variable has an undefined value (NaN), setting score to -666" );
161 bdt_score = m_bdtTagger->tmva->EvaluateMVA(
m_BDTmethod.c_str() );
169 m_bdtTagger->pt =
jet.pt()/1000.0;
170 m_bdtTagger->eta =
jet.eta();
174 m_bdtTagger->ntracks = -1.;
175 m_bdtTagger->trackwidth = -1.;
176 m_bdtTagger->trackC1 = -1.;
178 bool validVars =
true;
188 ATH_MSG_ERROR(
"Can't determine QG tagging variables! Try different mode." );
197 bool validVars =
true;
200 float trkWidth = -1.;
203 if ( !
jet.getAttribute<
int>(
"DFCommonJets_QGTagger_NTracks", ntrk) ) {
205 else ATH_MSG_DEBUG(
"Unable to retrieve DFCommonJets_QGTagger_NTracks" );
209 if ( !
jet.getAttribute<
float>(
"DFCommonJets_QGTagger_TracksWidth", trkWidth) ) {
211 else ATH_MSG_DEBUG(
"Unable to retrieve DFCommonJets_QGTagger_TracksWidth" );
215 if ( !
jet.getAttribute<
float>(
"DFCommonJets_QGTagger_TracksC1", trkC1) ) {
217 else ATH_MSG_DEBUG(
"Unable to retrieve DFCommonJets_QGTagger_TracksC1" );
222 m_bdtTagger->ntracks = (
float) ntrk;
223 m_bdtTagger->trackwidth = trkWidth;
224 m_bdtTagger->trackC1 = trkC1;
236 bool validVars =
true;
243 else ATH_MSG_DEBUG(
"Unable to retrieve primary vertex container PrimaryVertices" );
247 else if ( vxCont->
empty() ) {
254 for (
const auto *vx : *vxCont ) {
262 if ( !primvertex )
isValid =
false;
270 std::vector<int> nTrkVec;
273 m_bdtTagger->ntracks = (
float) nTrkVec[primvertex->index()];
280 bool undefTrackWidth =
false;
281 std::vector<float> trkWidthVec;
284 m_bdtTagger->trackwidth = trkWidthVec[primvertex->index()];
288 undefTrackWidth =
true;
289 float weightedwidth = 0.;
293 float weightedwidth2 = 0.;
296 std::vector<const xAOD::TrackParticle*> trackParttmp;
297 if(!
jet.getAssociatedObjects(
"GhostTrack",trackParttmp)){
302 for(
unsigned i=trackParttmp.size();
i>0;
i--){
303 if(!trackParttmp[
i-1]){
304 trackParttmp.erase(trackParttmp.begin()+
i-1);
312 trackParttmp.erase(trackParttmp.begin()+
i-1);
322 for(
unsigned i=0;
i<trackParttmp.size();
i++){
323 double ipt = trackParttmp.at(
i)->pt();
324 double ieta = trackParttmp.at(
i)->eta();
325 double iphi = trackParttmp.at(
i)->phi();
328 double deta_i = trackParttmp.at(
i)->eta() -
jet.eta();
330 double dR_i = sqrt( deta_i*deta_i + dphi_i*dphi_i );
331 weightedwidth += ipt * dR_i;
334 for(
unsigned j=
i+1; j<trackParttmp.size(); j++){
335 double deta = ieta - trackParttmp.at(j)->eta();
337 double dR = sqrt( deta*deta + dphi*dphi );
338 weightedwidth2 += ipt * trackParttmp.at(j)->pt() *
pow(dR,
beta);
342 if(undefTrackWidth) {
343 m_bdtTagger->trackwidth = sumPt>0 ? weightedwidth/sumPt : -0.1;
345 m_bdtTagger->trackC1 = sumPt>0 ? weightedwidth2/(sumPt*sumPt) : -0.1;
355 if(nTracksFromGhostTracks == 0){
356 if(expectedNTracks == 0)
358 return abs(expectedNTracks-nTracksFromGhostTracks) < 3;
359 }
else if(expectedNTracks/nTracksFromGhostTracks < 0.5 && abs(expectedNTracks-nTracksFromGhostTracks) > 5){
def retrieve(aClass, aKey=None)
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual StatusCode tag(const xAOD::Jet &jet) const override
IBoostedJetTagger interface.
std::unique_ptr< TF1 > m_funcScoreCut
JetQGTaggerBDT(const std::string &name)
Constructor.
StatusCode resetCuts(asg::AcceptData &acceptData) const
Reset cuts.
std::atomic< int > m_nWarnVar
Warning counters.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
std::string m_configFile
Configuration file name.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decScoreKey
WriteDecorHandle keys.
TEnv m_configReader
TEnv instance to read config files.
StatusCode accept(const xAOD::Muon *mu)
const int m_nWarnMax
Maximum number of warnings.
float m_jetPtMin
Kinematic bounds for the jet - the units are controlled by m_ptGeV.
__HOSTDEV__ double Phi_mpi_pi(double)
Select isolated Photons, Electrons and Muons.
std::string m_calibArea
Location where config files live on cvmfs.
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
std::string m_tmvaConfigFileName
TMVA configurations for BDT taggers.
::StatusCode StatusCode
StatusCode definition for legacy code.
StatusCode checkKinRange(const xAOD::Jet &jet, asg::AcceptData &acceptData) const
Check and record if jet passes kinematic constraints.
bool getJetProperties(const xAOD::Jet &jet, asg::AcceptData &acceptData) const
Update the jet substructure variables for each jet to use in BDT.
Handle class for adding a decoration to an object.
cut
This script demonstrates how to call a C++ class from Python Also how to use PyROOT is shown.
float getScore(const xAOD::Jet &jet, asg::AcceptData &acceptData) const
Retrieve BDT score.
std::string m_strScoreCut
asg::AnaToolHandle< InDet::IInDetTrackSelectionTool > m_trkSelectionTool
std::string m_tmvaConfigFilePath
virtual StatusCode initialize() override
Initialize the tool.
asg::AcceptInfo m_acceptInfo
Object that stores the results for a jet.
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
void setCutResult(const std::string &cutName, bool cutResult)
Set the result of a cut, based on the cut name (safer)
Class describing a Vertex.
bool passKinRange(const xAOD::Jet &jet) const
Check if jet passes kinematic constraints.
bool getPrecomputedVariables(const xAOD::Jet &jet, asg::AcceptData &acceptData) const
bool getCutResult(const std::string &cutName) const
Get the result of a cut, based on the cut name (safer)
#define ATH_MSG_WARNING(x)
StatusCode getConfigReader()
Get configReader StatusCode.
bool calculateVariables(const xAOD::Jet &jet, asg::AcceptData &acceptData) const
Class describing a TrackParticle.
virtual StatusCode initialize() override
Run once at the start of the job to setup everything.
bool isCorrectNumberOfTracks(int expectedNTracks, int nTracksFromGhostTracks) const
bool empty() const noexcept
Returns true if the collection is empty.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decTaggedKey
WriteDecorHandle keys for tagging bools.
std::string m_containerName
Configurable members.