diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/TrigTauDiscriminant/TrigTauDiscriBuilder.h b/Trigger/TrigAlgorithms/TrigTauDiscriminant/TrigTauDiscriminant/TrigTauDiscriBuilder.h new file mode 100755 index 0000000000000000000000000000000000000000..763ddcaa3eaaf25a563433de8b8c5ee727c0cb61 --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/TrigTauDiscriminant/TrigTauDiscriBuilder.h @@ -0,0 +1,66 @@ +/* + 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 diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/cmt/requirements b/Trigger/TrigAlgorithms/TrigTauDiscriminant/cmt/requirements new file mode 100755 index 0000000000000000000000000000000000000000..ca7cb5f57a61678e1c0b8f067dbad8fb462eb0f3 --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/cmt/requirements @@ -0,0 +1,30 @@ +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" diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriGetter.py b/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriGetter.py new file mode 100644 index 0000000000000000000000000000000000000000..9f318e42b3a11a46bc55e6baa2a84173502ed466 --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriGetter.py @@ -0,0 +1,96 @@ +# 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") diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriminantMonitoring.py b/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriminantMonitoring.py new file mode 100644 index 0000000000000000000000000000000000000000..3fcd48b4400ed5fefbe206dc0e012f2e19745205 --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/python/TrigTauDiscriminantMonitoring.py @@ -0,0 +1,24 @@ +# 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") + + + + + + diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/LMTCutsLLHTrigger.root b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/LMTCutsLLHTrigger.root new file mode 100644 index 0000000000000000000000000000000000000000..98cdd83fbdbaeab72816ff488643c72f437c61ba Binary files /dev/null and b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/LMTCutsLLHTrigger.root differ diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/TrigTauDiscri_jobOptions.py b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/TrigTauDiscri_jobOptions.py new file mode 100755 index 0000000000000000000000000000000000000000..55b19d97eff46fd7abe641409b409955337ce438 --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/TrigTauDiscri_jobOptions.py @@ -0,0 +1,2 @@ +from TrigTauDiscriminant.TrigTauDiscriGetter import TrigTauDiscriGetter +TrigTauDiscriGetter() diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_jet_trigger.root b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_jet_trigger.root new file mode 100644 index 0000000000000000000000000000000000000000..eea3238b0f15f2420170329c8341e92db514fe22 Binary files /dev/null and b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_jet_trigger.root differ diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_tau_trigger.root b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_tau_trigger.root new file mode 100644 index 0000000000000000000000000000000000000000..448f625e6764443e851db6d8216bc26796b580f0 Binary files /dev/null and b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/pdfs_tau_trigger.root differ diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.jet.BDT.DC14.ver1.bin b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.jet.BDT.DC14.ver1.bin new file mode 100644 index 0000000000000000000000000000000000000000..acb0a3eab2157bdc5c1187450505b9171ff10d9f Binary files /dev/null and b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.jet.BDT.DC14.ver1.bin differ diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.DC14.ver1.txt b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.DC14.ver1.txt new file mode 100644 index 0000000000000000000000000000000000000000..e002535875aff1b71a05df49651c0103a495f440 --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.DC14.ver1.txt @@ -0,0 +1,167 @@ +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 diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.txt b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.txt new file mode 100644 index 0000000000000000000000000000000000000000..1a5cc293e3d307cb98426e775e51ef84cef9dcae --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/share/trigger.sig.bits.jet.BDT.txt @@ -0,0 +1,167 @@ +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 diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/TrigTauDiscriBuilder.cxx b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/TrigTauDiscriBuilder.cxx new file mode 100644 index 0000000000000000000000000000000000000000..bb33f1437488427f802bdd0df1337ebcbabe026c --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/TrigTauDiscriBuilder.cxx @@ -0,0 +1,171 @@ +/* + 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; +} + + + + + diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_entries.cxx b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_entries.cxx new file mode 100755 index 0000000000000000000000000000000000000000..13780e0f7379c7d871a07c7d5ee902d8e7d35e28 --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_entries.cxx @@ -0,0 +1,11 @@ +#include "TrigTauDiscriminant/TrigTauDiscriBuilder.h" +#include "GaudiKernel/DeclareFactoryEntries.h" + + +DECLARE_ALGORITHM_FACTORY( TrigTauDiscriBuilder ) + +DECLARE_FACTORY_ENTRIES(TrigTauDiscriminant) +{ + DECLARE_ALGORITHM( TrigTauDiscriBuilder ) +} + diff --git a/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_load.cxx b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_load.cxx new file mode 100755 index 0000000000000000000000000000000000000000..08472b06107c94e562fc46e4dc2d2d0dcf5c687d --- /dev/null +++ b/Trigger/TrigAlgorithms/TrigTauDiscriminant/src/components/TrigTauDiscriminant_load.cxx @@ -0,0 +1,4 @@ +#include "GaudiKernel/LoadFactoryEntries.h" + +LOAD_FACTORY_ENTRIES(TrigTauDiscriminant) +