Skip to content
Snippets Groups Projects
Commit 7561fb05 authored by Pier-Olivier Deviveiros's avatar Pier-Olivier Deviveiros Committed by Graeme Stewart
Browse files

Add new test BDT (TrigTauDiscriminant-00-02-02)

parent f3e4877a
Branches
Tags
No related merge requests found
Showing
with 738 additions and 0 deletions
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
//
/********************************************************************
*
* NAME: TrigTauRecDiscriminant.h
* PACKAGE: Trigger/TrigAlgorithms/TrigTauDiscriminant
*
* AUTHOR: M. Morgenstern (based on tauDiscriBuilder)
* CREATED:
*********************************************************************/
#ifndef TRIGTAUDISCRIBUILDER_H
#define TRIGTAUDISCRIBUILDER_H
#include "TrigInterfaces/FexAlgo.h"
#include "TrigTimeAlgs/TrigTimerSvc.h"
#include "GaudiKernel/Algorithm.h"
#include "GaudiKernel/ToolHandle.h"
#include "TauDiscriminant/TauDiscriToolBase.h"
#include <vector>
namespace HLT {
class TriggerElement;
}
using namespace std;
class TrigTauDiscriBuilder: public HLT::FexAlgo {
public:
/** constructor */
TrigTauDiscriBuilder(const std::string& name, ISvcLocator* pSvcLocator);
/** destructor */
~TrigTauDiscriBuilder();
// Gaudi algorithm hooks
/** HLT method to initialize */
HLT::ErrorCode hltInitialize();
/** HLT method to finalize */
HLT::ErrorCode hltFinalize();
/** HLT method to execute FEX algo on a given TE.
input is last TE from EF ID, output is TE for EF tauRec hypo execution */
HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE);
private:
/** internal tool store */
ToolHandleArray<TauDiscriToolBase> tools;
TauDetailsManager* manager;
/** vector of Timers */
std::vector<TrigTimer* > m_mytimers;
/** Monitoring : m_LLHScore obtained */
double m_LLHScore;
/** Monitoring : m_BDTScore obtained */
double m_BDTScore;
};
#endif
package TrigTauDiscriminant
# =====================================================================
#
# This is the Trigger EF tau ID algorithm package.
#
# =====================================================================
author Marcus Morgenstern <marcus.matthias.morgenstern@cern.ch>
# =====================================================================
public
use AtlasPolicy AtlasPolicy-*
use GaudiInterface GaudiInterface-* External
use TauDiscriminant TauDiscriminant-* PhysicsAnalysis/TauID
use TrigInterfaces TrigInterfaces-* Trigger/TrigSteer
use TrigTimeAlgs TrigTimeAlgs-* Trigger/TrigTools
private
use TrigSteeringEvent TrigSteeringEvent-* Trigger/TrigEvent
use TrigT1Interfaces TrigT1Interfaces-* Trigger/TrigT1
use xAODTau xAODTau-* Event/xAOD
use TrigParticle TrigParticle-* Trigger/TrigEvent
# =====================================================================
apply_pattern dual_use_library files="*.cxx"
apply_pattern declare_runtime files="../share/*.root ../share/*.bin ../share/*.txt"
apply_pattern declare_joboptions files="*.txt *.py"
apply_pattern declare_python_modules files="*.py"
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
# AUTHOR: Marcin.Wolter@cern.ch
# CREATED: 20 March 2008
#
# 23 Nov 2010: cleaning up (Noel Dawe)
from AthenaCommon.Logging import logging
from AthenaCommon.AlgSequence import AlgSequence
from AthenaCommon.SystemOfUnits import *
from AthenaCommon.Constants import *
from AthenaCommon.AppMgr import ToolSvc
import traceback
from TrigTauDiscriminant.TrigTauDiscriminantConf import TrigTauDiscriBuilder
def singleton(cls):
log = logging.getLogger('%s::__init__'% cls.__name__)
instances = {}
def getinstance(*args, **kwargs):
if cls in instances:
log.warning("Attempting to construct more than one %s. Returning the singleton."% cls.__name__)
return instances[cls]
obj = cls(*args, **kwargs)
instances[cls] = obj
return obj
return getinstance
#@singleton
class TrigTauDiscriGetter(TrigTauDiscriBuilder):
__slots__ = [ '_mytools']
def __init__(self, name = "TrigTauDiscriminant"):
super( TrigTauDiscriGetter , self ).__init__( name )
#monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
from TrigTauDiscriminant.TrigTauDiscriminantMonitoring import TrigTauDiscriminantValidationMonitoring, TrigTauDiscriminantOnlineMonitoring
validation = TrigTauDiscriminantValidationMonitoring()
online = TrigTauDiscriminantOnlineMonitoring()
from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
time = TrigTimeHistToolConfig("Time")
self.AthenaMonTools = [ time, validation, online ]
self.Tools = [self.LLHtoolset(), self.BDTtoolset()]
def LLHtoolset(self):
tools = []
mlog = logging.getLogger('TrigTauDiscriGetter::configure LLH:')
from TauDiscriminant.TauDiscriminantConf import TauLLH
tauLLH = TauLLH()
tauLLH.FileNameTauPDF = "pdfs_tau_trigger.root"
tauLLH.FileNameJetPDF = "pdfs_jet_trigger.root"
return tauLLH
def BDTtoolset(self):
from TauDiscriminant.TauDiscriminantConf import TauJetBDT
return TauJetBDT(jetBDT = "trigger.jet.BDT.bin",
jetSigBits = "trigger.sig.bits.jet.BDT.txt")
class TrigTauDiscriGetter2015(TrigTauDiscriBuilder):
__slots__ = [ '_mytools']
def __init__(self, name = "TrigTauDiscriminant2015"):
super( TrigTauDiscriGetter2015 , self ).__init__( name )
#monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = []
from TrigTauDiscriminant.TrigTauDiscriminantMonitoring import TrigTauDiscriminantValidationMonitoring, TrigTauDiscriminantOnlineMonitoring
validation = TrigTauDiscriminantValidationMonitoring()
online = TrigTauDiscriminantOnlineMonitoring()
from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
time = TrigTimeHistToolConfig("Time")
self.AthenaMonTools = [ time, validation, online ]
self.Tools = [self.LLHtoolset(), self.BDTtoolset()]
def LLHtoolset(self):
tools = []
mlog = logging.getLogger('TrigTauDiscriGetter2015::configure LLH:')
from TauDiscriminant.TauDiscriminantConf import TauLLH
tauLLH = TauLLH()
tauLLH.FileNameTauPDF = "pdfs_tau_trigger.root"
tauLLH.FileNameJetPDF = "pdfs_jet_trigger.root"
return tauLLH
def BDTtoolset(self):
from TauDiscriminant.TauDiscriminantConf import TauJetBDT
return TauJetBDT(jetBDT = "trigger.jet.BDT.DC14.ver1.bin",
jetSigBits = "trigger.sig.bits.jet.BDT.DC14.ver1.txt")
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
################# Validation, DQ checks
from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig
class TrigTauDiscriminantOnlineMonitoring(TrigGenericMonitoringToolConfig):
def __init__ (self, name="TrigTauDiscriminantOnlineMonitoring"):
super(TrigTauDiscriminantOnlineMonitoring, self).__init__(name)
self.defineTarget("Online")
self.Histograms += [ defineHistogram('EF_LLHScore', type='TH1F', title="EF LLHScore; LLH score; a.u.", xbins=100, xmin=-30., xmax=30.) ]
self.Histograms += [ defineHistogram('EF_BDTScore', type='TH1F', title="EF BDTScore; BDT score; a.u.", xbins=50, xmin=-0.1, xmax=1.) ]
########## add validation specific histograms
class TrigTauDiscriminantValidationMonitoring(TrigTauDiscriminantOnlineMonitoring):
def __init__ (self, name="TrigTauDiscriminantValidationMonitoring"):
super(TrigTauDiscriminantValidationMonitoring, self).__init__(name)
self.defineTarget("Validation")
File added
from TrigTauDiscriminant.TrigTauDiscriGetter import TrigTauDiscriGetter
TrigTauDiscriGetter()
File added
File added
File added
1
NUMTRACK I
0 1
-3
-3
-1
2
BDT F
ET F
3
1.000000E+00
-4 20
1 0
0.000000 0.548691
21656.333923 0.548691
22926.343918 0.548691
24593.296051 0.548691
26306.161880 0.548691
28070.671082 0.548691
30043.027878 0.548691
32125.659943 0.548691
34487.464905 0.548691
37277.324677 0.548691
40839.645386 0.548691
46339.218140 0.548691
60690.322876 0.548691
98979.080200 0.548691
149154.571533 0.548691
200771.240234 0.548691
255304.763794 0.548691
321777.038574 0.548691
426951.782227 0.548691
1000000.000000 0.548691
-2 0.000000E+00
-2 1.000000E+00
-1
1.000000E+00
-4 20
1 0
0.000000 0.548691
21656.333923 0.548691
22926.343918 0.548691
24593.296051 0.548691
26306.161880 0.548691
28070.671082 0.548691
30043.027878 0.548691
32125.659943 0.548691
34487.464905 0.548691
37277.324677 0.548691
40839.645386 0.548691
46339.218140 0.548691
60690.322876 0.548691
98979.080200 0.548691
149154.571533 0.548691
200771.240234 0.548691
255304.763794 0.548691
321777.038574 0.548691
426951.782227 0.548691
1000000.000000 0.548691
-2 0.000000E+00
-2 1.000000E+00
-1
1.000000E+00
-4 20
1 0
0.000000 0.548691
21656.333923 0.548691
22926.343918 0.548691
24593.296051 0.548691
26306.161880 0.548691
28070.671082 0.548691
30043.027878 0.548691
32125.659943 0.548691
34487.464905 0.548691
37277.324677 0.548691
40839.645386 0.548691
46339.218140 0.548691
60690.322876 0.548691
98979.080200 0.548691
149154.571533 0.548691
200771.240234 0.548691
255304.763794 0.548691
321777.038574 0.548691
426951.782227 0.548691
1000000.000000 0.548691
-2 0.000000E+00
-2 1.000000E+00
-1
3
1.000000E+00
-4 20
1 0
0.000000 0.637151
22682.210922 0.637151
24791.942596 0.637151
26799.808502 0.637151
28804.681778 0.637151
30424.184799 0.637151
32293.365479 0.637151
34302.516937 0.637151
36481.178284 0.637151
39073.657990 0.637151
42224.178314 0.637151
47190.910339 0.637151
61415.950775 0.637151
115868.278503 0.637151
178576.110840 0.637151
230849.807739 0.637151
284403.106689 0.637151
346304.779053 0.637151
443284.576416 0.637151
1000000.000000 0.637151
-2 0.000000E+00
-2 1.000000E+00
-1
1.000000E+00
-4 20
1 0
0.000000 0.637151
22682.210922 0.637151
24791.942596 0.637151
26799.808502 0.637151
28804.681778 0.637151
30424.184799 0.637151
32293.365479 0.637151
34302.516937 0.637151
36481.178284 0.637151
39073.657990 0.637151
42224.178314 0.637151
47190.910339 0.637151
61415.950775 0.637151
115868.278503 0.637151
178576.110840 0.637151
230849.807739 0.637151
284403.106689 0.637151
346304.779053 0.637151
443284.576416 0.637151
1000000.000000 0.637151
-2 0.000000E+00
-2 1.000000E+00
-1
1.000000E+00
-4 20
1 0
0.000000 0.637151
22682.210922 0.637151
24791.942596 0.637151
26799.808502 0.637151
28804.681778 0.637151
30424.184799 0.637151
32293.365479 0.637151
34302.516937 0.637151
36481.178284 0.637151
39073.657990 0.637151
42224.178314 0.637151
47190.910339 0.637151
61415.950775 0.637151
115868.278503 0.637151
178576.110840 0.637151
230849.807739 0.637151
284403.106689 0.637151
346304.779053 0.637151
443284.576416 0.637151
1000000.000000 0.637151
-2 0.000000E+00
-2 1.000000E+00
-1
1
NUMTRACK I
0 1
-3
-3
-1
2
BDT F
ET F
3
1.000000E+00
-4 20
1 0
0.000000 0.460962
21656.333923 0.460962
22926.343918 0.475361
24593.296051 0.482205
26306.161880 0.489278
28070.671082 0.490478
30043.027878 0.495068
32125.659943 0.495966
34487.464905 0.500836
37277.324677 0.502799
40839.645386 0.505320
46339.218140 0.511377
60690.322876 0.523181
98979.080200 0.558646
149154.571533 0.571698
200771.240234 0.572958
255304.763794 0.574896
321777.038574 0.578565
426951.782227 0.579559
1000000.000000 0.579559
-2 0.000000E+00
-2 1.000000E+00
-1
1.000000E+00
-4 20
1 0
0.000000 0.481426
21656.333923 0.481426
22926.343918 0.493074
24593.296051 0.496705
26306.161880 0.500792
28070.671082 0.502677
30043.027878 0.505702
32125.659943 0.507152
34487.464905 0.510871
37277.324677 0.513498
40839.645386 0.517145
46339.218140 0.524921
60690.322876 0.538352
98979.080200 0.577657
149154.571533 0.588020
200771.240234 0.590350
255304.763794 0.592971
321777.038574 0.595311
426951.782227 0.595627
1000000.000000 0.595627
-2 0.000000E+00
-2 1.000000E+00
-1
1.000000E+00
-4 20
1 0
0.000000 0.495644
21656.333923 0.495644
22926.343918 0.503231
24593.296051 0.506629
26306.161880 0.510270
28070.671082 0.511804
30043.027878 0.515213
32125.659943 0.517773
34487.464905 0.521487
37277.324677 0.523384
40839.645386 0.529536
46339.218140 0.536197
60690.322876 0.550337
98979.080200 0.591893
149154.571533 0.600343
200771.240234 0.603642
255304.763794 0.605938
321777.038574 0.606170
426951.782227 0.607602
1000000.000000 0.607602
-2 0.000000E+00
-2 1.000000E+00
-1
3
1.000000E+00
-4 20
1 0
0.000000 0.466324
22682.210922 0.466324
24791.942596 0.479020
26799.808502 0.482824
28804.681778 0.484509
30424.184799 0.485687
32293.365479 0.491166
34302.516937 0.490368
36481.178284 0.490207
39073.657990 0.490703
42224.178314 0.494530
47190.910339 0.496902
61415.950775 0.498161
115868.278503 0.510038
178576.110840 0.499222
230849.807739 0.499147
284403.106689 0.485451
346304.779053 0.482073
443284.576416 0.469679
1000000.000000 0.469679
-2 0.000000E+00
-2 1.000000E+00
-1
1.000000E+00
-4 20
1 0
0.000000 0.476452
22682.210922 0.476452
24791.942596 0.487989
26799.808502 0.490991
28804.681778 0.492825
30424.184799 0.492600
32293.365479 0.498917
34302.516937 0.497358
36481.178284 0.498247
39073.657990 0.499069
42224.178314 0.502665
47190.910339 0.503869
61415.950775 0.505014
115868.278503 0.519243
178576.110840 0.509743
230849.807739 0.509525
284403.106689 0.501346
346304.779053 0.496038
443284.576416 0.483801
1000000.000000 0.483801
-2 0.000000E+00
-2 1.000000E+00
-1
1.000000E+00
-4 20
1 0
0.000000 0.485142
22682.210922 0.485142
24791.942596 0.495053
26799.808502 0.497982
28804.681778 0.497967
30424.184799 0.498625
32293.365479 0.504418
34302.516937 0.504108
36481.178284 0.504522
39073.657990 0.505752
42224.178314 0.508298
47190.910339 0.510756
61415.950775 0.511699
115868.278503 0.526592
178576.110840 0.519114
230849.807739 0.519139
284403.106689 0.512130
346304.779053 0.507713
443284.576416 0.497771
1000000.000000 0.497771
-2 0.000000E+00
-2 1.000000E+00
-1
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
/********************************************************************
*
* NAME: TrigTauDiscriBuilder.cxx
* PACKAGE: Trigger/TrigAlgorithms/TrigTauDiscriminant
*
* AUTHOR: M. Morgenstern
* *
* Run a subset of the offline TauDiscriminant routines in the EF
*********************************************************************/
#include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h"
#include "TrigSteeringEvent/TrigRoiDescriptor.h"
#include "xAODTau/TauJetContainer.h"
#include "xAODTau/TauJetAuxContainer.h"
#include "xAODTau/TauDefs.h"
#include "TauDiscriminant/TauDiscriToolBase.h"
#include "TauDiscriminant/FakeTauBits.h"
#include "TrigTauDiscriminant/TrigTauDiscriBuilder.h"
using namespace std;
/////////////////////////////////////////////////////////////////
// Invokes base class constructor.
TrigTauDiscriBuilder::TrigTauDiscriBuilder(const std::string& name,ISvcLocator* pSvcLocator):
HLT::FexAlgo(name, pSvcLocator),
tools(this),
manager(0)
{
declareProperty("Tools", tools, "List of TrigTauDiscriminantTools");
declareMonitoredVariable("EF_LLHScore",m_LLHScore);
declareMonitoredVariable("EF_BDTScore",m_BDTScore);
}
/////////////////////////////////////////////////////////////////
TrigTauDiscriBuilder::~TrigTauDiscriBuilder()
{ }
/////////////////////////////////////////////////////////////////
HLT::ErrorCode TrigTauDiscriBuilder::hltInitialize()
{
msg() << MSG::INFO << "TrigTauDiscriBuilder::initialize()" << endreq;
this->manager = new TauDetailsManager(&*evtStore(), true);
///////////////////
// Allocate Tools //
////////////////////
// check tool names
if ( tools.begin() == tools.end() ) {
msg() << MSG::ERROR << " no tools given for this algorithm." << endreq;
return HLT::BAD_JOB_SETUP;
}
// find tools
//-------------------------------------------------------------------------
ToolHandleArray<TauDiscriToolBase> ::iterator p_itT = tools.begin();
ToolHandleArray<TauDiscriToolBase> ::iterator p_itTE = tools.end();
msg() << MSG::INFO << "List of tools in execution sequence:" << endreq;
msg() << MSG::INFO << "------------------------------------" << endreq;
for(; p_itT != p_itTE; ++p_itT ) {
StatusCode p_sc = p_itT->retrieve();
if( p_sc.isFailure() ) {
msg() << MSG::WARNING << "Cannot find tool named <";
msg() << *p_itT << ">" << endreq;
return HLT::BAD_JOB_SETUP;
}
else {
//add to manager
if( (*p_itT)->prepare(*this->manager).isFailure() ) {
msg() << MSG::FATAL << "Initialization failed in tool " << p_itT->name() << endreq;
return HLT::BAD_JOB_SETUP;
}
//add to timer
else {
msg() << MSG::INFO << "REGTEST ";
msg() <<" add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name() << endreq;
if( doTiming() ) m_mytimers.push_back(addTimer((*p_itT)->name())) ;
}
}
}
msg() << MSG::INFO << " " << endreq;
msg() << MSG::INFO << "------------------------------------" << endreq;
return HLT::OK;
}
/////////////////////////////////////////////////////////////////
HLT::ErrorCode TrigTauDiscriBuilder::hltFinalize()
{
msg() << MSG::DEBUG << "Finalizing TrigTauDiscriBuilder" << endreq;
if(this->manager) delete this->manager;
return HLT::OK;
}
/////////////////////////////////////////////////////////////////
// ATHENA EXECUTE METHOD:
HLT::ErrorCode TrigTauDiscriBuilder::hltExecute(const HLT::TriggerElement* /*inputTE*/, HLT::TriggerElement* outputTE){
msg() << MSG::DEBUG << "Executing TrigTauDiscriBuilder" << endreq;
xAOD::TauJetContainer* tau_container = 0;
const xAOD::TauJetContainer* const_tau_container(0);
HLT::ErrorCode hltStatus = getFeature(outputTE, const_tau_container, "TrigTauRecMerged");
tau_container = const_cast<xAOD::TauJetContainer*>(const_tau_container);
if (hltStatus!=HLT::OK || ! tau_container) {
msg() << MSG::DEBUG << "No input tau container found!" << endreq;
return HLT::OK;
}
FakeTauBits* fakeBits(0);
FakeTauScores* fakeScores(0);
// Update event-based variables
if (!this->manager->updateEvent()) {
msg() << MSG::WARNING << "Updating event-based variables in TauDetailsManager failed! Do not trust discriminant outputs!" << endreq;
return HLT::OK;
}
xAOD::TauJetContainer::iterator tau_it(tau_container->begin());
xAOD::TauJetContainer::iterator tau_end(tau_container->end());
// Loop over tau's:
for (; tau_it != tau_end; ++tau_it) {
if (!this->manager->update(**tau_it)) {
msg() << MSG::WARNING << "Updating tau-based variables in TauDetailsManager failed! Do not trust discriminant outputs!" << endreq;
return HLT::OK;
}
msg() << MSG::VERBOSE << *this->manager << endreq;
//-----------------------------------------------------------------
// Process the candidate
//-----------------------------------------------------------------
ToolHandleArray<TauDiscriToolBase>::iterator tool_it(this->tools.begin());
ToolHandleArray<TauDiscriToolBase>::iterator tool_end(this->tools.end());
//-----------------------------------------------------------------
// Loop stops when Failure indicated by one of the tools
//-----------------------------------------------------------------
std::vector<TrigTimer* >::iterator itimer = m_mytimers.begin();
for(; tool_it != tool_end; ++tool_it ) {
msg() << MSG::VERBOSE << "Invoking tool " << tool_it->name() << endreq;
if ( doTiming() && itimer != m_mytimers.end() ) { (*itimer)->start();}
StatusCode sc = (*tool_it)->execute( *tau_it, fakeBits, fakeScores);
if( sc.isFailure() ) {
msg() << MSG::FATAL << "Execute failed in tool " << tool_it->name() << endreq;
return HLT::ERROR;
}
itimer++;
if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->stop();
}
m_LLHScore = (*tau_it)->discriminant(xAOD::TauJetParameters::Likelihood);
m_BDTScore = (*tau_it)->discriminant(xAOD::TauJetParameters::BDTJetScore);
}
return HLT::OK;
}
#include "TrigTauDiscriminant/TrigTauDiscriBuilder.h"
#include "GaudiKernel/DeclareFactoryEntries.h"
DECLARE_ALGORITHM_FACTORY( TrigTauDiscriBuilder )
DECLARE_FACTORY_ENTRIES(TrigTauDiscriminant)
{
DECLARE_ALGORITHM( TrigTauDiscriBuilder )
}
#include "GaudiKernel/LoadFactoryEntries.h"
LOAD_FACTORY_ENTRIES(TrigTauDiscriminant)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment