diff --git a/Trigger/TrigAlgorithms/TrigTauRec/TrigTauRec/TrigTauRecMerged.h b/Trigger/TrigAlgorithms/TrigTauRec/TrigTauRec/TrigTauRecMerged.h index 5b95de334dcc18163eff80e4bc7772c86f684ba4..856ed1415cbc0d86cb66ac5d5666e98c2d9506dd 100755 --- a/Trigger/TrigAlgorithms/TrigTauRec/TrigTauRec/TrigTauRecMerged.h +++ b/Trigger/TrigAlgorithms/TrigTauRec/TrigTauRec/TrigTauRecMerged.h @@ -22,6 +22,7 @@ #include "TrigTimeAlgs/TrigTimerSvc.h" #include "GaudiKernel/ToolHandle.h" #include "tauRecTools/ITauToolBase.h" +//#include "tauRecTools/TauJetRNNEvaluator.h" #include "LumiBlockComps/ILuminosityTool.h" #include "BeamSpotConditionsData/BeamSpotData.h" @@ -205,14 +206,36 @@ class TrigTauRecMerged: public HLT::FexAlgo { std::vector<unsigned char> m_calo_errors; /** track errors */ std::vector<unsigned char> m_track_errors; - /** author */ - std::vector<unsigned char> m_author; - /** deltaZ0 core Trks*/ - std::vector<float> m_deltaZ0coreTrks; - - /** deltaZ0 wide Trks*/ - std::vector<float> m_deltaZ0wideTrks; + // RNN ID monitoring + // retrieved from tool handle, if tool exists + // needs migration of RNN tools to master + //TauJetRNNEvaluator* m_rnn_evaluator; + + float m_RNN_scalar_ptRatioEflowApprox; + float m_RNN_scalar_mEflowApprox; + float m_RNN_scalar_pt_jetseed_log; + + int m_RNN_Nclusters; + std::vector<double> m_RNN_cluster_et_log; + std::vector<double> m_RNN_cluster_dEta; + std::vector<double> m_RNN_cluster_dPhi; + std::vector<double> m_RNN_cluster_CENTER_LAMBDA; + std::vector<double> m_RNN_cluster_SECOND_LAMBDA; + std::vector<double> m_RNN_cluster_SECOND_R; + + int m_RNN_Ntracks; + std::vector<double> m_RNN_track_pt_log; + std::vector<double> m_RNN_track_dEta; + std::vector<double> m_RNN_track_dPhi; + std::vector<double> m_RNN_track_d0_abs_log; + std::vector<double> m_RNN_track_z0sinThetaTJVA_abs_log; + std::vector<double> m_RNN_track_nInnermostPixelHits; + std::vector<double> m_RNN_track_nPixelHits; + std::vector<double> m_RNN_track_nSCTHits; + + float m_RNNJetScore; + float m_RNNJetScoreSigTrans; }; #endif diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py index d9f76cf6859e215e3cada408bfa8964906ba2795..491fc8c3c849a618ec8e4567e22018a83241f9e4 100644 --- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py +++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py @@ -124,7 +124,6 @@ def getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='', ca from tauRecTools.tauRecToolsConf import TauCalibrateLC TauCalibrateLC = TauCalibrateLC(name = _name, - #calibrationFile = "EnergyCalibrationLC2012_retuned.root", calibrationFile = calibFileName, doEnergyCorrection = correctEnergy, doAxisCorrection = correctAxis) @@ -134,14 +133,46 @@ def getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='', ca cached_instances[_name] = TauCalibrateLC return TauCalibrateLC +######################################################################## +# MvaTESVariableDecorator +def getMvaTESVariableDecorator(): + + _name = sPrefix + 'MvaTESVariableDecorator' + + if _name in cached_instances: + return cached_instances[_name] + + from AthenaCommon.AppMgr import ToolSvc + from tauRecTools.tauRecToolsConf import MvaTESVariableDecorator + MvaTESVariableDecorator = MvaTESVariableDecorator(name = _name) + + ToolSvc += MvaTESVariableDecorator + cached_instances[_name] = MvaTESVariableDecorator + return MvaTESVariableDecorator + +######################################################################## +# MvaTESEvaluator +def getMvaTESEvaluator(): + + _name = sPrefix + 'MvaTESEvaluator' + + if _name in cached_instances: + return cached_instances[_name] + + from AthenaCommon.AppMgr import ToolSvc + from tauRecTools.tauRecToolsConf import MvaTESEvaluator + MvaTESEvaluator = MvaTESEvaluator(name = _name, + WeightFileName = 'OnlineMvaTES_BRT_v1.weights.root') + + ToolSvc += MvaTESEvaluator + cached_instances[_name] = MvaTESEvaluator + return MvaTESEvaluator + ######################################################################## # Tau cell variables calculation -def getCellVariables(cellConeSize=0.2, prefix=''): - #if prefix is not given, take global one - if not prefix: - prefix=sPrefix +def getCellVariables(cellConeSize=0.2): - _name = prefix + 'CellVariables' + _name = sPrefix + 'CellVariables' if _name in cached_instances: return cached_instances[_name] @@ -676,10 +707,11 @@ def getTrackToVertexTool(): ######################################################################## # Tau-Track Association def getTauTrackFinder(applyZ0cut=False, maxDeltaZ0=2, noSelector = False, prefix=''): - #if prefix is not given, take global one - if not prefix: - prefix=sPrefix - _name = sPrefix + 'TauTrackFinder' + + #if prefix is not given, take global one + if not prefix: + prefix=sPrefix + _name = prefix + 'TauTrackFinder' if _name in cached_instances: return cached_instances[_name] @@ -720,7 +752,144 @@ def getTauGenericPi0Cone(): cached_instances[_name] = TauGenericPi0Cone return TauGenericPi0Cone -#end +######################################################################## +# TauTrackClassifier +def getTauTrackClassifier(): + + _name = sPrefix + 'TauTrackClassifier' + + if _name in cached_instances: + return cached_instances[_name] + + from AthenaCommon.AppMgr import ToolSvc + from tauRecTools.tauRecToolsConf import tauRecTools__TauTrackClassifier as TauTrackClassifier + from tauRecTools.tauRecToolsConf import tauRecTools__TrackMVABDT as TrackMVABDT + + import PyUtils.RootUtils as ru + ROOT = ru.import_root() + import cppyy + cppyy.loadDictionary('xAODTau_cDict') + + input_file_name = 'EFtracks_BDT_classifier_v0.root' + calibrationFolder = 'TrigTauRec/00-11-02/' + BDTcut = 0.45 + deltaZ0 = 1.0 + + # ========================================================================= + EFtrackBDT = TrackMVABDT( + name = _name + "_MVABDT", + InputWeightsPath = input_file_name, + Threshold = BDTcut, + DeltaZ0 = deltaZ0, + ExpectedFlag = ROOT.xAOD.TauJetParameters.unclassified, + inTrigger = True, + calibFolder = calibrationFolder + ) + + ToolSvc += EFtrackBDT + + classifier = TauTrackClassifier( + name=_name, + Classifiers=[EFtrackBDT] + ) + + cached_instances[_name] = classifier + return classifier + +######################################################################## +# TauIDVarCalculator +def getTauIDVarCalculator(): + + _name = sPrefix + 'TauIDVarCalculator' + + if _name in cached_instances: + return cached_instances[_name] + + from AthenaCommon.AppMgr import ToolSvc + from tauRecTools.tauRecToolsConf import TauIDVarCalculator + TauIDVarCalculator = TauIDVarCalculator(name=_name) + + ToolSvc += TauIDVarCalculator + cached_instances[_name] = TauIDVarCalculator + return TauIDVarCalculator + +######################################################################## +# TauJetRNNEvaluator +def getTauJetRNNEvaluator(NetworkFile0P="", NetworkFile1P="", NetworkFile3P="", OutputVarname="RNNJetScore", + MaxTracks=10, MaxClusters=6, MaxClusterDR=1.0, + InputLayerScalar="scalar", InputLayerTracks="tracks", InputLayerClusters="clusters", + OutputLayer="rnnid_output", OutputNode="sig_prob"): + + _name = sPrefix + 'TauJetRNNEvaluator' + + if _name in cached_instances: + return cached_instances[_name] + + from AthenaCommon.AppMgr import ToolSvc + from tauRecTools.tauRecToolsConf import TauJetRNNEvaluator + TauJetRNNEvaluator = TauJetRNNEvaluator(name=_name, + NetworkFile0P=NetworkFile0P, + NetworkFile1P=NetworkFile1P, + NetworkFile3P=NetworkFile3P, + OutputVarname=OutputVarname, + MaxTracks=MaxTracks, + MaxClusters=MaxClusters, + MaxClusterDR=MaxClusterDR, + InputLayerScalar=InputLayerScalar, + InputLayerTracks=InputLayerTracks, + InputLayerClusters=InputLayerClusters, + OutputLayer=OutputLayer, + OutputNode=OutputNode) + + ToolSvc += TauJetRNNEvaluator + cached_instances[_name] = TauJetRNNEvaluator + return TauJetRNNEvaluator + +######################################################################## +# TauWPDecoratorJetRNN +def getTauWPDecoratorJetRNN(): + + _name = sPrefix + 'TauWPDecoratorJetRNN' + + if _name in cached_instances: + return cached_instances[_name] + + import PyUtils.RootUtils as ru + ROOT = ru.import_root() + import cppyy + cppyy.loadDictionary('xAODTau_cDict') + + from AthenaCommon.AppMgr import ToolSvc + from tauRecTools.tauRecToolsConf import TauWPDecorator + TauWPDecorator = TauWPDecorator( name=_name, + flatteningFile0Prong = "rnnid_flat_0p_v4.root", + flatteningFile1Prong = "rnnid_flat_1p_v4.root", + flatteningFile3Prong = "rnnid_flat_mp_v4.root", + CutEnumVals = + [ ROOT.xAOD.TauJetParameters.JetRNNSigVeryLoose, ROOT.xAOD.TauJetParameters.JetRNNSigLoose, + ROOT.xAOD.TauJetParameters.JetRNNSigMedium, ROOT.xAOD.TauJetParameters.JetRNNSigTight ], + SigEff0P = [0.98, 0.90, 0.65, 0.50], + SigEff1P = [0.992, 0.99, 0.965, 0.94], + SigEff3P = [0.99, 0.98, 0.865, 0.80], + ScoreName = "RNNJetScore", + NewScoreName = "RNNJetScoreSigTrans", + DefineWPs = True, + ) + + ToolSvc += TauWPDecorator + cached_instances[_name] = TauWPDecorator + return TauWPDecorator + +# target efficiencies used for 2017 BDT: +# SigEff1P = [0.995, 0.99, 0.97, 0.90], +# SigEff3P = [0.995, 0.94, 0.88, 0.78], + + + +# end + + + """ obsolete methods diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfig.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfig.py index b448439d97e4de8fcaec067b87970abb24ed78a8..0b6c7b4fa94a7e52e680b29c684d8a61cdd83364 100644 --- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfig.py +++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration """ TrigTauRec """ @@ -56,7 +56,7 @@ class TrigTauRecMerged_Tau (TrigTauRecMerged) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass @@ -91,17 +91,17 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMerged) : import TrigTauRec.TrigTauAlgorithmsHolder as taualgs tools = [] - taualgs.setPrefix("TrigTau_") + taualgs.setPrefix("TrigTau2012_") #what should run in trigger??? #same as tauRec (but without Pi0 cluster finder) tools.append(taualgs.getJetSeedBuilder()) tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default tools.append(taualgs.getTauAxis()) - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTau2012_")) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2)) tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTau2012_")) #cellConeSize 0.2!! + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) #cellConeSize 0.2!! #tools.append(taualgs.getElectronVetoVars()) #needed? tools.append(taualgs.getTauVertexVariables()) @@ -111,7 +111,7 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMerged) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -126,6 +126,7 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMerged) : class TrigTauRecMerged_TauPreselection (TrigTauRecMerged) : + __slots__ = [ '_mytools'] def __init__(self, name = "TrigTauRecMerged_TauPreselection"): super( TrigTauRecMerged_TauPreselection , self ).__init__( name ) @@ -158,15 +159,12 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMerged) : tools.append(taualgs.getTauAxis()) # Count tracks with deltaZ0 cut of 2mm -> Need to remove quality criteria for fast-tracks here # Insert bypass later? - # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017 (see ATR-15845) - if TriggerFlags.run2Config == '2016': - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauPreselection_", noSelector=False)) - else: - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, prefix="TrigTauPreselection_", noSelector=False)) + # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017-2018 (see ATR-15845) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, noSelector=False)) # Calibrate to TES tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauPreselection_")) + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) # tools.append(taualgs.getElectronVetoVars()) # Variables combining tracking and calorimeter information tools.append(taualgs.getTauCommonCalcVars()) @@ -178,7 +176,7 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMerged) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -190,8 +188,8 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMerged) : ## add beam type flag from AthenaCommon.BeamFlags import jobproperties self.BeamType = jobproperties.Beam.beamType() - - + + class TrigTauRecMerged_TauFTK (TrigTauRecMerged) : __slots__ = [ '_mytools'] def __init__(self, name = "TrigTauRecMerged_TauFTK"): @@ -226,11 +224,11 @@ class TrigTauRecMerged_TauFTK (TrigTauRecMerged) : tools.append(taualgs.getTauAxis()) # Count tracks with deltaZ0 cut of 2mm -> Need to remove quality criteria for fast-tracks here # Insert bypass later? - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauFTK_", noSelector = False)) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, noSelector = False)) # Calibrate to TES tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauFTK_")) + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) # tools.append(taualgs.getElectronVetoVars()) # Variables combining tracking and calorimeter information tools.append(taualgs.getTauCommonCalcVars()) @@ -242,7 +240,7 @@ class TrigTauRecMerged_TauFTK (TrigTauRecMerged) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -287,11 +285,59 @@ class TrigTauRecMerged_TauCaloOnly (TrigTauRecMerged) : # Calibrate to TES tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy', caloOnly=True)) # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauCaloOnly_")) + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' + pass + + self.Tools = tools + + ## add beam type flag + from AthenaCommon.BeamFlags import jobproperties + self.BeamType = jobproperties.Beam.beamType() + +class TrigTauRecMerged_TauCaloOnlyMVA (TrigTauRecMerged) : + __slots__ = [ '_mytools'] + def __init__(self, name = "TrigTauRecMerged_TauCaloOnlyMVA"): + super( TrigTauRecMerged_TauCaloOnlyMVA , self ).__init__( name ) + self._mytools = [] + + # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = [] + from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring + validation = TrigTauRecValidationMonitoring() + online = TrigTauRecOnlineMonitoring() + + from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig + time = TrigTimeHistToolConfig("Time") + self.AthenaMonTools = [ time, validation, online ] + + import TrigTauRec.TrigTauAlgorithmsHolder as taualgs + tools = [] + + taualgs.setPrefix("TrigTauCaloOnlyMVA_") + + # Collection name - not stored + self.OutputCollection = "TrigTauRecCaloOnly" + + # Only include tools needed for calo pre-selection + + # Set seedcalo energy scale (Full RoI) + tools.append(taualgs.getJetSeedBuilder()) + # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger) + tools.append(taualgs.getTauAxis()) + # Calibrate to TES + tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy', caloOnly=True)) + # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) + # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt() + tools.append(taualgs.getMvaTESVariableDecorator()) + tools.append(taualgs.getMvaTESEvaluator()) + + for tool in tools: + tool.inTrigger = True + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -332,15 +378,12 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMerged) : tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger) tools.append(taualgs.getTauAxis()) - # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017 (see ATR-15845) - if TriggerFlags.run2Config == '2016': - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauPrecision_")) - else: - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, prefix="TrigTauPrecision_")) + # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017-2018 (see ATR-15845) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1)) # Calibrate to TES tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauPrecision_")) + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) # tools.append(taualgs.getElectronVetoVars()) # Lifetime variables tools.append(taualgs.getTauVertexVariables()) @@ -353,7 +396,7 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMerged) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -361,5 +404,101 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMerged) : ## add beam type flag from AthenaCommon.BeamFlags import jobproperties self.BeamType = jobproperties.Beam.beamType() + + + +class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMerged) : + __slots__ = [ '_mytools'] + + def __init__(self, name = "TrigTauRecMerged_TauPrecisionMVA", doMVATES=False, doTrackBDT=False, doRNN=False): + + super( TrigTauRecMerged_TauPrecisionMVA , self ).__init__( name ) + + self._mytools = [] + + # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = [] + from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring + validation = TrigTauRecValidationMonitoring() + online = TrigTauRecOnlineMonitoring() + + from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig + time = TrigTimeHistToolConfig("Time") + self.AthenaMonTools = [ time, validation, online ] + + import TrigTauRec.TrigTauAlgorithmsHolder as taualgs + tools = [] + + # using same prefix as in TauPrecision sequence should be safe if tools with different configurations have different names + # e.g. TauTrackFinder in 2016 using dz0=2mm instead of 1mm in 2017 + taualgs.setPrefix("TrigTau_") + + # Collection name + self.OutputCollection = "TrigTauRecMerged" + + # Include full set of tools + + # Set seedcalo energy scale (Full RoI) + tools.append(taualgs.getJetSeedBuilder()) + # Associate RoI vertex or Beamspot to tau - don't use TJVA + tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default + # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger) + tools.append(taualgs.getTauAxis()) + + # for now, use 'doMVATES=False' to detect tracktwoEF, instead of introducing new flag + if not doMVATES: + # Count tracks with deltaZ0 cut of 1mm for tracktwoEF + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1)) + else: + # tightened to 0.75 mm for tracktwoMVA (until the track BDT can be used) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=0.75, prefix='TrigTauTightDZ_')) + + if doTrackBDT: + # BDT track classification + tools.append(taualgs.getTauTrackClassifier()) + + # Calibrate to calo TES + tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) + + if doMVATES: + # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt() + tools.append(taualgs.getMvaTESVariableDecorator()) + tools.append(taualgs.getMvaTESEvaluator()) + + # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) + # tools.append(taualgs.getElectronVetoVars()) + # Lifetime variables + tools.append(taualgs.getTauVertexVariables()) + # Variables combining tracking and calorimeter information + tools.append(taualgs.getTauCommonCalcVars()) + # Cluster-based sub-structure, with dRMax also + tools.append(taualgs.getTauSubstructure()) + # tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=False, correctAxis=True, postfix='_onlyAxis')) + tools.append(taualgs.getPileUpCorrection()) + + if doRNN: + # RNN tau ID + tools.append(taualgs.getTauJetRNNEvaluator(NetworkFile0P="rnnid_config_0p_v3.json", + NetworkFile1P="rnnid_config_1p_v3.json", + NetworkFile3P="rnnid_config_mp_v3.json", + MaxTracks=10, + MaxClusters=6, + MaxClusterDR=1.0)) + # flattened RNN score and WP + tools.append(taualgs.getTauWPDecoratorJetRNN()) + + + for tool in tools: + tool.inTrigger = True + tool.calibFolder = 'TrigTauRec/00-11-02/' + pass + + self.Tools = tools + + ## add beam type flag + from AthenaCommon.BeamFlags import jobproperties + self.BeamType = jobproperties.Beam.beamType() + + #end diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py index fa826a5d182109a09dcefa3eebec679a65b6d5b3..ea725c603d1b6b886a82f6563d4bda994dc57f13 100644 --- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py +++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration """ TrigTauRec """ @@ -56,7 +56,7 @@ class TrigTauRecMerged_Tau (TrigTauRecMergedMT) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass @@ -91,17 +91,17 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMergedMT) : import TrigTauRec.TrigTauAlgorithmsHolder as taualgs tools = [] - taualgs.setPrefix("TrigTau_") + taualgs.setPrefix("TrigTau2012_") #what should run in trigger??? #same as tauRec (but without Pi0 cluster finder) tools.append(taualgs.getJetSeedBuilder()) tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default tools.append(taualgs.getTauAxis()) - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTau2012_")) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2)) tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTau2012_")) #cellConeSize 0.2!! + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) #cellConeSize 0.2!! #tools.append(taualgs.getElectronVetoVars()) #needed? tools.append(taualgs.getTauVertexVariables()) @@ -111,7 +111,7 @@ class TrigTauRecMerged_Tau2012 (TrigTauRecMergedMT) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -158,15 +158,12 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMergedMT) : tools.append(taualgs.getTauAxis()) # Count tracks with deltaZ0 cut of 2mm -> Need to remove quality criteria for fast-tracks here # Insert bypass later? - # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017 (see ATR-15845) - if TriggerFlags.run2Config == '2016': - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauPreselection_", noSelector=False)) - else: - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, prefix="TrigTauPreselection_", noSelector=False)) + # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017-2018 (see ATR-15845) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, noSelector=False)) # Calibrate to TES tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauPreselection_")) + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) # tools.append(taualgs.getElectronVetoVars()) # Variables combining tracking and calorimeter information tools.append(taualgs.getTauCommonCalcVars()) @@ -178,7 +175,7 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMergedMT) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -190,8 +187,8 @@ class TrigTauRecMerged_TauPreselection (TrigTauRecMergedMT) : ## add beam type flag from AthenaCommon.BeamFlags import jobproperties self.BeamType = jobproperties.Beam.beamType() - - + + class TrigTauRecMerged_TauFTK (TrigTauRecMergedMT) : __slots__ = [ '_mytools'] def __init__(self, name = "TrigTauRecMerged_TauFTK"): @@ -226,11 +223,11 @@ class TrigTauRecMerged_TauFTK (TrigTauRecMergedMT) : tools.append(taualgs.getTauAxis()) # Count tracks with deltaZ0 cut of 2mm -> Need to remove quality criteria for fast-tracks here # Insert bypass later? - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauFTK_", noSelector = False)) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, noSelector = False)) # Calibrate to TES tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauFTK_")) + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) # tools.append(taualgs.getElectronVetoVars()) # Variables combining tracking and calorimeter information tools.append(taualgs.getTauCommonCalcVars()) @@ -242,7 +239,7 @@ class TrigTauRecMerged_TauFTK (TrigTauRecMergedMT) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -262,12 +259,13 @@ class TrigTauRecMerged_TauCaloOnly (TrigTauRecMergedMT) : self._mytools = [] # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = [] - from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring - validation = TrigTauRecValidationMonitoring() - online = TrigTauRecOnlineMonitoring() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") + # not used for now? + #from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring + #validation = TrigTauRecValidationMonitoring() + #online = TrigTauRecOnlineMonitoring() + + #from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig + #time = TrigTimeHistToolConfig("Time") #self.AthenaMonTools = [ time, validation, online ] import TrigTauRec.TrigTauAlgorithmsHolder as taualgs @@ -287,11 +285,59 @@ class TrigTauRecMerged_TauCaloOnly (TrigTauRecMergedMT) : # Calibrate to TES tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy', caloOnly=True)) # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauCaloOnly_")) + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) + + for tool in tools: + tool.inTrigger = True + tool.calibFolder = 'TrigTauRec/00-11-02/' + pass + + self.Tools = tools + + ## add beam type flag + from AthenaCommon.BeamFlags import jobproperties + self.BeamType = jobproperties.Beam.beamType() + +class TrigTauRecMerged_TauCaloOnlyMVA (TrigTauRecMergedMT) : + __slots__ = [ '_mytools'] + def __init__(self, name = "TrigTauRecMerged_TauCaloOnlyMVA"): + super( TrigTauRecMerged_TauCaloOnlyMVA , self ).__init__( name ) + self._mytools = [] + + # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = [] + from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring + validation = TrigTauRecValidationMonitoring() + online = TrigTauRecOnlineMonitoring() + + from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig + time = TrigTimeHistToolConfig("Time") + self.AthenaMonTools = [ time, validation, online ] + + import TrigTauRec.TrigTauAlgorithmsHolder as taualgs + tools = [] + + taualgs.setPrefix("TrigTauCaloOnlyMVA_") + + # Collection name - not stored + self.OutputCollection = "TrigTauRecCaloOnly" + + # Only include tools needed for calo pre-selection + + # Set seedcalo energy scale (Full RoI) + tools.append(taualgs.getJetSeedBuilder()) + # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger) + tools.append(taualgs.getTauAxis()) + # Calibrate to TES + tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy', caloOnly=True)) + # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) + # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt() + tools.append(taualgs.getMvaTESVariableDecorator()) + tools.append(taualgs.getMvaTESEvaluator()) for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -332,15 +378,12 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMergedMT) : tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger) tools.append(taualgs.getTauAxis()) - # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017 (see ATR-15845) - if TriggerFlags.run2Config == '2016': - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=2, prefix="TrigTauPrecision_")) - else: - tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1, prefix="TrigTauPrecision_")) + # Count tracks with deltaZ0 cut of 2mm for 2016 and 1mm for 2017-2018 (see ATR-15845) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1)) # Calibrate to TES tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies - tools.append(taualgs.getCellVariables(cellConeSize=0.2, prefix="TrigTauPrecision_")) + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) # tools.append(taualgs.getElectronVetoVars()) # Lifetime variables tools.append(taualgs.getTauVertexVariables()) @@ -353,7 +396,7 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMergedMT) : for tool in tools: tool.inTrigger = True - tool.calibFolder = 'TrigTauRec/00-11-01/' + tool.calibFolder = 'TrigTauRec/00-11-02/' pass self.Tools = tools @@ -361,5 +404,101 @@ class TrigTauRecMerged_TauPrecision (TrigTauRecMergedMT) : ## add beam type flag from AthenaCommon.BeamFlags import jobproperties self.BeamType = jobproperties.Beam.beamType() + + + +class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMergedMT) : + __slots__ = [ '_mytools'] + + def __init__(self, name = "TrigTauRecMerged_TauPrecisionMVA", doMVATES=False, doTrackBDT=False, doRNN=False): + + super( TrigTauRecMerged_TauPrecisionMVA , self ).__init__( name ) + + self._mytools = [] + + # monitoring part. To switch off do in topOption TriggerFlags.enableMonitoring = [] + from TrigTauRec.TrigTauRecMonitoring import TrigTauRecValidationMonitoring, TrigTauRecOnlineMonitoring + validation = TrigTauRecValidationMonitoring() + online = TrigTauRecOnlineMonitoring() + + from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig + time = TrigTimeHistToolConfig("Time") + self.AthenaMonTools = [ time, validation, online ] + + import TrigTauRec.TrigTauAlgorithmsHolder as taualgs + tools = [] + + # using same prefix as in TauPrecision sequence should be safe if tools with different configurations have different names + # e.g. TauTrackFinder in 2016 using dz0=2mm instead of 1mm in 2017 + taualgs.setPrefix("TrigTau_") + + # Collection name + self.OutputCollection = "TrigTauRecMerged" + + # Include full set of tools + + # Set seedcalo energy scale (Full RoI) + tools.append(taualgs.getJetSeedBuilder()) + # Associate RoI vertex or Beamspot to tau - don't use TJVA + tools.append(taualgs.getTauVertexFinder(doUseTJVA=False)) #don't use TJVA by default + # Set LC energy scale (0.2 cone) and intermediate axis (corrected for vertex: useless at trigger) + tools.append(taualgs.getTauAxis()) + + # for now, use 'doMVATES=False' to detect tracktwoEF, instead of introducing new flag + if not doMVATES: + # Count tracks with deltaZ0 cut of 1mm for tracktwoEF + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1)) + else: + # tightened to 0.75 mm for tracktwoMVA (until the track BDT can be used) + tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=0.75, prefix='TrigTauTightDZ_')) + + if doTrackBDT: + # BDT track classification + tools.append(taualgs.getTauTrackClassifier()) + + # Calibrate to calo TES + tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=True, correctAxis=False, postfix='_onlyEnergy')) + + if doMVATES: + # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt() + tools.append(taualgs.getMvaTESVariableDecorator()) + tools.append(taualgs.getMvaTESEvaluator()) + + # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies + tools.append(taualgs.getCellVariables(cellConeSize=0.2)) + # tools.append(taualgs.getElectronVetoVars()) + # Lifetime variables + tools.append(taualgs.getTauVertexVariables()) + # Variables combining tracking and calorimeter information + tools.append(taualgs.getTauCommonCalcVars()) + # Cluster-based sub-structure, with dRMax also + tools.append(taualgs.getTauSubstructure()) + # tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=False, correctAxis=True, postfix='_onlyAxis')) + tools.append(taualgs.getPileUpCorrection()) + + if doRNN: + # RNN tau ID + tools.append(taualgs.getTauJetRNNEvaluator(NetworkFile0P="rnnid_config_0p_v3.json", + NetworkFile1P="rnnid_config_1p_v3.json", + NetworkFile3P="rnnid_config_mp_v3.json", + MaxTracks=10, + MaxClusters=6, + MaxClusterDR=1.0)) + # flattened RNN score and WP + tools.append(taualgs.getTauWPDecoratorJetRNN()) + + + for tool in tools: + tool.inTrigger = True + tool.calibFolder = 'TrigTauRec/00-11-02/' + pass + + self.Tools = tools + + ## add beam type flag + from AthenaCommon.BeamFlags import jobproperties + self.BeamType = jobproperties.Beam.beamType() + + #end diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py index e23ecb7b552ee92d29ade7852f97fdf9d64fb34c..051a99cd356890f5ca7572ab5da7ffa38abecf36 100644 --- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py +++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py @@ -7,8 +7,6 @@ errorcalolabels = 'NoROIDescr:NoCellCont:EmptyCellCont:NoClustCont:NoClustKey:Em errortracklabels = 'NoTrkCont:NoVtxCont' -authorlabels = 'AutauRec:Autau13p:AuBoth:AutauRecOnly:Autau13pOnly' - class TrigTauRecOnlineMonitoring(TrigGenericMonitoringToolConfig): def __init__ (self, name="TrigTauRecOnlineMonitoring"): super(TrigTauRecOnlineMonitoring, self).__init__(name) @@ -61,8 +59,8 @@ class TrigTauRecOnlineMonitoring(TrigGenericMonitoringToolConfig): self.Histograms += [ defineHistogram('EF_innerTrkAvgDist', type='TH1F', title=" EF inner track average distance; innerTrkAvgDist; nRoIs", xbins=40, xmin=-0.05, xmax=0.5) ] self.Histograms += [ defineHistogram('EF_SumPtTrkFrac', type='TH1F', title=" EF Sum Pt Track Fraction; SumPtTrkFrac; nRoIs", xbins=40, xmin=-0.5, xmax=1.1) ] - self.Histograms += [ defineHistogram('EF_ActualInteractions', type='TH1F', title=" Number of actual interaction per bunch crossing;ActualInteractions;nevents", xbins=50, xmin=0.0, xmax=50.) ] - self.Histograms += [ defineHistogram('EF_AvgInteractions', type='TH1F', title=" Number of average interaction per bunch crossing;AvgInteractions;nevents", xbins=50, xmin=0.0, xmax=50.) ] + self.Histograms += [ defineHistogram('EF_ActualInteractions', type='TH1F', title=" Number of actual interaction per bunch crossing;ActualInteractions;nevents", xbins=80, xmin=0.0, xmax=80.) ] + self.Histograms += [ defineHistogram('EF_AvgInteractions', type='TH1F', title=" Number of average interaction per bunch crossing;AvgInteractions;nevents", xbins=80, xmin=0.0, xmax=80.) ] self.Histograms += [ defineHistogram('EF_beamspot_x', type='TH1F', title=" Beamspot position;Beamspot x;nevents", xbins=50, xmin=-10.0, xmax=10.) ] self.Histograms += [ defineHistogram('EF_beamspot_y', type='TH1F', title=" Beamspot position;Beamspot y;nevents", xbins=50, xmin=-10.0, xmax=10.) ] @@ -71,11 +69,33 @@ class TrigTauRecOnlineMonitoring(TrigGenericMonitoringToolConfig): self.Histograms += [ defineHistogram('EF_calo_errors', type='TH1F', title=" EF Calo Errors ; ; nRoIs", xbins=10, xmin=-0.5, xmax=9.5 , labels=errorcalolabels) ] self.Histograms += [ defineHistogram('EF_track_errors', type='TH1F', title=" EF Track Errors ; ; nRoIs", xbins=2, xmin=-0.5, xmax=2.5 , labels=errortracklabels) ] - self.Histograms += [ defineHistogram('EF_author', type='TH1F', title=" EF author ; ; nRoIs", xbins=5, xmin=0.5, xmax=5.5 , labels=authorlabels) ] - self.Histograms += [ defineHistogram('EF_deltaZ0coreTrks', type='TH1F', title=" EF delta Z0 coreTrks wrt leadTrk ; #Delta Z0 [mm]; nRoIs x nTracks", xbins=160, xmin=-20, xmax=20) ] - self.Histograms += [ defineHistogram('EF_deltaZ0wideTrks', type='TH1F', title=" EF delta Z0 wideTrks wrt leadTrk ; #Delta Z0 [mm]; nRoIs x nTracks", xbins=160, xmin=-20, xmax=20) ] - + # RNN ID + # scalar inputs + self.Histograms += [ defineHistogram('EF_RNN_scalar_ptRatioEflowApprox', type='TH1F', title=" EF RNN scalar ptRatioEflowApprox; min(ptRatioEflowApprox 4.)", xbins=50, xmin=0., xmax=4.) ] + self.Histograms += [ defineHistogram('EF_RNN_scalar_mEflowApprox', type='TH1F', title=" EF RNN scalar mEflowApprox; Log10(max(mEflowApprox 140.)", xbins=50, xmin=0., xmax=5.) ] + self.Histograms += [ defineHistogram('EF_RNN_scalar_pt_jetseed_log', type='TH1F', title=" EF RNN scalar pt_jetseed_log; Log10(tau.ptJetSeed)", xbins=50, xmin=3.5, xmax=7.) ] + # cluster inputs + self.Histograms += [ defineHistogram('EF_RNN_Nclusters', type='TH1F', title=" EF RNN Nclusters; Number of clusters", xbins=10, xmin=0., xmax=10.) ] + self.Histograms += [ defineHistogram('EF_RNN_cluster_et_log', type='TH1F', title=" EF RNN cluster et_log; Log10(cluster E_{T})", xbins=50, xmin=1., xmax=7.) ] + self.Histograms += [ defineHistogram('EF_RNN_cluster_dEta', type='TH1F', title=" EF RNN cluster dEta; #Delta#eta(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5) ] + self.Histograms += [ defineHistogram('EF_RNN_cluster_dPhi', type='TH1F', title=" EF RNN cluster dPhi; #Delta#phi(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5) ] + # track inputs + self.Histograms += [ defineHistogram('EF_RNN_Ntracks', type='TH1F', title=" EF RNN Ntracks; Number of tracks", xbins=12, xmin=0., xmax=12.) ] + self.Histograms += [ defineHistogram('EF_RNN_track_pt_log', type='TH1F', title=" EF RNN track pt_log; Log10(track p_{T})", xbins=50, xmin=2.7, xmax=7.) ] + self.Histograms += [ defineHistogram('EF_RNN_track_dEta', type='TH1F', title=" EF RNN track dEta; #Delta#eta(track tau)", xbins=50, xmin=-0.5, xmax=0.5) ] + self.Histograms += [ defineHistogram('EF_RNN_track_dPhi', type='TH1F', title=" EF RNN track dPhi; #Delta#phi(track xtau)", xbins=50, xmin=-0.5, xmax=0.5) ] + self.Histograms += [ defineHistogram('EF_RNN_track_d0_abs_log', type='TH1F', title=" EF RNN track d0_abs_log; Log10(Abs(track.d0()) + 1e-6)", xbins=50, xmin=-6.1, xmax=2.) ] + self.Histograms += [ defineHistogram('EF_RNN_track_z0sinThetaTJVA_abs_log', type='TH1F', title=" EF RNN track z0sinThetaTJVA_abs_log; Log10(Abs(track.z0sinThetaTJVA(tau)) + 1e-6)", xbins=50, xmin=-6.1, xmax=4.) ] + self.Histograms += [ defineHistogram('EF_RNN_track_nInnermostPixelHits', type='TH1F', title=" EF RNN track nInnermostPixelHits; nInnermostPixelHits", xbins=4, xmin=0., xmax=4.) ] + self.Histograms += [ defineHistogram('EF_RNN_track_nPixelHits', type='TH1F', title=" EF RNN track nPixelHits; nPixelHits", xbins=11, xmin=0., xmax=11.) ] + self.Histograms += [ defineHistogram('EF_RNN_track_nSCTHits', type='TH1F', title=" EF RNN track nSCTHits; nSCTHits", xbins=20, xmin=0., xmax=20.) ] + # output + self.Histograms += [ defineHistogram('EF_RNNJetScore', type='TH1F', title=" EF RNNJetScore; RNNJetScore", xbins=50, xmin=0., xmax=1.) ] + self.Histograms += [ defineHistogram('EF_RNNJetScoreSigTrans', type='TH1F', title=" EF RNNJetScoreSigTrans; RNNJetScoreSigTrans", xbins=50, xmin=0., xmax=1.) ] + + + ########## add validation specific histograms class TrigTauRecValidationMonitoring(TrigTauRecOnlineMonitoring): def __init__ (self, name="TrigTauRecValidationMonitoring"): diff --git a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx index 3a1dc594e19d8fe125b9bcdb6af9dc13f6d82693..0be526b23a842078199a30e732c4e06e61a73d35 100755 --- a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx +++ b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ /******************************************************************** @@ -44,12 +44,13 @@ #include "LumiBlockComps/ILumiBlockMuTool.h" -#include "TrigTauRec/TrigTauRecMerged.h" +// needs migration to master of RNN tools in tauRecTools +//#include "tauRecTools/TauJetRNN.h" +#include "TrigTauRec/TrigTauRecMerged.h" using namespace std; - // Invokes base class constructor. TrigTauRecMerged::TrigTauRecMerged(const std::string& name,ISvcLocator* pSvcLocator): HLT::FexAlgo(name, pSvcLocator), @@ -60,7 +61,8 @@ TrigTauRecMerged::TrigTauRecMerged(const std::string& name,ISvcLocator* pSvcLoca m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"), m_maxeta( 2.5 ), m_minpt( 10000 ), - m_trkcone( 0.2 ) + m_trkcone( 0.2 ) //, + //m_rnn_evaluator(0) { // The following properties can be specified at run-time @@ -193,14 +195,34 @@ TrigTauRecMerged::TrigTauRecMerged(const std::string& name,ISvcLocator* pSvcLoca /** Errors */ declareMonitoredStdContainer("EF_track_errors",m_track_errors); - /** Author */ - declareMonitoredStdContainer("EF_author",m_author); - - /** deltaZ0 core Trks*/ - declareMonitoredStdContainer("EF_deltaZ0coreTrks",m_deltaZ0coreTrks); - - /** deltaZ0 wide Trks*/ - declareMonitoredStdContainer("EF_deltaZ0wideTrks",m_deltaZ0wideTrks); + // RNN inputs + // scalar + declareMonitoredVariable("EF_RNN_scalar_ptRatioEflowApprox", m_RNN_scalar_ptRatioEflowApprox); + declareMonitoredVariable("EF_RNN_scalar_mEflowApprox", m_RNN_scalar_mEflowApprox); + declareMonitoredVariable("EF_RNN_scalar_pt_jetseed_log", m_RNN_scalar_pt_jetseed_log); + + // clusters + declareMonitoredVariable("EF_RNN_Nclusters", m_RNN_Nclusters); + declareMonitoredStdContainer("EF_RNN_cluster_et_log", m_RNN_cluster_et_log); + declareMonitoredStdContainer("EF_RNN_cluster_dEta", m_RNN_cluster_dEta); + declareMonitoredStdContainer("EF_RNN_cluster_dPhi", m_RNN_cluster_dPhi); + declareMonitoredStdContainer("EF_RNN_cluster_CENTER_LAMBDA", m_RNN_cluster_CENTER_LAMBDA); + declareMonitoredStdContainer("EF_RNN_cluster_SECOND_LAMBDA", m_RNN_cluster_SECOND_LAMBDA); + declareMonitoredStdContainer("EF_RNN_cluster_SECOND_R", m_RNN_cluster_SECOND_R); + + // tracks + declareMonitoredVariable("EF_RNN_Ntracks", m_RNN_Ntracks); + declareMonitoredStdContainer("EF_RNN_track_pt_log", m_RNN_track_pt_log); + declareMonitoredStdContainer("EF_RNN_track_dEta", m_RNN_track_dEta); + declareMonitoredStdContainer("EF_RNN_track_dPhi", m_RNN_track_dPhi); + declareMonitoredStdContainer("EF_RNN_track_d0_abs_log", m_RNN_track_d0_abs_log); + declareMonitoredStdContainer("EF_RNN_track_z0sinThetaTJVA_abs_log", m_RNN_track_z0sinThetaTJVA_abs_log); + declareMonitoredStdContainer("EF_RNN_track_nInnermostPixelHits", m_RNN_track_nInnermostPixelHits); + declareMonitoredStdContainer("EF_RNN_track_nPixelHits", m_RNN_track_nPixelHits); + declareMonitoredStdContainer("EF_RNN_track_nSCTHits", m_RNN_track_nSCTHits); + // output + declareMonitoredVariable("EF_RNNJetScore", m_RNNJetScore); + declareMonitoredVariable("EF_RNNJetScoreSigTrans", m_RNNJetScoreSigTrans); } @@ -210,7 +232,7 @@ TrigTauRecMerged::~TrigTauRecMerged() HLT::ErrorCode TrigTauRecMerged::hltInitialize() { - msg() << MSG::INFO << "TrigTauRecMerged::initialize()" << endmsg; + ATH_MSG_INFO( "TrigTauRecMerged::initialize()" ); m_tauEventData.setInTrigger(true); //////////////////// @@ -218,7 +240,7 @@ HLT::ErrorCode TrigTauRecMerged::hltInitialize() //////////////////// // check tool names if ( m_tools.begin() == m_tools.end() ) { - msg() << MSG::ERROR << " no tools given for this algorithm." << endmsg; + ATH_MSG_ERROR( "No tools given for this algorithm." ); return HLT::BAD_JOB_SETUP; } @@ -226,43 +248,52 @@ HLT::ErrorCode TrigTauRecMerged::hltInitialize() //------------------------------------------------------------------------- ToolHandleArray<ITauToolBase> ::iterator p_itT = m_tools.begin(); ToolHandleArray<ITauToolBase> ::iterator p_itTE = m_tools.end(); - msg() << MSG::INFO << "List of tools in execution sequence:" << endmsg; - msg() << MSG::INFO << "------------------------------------" << endmsg; + ATH_MSG_INFO( "List of tools in execution sequence:" ); + ATH_MSG_INFO( "------------------------------------" ); 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 << ">" << endmsg; + ATH_MSG_WARNING( "Cannot find tool named <" << *p_itT << ">" ); return HLT::BAD_JOB_SETUP; } else { - msg() << MSG::INFO << "REGTEST "; - msg() <<" add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name() << endmsg; + ATH_MSG_INFO( "REGTEST " ); + ATH_MSG_INFO( "Add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name() ); if( doTiming() ) m_mytimers.push_back(addTimer((*p_itT)->name())) ; (*p_itT)->setTauEventData(&m_tauEventData); + + /* + // monitoring of RNN input variables + ToolHandle<ITauToolBase> handle = *p_itT; + TauJetRNNEvaluator* RNN_evaluator = dynamic_cast<TauJetRNNEvaluator*>(&(*handle)); + if(RNN_evaluator) { + ATH_MSG_INFO( "Retrieved TauJetRNNEvaluator for RNN inputs monitoring" ); + m_rnn_evaluator = RNN_evaluator; + } + */ } } - msg() << MSG::INFO << " " << endmsg; - msg() << MSG::INFO << "------------------------------------" << endmsg; + ATH_MSG_INFO( " " ); + ATH_MSG_INFO( "------------------------------------" ); + ToolHandleArray<ITauToolBase> ::iterator p_itTe = m_endtools.begin(); ToolHandleArray<ITauToolBase> ::iterator p_itTEe = m_endtools.end(); - msg() << MSG::INFO << "List of end tools in execution sequence:" << endmsg; - msg() << MSG::INFO << "------------------------------------" << endmsg; + ATH_MSG_INFO( "List of end tools in execution sequence:" ); + ATH_MSG_INFO( "------------------------------------" ); for(; p_itTe != p_itTEe; ++p_itTe ) { StatusCode p_sc = p_itTe->retrieve(); if( p_sc.isFailure() ) { - msg() << MSG::WARNING << "Cannot find tool named <"; - msg() << *p_itTe << ">" << endmsg; + ATH_MSG_WARNING( "Cannot find tool named <" << *p_itTe << ">" ); return HLT::BAD_JOB_SETUP; } else { - msg() << MSG::INFO << "REGTEST "; - msg() <<" add time for end tool "<< ( *p_itTe )->type() <<" "<< ( *p_itTe )->name() << endmsg; + ATH_MSG_INFO( "REGTEST " ); + ATH_MSG_INFO( "Add time for end tool "<< ( *p_itTe )->type() <<" "<< ( *p_itTe )->name() ); if( doTiming() ) m_mytimers.push_back(addTimer((*p_itTe)->name())) ; ( *p_itTe )->setTauEventData(&m_tauEventData); } @@ -277,20 +308,20 @@ HLT::ErrorCode TrigTauRecMerged::hltInitialize() // } if (m_lumiBlockMuTool.retrieve().isFailure()) { - msg() << MSG::WARNING << "Unable to retrieve LumiBlockMuTool" << endmsg; + ATH_MSG_WARNING( "Unable to retrieve LumiBlockMuTool" ); } else { - msg() << MSG::DEBUG << "Successfully retrieved LumiBlockMuTool" << endmsg; + ATH_MSG_DEBUG( "Successfully retrieved LumiBlockMuTool" ); } // Retrieve beam conditions if(m_beamSpotKey.initialize().isFailure()) { - msg() << MSG::WARNING << "Unable to retrieve Beamspot key" << endmsg; + ATH_MSG_WARNING( "Unable to retrieve Beamspot key" ); } else { - msg() << MSG::DEBUG << "Successfully retrieved Beamspot key" << endmsg; + ATH_MSG_DEBUG( "Successfully retrieved Beamspot key" ); } - msg() << MSG::INFO << " " << endmsg; - msg() << MSG::INFO << "------------------------------------" << endmsg; + ATH_MSG_INFO( " " ); + ATH_MSG_INFO( "------------------------------------" ); return HLT::OK; } @@ -298,7 +329,6 @@ HLT::ErrorCode TrigTauRecMerged::hltInitialize() ///////////////////////////////////////////////////////////////// HLT::ErrorCode TrigTauRecMerged::hltFinalize() { - //msg() << MSG::DEBUG << "Finalizing TrigTauRecMerged" << endmsg; return HLT::OK; } @@ -344,7 +374,6 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, m_innerTrkAvgDist=-999; m_SumPtTrkFrac=-999; - m_author.clear(); m_calo_errors.clear(); m_track_errors.clear(); m_EtEm =-10.; @@ -356,19 +385,30 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, m_EtaEF = -99; m_PhiEF = -99; + // RNN variables monitoring + m_RNN_scalar_ptRatioEflowApprox = 0.; m_RNN_scalar_mEflowApprox = 0.; m_RNN_scalar_pt_jetseed_log = 0.; + m_RNN_Nclusters = -1; + m_RNN_cluster_et_log.clear(); m_RNN_cluster_dEta.clear(); m_RNN_cluster_dPhi.clear(); + m_RNN_cluster_CENTER_LAMBDA.clear(); m_RNN_cluster_SECOND_LAMBDA.clear(); m_RNN_cluster_SECOND_R.clear(); + m_RNN_Ntracks = -1; + m_RNN_track_pt_log.clear(); m_RNN_track_dEta.clear(); m_RNN_track_dPhi.clear(); + m_RNN_track_d0_abs_log.clear(); m_RNN_track_z0sinThetaTJVA_abs_log.clear(); + m_RNN_track_nInnermostPixelHits.clear(); m_RNN_track_nPixelHits.clear(); m_RNN_track_nSCTHits.clear(); + m_RNNJetScore = -999; m_RNNJetScoreSigTrans = -999.; + // Retrieve store. - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Executing TrigTauRecMerged" << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Executing TrigTauRecMerged" ); // Get RoiDescriptor const TrigRoiDescriptor* roiDescriptor = 0; HLT::ErrorCode hltStatus = getFeature(inputTE, roiDescriptor); - if ( hltStatus==HLT::OK && roiDescriptor!= NULL ) { + if ( hltStatus==HLT::OK && roiDescriptor!= nullptr ) { if( msgLvl() <= MSG::DEBUG ) - msg() << MSG::DEBUG << "REGTEST: RoI " << *roiDescriptor<< endmsg; + ATH_MSG_DEBUG( "REGTEST: RoI " << *roiDescriptor ); } else { - msg() << MSG::ERROR << "Failed to find RoiDescriptor " << endmsg; + ATH_MSG_ERROR( "Failed to find RoiDescriptor " ); m_calo_errors.push_back(NoROIDescr); return hltStatus; } @@ -379,40 +419,30 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, hltStatus = getFeatures(inputTE, vectorCaloCellContainer); if(hltStatus!=HLT::OK ) { - msg() << MSG::ERROR << " No CaloCellContainers retrieved for the trigger element" << endmsg; + ATH_MSG_ERROR( " No CaloCellContainers retrieved for the trigger element" ); m_calo_errors.push_back(NoCellCont); return hltStatus; } if (vectorCaloCellContainer.size() < 1) { - msg() << MSG::ERROR - << "Size of vector CaloCell container is not 1. Is" - << vectorCaloCellContainer.size() - << endmsg; + ATH_MSG_ERROR( "Size of vector CaloCell container is not 1. Is " << vectorCaloCellContainer.size() ); m_calo_errors.push_back(NoCellCont); return HLT::ERROR; } const CaloCellContainer* RoICaloCellContainer = vectorCaloCellContainer.back(); - if(RoICaloCellContainer != NULL) { + if(RoICaloCellContainer != nullptr) { m_nCells = RoICaloCellContainer->size(); - - msg() << MSG::DEBUG - << "REGTEST: Size of vector CaloCell container is " - << RoICaloCellContainer->size() - << endmsg; + ATH_MSG_DEBUG("REGTEST: Size of vector CaloCell container is " << RoICaloCellContainer->size() ); if(RoICaloCellContainer->size()==0) { - msg() << MSG::INFO - << "Cannot proceed, size of vector CaloCell container is " - << RoICaloCellContainer->size() - << endmsg; + ATH_MSG_INFO( "Cannot proceed, size of vector CaloCell container is " << RoICaloCellContainer->size() ); m_calo_errors.push_back(EmptyCellCont); return HLT::OK; } } else { - msg() << MSG::ERROR << "no CaloCell container found "<< endmsg; + ATH_MSG_ERROR( "No CaloCell container found" ); m_calo_errors.push_back(NoCellCont); return HLT::ERROR; } @@ -422,21 +452,19 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, hltStatus = getFeatures(inputTE, vectorCaloClusterContainer); if(hltStatus!=HLT::OK ) { - msg() << MSG::ERROR << " No CaloClusterContainers retrieved for the trigger element" << endmsg; + ATH_MSG_ERROR( "No CaloClusterContainers retrieved for the trigger element" ); m_calo_errors.push_back(NoClustCont); return hltStatus; } if (vectorCaloClusterContainer.size() < 1) { - msg() << MSG::ERROR - << " CaloCluster container is empty" - << endmsg; + ATH_MSG_ERROR( "CaloCluster container is empty" ); m_calo_errors.push_back(NoClustCont); return HLT::ERROR; } if( msgLvl() <= MSG::DEBUG ) - msg() << MSG::DEBUG << " CaloCluster container size is " << vectorCaloClusterContainer.size() << endmsg; + ATH_MSG_DEBUG( "CaloCluster container size is " << vectorCaloClusterContainer.size() ); // Grab the last cluster collection attached const xAOD::CaloClusterContainer* RoICaloClusterContainer = vectorCaloClusterContainer.back(); @@ -445,13 +473,13 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, hltStatus = getStoreGateKey( RoICaloClusterContainer, collKey ); if(hltStatus!=HLT::OK ) { - msg() << MSG::ERROR << "Cluster has no key " << endmsg; + ATH_MSG_ERROR( "Cluster has no key" ); m_calo_errors.push_back(NoClustKey); return HLT::ERROR; } if( msgLvl() <= MSG::DEBUG ) - msg() << MSG::DEBUG << " cluster key for back cluster is " << collKey << endmsg; + ATH_MSG_DEBUG( "Cluster key for back cluster is " << collKey ); // Not necessary anymore @@ -491,45 +519,45 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, vector<const xAOD::TrackParticleContainer*> vectorTrackContainer; hltStatus = getFeatures(inputTE,vectorTrackContainer); - const xAOD::TrackParticleContainer* RoITrackContainer=NULL; + const xAOD::TrackParticleContainer* RoITrackContainer = nullptr; if (hltStatus!=HLT::OK) { - msg() << MSG::INFO << "REGTEST: No Track container found." << endmsg; + ATH_MSG_INFO( "REGTEST: No Track container found." ); m_track_errors.push_back(NoTrkCont); } else { if (vectorTrackContainer.size()<1) { - msg() << MSG::DEBUG << "Size of vector Track container is not 1. Is " << vectorTrackContainer.size() << endmsg; + ATH_MSG_DEBUG( "Size of vector Track container is not 1. Is " << vectorTrackContainer.size() ); m_track_errors.push_back(NoTrkCont); } if(vectorTrackContainer.size()>0) { RoITrackContainer = vectorTrackContainer.back(); if( msgLvl() <= MSG::DEBUG ) - msg() << MSG::DEBUG << "REGTEST: Size of vector Track container is " << RoITrackContainer->size() << endmsg; + ATH_MSG_DEBUG( "REGTEST: Size of vector Track container is " << RoITrackContainer->size() ); } - if(RoITrackContainer != NULL) m_nTracks = RoITrackContainer->size(); + if(RoITrackContainer != nullptr) m_nTracks = RoITrackContainer->size(); } // get Vertex Container vector<const xAOD::VertexContainer*> vectorVxContainer; hltStatus = getFeatures(inputTE,vectorVxContainer); - const xAOD::VertexContainer* RoIVxContainer = NULL; + const xAOD::VertexContainer* RoIVxContainer = nullptr; if(hltStatus!=HLT::OK) { - msg() << MSG::INFO << "No VxContainers retrieved for the trigger element" << endmsg; + ATH_MSG_INFO( "No VxContainers retrieved for the trigger element" ); m_track_errors.push_back(NoVtxCont); } else { if (vectorVxContainer.size() < 1) { - msg() << MSG::DEBUG << "Size of vector Vertex container is not 1. Is " << vectorVxContainer.size() << endmsg; + ATH_MSG_DEBUG( "Size of vector Vertex container is not 1. Is " << vectorVxContainer.size() ); m_track_errors.push_back(NoVtxCont); } if(vectorVxContainer.size() >0) { RoIVxContainer = vectorVxContainer.back(); if( msgLvl() <= MSG::DEBUG ) - msg() << MSG::DEBUG << "REGTEST: Size of vector Vertex container " << RoIVxContainer->size() << endmsg; + ATH_MSG_DEBUG( "REGTEST: Size of vector Vertex container " << RoIVxContainer->size() ); } } @@ -553,8 +581,8 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, avg_mu = m_lumiBlockMuTool->averageInteractionsPerCrossing(); m_ActualInteractions = mu; m_AvgInteractions = avg_mu; - msg() << MSG::DEBUG << "REGTEST: Retrieved Mu Value : " << mu << endmsg; - msg() << MSG::DEBUG << "REGTEST: Average Mu Value : " << avg_mu << endmsg; + ATH_MSG_DEBUG( "REGTEST: Retrieved Mu Value : " << mu ); + ATH_MSG_DEBUG( "REGTEST: Average Mu Value : " << avg_mu ); } @@ -622,12 +650,12 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, xAOD::CaloClusterContainer::const_iterator clusterIt; for (clusterIt=RoICaloClusterContainer->begin(); clusterIt != RoICaloClusterContainer->end(); ++clusterIt) { if( msgLvl() <= MSG::DEBUG ) - msg()<< MSG::DEBUG <<" Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )" << endmsg; + ATH_MSG_DEBUG( "Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )" ); if((*clusterIt)->e() < 0) { if( msgLvl() <= MSG::DEBUG ) - msg()<< MSG::DEBUG <<" Negative energy cluster is rejected" << endmsg; + ATH_MSG_DEBUG( "Negative energy cluster is rejected" ); continue; } @@ -639,17 +667,17 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, aJet->setJetP4(xAOD::JetFourMom_t(TauBarycenter.Pt(), TauBarycenter.Eta(), TauBarycenter.Phi(), TauBarycenter.M() ) ); - if( msgLvl() <= MSG::DEBUG ) msg() << MSG :: DEBUG << "jet formed"<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Jet formed "<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() ); hltStatus=attachFeature(outputTE, theJetCollection, "TrigTauJet"); if (hltStatus!=HLT::OK ) { - msg() << MSG::ERROR << "Unable to record JetCollection in TDS" << endmsg; + ATH_MSG_ERROR( "Unable to record JetCollection in TDS" ); m_calo_errors.push_back(NoJetAttach); return hltStatus; } else { - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << " JetCollection is recorded with key " << "HLT_" << "_" << "TrigTauJet" << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "JetCollection is recorded with key " << "HLT_" << "_" << "TrigTauJet" ); } @@ -700,11 +728,11 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, processStatus = (*firstTool)->eventInitialize(); if( processStatus != StatusCode :: SUCCESS ) { - msg() << MSG :: ERROR << "tool "<<(*firstTool)->name()<< "failed in eventInitialize" << endmsg; + ATH_MSG_ERROR( "Tool "<<(*firstTool)->name()<< "failed in eventInitialize" ); return HLT :: TOOL_FAILURE; } } - if( msgLvl() <= MSG::DEBUG ) msg() << MSG ::DEBUG << " initialize all good " << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "initialize all good" ); //------------------------------------------------------------------------- // using Jet collection @@ -719,18 +747,17 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, m_tauEventData.seedContainer = theJetCollection; // This sets one track and link. Need to have at least 1 track linked to retrieve track container + // can't we instead implement in the EDM a function to retrieve the track container of a tau? setEmptyTauTrack(p_tau, pTrackContainer); if(p_seed->e()<=0) { - msg() << MSG::DEBUG << " Roi: changing eta due to energy " << p_seed->e() << endmsg; + ATH_MSG_DEBUG( "Roi: changing eta due to energy " << p_seed->e() ); p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m()); - msg() << MSG::DEBUG << "Roi: " << roiDescriptor->roiId() - << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() - << endmsg; + ATH_MSG_DEBUG( "Roi: " << roiDescriptor->roiId() << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() ); } - if( msgLvl() <= MSG::DEBUG ) msg() << MSG ::DEBUG <<" roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() ); m_tauEventData.setObject("JetCollection", theJetCollection ); @@ -741,13 +768,13 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, firstTool = m_tools.begin(); lastTool = m_tools.end(); processStatus = StatusCode::SUCCESS; - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Starting tool loop with seed jet" << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Starting tool loop with seed jet" ); std::vector<TrigTimer* >::iterator itimer = m_mytimers.begin(); while ( ! processStatus.isFailure() && firstTool != lastTool ) { // loop stops only when Failure indicated by one of the tools if( msgLvl() <= MSG::DEBUG ) { - msg() << MSG::DEBUG << "Starting Tool: " << endmsg; - msg() << MSG::DEBUG << (*firstTool)->name() << endmsg; + ATH_MSG_DEBUG( "Starting Tool:"); + ATH_MSG_DEBUG( (*firstTool)->name() ); } // time in the various tools ++toolnum; @@ -762,14 +789,14 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, if ( !processStatus.isFailure() ) { if( msgLvl() <= MSG::DEBUG ) { - msg() << MSG::DEBUG << "REGTEST: "<< (*firstTool)->name() << " executed successfully " << endmsg; - msg() << MSG::DEBUG << "REGTEST: Roi: " << roiDescriptor->roiId() - << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() - << " Tau pT : "<< p_tau->pt()<< endmsg; + ATH_MSG_DEBUG( "REGTEST: "<< (*firstTool)->name() << " executed successfully "); + ATH_MSG_DEBUG( "REGTEST: Roi: " << roiDescriptor->roiId() + << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() + << " Tau pT : "<< p_tau->pt() ); } } else { - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG <<"REGTEST: "<< (*firstTool)->name() << " execution failed " << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "REGTEST: "<< (*firstTool)->name() << " execution failed" ); } ++firstTool; ++itimer; @@ -778,7 +805,7 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, //check status if ( !processStatus.isSuccess() ) { // some problem - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "the tau object has NOT been registered in the tau container" << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "The tau object has NOT been registered in the tau container" ); // ToolHandleArray<ITauToolBase> ::iterator tool = m_tools.begin(); // for(; tool != firstTool; ++tool ) (*tool)->cleanup( &m_tauEventData ); // (*tool)->cleanup( &m_tauEventData ); @@ -789,34 +816,33 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, pContainer->pop_back(); - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "clean up done after jet seed" << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Clean up done after jet seed" ); } else if( processStatus.isSuccess()) { float fJetEnergy = (*p_tau->jetLink())->e(); - msg() << MSG::DEBUG << " Roi: jet e "<< fJetEnergy <<endmsg; + ATH_MSG_DEBUG( "Roi: jet e "<< fJetEnergy ); if( fJetEnergy < 0.00001 ) { - msg() << MSG::DEBUG << " Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)"<<endmsg; - msg() << MSG::DEBUG << " Roi: this is probably not needed anymore, method PxPyPzE has been corrected"<<endmsg; + ATH_MSG_DEBUG( "Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)" ); + ATH_MSG_DEBUG( "Roi: this is probably not needed anymore, method PxPyPzE has been corrected" ); //p_tau->setEta(roiDescriptor->eta0()); //p_tau->setPhi(roiDescriptor->phi0()); // Direct accessors not available anymore p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m()); - msg() << MSG::DEBUG << " Roi: " << roiDescriptor->roiId() - << " Tau eta: " << p_tau->eta() - << " Tau phi: " << p_tau->phi() - << " Tau pT : "<< p_tau->pt()<< endmsg; + ATH_MSG_DEBUG( " Roi: " << roiDescriptor->roiId() + << " Tau eta: " << p_tau->eta() + << " Tau phi: " << p_tau->phi() + << " Tau pT : "<< p_tau->pt() ); } // loop over end tools ToolHandleArray<ITauToolBase> ::iterator p_itET = m_endtools.begin(); ToolHandleArray<ITauToolBase> ::iterator p_itETE = m_endtools.end(); for (; p_itET != p_itETE; ++p_itET ) { - msg() << MSG::VERBOSE << "Invoking endTool "; - msg() << ( *p_itET )->name() << endmsg; + ATH_MSG_VERBOSE( "Invoking endTool " << ( *p_itET )->name() ); processStatus = ( *p_itET )->execute( *p_tau); if( processStatus.isFailure() ) break; @@ -868,26 +894,53 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, if(m_dPhi<-M_PI) m_dPhi += 2.0*M_PI; if(m_dPhi>M_PI) m_dPhi -= 2.0*M_PI; - // author variable removed. There are no different tau reco algs anymor - // write out delta Z0 + // uncomment when RNN tools migrated to master /* - * FF, March 2014: deactivated. - * If the output of these variables is still needed, drop me a line. - * We can either print them here as done before or put them into tauEDM to have them available globally - if (m_useTauPVTool) { - m_tauPVTool->getDeltaZ0Values(m_deltaZ0coreTrks, m_deltaZ0wideTrks); - - msg() << MSG::DEBUG << "REGTEST: deltaZ0 for core trk "; - for ( unsigned int i=0; i<m_deltaZ0coreTrks.size(); ++i) msg() << MSG::DEBUG << i << ": " << m_deltaZ0coreTrks[i] << ", "; - msg() << MSG::DEBUG << endmsg; - - msg() << MSG::DEBUG << "REGTEST: deltaZ0 for wide trk "; - for ( unsigned int i=0; i<m_deltaZ0wideTrks.size(); ++i) msg() << MSG::DEBUG << i << ": " << m_deltaZ0wideTrks[i] << ", "; - msg() << MSG::DEBUG << endmsg; - } - */ + // RNN monitoring + if(m_rnn_evaluator) { + TauJetRNN* rnn = 0; + if(m_numTrack==0) rnn = m_rnn_evaluator->get_rnn_0p(); + else if(m_numTrack==1) rnn = m_rnn_evaluator->get_rnn_1p(); + else rnn = m_rnn_evaluator->get_rnn_3p(); + + const std::map<std::string, std::map<std::string, double> >* rnn_scalar = rnn->getScalarInputs(); + const std::map<std::string, std::map<std::string, std::vector<double>> >* rnn_vector = rnn->getVectorInputs(); + + m_RNN_scalar_ptRatioEflowApprox = rnn_scalar->at("scalar").at("ptRatioEflowApprox"); + m_RNN_scalar_mEflowApprox = rnn_scalar->at("scalar").at("mEflowApprox"); + // this is obviously a scalar, but is stored in tracks and clusters + if(rnn_vector->at("tracks").at("pt_log").size()>0) m_RNN_scalar_pt_jetseed_log = rnn_vector->at("tracks").at("pt_jetseed_log")[0]; + else if(rnn_vector->at("clusters").at("et_log").size()>0) m_RNN_scalar_pt_jetseed_log = rnn_vector->at("clusters").at("pt_jetseed_log")[0]; + + m_RNN_Nclusters = rnn_vector->at("clusters").at("et_log").size(); + m_RNN_cluster_et_log = rnn_vector->at("clusters").at("et_log"); + m_RNN_cluster_dEta = rnn_vector->at("clusters").at("dEta"); + m_RNN_cluster_dPhi = rnn_vector->at("clusters").at("dPhi"); + m_RNN_cluster_CENTER_LAMBDA = rnn_vector->at("clusters").at("CENTER_LAMBDA"); + m_RNN_cluster_SECOND_LAMBDA = rnn_vector->at("clusters").at("SECOND_LAMBDA"); + m_RNN_cluster_SECOND_R = rnn_vector->at("clusters").at("SECOND_R"); + + m_RNN_Ntracks = rnn_vector->at("tracks").at("pt_log").size(); + m_RNN_track_pt_log = rnn_vector->at("tracks").at("pt_log"); + m_RNN_track_dEta = rnn_vector->at("tracks").at("dEta"); + m_RNN_track_dPhi = rnn_vector->at("tracks").at("dPhi"); + m_RNN_track_d0_abs_log = rnn_vector->at("tracks").at("d0_abs_log"); + m_RNN_track_z0sinThetaTJVA_abs_log = rnn_vector->at("tracks").at("z0sinThetaTJVA_abs_log"); + m_RNN_track_nInnermostPixelHits = rnn_vector->at("tracks").at("nIBLHitsAndExp"); + m_RNN_track_nPixelHits = rnn_vector->at("tracks").at("nPixelHitsPlusDeadSensors"); + m_RNN_track_nSCTHits = rnn_vector->at("tracks").at("nSCTHitsPlusDeadSensors"); + + if( !p_tau->hasDiscriminant(xAOD::TauJetParameters::RNNJetScore) || !p_tau->isAvailable<float>("RNNJetScore") ) + ATH_MSG_WARNING( "RNNJetScore not available. Should not happen when TauJetRNNEvaluator is run!" ); + else m_RNNJetScore = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScore); + if( !p_tau->hasDiscriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans) || !p_tau->isAvailable<float>("RNNJetScoreSigTrans") ) + ATH_MSG_WARNING( "RNNJetScoreSigTrans not available. Make sure TauWPDecorator is run!" ); + else m_RNNJetScoreSigTrans = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans); + } + */ + // // copy CaloOnly four vector, if present // @@ -897,11 +950,11 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, if( tmpCaloOnlyStatus != HLT::OK){ - msg() << MSG::DEBUG << "Can't get container TrigTauRecCaloOnly to copy four-vector" << endmsg; + ATH_MSG_DEBUG( "Can't get container TrigTauRecCaloOnly to copy four-vector" ); } else { - msg() << MSG::DEBUG << "Got container TrigTauRecCaloOnly size :" << tempCaloOnlyContVec.size() << endmsg; + ATH_MSG_DEBUG( "Got container TrigTauRecCaloOnly size :" << tempCaloOnlyContVec.size() ); if ( tempCaloOnlyContVec.size() != 0 ) { @@ -912,7 +965,7 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, for(xAOD::TauJetContainer::const_iterator tauIt = tempCaloOnlyContVec.back()->begin(); tauIt != tempCaloOnlyContVec.back()->end(); tauIt++){ - msg() << MSG::DEBUG << "pT(tau) = " << (*tauIt)->pt() << " pT(caloOnly) = " << (*tauIt)->ptTrigCaloOnly() << endmsg; + ATH_MSG_DEBUG( "pT(tau) = " << (*tauIt)->pt() << " pT(caloOnly) = " << (*tauIt)->ptTrigCaloOnly() ); p_tau->setP4(xAOD::TauJetParameters::TrigCaloOnly, (*tauIt)->ptTrigCaloOnly(), (*tauIt)->etaTrigCaloOnly(), (*tauIt)->phiTrigCaloOnly(), (*tauIt)->mTrigCaloOnly()); @@ -932,10 +985,10 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, - msg() << MSG::DEBUG << "REGTEST: Roi: " << roiDescriptor->roiId() - << " Tau being saved eta: " << m_EtaEF << " Tau phi: " << m_PhiEF - << " wrt L1 dEta "<< m_dEta<<" dPhi "<<m_dPhi - << " Tau Et (GeV): "<< m_EtFinal << endmsg; + ATH_MSG_DEBUG( "REGTEST: Roi: " << roiDescriptor->roiId() + << " Tau being saved eta: " << m_EtaEF << " Tau phi: " << m_PhiEF + << " wrt L1 dEta "<< m_dEta<<" dPhi "<<m_dPhi + << " Tau Et (GeV): "<< m_EtFinal ); ++m_Ncand; } @@ -945,18 +998,18 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, pTrackContainer->erase(pTrackContainer->end()-bad_tau->nAllTracks(), pTrackContainer->end()); pContainer->pop_back(); - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "deleted tau done after jet seed" << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Deleted tau done after jet seed" ); } // call eventFinalize on the booked tau tools for ( firstTool = m_tools.begin(); firstTool != lastTool; firstTool++ ) { processStatus = (*firstTool)->eventFinalize(); if( processStatus != StatusCode :: SUCCESS ) { - msg() << MSG :: INFO << "tool "<<(*firstTool)->name()<< "failed in eventFinalize" << endmsg; + ATH_MSG_INFO( "Tool "<<(*firstTool)->name()<< "failed in eventFinalize" ); return HLT :: TOOL_FAILURE; } } - msg() << MSG :: DEBUG << "tools succeed in eventFinalize" << endmsg; + ATH_MSG_DEBUG( "Tools succeed in eventFinalize" ); //------------------------------------------------------------------------- @@ -966,15 +1019,61 @@ HLT::ErrorCode TrigTauRecMerged::hltExecute(const HLT::TriggerElement* inputTE, hltStatus=attachFeature(outputTE, pContainer, m_outputName); hltStatus=attachFeature(outputTE, pTrackContainer, m_outputName+"Tracks"); if (hltStatus!=HLT::OK ) { - msg() << MSG::ERROR << "Unable to record tau Container in TDS" << endmsg; + ATH_MSG_ERROR( "Unable to record tau Container in TDS" ); m_calo_errors.push_back(NoHLTtauAttach); return hltStatus; } else { - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Recorded a tau container: " << "HLT_" << "TrigTauRecMerged" << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "Recorded a tau container: " << "HLT_" << "TrigTauRecMerged" ); } - if( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "the tau object has been registered in the tau container" << endmsg; + if( msgLvl() <= MSG::DEBUG ) ATH_MSG_DEBUG( "The tau object has been registered in the tau container" ); + + + // workaround to "fix" broken element links in data + + // skip bad taus which have been discarded + if(pContainer->size()==0) + return HLT::OK; + + static SG::AuxElement::Accessor< xAOD::TauJet::JetLink_t > jetAcc( "jetLink" ); + jetAcc( *p_tau ).toPersistent(); + + static SG::AuxElement::Accessor< xAOD::TauJet::VertexLink_t > vertexAcc( "vertexLink" ); + vertexAcc( *p_tau ).toPersistent(); + + xAOD::TauJet::TauTrackLinks_t new_tauTrackLinks; + static SG::AuxElement::Accessor< xAOD::TauJet::TauTrackLinks_t > tauTrackAcc( "tauTrackLinks" ); + static SG::AuxElement::Accessor< xAOD::TauTrack::TrackParticleLinks_t > trackAcc( "trackLinks" ); + + for( ElementLink< xAOD::TauTrackContainer > tautrack_link : tauTrackAcc( *p_tau ) ) { + + xAOD::TauTrack::TrackParticleLinks_t new_trackLinks; + + for( ElementLink< xAOD::TrackParticleContainer > track_link : trackAcc( *(*tautrack_link) ) ) { + track_link.toPersistent(); + + ElementLink< xAOD::TrackParticleContainer > newTrackLink; + newTrackLink.toPersistent(); + newTrackLink.resetWithKeyAndIndex( track_link.persKey(), track_link.persIndex() ); + new_trackLinks.push_back(newTrackLink); + } + + pTrackContainer->at(tautrack_link.index())->clearTrackLinks(); + pTrackContainer->at(tautrack_link.index())->setTrackLinks(new_trackLinks); + + tautrack_link.toPersistent(); + + ElementLink< xAOD::TauTrackContainer > newTauTrackLink; + newTauTrackLink.toPersistent(); + newTauTrackLink.resetWithKeyAndIndex( tautrack_link.persKey(), tautrack_link.persIndex() ); + new_tauTrackLinks.push_back(newTauTrackLink); + } + + p_tau->clearTauTrackLinks(); + p_tau->setAllTauTrackLinks(new_tauTrackLinks); + + // no action needs to be taken for tau -> clusters links // set status of TE to always true for FE algorithms return HLT::OK; diff --git a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx index 8a1cdf2d38a172994460bafde2df26a83bd0a627..03ff7d3cf5cb143d6cd009ee1765b5ae64cd3d9f 100644 --- a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx +++ b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ /******************************************************************** @@ -10,13 +10,10 @@ * AUTHOR: E.Carquin * MODIFIED: Nov 23 2018 * - * Run a subset of the offline tauRec/tau1p3p routines in the EF + * Run a subset of the offline tauRec routines at the HLT *********************************************************************/ -//#include "GaudiKernel/IToolSvc.h" -//#include "GaudiKernel/ListItem.h" -//#include "GaudiKernel/StatusCode.h" -//#include "GaudiKernel/Property.h" +#include "GaudiKernel/SystemOfUnits.h" #include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h" #include "TrigSteeringEvent/TrigRoiDescriptor.h" @@ -53,10 +50,10 @@ using namespace std; // Invokes base class constructor. TrigTauRecMergedMT::TrigTauRecMergedMT(const std::string& name,ISvcLocator* pSvcLocator) :AthAlgorithm(name, pSvcLocator), - m_tools(this), - m_endtools(this), - m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"), - m_beamSpotSvc("BeamCondSvc", name) + m_tools(this), + m_endtools(this), + m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool"), + m_beamSpotSvc("BeamCondSvc", name) { declareProperty("Tools", m_tools, "List of ITauToolBase tools" ); declareProperty("EndTools", m_endtools, "List of End ITauToolBase tools" ); @@ -69,574 +66,569 @@ TrigTauRecMergedMT::~TrigTauRecMergedMT() StatusCode TrigTauRecMergedMT::initialize() { - ATH_MSG_DEBUG("TrigTauRecMergedMT::initialize()"); - - m_tauEventData.setInTrigger(true); - if ( m_tools.begin() == m_tools.end() ) { - ATH_MSG_DEBUG(" no tools given for this algorithm."); + ATH_MSG_DEBUG("TrigTauRecMergedMT::initialize()"); + + m_tauEventData.setInTrigger(true); + if ( m_tools.begin() == m_tools.end() ) { + ATH_MSG_DEBUG(" no tools given for this algorithm."); + return StatusCode::FAILURE; + } + + ToolHandleArray<ITauToolBase> ::iterator p_itT = m_tools.begin(); + ToolHandleArray<ITauToolBase> ::iterator p_itTE = m_tools.end(); + ATH_MSG_DEBUG("List of tools in execution sequence:"); + + for(; p_itT != p_itTE; ++p_itT ) { + StatusCode p_sc = p_itT->retrieve(); + if( p_sc.isFailure() ) { + ATH_MSG_DEBUG("Cannot find tool named <" << *p_itT << ">"); return StatusCode::FAILURE; - } - - ToolHandleArray<ITauToolBase> ::iterator p_itT = m_tools.begin(); - ToolHandleArray<ITauToolBase> ::iterator p_itTE = m_tools.end(); - ATH_MSG_DEBUG("List of tools in execution sequence:"); - - for(; p_itT != p_itTE; ++p_itT ) { - StatusCode p_sc = p_itT->retrieve(); - if( p_sc.isFailure() ) { - ATH_MSG_DEBUG("Cannot find tool named <" << *p_itT << ">"); - return StatusCode::FAILURE; - } - else { - ATH_MSG_DEBUG("Add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name()); - //if( doTiming() ) m_mytimers.push_back(addTimer((*p_itT)->name())) ; - (*p_itT)->setTauEventData(&m_tauEventData); - } - } - - ToolHandleArray<ITauToolBase> ::iterator p_itTe = m_endtools.begin(); - ToolHandleArray<ITauToolBase> ::iterator p_itTEe = m_endtools.end(); - - for(; p_itTe != p_itTEe; ++p_itTe ) { - StatusCode p_sc = p_itTe->retrieve(); - if( p_sc.isFailure() ) { - ATH_MSG_DEBUG("Cannot find tool named <" << *p_itTe << ">"); - return StatusCode::FAILURE; - } - else { - ATH_MSG_DEBUG(" Add time for end tool "<< ( *p_itTe )->type() <<" "<< ( *p_itTe )->name()); - //if( doTiming() ) m_mytimers.push_back(addTimer((*p_itTe)->name())) ; - ( *p_itTe )->setTauEventData(&m_tauEventData); - } - } - - if (m_lumiBlockMuTool.retrieve().isFailure()) { - ATH_MSG_WARNING("Unable to retrieve LumiBlockMuTool"); - } else { - ATH_MSG_DEBUG("Successfully retrieved LumiBlockMuTool"); - } - - // Retrieve beam conditions - if(m_beamSpotSvc.retrieve().isFailure()) { - ATH_MSG_WARNING("Unable to retrieve Beamspot service"); - } else { - ATH_MSG_WARNING("Successfully retrieved Beamspot service"); - } - - if ( not m_monTool.name().empty() ) { - ATH_CHECK( m_monTool.retrieve() ); - } - - ATH_MSG_DEBUG( "Initialising HandleKeys" ); - CHECK( m_roIInputKey.initialize() ); - CHECK( m_L1RoIKey.initialize() ); - CHECK( m_clustersKey.initialize() ); - CHECK( m_tracksKey.initialize() ); - CHECK( m_vertexKey.initialize() ); - CHECK( m_trigTauJetKey.initialize() ); - CHECK( m_trigtauSeedOutKey.initialize() ); - CHECK( m_trigtauRecOutKey.initialize() ); - CHECK( m_trigtauTrkOutKey.initialize() ); - - return StatusCode::SUCCESS; + } + else { + ATH_MSG_DEBUG("Add timer for tool "<< ( *p_itT )->type() <<" "<< ( *p_itT )->name()); + //if( doTiming() ) m_mytimers.push_back(addTimer((*p_itT)->name())) ; + (*p_itT)->setTauEventData(&m_tauEventData); + } + } + + ToolHandleArray<ITauToolBase> ::iterator p_itTe = m_endtools.begin(); + ToolHandleArray<ITauToolBase> ::iterator p_itTEe = m_endtools.end(); + + for(; p_itTe != p_itTEe; ++p_itTe ) { + StatusCode p_sc = p_itTe->retrieve(); + if( p_sc.isFailure() ) { + ATH_MSG_DEBUG("Cannot find tool named <" << *p_itTe << ">"); + return StatusCode::FAILURE; + } + else { + ATH_MSG_DEBUG(" Add time for end tool "<< ( *p_itTe )->type() <<" "<< ( *p_itTe )->name()); + //if( doTiming() ) m_mytimers.push_back(addTimer((*p_itTe)->name())) ; + ( *p_itTe )->setTauEventData(&m_tauEventData); + } + } + + if (m_lumiBlockMuTool.retrieve().isFailure()) { + ATH_MSG_WARNING("Unable to retrieve LumiBlockMuTool"); + } + else { + ATH_MSG_DEBUG("Successfully retrieved LumiBlockMuTool"); + } + + // Retrieve beam conditions + if(m_beamSpotSvc.retrieve().isFailure()) { + ATH_MSG_WARNING("Unable to retrieve Beamspot service"); + } + else { + ATH_MSG_WARNING("Successfully retrieved Beamspot service"); + } + + if ( not m_monTool.name().empty() ) { + ATH_CHECK( m_monTool.retrieve() ); + } + + ATH_MSG_DEBUG( "Initialising HandleKeys" ); + CHECK( m_roIInputKey.initialize() ); + CHECK( m_L1RoIKey.initialize() ); + CHECK( m_clustersKey.initialize() ); + CHECK( m_tracksKey.initialize() ); + CHECK( m_vertexKey.initialize() ); + CHECK( m_trigTauJetKey.initialize() ); + CHECK( m_trigtauSeedOutKey.initialize() ); + CHECK( m_trigtauRecOutKey.initialize() ); + CHECK( m_trigtauTrkOutKey.initialize() ); + + return StatusCode::SUCCESS; } StatusCode TrigTauRecMergedMT::finalize() { - return StatusCode::SUCCESS; + return StatusCode::SUCCESS; } StatusCode TrigTauRecMergedMT::execute() { - ATH_MSG_DEBUG("Execution"); - - auto ctx = getContext(); - - // variables to initialize and keep values for monitoring variables - std::vector<unsigned char> calo_errors(0); - std::vector<unsigned char> track_errors(0); - std::vector<unsigned char> author(0); - std::vector<float> deltaZ0coreTrks(0); - std::vector<float> deltaZ0wideTrks(0); - - auto nCells = Monitored::Scalar<int>("nRoI_EFTauCells", 0); - auto nTracks = Monitored::Scalar<int>("nRoI_EFTauTracks", -10); - auto dEta = Monitored::Scalar<float>("dEtaEFTau_RoI", -10.); - auto dPhi = Monitored::Scalar<float>("dPhiEFTau_RoI", -10.); - auto emRadius = Monitored::Scalar<float>("EF_EMRadius", -0.099); - auto hadRadius = Monitored::Scalar<float>("EF_EMRadius", -0.099); - auto EtFinal = Monitored::Scalar<float>("EF_EtFinal", 0.); - auto Et = Monitored::Scalar<float>("EF_Et", 0.); - auto EtHad = Monitored::Scalar<float>("EF_EtHad",-10.); - auto EtEm = Monitored::Scalar<float>("EF_EtEm",-10.); - auto EMFrac = Monitored::Scalar<float>("EF_EMFrac",-10.); - auto IsoFrac = Monitored::Scalar<float>("EF_IsoFrac",-1.); - auto centFrac = Monitored::Scalar<float>("EF_centFrac",-10.); - auto nWideTrk = Monitored::Scalar<int>("EF_nWideTrk",0); - auto ipSigLeadTrk = Monitored::Scalar<float>("EF_ipSigLeadTrk",-1000.); - auto trFlightPathSig = Monitored::Scalar<float>("EF_trFlightPathSig",-10.); - auto massTrkSys = Monitored::Scalar<float>("EF_massTrkSys",-10.); - auto dRmax = Monitored::Scalar<float>("EF_dRmax",-10.); - auto numTrack = Monitored::Scalar<int>("EF_NTrk", -10); - auto trkAvgDist = Monitored::Scalar<float>("EF_TrkAvgDist",-1.0); - auto etovPtLead = Monitored::Scalar<float>("EF_EtovPtLead",-10.); - auto PSSFraction = Monitored::Scalar<float>("EF_PSSFraction",-999.9); - auto EMPOverTrkSysP = Monitored::Scalar<float>("EF_EMPOverTrkSysP",-999.9); - auto ChPiEMEOverCaloEME = Monitored::Scalar<float>("EF_ChPiEMEOverCaloEME",-999.9); - auto SumPtTrkFrac = Monitored::Scalar<float>("EF_SumPtTrkFrac",-999.9); - auto innerTrkAvgDist = Monitored::Scalar<float>("EF_innerTrkAvgDist",-1.0); - auto Ncand = Monitored::Scalar<int>("EF_nCand",0); - auto ActualInteractions = Monitored::Scalar<float>("EF_ActualInteractions",-999.9); - auto AvgInteractions = Monitored::Scalar<float>("EF_AvgInteractions",-999.9); - auto beamspot_x = Monitored::Scalar<float>("EF_beamspot_x",-999.9); - auto beamspot_y = Monitored::Scalar<float>("EF_beamspot_y",-999.9); - auto beamspot_z = Monitored::Scalar<float>("EF_beamspot_z",-999.9); - auto EtaL1 = Monitored::Scalar<float>("EtaL1",-99.9); - auto PhiL1 = Monitored::Scalar<float>("PhiL1",-99.9); - auto EtaEF = Monitored::Scalar<float>("EtaEF",-99.9); - auto PhiEF = Monitored::Scalar<float>("PhiEF",-99.9); - - auto EF_calo_errors = Monitored::Collection("calo_errors",calo_errors); - auto EF_track_errors = Monitored::Collection("track_errors",track_errors); - auto EF_author = Monitored::Collection("author",author); - auto EF_deltaZ0coreTrks = Monitored::Collection("deltaZ0coreTrks",deltaZ0coreTrks); - auto EF_deltaZ0wideTrks = Monitored::Collection("deltaZ0wideTrks",deltaZ0wideTrks); - - auto monitorIt = Monitored::Group( m_monTool, nCells, nTracks, dEta, dPhi, emRadius, hadRadius, - EtFinal, Et, EtHad, EtEm, EMFrac, IsoFrac, centFrac, nWideTrk, ipSigLeadTrk, trFlightPathSig, massTrkSys, - dRmax, numTrack, trkAvgDist, etovPtLead, PSSFraction, EMPOverTrkSysP, ChPiEMEOverCaloEME, SumPtTrkFrac, - innerTrkAvgDist, Ncand, ActualInteractions, AvgInteractions, beamspot_x, beamspot_y, beamspot_z, EtaL1, - PhiL1, EtaEF, PhiEF ); - - // Retrieve store. - ATH_MSG_DEBUG("Executing TrigTauRecMergedMT"); - - // Get RoiDescriptor - SG::ReadHandle< TrigRoiDescriptorCollection > roisHandle = SG::makeHandle( m_roIInputKey, ctx ); - if(roisHandle->size()==0){ - ATH_MSG_DEBUG("RoIHandle size = Zero"); - return StatusCode::SUCCESS; - } - const TrigRoiDescriptor *roiDescriptor = roisHandle->at(0); - - if ( roiDescriptor!= NULL ) { - ATH_MSG_DEBUG("REGTEST: RoI " << *roiDescriptor); - } - else { - ATH_MSG_DEBUG("Failed to find RoiDescriptor "); - calo_errors.push_back(NoROIDescr); - return StatusCode::SUCCESS; - } - - // Retrieve Calocluster container - SG::ReadHandle< xAOD::CaloClusterContainer > CCContainerHandle = SG::makeHandle( m_clustersKey,ctx ); - CHECK( CCContainerHandle.isValid() ); - - const xAOD::CaloClusterContainer *RoICaloClusterContainer = CCContainerHandle.get(); - ATH_MSG_DEBUG( "Found " << RoICaloClusterContainer->size() << " caloClusters, updating the corresponding RoI ... " ); - - if(RoICaloClusterContainer != NULL) { - ATH_MSG_DEBUG( "REGTEST: Size of vector CaloCluster container is " << RoICaloClusterContainer->size()); - if(RoICaloClusterContainer->size()==0) { - ATH_MSG_DEBUG( "Cannot proceed, size of vector CaloCluster container is " << RoICaloClusterContainer->size()); - return StatusCode::SUCCESS; - } - }else { - ATH_MSG_DEBUG( "no CaloCluster container found " ); - return StatusCode::SUCCESS; - } - - // get TrackContainer - SG::ReadHandle< xAOD::TrackParticleContainer > TPContainerHandle = SG::makeHandle( m_tracksKey,ctx ); - - const xAOD::TrackParticleContainer *RoITrackParticleContainer = NULL; - - if ( !TPContainerHandle.isValid() ) { - ATH_MSG_INFO("REGTEST: No Track container found."); - track_errors.push_back(NoTrkCont); - } - else { - RoITrackParticleContainer=TPContainerHandle.get(); - ATH_MSG_DEBUG("REGTEST: Size of vector Track container is " << RoITrackParticleContainer->size()); - if(RoITrackParticleContainer != NULL) nTracks = RoITrackParticleContainer->size(); - } - - // get Vertex Container - SG::ReadHandle< xAOD::VertexContainer > VertexContainerHandle = SG::makeHandle( m_vertexKey,ctx ); - - const xAOD::VertexContainer* RoIVxContainer = NULL; - - if( !VertexContainerHandle.isValid() ) { - ATH_MSG_INFO(" No VxContainers retrieved for the trigger element"); - track_errors.push_back(NoVtxCont); - } - else { - RoIVxContainer = VertexContainerHandle.get(); - ATH_MSG_DEBUG("REGTEST: Size of vector Vertex container " << RoIVxContainer->size()); - } - - double mu = 0.0; - double avg_mu = 0.0; - if(m_lumiBlockMuTool){ - mu = m_lumiBlockMuTool->actualInteractionsPerCrossing(); // (retrieve mu for the current BCID) - avg_mu = m_lumiBlockMuTool->averageInteractionsPerCrossing(); - ActualInteractions = mu; - AvgInteractions = avg_mu; - ATH_MSG_DEBUG("REGTEST: Retrieved Mu Value : " << mu); - ATH_MSG_DEBUG("REGTEST: Average Mu Value : " << avg_mu); - } + ATH_MSG_DEBUG("Execution"); + + auto ctx = getContext(); + + // variables to initialize and keep values for monitoring variables + std::vector<unsigned char> calo_errors(0); + std::vector<unsigned char> track_errors(0); + + auto nCells = Monitored::Scalar<int>("nRoI_EFTauCells", 0); + auto nTracks = Monitored::Scalar<int>("nRoI_EFTauTracks", -10); + auto dEta = Monitored::Scalar<float>("dEtaEFTau_RoI", -10.); + auto dPhi = Monitored::Scalar<float>("dPhiEFTau_RoI", -10.); + auto emRadius = Monitored::Scalar<float>("EF_EMRadius", -0.099); + auto hadRadius = Monitored::Scalar<float>("EF_EMRadius", -0.099); + auto EtFinal = Monitored::Scalar<float>("EF_EtFinal", 0.); + auto Et = Monitored::Scalar<float>("EF_Et", 0.); + auto EtHad = Monitored::Scalar<float>("EF_EtHad",-10.); + auto EtEm = Monitored::Scalar<float>("EF_EtEm",-10.); + auto EMFrac = Monitored::Scalar<float>("EF_EMFrac",-10.); + auto IsoFrac = Monitored::Scalar<float>("EF_IsoFrac",-1.); + auto centFrac = Monitored::Scalar<float>("EF_centFrac",-10.); + auto nWideTrk = Monitored::Scalar<int>("EF_nWideTrk",0); + auto ipSigLeadTrk = Monitored::Scalar<float>("EF_ipSigLeadTrk",-1000.); + auto trFlightPathSig = Monitored::Scalar<float>("EF_trFlightPathSig",-10.); + auto massTrkSys = Monitored::Scalar<float>("EF_massTrkSys",-10.); + auto dRmax = Monitored::Scalar<float>("EF_dRmax",-10.); + auto numTrack = Monitored::Scalar<int>("EF_NTrk", -10); + auto trkAvgDist = Monitored::Scalar<float>("EF_TrkAvgDist",-1.0); + auto etovPtLead = Monitored::Scalar<float>("EF_EtovPtLead",-10.); + auto PSSFraction = Monitored::Scalar<float>("EF_PSSFraction",-999.9); + auto EMPOverTrkSysP = Monitored::Scalar<float>("EF_EMPOverTrkSysP",-999.9); + auto ChPiEMEOverCaloEME = Monitored::Scalar<float>("EF_ChPiEMEOverCaloEME",-999.9); + auto SumPtTrkFrac = Monitored::Scalar<float>("EF_SumPtTrkFrac",-999.9); + auto innerTrkAvgDist = Monitored::Scalar<float>("EF_innerTrkAvgDist",-1.0); + auto Ncand = Monitored::Scalar<int>("EF_nCand",0); + auto ActualInteractions = Monitored::Scalar<float>("EF_ActualInteractions",-999.9); + auto AvgInteractions = Monitored::Scalar<float>("EF_AvgInteractions",-999.9); + auto beamspot_x = Monitored::Scalar<float>("EF_beamspot_x",-999.9); + auto beamspot_y = Monitored::Scalar<float>("EF_beamspot_y",-999.9); + auto beamspot_z = Monitored::Scalar<float>("EF_beamspot_z",-999.9); + auto EtaL1 = Monitored::Scalar<float>("EtaL1",-99.9); + auto PhiL1 = Monitored::Scalar<float>("PhiL1",-99.9); + auto EtaEF = Monitored::Scalar<float>("EtaEF",-99.9); + auto PhiEF = Monitored::Scalar<float>("PhiEF",-99.9); + + auto EF_calo_errors = Monitored::Collection("calo_errors",calo_errors); + auto EF_track_errors = Monitored::Collection("track_errors",track_errors); + + auto monitorIt = Monitored::Group( m_monTool, nCells, nTracks, dEta, dPhi, emRadius, hadRadius, + EtFinal, Et, EtHad, EtEm, EMFrac, IsoFrac, centFrac, nWideTrk, ipSigLeadTrk, trFlightPathSig, massTrkSys, + dRmax, numTrack, trkAvgDist, etovPtLead, PSSFraction, EMPOverTrkSysP, ChPiEMEOverCaloEME, SumPtTrkFrac, + innerTrkAvgDist, Ncand, ActualInteractions, AvgInteractions, beamspot_x, beamspot_y, beamspot_z, EtaL1, + PhiL1, EtaEF, PhiEF ); + + // Retrieve store. + ATH_MSG_DEBUG("Executing TrigTauRecMergedMT"); + + // Get RoiDescriptor + SG::ReadHandle< TrigRoiDescriptorCollection > roisHandle = SG::makeHandle( m_roIInputKey, ctx ); + if(roisHandle->size() == 0){ + ATH_MSG_DEBUG("RoIHandle size = Zero"); + return StatusCode::SUCCESS; + } + const TrigRoiDescriptor *roiDescriptor = roisHandle->at(0); + + if ( roiDescriptor != nullptr ) { + ATH_MSG_DEBUG("REGTEST: RoI " << *roiDescriptor); + } + else { + ATH_MSG_DEBUG("Failed to find RoiDescriptor "); + calo_errors.push_back(NoROIDescr); + return StatusCode::SUCCESS; + } + + // Retrieve Calocluster container + SG::ReadHandle< xAOD::CaloClusterContainer > CCContainerHandle = SG::makeHandle( m_clustersKey,ctx ); + CHECK( CCContainerHandle.isValid() ); + + const xAOD::CaloClusterContainer *RoICaloClusterContainer = CCContainerHandle.get(); + ATH_MSG_DEBUG( "Found " << RoICaloClusterContainer->size() << " caloClusters, updating the corresponding RoI ... " ); + + if(RoICaloClusterContainer != nullptr) { + ATH_MSG_DEBUG( "REGTEST: Size of vector CaloCluster container is " << RoICaloClusterContainer->size()); + if(RoICaloClusterContainer->size() == 0) { + ATH_MSG_DEBUG( "Cannot proceed, size of vector CaloCluster container is " << RoICaloClusterContainer->size()); + return StatusCode::SUCCESS; + } + } + else { + ATH_MSG_DEBUG( "no CaloCluster container found " ); + return StatusCode::SUCCESS; + } + + // get TrackContainer + SG::ReadHandle< xAOD::TrackParticleContainer > TPContainerHandle = SG::makeHandle( m_tracksKey,ctx ); + + const xAOD::TrackParticleContainer *RoITrackParticleContainer = nullptr; + + if ( !TPContainerHandle.isValid() ) { + ATH_MSG_INFO("REGTEST: No Track container found."); + track_errors.push_back(NoTrkCont); + } + else { + RoITrackParticleContainer = TPContainerHandle.get(); + ATH_MSG_DEBUG("REGTEST: Size of vector Track container is " << RoITrackParticleContainer->size()); + if(RoITrackParticleContainer != nullptr) nTracks = RoITrackParticleContainer->size(); + } + + // get Vertex Container + SG::ReadHandle< xAOD::VertexContainer > VertexContainerHandle = SG::makeHandle( m_vertexKey,ctx ); + + const xAOD::VertexContainer* RoIVxContainer = nullptr; + + if( !VertexContainerHandle.isValid() ) { + ATH_MSG_INFO(" No VxContainers retrieved for the trigger element"); + track_errors.push_back(NoVtxCont); + } + else { + RoIVxContainer = VertexContainerHandle.get(); + ATH_MSG_DEBUG("REGTEST: Size of vector Vertex container " << RoIVxContainer->size()); + } + + double mu = 0.0; + double avg_mu = 0.0; + if(m_lumiBlockMuTool){ + mu = m_lumiBlockMuTool->actualInteractionsPerCrossing(); // (retrieve mu for the current BCID) + avg_mu = m_lumiBlockMuTool->averageInteractionsPerCrossing(); + ActualInteractions = mu; + AvgInteractions = avg_mu; + ATH_MSG_DEBUG("REGTEST: Retrieved Mu Value : " << mu); + ATH_MSG_DEBUG("REGTEST: Average Mu Value : " << avg_mu); + } - //------------------------------------------------------------------------- - // Get beamspot - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- + // Get beamspot + //------------------------------------------------------------------------- - // Copy the first vertex from a const object - xAOD::Vertex theBeamspot; - theBeamspot.makePrivateStore(); - const xAOD::Vertex* ptrBeamspot = 0; + // Copy the first vertex from a const object + xAOD::Vertex theBeamspot; + theBeamspot.makePrivateStore(); + const xAOD::Vertex* ptrBeamspot = nullptr; - if(m_beamSpotSvc){ + if(m_beamSpotSvc){ - // Alter the position of the vertex - theBeamspot.setPosition(m_beamSpotSvc->beamPos()); + // Alter the position of the vertex + theBeamspot.setPosition(m_beamSpotSvc->beamPos()); - beamspot_x=theBeamspot.x(); - beamspot_y=theBeamspot.y(); - beamspot_z=theBeamspot.z(); - - // Create a AmgSymMatrix to alter the vertex covariance mat. - AmgSymMatrix(3) cov = m_beamSpotSvc->beamVtx().covariancePosition(); - theBeamspot.setCovariancePosition(cov); + beamspot_x=theBeamspot.x(); + beamspot_y=theBeamspot.y(); + beamspot_z=theBeamspot.z(); - ptrBeamspot = &theBeamspot; + // Create a AmgSymMatrix to alter the vertex covariance mat. + AmgSymMatrix(3) cov = m_beamSpotSvc->beamVtx().covariancePosition(); + theBeamspot.setCovariancePosition(cov); - } + ptrBeamspot = &theBeamspot; + } - //------------------------------------------------------------------------- - // Creating jet container used as "tau seed" for tau reconstruction - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- + // Creating jet container used as "tau seed" for tau reconstruction + //------------------------------------------------------------------------- - // Ensure that we are using a TrigAuxContainer - xAOD::JetContainer* theJetCollection = new xAOD::JetContainer(); - xAOD::JetTrigAuxContainer theJetContainer; - theJetCollection->setStore(&theJetContainer); + // Ensure that we are using a TrigAuxContainer + xAOD::JetContainer* theJetCollection = new xAOD::JetContainer(); + xAOD::JetTrigAuxContainer theJetContainer; + theJetCollection->setStore(&theJetContainer); - xAOD::Jet* aJet = new xAOD::Jet(); + xAOD::Jet* aJet = new xAOD::Jet(); - theJetCollection->push_back(aJet); + theJetCollection->push_back(aJet); - // Build the jet, also keep track of the kinematics by hand - // We are using calibrated clusters, we need to keep track of this - aJet->setConstituentsSignalState(xAOD::JetConstitScale::CalibratedJetConstituent); + // Build the jet, also keep track of the kinematics by hand + // We are using calibrated clusters, we need to keep track of this + aJet->setConstituentsSignalState(xAOD::JetConstitScale::CalibratedJetConstituent); - // Make a minimal effort to speed things up ;) - // Eventually, want to use FastJet here? - TLorentzVector myCluster; - TLorentzVector TauBarycenter(0., 0., 0., 0.); + // Make a minimal effort to speed things up ;) + // Eventually, want to use FastJet here? + TLorentzVector myCluster; + TLorentzVector TauBarycenter(0., 0., 0., 0.); - xAOD::CaloClusterContainer::const_iterator clusterIt; - for (clusterIt=RoICaloClusterContainer->begin(); clusterIt != RoICaloClusterContainer->end(); ++clusterIt) { - ATH_MSG_DEBUG(" Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )"); + xAOD::CaloClusterContainer::const_iterator clusterIt; + for (clusterIt=RoICaloClusterContainer->begin(); clusterIt != RoICaloClusterContainer->end(); ++clusterIt) { + ATH_MSG_DEBUG(" Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )"); - if((*clusterIt)->e() < 0) - { - ATH_MSG_DEBUG(" Negative energy cluster is rejected"); - continue; - } + if((*clusterIt)->e() < 0) + { + ATH_MSG_DEBUG(" Negative energy cluster is rejected"); + continue; + } - myCluster.SetPtEtaPhiE((*clusterIt)->pt(), (*clusterIt)->eta(), (*clusterIt)->phi(), (*clusterIt)->e()); - aJet->addConstituent(*clusterIt); + myCluster.SetPtEtaPhiE((*clusterIt)->pt(), (*clusterIt)->eta(), (*clusterIt)->phi(), (*clusterIt)->e()); + aJet->addConstituent(*clusterIt); - TauBarycenter += myCluster; - } + TauBarycenter += myCluster; + } - aJet->setJetP4(xAOD::JetFourMom_t(TauBarycenter.Pt(), TauBarycenter.Eta(), TauBarycenter.Phi(), TauBarycenter.M() ) ); - - ATH_MSG_DEBUG("jet formed"<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() ); - - // Prepare Outputs - std::unique_ptr< xAOD::JetContainer > tauSeedContainer( new xAOD::JetContainer() ); - - // Save Outputs - SG::WriteHandle< xAOD::JetContainer > outTauSeedHandle = SG::makeHandle( m_trigtauSeedOutKey,ctx ); - CHECK( outTauSeedHandle.record( std::move( tauSeedContainer ) ) ); - - StatusCode processStatus = StatusCode::SUCCESS; - - // Save Outputs - SG::WriteHandle<xAOD::TauJetContainer> outTauJetHandle( m_trigtauRecOutKey ); - SG::WriteHandle<xAOD::TauTrackContainer> outTauTrackHandle( m_trigtauTrkOutKey ); - - //------------------------------------------------------------------------- - // setup TauCandidate data - //------------------------------------------------------------------------- - m_tauEventData.clear(); - xAOD::TauJetContainer *pContainer = new xAOD::TauJetContainer(); - xAOD::TauJetAuxContainer *pAuxContainer = new xAOD::TauJetAuxContainer(); - - xAOD::TauTrackContainer *pTrackContainer = new xAOD::TauTrackContainer(); - xAOD::TauTrackAuxContainer *pTrackAuxContainer = new xAOD::TauTrackAuxContainer(); - - pContainer->setStore(pAuxContainer); - pTrackContainer->setStore(pTrackAuxContainer); - - m_tauEventData.setObject("TauTrackContainer", pTrackContainer); - m_tauEventData.xAODTauContainer = pContainer; - m_tauEventData.tauAuxContainer = pAuxContainer; - - // Set the Objects that we can attach right now - m_tauEventData.setObject("TrackContainer", RoITrackParticleContainer); - m_tauEventData.setObject("VxPrimaryCandidate", RoIVxContainer); - if(m_lumiBlockMuTool) m_tauEventData.setObject("AvgInteractions", avg_mu); - if(m_beamSpotSvc) m_tauEventData.setObject("Beamspot", ptrBeamspot); - if(m_beamType == ("cosmics")) m_tauEventData.setObject("IsCosmics?", true ); - - - //------------------------------------------------------------------------- - // eventInitialize tauRec colls - //------------------------------------------------------------------------- - ToolHandleArray<ITauToolBase> ::iterator firstTool = m_tools.begin(); - ToolHandleArray<ITauToolBase> ::iterator lastTool = m_tools.end(); - for ( ; firstTool != lastTool; firstTool++ ) { - processStatus = (*firstTool)->eventInitialize(); - - if( processStatus != StatusCode :: SUCCESS ) { - ATH_MSG_ERROR("tool "<<(*firstTool)->name()<< "failed in eventInitialize"); - return StatusCode::FAILURE; - } - } - ATH_MSG_DEBUG(" initialize all good "); - - //------------------------------------------------------------------------- - // using Jet collection - // setup tau candidate structure - //------------------------------------------------------------------------- - xAOD::Jet* p_seed = (*theJetCollection->begin()); //there is only one jet stored - - xAOD::TauJet* p_tau = new xAOD::TauJet(); - pContainer->push_back(p_tau); - p_tau->setROIWord(roiDescriptor->roiWord()); - p_tau->setJet(theJetCollection, p_seed); - m_tauEventData.seedContainer = theJetCollection; - - // This sets one track and link. Need to have at least 1 track linked to retrieve track container - setEmptyTauTrack(p_tau, pTrackContainer); - - if(p_seed->e()<=0) { - msg() << MSG::DEBUG << " Roi: changing eta due to energy " << p_seed->e() << endmsg; - p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m()); + aJet->setJetP4(xAOD::JetFourMom_t(TauBarycenter.Pt(), TauBarycenter.Eta(), TauBarycenter.Phi(), TauBarycenter.M() ) ); + + ATH_MSG_DEBUG("jet formed"<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() ); + + // Prepare Outputs + std::unique_ptr< xAOD::JetContainer > tauSeedContainer( new xAOD::JetContainer() ); + + // Save Outputs + SG::WriteHandle< xAOD::JetContainer > outTauSeedHandle = SG::makeHandle( m_trigtauSeedOutKey,ctx ); + CHECK( outTauSeedHandle.record( std::move( tauSeedContainer ) ) ); + + StatusCode processStatus = StatusCode::SUCCESS; + + // Save Outputs + SG::WriteHandle<xAOD::TauJetContainer> outTauJetHandle( m_trigtauRecOutKey ); + SG::WriteHandle<xAOD::TauTrackContainer> outTauTrackHandle( m_trigtauTrkOutKey ); + + //------------------------------------------------------------------------- + // setup TauCandidate data + //------------------------------------------------------------------------- + m_tauEventData.clear(); + xAOD::TauJetContainer *pContainer = new xAOD::TauJetContainer(); + xAOD::TauJetAuxContainer *pAuxContainer = new xAOD::TauJetAuxContainer(); + + xAOD::TauTrackContainer *pTrackContainer = new xAOD::TauTrackContainer(); + xAOD::TauTrackAuxContainer *pTrackAuxContainer = new xAOD::TauTrackAuxContainer(); + + pContainer->setStore(pAuxContainer); + pTrackContainer->setStore(pTrackAuxContainer); + + m_tauEventData.setObject("TauTrackContainer", pTrackContainer); + m_tauEventData.xAODTauContainer = pContainer; + m_tauEventData.tauAuxContainer = pAuxContainer; + + // Set the Objects that we can attach right now + m_tauEventData.setObject("TrackContainer", RoITrackParticleContainer); + m_tauEventData.setObject("VxPrimaryCandidate", RoIVxContainer); + if(m_lumiBlockMuTool) m_tauEventData.setObject("AvgInteractions", avg_mu); + if(m_beamSpotSvc) m_tauEventData.setObject("Beamspot", ptrBeamspot); + if(m_beamType == ("cosmics")) m_tauEventData.setObject("IsCosmics?", true ); + + + //------------------------------------------------------------------------- + // eventInitialize tauRec colls + //------------------------------------------------------------------------- + ToolHandleArray<ITauToolBase> ::iterator firstTool = m_tools.begin(); + ToolHandleArray<ITauToolBase> ::iterator lastTool = m_tools.end(); + for ( ; firstTool != lastTool; firstTool++ ) { + processStatus = (*firstTool)->eventInitialize(); + + if( processStatus != StatusCode :: SUCCESS ) { + ATH_MSG_ERROR("tool "<<(*firstTool)->name()<< "failed in eventInitialize"); + return StatusCode::FAILURE; + } + } + ATH_MSG_DEBUG(" initialize all good "); + + //------------------------------------------------------------------------- + // using Jet collection + // setup tau candidate structure + //------------------------------------------------------------------------- + xAOD::Jet* p_seed = (*theJetCollection->begin()); //there is only one jet stored + + xAOD::TauJet* p_tau = new xAOD::TauJet(); + pContainer->push_back(p_tau); + p_tau->setROIWord(roiDescriptor->roiWord()); + p_tau->setJet(theJetCollection, p_seed); + m_tauEventData.seedContainer = theJetCollection; + + // This sets one track and link. Need to have at least 1 track linked to retrieve track container + // Can't we instead implement in the EDM a function to retrieve the track container of a tau? + setEmptyTauTrack(p_tau, pTrackContainer); + + if(p_seed->e()<=0) { + ATH_MSG_DEBUG( "Roi: changing eta due to energy " << p_seed->e() ); + p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m()); - msg() << MSG::DEBUG << "Roi: " << roiDescriptor->roiId() - << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() - << endmsg; - } - - ATH_MSG_DEBUG(" roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() ); - - m_tauEventData.setObject("JetCollection", theJetCollection ); - - //------------------------------------------------------------------------- - // loop over booked tau tools - //------------------------------------------------------------------------- - int toolnum = 0; - firstTool = m_tools.begin(); - lastTool = m_tools.end(); - processStatus = StatusCode::SUCCESS; - ATH_MSG_DEBUG("Starting tool loop with seed jet"); - //std::vector<TrigTimer* >::iterator itimer = m_mytimers.begin(); - while ( ! processStatus.isFailure() && firstTool != lastTool ) { - // loop stops only when Failure indicated by one of the tools - ATH_MSG_DEBUG("Starting Tool: " << (*firstTool)->name() ); - // time in the various tools - ++toolnum; - //if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->start(); - - processStatus = (*firstTool)->execute( *p_tau ); - if ( !processStatus.isFailure() ) { - ATH_MSG_DEBUG("REGTEST: "<< (*firstTool)->name() << " executed successfully "); - ATH_MSG_DEBUG("REGTEST: Roi: " << roiDescriptor->roiId() - << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() - << " Tau pT : "<< p_tau->pt()); - } - else { - ATH_MSG_DEBUG("REGTEST: "<< (*firstTool)->name() << " execution failed "); - } - ++firstTool; - //++itimer; - //if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->stop(); - } - - //check status - if ( !processStatus.isSuccess() ) { // some problem - ATH_MSG_DEBUG("the tau object has NOT been registered in the tau container"); - // ToolHandleArray<ITauToolBase> ::iterator tool = m_tools.begin(); - // for(; tool != firstTool; ++tool ) (*tool)->cleanup( &m_tauEventData ); - // (*tool)->cleanup( &m_tauEventData ); - - xAOD::TauJet* bad_tau = pContainer->back(); - ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << "Tracks associated with tau: "); - pTrackContainer->erase(pTrackContainer->end()-bad_tau->nAllTracks(), pTrackContainer->end()); - - pContainer->pop_back(); - - ATH_MSG_DEBUG("clean up done after jet seed"); - } - else if( processStatus.isSuccess()) { - - float fJetEnergy = (*p_tau->jetLink())->e(); - ATH_MSG_DEBUG(" Roi: jet e "<< fJetEnergy); + ATH_MSG_DEBUG( "Roi: " << roiDescriptor->roiId() << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() ); + } + + ATH_MSG_DEBUG(" roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() ); + + m_tauEventData.setObject("JetCollection", theJetCollection ); + + //------------------------------------------------------------------------- + // loop over booked tau tools + //------------------------------------------------------------------------- + int toolnum = 0; + firstTool = m_tools.begin(); + lastTool = m_tools.end(); + processStatus = StatusCode::SUCCESS; + ATH_MSG_DEBUG("Starting tool loop with seed jet"); + //std::vector<TrigTimer* >::iterator itimer = m_mytimers.begin(); + while ( ! processStatus.isFailure() && firstTool != lastTool ) { + // loop stops only when Failure indicated by one of the tools + ATH_MSG_DEBUG("Starting Tool: " << (*firstTool)->name() ); + // time in the various tools + ++toolnum; + //if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->start(); + + processStatus = (*firstTool)->execute( *p_tau ); + if ( !processStatus.isFailure() ) { + ATH_MSG_DEBUG("REGTEST: "<< (*firstTool)->name() << " executed successfully "); + ATH_MSG_DEBUG("REGTEST: Roi: " << roiDescriptor->roiId() + << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() + << " Tau pT : "<< p_tau->pt()); + } + else { + ATH_MSG_DEBUG("REGTEST: "<< (*firstTool)->name() << " execution failed "); + } + ++firstTool; + //++itimer; + //if ( doTiming() && itimer != m_mytimers.end() ) (*itimer)->stop(); + } + + //check status + if ( !processStatus.isSuccess() ) { // some problem + ATH_MSG_DEBUG("The tau object has NOT been registered in the tau container"); + // ToolHandleArray<ITauToolBase> ::iterator tool = m_tools.begin(); + // for(; tool != firstTool; ++tool ) (*tool)->cleanup( &m_tauEventData ); + // (*tool)->cleanup( &m_tauEventData ); + + xAOD::TauJet* bad_tau = pContainer->back(); + ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << " tracks associated with tau"); + pTrackContainer->erase(pTrackContainer->end()-bad_tau->nAllTracks(), pTrackContainer->end()); + + pContainer->pop_back(); + + ATH_MSG_DEBUG("Clean up done after jet seed"); + } + else { + + float fJetEnergy = (*p_tau->jetLink())->e(); + ATH_MSG_DEBUG("Roi: jet e "<< fJetEnergy); - if( fJetEnergy < 0.00001 ) { - ATH_MSG_DEBUG(" Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)"); - ATH_MSG_DEBUG(" Roi: this is probably not needed anymore, method PxPyPzE has been corrected"); + if( fJetEnergy < 0.00001 ) { + ATH_MSG_DEBUG("Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)"); + ATH_MSG_DEBUG("Roi: this is probably not needed anymore, method PxPyPzE has been corrected"); - //p_tau->setEta(roiDescriptor->eta0()); - //p_tau->setPhi(roiDescriptor->phi0()); - // Direct accessors not available anymore - p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m()); + p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m()); - ATH_MSG_DEBUG(" Roi: " << roiDescriptor->roiId() - << " Tau eta: " << p_tau->eta() - << " Tau phi: " << p_tau->phi() - << " Tau pT : "<< p_tau->pt()); - } + ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId() + << " Tau eta: " << p_tau->eta() + << " Tau phi: " << p_tau->phi() + << " Tau pT : "<< p_tau->pt()); + } - // loop over end tools - ToolHandleArray<ITauToolBase> ::iterator p_itET = m_endtools.begin(); - ToolHandleArray<ITauToolBase> ::iterator p_itETE = m_endtools.end(); - for (; p_itET != p_itETE; ++p_itET ) { - ATH_MSG_VERBOSE("Invoking endTool " << ( *p_itET )->name() ); + // loop over end tools + ToolHandleArray<ITauToolBase> ::iterator p_itET = m_endtools.begin(); + ToolHandleArray<ITauToolBase> ::iterator p_itETE = m_endtools.end(); + for (; p_itET != p_itETE; ++p_itET ) { + ATH_MSG_VERBOSE("Invoking endTool " << ( *p_itET )->name() ); - processStatus = ( *p_itET )->execute( *p_tau); - if( processStatus.isFailure() ) break; - } - // Get L1 RoiDescriptor - SG::ReadHandle< TrigRoiDescriptorCollection > L1roisHandle = SG::makeHandle( m_L1RoIKey, ctx ); - const TrigRoiDescriptor *roiL1Descriptor = L1roisHandle->at(0); - - EtaL1 = roiL1Descriptor->eta(); - PhiL1 = roiL1Descriptor->phi(); - - // get tau detail variables for Monitoring - numTrack = p_tau->nTracks(); - nWideTrk = p_tau->nTracksIsolation(); - p_tau->detail(xAOD::TauJetParameters::trkAvgDist, trkAvgDist); - p_tau->detail(xAOD::TauJetParameters::etOverPtLeadTrk, etovPtLead); - p_tau->detail(xAOD::TauJetParameters::EMRadius, emRadius); - p_tau->detail(xAOD::TauJetParameters::hadRadius, hadRadius); - p_tau->detail(xAOD::TauJetParameters::isolFrac, IsoFrac); - p_tau->detail(xAOD::TauJetParameters::centFrac, centFrac); - p_tau->detail(xAOD::TauJetParameters::ipSigLeadTrk, ipSigLeadTrk); - p_tau->detail(xAOD::TauJetParameters::trFlightPathSig, trFlightPathSig); - p_tau->detail(xAOD::TauJetParameters::dRmax, dRmax); - p_tau->detail(xAOD::TauJetParameters::massTrkSys, massTrkSys); + processStatus = ( *p_itET )->execute( *p_tau); + if( processStatus.isFailure() ) break; + } + + // Get L1 RoiDescriptor + SG::ReadHandle< TrigRoiDescriptorCollection > L1roisHandle = SG::makeHandle( m_L1RoIKey, ctx ); + + if ( L1roisHandle.isValid() && (L1roisHandle->size() != 0) ) { + const TrigRoiDescriptor *roiL1Descriptor = L1roisHandle->at(0); + EtaL1 = roiL1Descriptor->eta(); + PhiL1 = roiL1Descriptor->phi(); + } + else { + ATH_MSG_WARNING("Failed to retrieve L1 RoI descriptor!"); + } + + // get tau detail variables for Monitoring + numTrack = p_tau->nTracks(); + nWideTrk = p_tau->nTracksIsolation(); + p_tau->detail(xAOD::TauJetParameters::trkAvgDist, trkAvgDist); + p_tau->detail(xAOD::TauJetParameters::etOverPtLeadTrk, etovPtLead); + p_tau->detail(xAOD::TauJetParameters::EMRadius, emRadius); + p_tau->detail(xAOD::TauJetParameters::hadRadius, hadRadius); + p_tau->detail(xAOD::TauJetParameters::isolFrac, IsoFrac); + p_tau->detail(xAOD::TauJetParameters::centFrac, centFrac); + p_tau->detail(xAOD::TauJetParameters::ipSigLeadTrk, ipSigLeadTrk); + p_tau->detail(xAOD::TauJetParameters::trFlightPathSig, trFlightPathSig); + p_tau->detail(xAOD::TauJetParameters::dRmax, dRmax); + p_tau->detail(xAOD::TauJetParameters::massTrkSys, massTrkSys); - p_tau->detail(xAOD::TauJetParameters::PSSFraction, PSSFraction); - p_tau->detail(xAOD::TauJetParameters::EMPOverTrkSysP, EMPOverTrkSysP); - p_tau->detail(xAOD::TauJetParameters::ChPiEMEOverCaloEME, ChPiEMEOverCaloEME); - p_tau->detail(xAOD::TauJetParameters::innerTrkAvgDist, innerTrkAvgDist); - p_tau->detail(xAOD::TauJetParameters::SumPtTrkFrac, SumPtTrkFrac); - - massTrkSys /= 1000.; // make GeV - p_tau->detail(xAOD::TauJetParameters::etEMAtEMScale, EtEm); - EtEm /= 1000.; // make GeV - p_tau->detail(xAOD::TauJetParameters::etHadAtEMScale, EtHad); - EtHad /= 1000.; // make GeV - Et = EtEm + EtHad; - EtFinal = p_tau->pt()/1000.; - - EtaEF = p_tau->eta(); - PhiEF = p_tau->phi(); + p_tau->detail(xAOD::TauJetParameters::PSSFraction, PSSFraction); + p_tau->detail(xAOD::TauJetParameters::EMPOverTrkSysP, EMPOverTrkSysP); + p_tau->detail(xAOD::TauJetParameters::ChPiEMEOverCaloEME, ChPiEMEOverCaloEME); + p_tau->detail(xAOD::TauJetParameters::innerTrkAvgDist, innerTrkAvgDist); + p_tau->detail(xAOD::TauJetParameters::SumPtTrkFrac, SumPtTrkFrac); + + massTrkSys /= Gaudi::Units::GeV; + p_tau->detail(xAOD::TauJetParameters::etEMAtEMScale, EtEm); + EtEm /= Gaudi::Units::GeV; + p_tau->detail(xAOD::TauJetParameters::etHadAtEMScale, EtHad); + EtHad /= Gaudi::Units::GeV; + Et = EtEm + EtHad; + EtFinal = p_tau->pt()/Gaudi::Units::GeV; + + EtaEF = p_tau->eta(); + PhiEF = p_tau->phi(); - if( Et !=0) EMFrac = EtEm/ Et ; + if( Et !=0) EMFrac = EtEm/ Et ; - dEta = EtaEF - roiDescriptor->eta(); - dPhi = PhiEF - roiDescriptor->phi(); - if(dPhi<-M_PI) dPhi += 2.0*M_PI; - if(dPhi>M_PI) dPhi -= 2.0*M_PI; + dEta = EtaEF - roiDescriptor->eta(); + dPhi = PhiEF - roiDescriptor->phi(); + if(dPhi<-M_PI) dPhi += 2.0*M_PI; + if(dPhi>M_PI) dPhi -= 2.0*M_PI; - std::vector<const xAOD::TauJetContainer*> tempCaloOnlyContVec; + std::vector<const xAOD::TauJetContainer*> tempCaloOnlyContVec; - // get TauJetContainer - SG::ReadHandle< xAOD::TauJetContainer > TJContainerHandle = SG::makeHandle( m_trigTauJetKey,ctx ); - const xAOD::TauJetContainer *tempCaloOnlyCont=TJContainerHandle.get(); - tempCaloOnlyContVec.push_back(tempCaloOnlyCont); + // get TauJetContainer + SG::ReadHandle< xAOD::TauJetContainer > TJContainerHandle = SG::makeHandle( m_trigTauJetKey,ctx ); + const xAOD::TauJetContainer *tempCaloOnlyCont=TJContainerHandle.get(); + tempCaloOnlyContVec.push_back(tempCaloOnlyCont); - /*if( !tempCaloOnlyContVec.isValid()){ + /*if( !tempCaloOnlyContVec.isValid()){ - ATH_MSG_DEBUG( "Can't get container TrigTauRecCaloOnly to copy four-vector"); + ATH_MSG_DEBUG( "Can't get container TrigTauRecCaloOnly to copy four-vector"); - } else {*/ - if (tempCaloOnlyCont) { + } else {*/ + if (tempCaloOnlyCont) { - // const xAOD::TauJetContainer* tempCaloOnlyTauCont = tempCaloOnlyContVec.back(); - // for(xAOD::TauJetContainer::const_iterator tauIt = tempCaloOnlyTauCont->begin(); tauIt != tempCaloOnlyTauCont->end(); tauIt++){ + // const xAOD::TauJetContainer* tempCaloOnlyTauCont = tempCaloOnlyContVec.back(); + // for(xAOD::TauJetContainer::const_iterator tauIt = tempCaloOnlyTauCont->begin(); tauIt != tempCaloOnlyTauCont->end(); tauIt++){ - // const xAOD::TauJetContainer* tempCaloOnlyTauCont = tempCaloOnlyContVec.back(); + // const xAOD::TauJetContainer* tempCaloOnlyTauCont = tempCaloOnlyContVec.back(); - for(auto tauIt: *tempCaloOnlyCont){ - ATH_MSG_DEBUG("On the loop"); - ATH_MSG_DEBUG("pT(tau) = " << tauIt->pt() << " pT(caloOnly) = " << tauIt->ptTrigCaloOnly() ); + for(auto tauIt: *tempCaloOnlyCont){ + ATH_MSG_DEBUG("On the loop"); + ATH_MSG_DEBUG("pT(tau) = " << tauIt->pt() << " pT(caloOnly) = " << tauIt->ptTrigCaloOnly() ); - p_tau->setP4(xAOD::TauJetParameters::TrigCaloOnly, tauIt->ptTrigCaloOnly(), tauIt->etaTrigCaloOnly(), tauIt->phiTrigCaloOnly(), tauIt->mTrigCaloOnly()); - - } + p_tau->setP4(xAOD::TauJetParameters::TrigCaloOnly, tauIt->ptTrigCaloOnly(), tauIt->etaTrigCaloOnly(), tauIt->phiTrigCaloOnly(), tauIt->mTrigCaloOnly()); + } - //} + //} - }else{ - ATH_MSG_WARNING( "TauJetContainer not found :"); - } - - ATH_MSG_DEBUG("REGTEST: Roi: " << roiDescriptor->roiId() - << " Tau being saved eta: " << EtaEF << " Tau phi: " << PhiEF - << " wrt L1 dEta "<< dEta<<" dPhi "<<dPhi - << " Tau Et (GeV): "<< EtFinal); - - ++Ncand; - } - else { - xAOD::TauJet* bad_tau = pContainer->back(); - ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << "Tracks associated with tau: "); - pTrackContainer->erase(pTrackContainer->end()-bad_tau->nAllTracks(), pTrackContainer->end()); - pContainer->pop_back(); + } + else{ + ATH_MSG_WARNING( "TauJetContainer not found :"); + } + + ATH_MSG_DEBUG("REGTEST: Roi: " << roiDescriptor->roiId() + << " Tau being saved eta: " << EtaEF << " Tau phi: " << PhiEF + << " wrt L1 dEta "<< dEta<<" dPhi "<<dPhi + << " Tau Et (GeV): "<< EtFinal); - ATH_MSG_DEBUG("deleted tau done after jet seed"); - } + ++Ncand; + } + - // call eventFinalize on the booked tau tools - for ( firstTool = m_tools.begin(); firstTool != lastTool; firstTool++ ) { - processStatus = (*firstTool)->eventFinalize(); - if( processStatus != StatusCode :: SUCCESS ) { - ATH_MSG_DEBUG("tool "<<(*firstTool)->name()<< "failed in eventFinalize"); - return StatusCode::FAILURE; - } - } - ATH_MSG_DEBUG("tools succeed in eventFinalize"); + // call eventFinalize on the booked tau tools + for ( firstTool = m_tools.begin(); firstTool != lastTool; firstTool++ ) { + processStatus = (*firstTool)->eventFinalize(); + if( processStatus != StatusCode :: SUCCESS ) { + ATH_MSG_DEBUG("tool "<<(*firstTool)->name()<< "failed in eventFinalize"); + return StatusCode::FAILURE; + } + } + ATH_MSG_DEBUG("Tools succeed in eventFinalize"); - //------------------------------------------------------------------------- - // all done, register the tau Container in TDS. - //------------------------------------------------------------------------- - - ATH_MSG_DEBUG("Output TauJetContainer size:"<< pContainer->size()); - ATH_MSG_DEBUG("Output TauTrackJetContainer size:"<< pTrackContainer->size()); - - CHECK( outTauJetHandle.record(std::unique_ptr<xAOD::TauJetContainer>{pContainer}, std::unique_ptr<xAOD::TauJetAuxContainer>{pAuxContainer}) ); - CHECK( outTauTrackHandle.record(std::unique_ptr<xAOD::TauTrackContainer>{pTrackContainer}, std::unique_ptr<xAOD::TauTrackAuxContainer>{pTrackAuxContainer}) ); - - ATH_MSG_DEBUG("Recorded a tau container: HLT_TrigTauRecMergedMT"); - ATH_MSG_DEBUG("the tau object has been registered in the tau container"); - - // set status of TE to always true for FE algorithms - return StatusCode::SUCCESS; + //------------------------------------------------------------------------- + // all done, register the tau Container in TDS. + //------------------------------------------------------------------------- + + ATH_MSG_DEBUG("Output TauJetContainer size:"<< pContainer->size()); + ATH_MSG_DEBUG("Output TauTrackJetContainer size:"<< pTrackContainer->size()); + + CHECK( outTauJetHandle.record(std::unique_ptr<xAOD::TauJetContainer>{pContainer}, std::unique_ptr<xAOD::TauJetAuxContainer>{pAuxContainer}) ); + CHECK( outTauTrackHandle.record(std::unique_ptr<xAOD::TauTrackContainer>{pTrackContainer}, std::unique_ptr<xAOD::TauTrackAuxContainer>{pTrackAuxContainer}) ); + + ATH_MSG_DEBUG("Recorded a tau container: HLT_TrigTauRecMergedMT"); + ATH_MSG_DEBUG("the tau object has been registered in the tau container"); + + + // the validity of element links in data will need to be checked in R22! (see TrigTauRecMerged.cxx) + + + // set status of TE to always true for FE algorithms + return StatusCode::SUCCESS; } void TrigTauRecMergedMT::setEmptyTauTrack(xAOD::TauJet* &pTau, - xAOD::TauTrackContainer* &tauTrackContainer) + xAOD::TauTrackContainer* &tauTrackContainer) { // Make a new tau track, add to container xAOD::TauTrack* pTrack = new xAOD::TauTrack(); diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDef.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDef.py index c4a37f2a27f2f420f40e4310bdbee0d63072d870..ed6f36146ee7a707b69b016159d404b2d7c2f736 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDef.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDef.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration """ Tau slice signatures """ @@ -10,23 +10,19 @@ from AthenaCommon.Logging import logging logging.getLogger().info("Importing %s",__name__) log = logging.getLogger(__name__) -from InDetTrigParticleCreation.InDetTrigParticleCreationConf import InDet__TrigVertexxAODCnv -from InDetTrigRecExample.EFInDetConfig import TrigEFIDInsideOut_Tau from TrigCaloRec.TrigCaloRecConfig import TrigCaloCellMaker_tau, TrigCaloClusterMaker_topo from TrigFTK_RecAlgs.TrigFTK_RecAlgs_Config import TrigFTK_VxPrimary_EF from TrigInDetConf.TrigInDetFTKSequence import TrigInDetFTKSequence from TrigInDetConf.TrigInDetSequence import TrigInDetSequence -from TrigT2CaloTau.TrigT2CaloTauConfig import T2CaloTau_Tau_Med -from TrigT2IDTau.T2IDTauConfig import T2IDTau_Tau_1GeV_dZ02_dR0103 -from TrigT2Tau.T2TauFinalConfig import T2TauFinal_Tau_dR03_1GeV_dZ02 -from TrigTauDiscriminant.TrigTauDiscriGetter import TrigTauDiscriGetter, TrigTauDiscriGetter2015 +from TrigTauDiscriminant.TrigTauDiscriGetter import TrigTauDiscriGetter2015 from TrigTauHypo.TrigTauHypoBase import HLTTrackTauHypo_rejectNoTracks from TrigTauHypo.TrigTauHypoConf import HLTTauCaloRoiUpdater, HLTTauTrackRoiUpdater -from TrigTauRec.TrigTauRecConfig import (TrigTauRecMerged_Tau2012, - TrigTauRecMerged_TauCaloOnly, +from TrigTauRec.TrigTauRecConfig import (TrigTauRecMerged_TauCaloOnly, + TrigTauRecMerged_TauCaloOnlyMVA, TrigTauRecMerged_TauFTK, TrigTauRecMerged_TauPrecision, - TrigTauRecMerged_TauPreselection) + TrigTauRecMerged_TauPreselection, + TrigTauRecMerged_TauPrecisionMVA) from TrigTauRec.TrigTauRecCosmicsConfig import TrigTauRecCosmics_Tau2012 from TriggerMenu.menu.HltConfig import L2EFChainDef, mergeRemovingOverlap @@ -88,12 +84,11 @@ class L2EFChain_tau(L2EFChainDef): selection = self.chainPart['selection'] preselection = self.chainPart['preselection'] - if 'r1' in selection or 'r1' in preselection: - # Run-I set-up - self.setup_tauChainRunOne() - else: - # Run-II set-up - self.setup_tauChain() + # Run-I setup no longer supported + assert('r1' not in selection and 'r1' not in preselection), "Run-1 chains no longer supported! " + self.chainName + + # Run-II setup + self.setup_tauChain() L2EFChainDef.__init__(self, self.chainName, self.L2Name, self.chainCounter, chainDict['L1item'], self.EFName, self.chainCounter, self.L2InputTE) @@ -142,6 +137,16 @@ class L2EFChain_tau(L2EFChainDef): self.EFsequenceList += [[[ self.currentItem ], [caloRec], self.continueChain('L2', 'calorec')]] + + #create the TrigTauRec Calorimeter only sequence + def addTrigTauRecCaloOnlyMVASequence(self,threshold,selection,preselection): # MVA TES (ATR-17687) + + # Run TrigTauRec, calorimeter only (to get proper calibration, and cell-based vars) + caloRec = TrigTauRecMerged_TauCaloOnlyMVA() + + self.EFsequenceList += [[[ self.currentItem ], + [caloRec], + self.continueChain('L2', 'calorec')]] #create the Calorimeter hypo (selection) sequence def addCaloHypoSequence(self,threshold,selection,preselection): @@ -162,7 +167,7 @@ class L2EFChain_tau(L2EFChainDef): elif preselection == 'FTKRefit': [trkfast, trkprec[:]] = TrigInDetFTKSequence("Tau","tau",sequenceFlavour=["refit","PT"]).getSequence() elif preselection == 'FTKNoPrec': - [trkfast] = TrigInDetFTKSequence("Tau","tau","").getSequence() + [trkfast] = TrigInDetFTKSequence("Tau","tau",sequenceFlavour=[""]).getSequence() [trkprec[:]] = TrigInDetFTKSequence("Tau","tau",sequenceFlavour=["refit"]).getSequence() else: [trkfast, trkprec[:]] = TrigInDetSequence("Tau", "tau", "IDTrig").getSequence() @@ -191,28 +196,17 @@ class L2EFChain_tau(L2EFChainDef): theTrigFTK_VxPrimary_EF = TrigFTK_VxPrimary_EF("TauFTKVertex", "Tau") theTrigFTK_VxPrimary_EF.useRawTracks = False theTrigFTK_VxPrimary_EF.useRefittedTracks = False - - # to allow compatibility between release 20.11 and 21 -# from TrigInDetConf.TrigInDetSequence import vertexXAODCnvNeeded -# if vertexXAODCnvNeeded(): -# theTrigFTK_VxPrimary_EF.vxContainerName = 'PrimVxFTK' -# theTrigFTK_VxPrimary_EF.getVertexContainer = False -# theInDet__TrigVertexxAODCnv = InDet__TrigVertexxAODCnv(name="FTKTauVtxConversion") -# theInDet__TrigVertexxAODCnv.InputVxContainerKey = 'PrimVxFTK' -# theInDet__TrigVertexxAODCnv.OutputVxContainerKey = 'PrimVertexFTK' -# vertexAlgorithms = [theTrigFTK_VxPrimary_EF, theInDet__TrigVertexxAODCnv] -# self.EFsequenceList += [[[ self.currentItem ],vertexAlgorithms,self.continueChain('L2', 'vertex')]] -# else: theTrigFTK_VxPrimary_EF.vertexContainerName= 'PrimVertexFTK' theTrigFTK_VxPrimary_EF.getVertexContainer = True vertexAlgorithms = [theTrigFTK_VxPrimary_EF] + self.EFsequenceList += [[[ self.currentItem ], vertexAlgorithms, self.continueChain('L2', 'vertex')]] #create the TrigTauRec preselection sequence def addTrigTauRecTauPreselectionSequence(self,threshold,selection,preselection,idperf): # Run TrigTauRec to store pre-selected taus recPreselection = TrigTauRecMerged_TauPreselection() - + self.EFsequenceList += [[[ self.currentItem ], [recPreselection], self.continueChain('L2', 'storepre')]] @@ -238,11 +232,10 @@ class L2EFChain_tau(L2EFChainDef): # Here we load our new tau-specific RoI Updater tauRoiUpdater = HLTTauTrackRoiUpdater() # This will add up to a tolerance of 5 mm due to the extra 3mm tolerance from the FTF - # tauRoiUpdater.z0HalfWidth = 2.0 # Temporarily widened to 10 mm tauRoiUpdater.z0HalfWidth = 7.0 #ftracks = trkcore+[tauRoiUpdater]+trkiso - if not idperf: + if not idperf and preselection != 'tracktwoMVA': ftracks = trkcore + [tauRoiUpdater, tauRejectEmpty] + trkiso else : ftracks = trkcore+[tauRoiUpdater]+trkiso @@ -291,8 +284,6 @@ class L2EFChain_tau(L2EFChainDef): def setup_tauChain(self): threshold = self.chainPart['threshold'] - calibration = self.chainPart['calib'] - recoAlg = self.chainPart['recoAlg'] selection = self.chainPart['selection'] preselection= self.chainPart['preselection'] idperf = "idperf" in self.chainPart['trkInfo'] @@ -301,23 +292,37 @@ class L2EFChain_tau(L2EFChainDef): # Cleaner if-statements # Strategies which need calorimeter pre-selection needsCaloPre = ['calo', 'ptonly', 'mvonly', 'caloonly', - 'track', 'trackonly', 'tracktwo', + 'track', 'trackonly', 'tracktwo', 'tracktwoEF', 'trackcalo', 'tracktwocalo','tracktwo2015'] + needsCaloMVAPre = ['tracktwoEFmvaTES','tracktwoMVA'] # Strategies which need fast-track finding needsTrackTwoPre = ['tracktwo', 'tracktwoonly', 'tracktwocalo','tracktwo2015'] + needsTrackTwoNoPre = ['tracktwoEF','tracktwoEFmvaTES','tracktwoMVA'] needsTrackPre = ['track', 'trackonly', 'trackcalo', 'FTK', 'FTKRefit', 'FTKNoPrec'] # Strategies which need Run-II final hypo - needsRun2Hypo = ['calo', 'ptonly', 'mvonly', 'caloonly', - 'trackonly', 'track', 'tracktwo', 'tracktwocalo', 'trackcalo', 'FTK', 'FTKRefit', 'FTKNoPrec', 'tracktwo2015'] - fastTrackingUsed = needsTrackPre + needsTrackTwoPre + needsRun2Hypo = ['calo', 'ptonly', 'mvonly', 'caloonly', 'trackonly', 'track', 'tracktwo', 'tracktwoEF', 'tracktwoEFmvaTES', 'tracktwoMVA', 'tracktwocalo', 'trackcalo', 'FTK', 'FTKRefit', 'FTKNoPrec', 'tracktwo2015'] + fastTrackingUsed = needsTrackPre + needsTrackTwoPre + needsTrackTwoNoPre + + + # 2018 preselection + preselection2018 = needsCaloMVAPre + needsTrackTwoNoPre + # MVA TES for preselection and precision steps + MVATES = preselection in needsCaloMVAPre + # track counting based on EF tracks + BDT classification for core tracks + #TrackBDT = preselection in ['tracktwoMVA'] + # can't afford to use track BDT unfortunately, rates too high (especially when including 0p) + TrackBDT = False + # evaluate RNN for triggers using RNN ID, and 2018 support triggers (even those using BDT ID, to avoid too many different precision sequences) + RNN = selection in ['verylooseRNN', 'looseRNN', 'mediumRNN', 'tightRNN'] or preselection in preselection2018 + # chains using 2018 features + needsAlgo2018 = (preselection in preselection2018) or MVATES or TrackBDT or RNN + # give unique name to precision sequence + use = {True:'', False:'no'} + MVAprefix = '{0}MVATES_{1}TrackBDT_{2}RNN'.format(use[MVATES], use[TrackBDT], use[RNN]) + #Set the default values [trkcore, trkprec] = TrigInDetSequence("Tau", "tau", "IDTrig").getSequence() - - # Temporary hack to handle naming scheme - if 'r1' in selection: - preselection = 'r1' - selection = selection.replace('r1', '') # Overrule the final EF selection if idperf: @@ -337,15 +342,22 @@ class L2EFChain_tau(L2EFChainDef): self.addCaloSequence(threshold, selection, preselection) self.addTrigTauRecCaloOnlySequence(threshold,selection,preselection) self.addCaloHypoSequence(threshold,selection,preselection) + elif preselection in needsCaloMVAPre: + self.addCaloSequence(threshold, selection, preselection) + self.addTrigTauRecCaloOnlyMVASequence(threshold,selection,preselection) + self.addCaloHypoSequence(threshold,selection,preselection) # Two step fast-tracking if preselection in needsTrackTwoPre: self.addTwoStepTrackingSequence(threshold,selection,preselection,idperf, trkprec) - if preselection != 'tracktwo': - self.addTwoStepTrackingSelectionSequence(threshold,selection,preselection,idperf) + if preselection == 'tracktwo': self.addTrigTauRecTauPreselectionSequence(threshold,selection,preselection,idperf) + self.addTwoStepTrackingSelectionSequence(threshold,selection,preselection,idperf) else: - self.addTrigTauRecTauPreselectionSequence(threshold,selection,preselection,idperf) self.addTwoStepTrackingSelectionSequence(threshold,selection,preselection,idperf) + self.addTrigTauRecTauPreselectionSequence(threshold,selection,preselection,idperf) + # Two-step tracking but no tau reco, no selection + if preselection in needsTrackTwoNoPre: + self.addTwoStepTrackingSequence(threshold,selection,preselection,idperf, trkprec) # One step fast-tracking if preselection in needsTrackPre: self.addTrackingSequence(threshold,selection,preselection,idperf,trkprec) @@ -362,9 +374,12 @@ class L2EFChain_tau(L2EFChainDef): # Change track selection if we're running on cosmics... if selection == 'cosmic': - recmerged_2012 = TrigTauRecCosmics_Tau2012() + recmerged = TrigTauRecCosmics_Tau2012() else: - recmerged_2012 = TrigTauRecMerged_TauPrecision() + if needsAlgo2018: + recmerged = TrigTauRecMerged_TauPrecisionMVA(name='TrigTauMVA_{}'.format(MVAprefix), doMVATES=MVATES, doTrackBDT=TrackBDT, doRNN=RNN) + else: + recmerged = TrigTauRecMerged_TauPrecision() efidinsideout = trkprec @@ -379,180 +394,38 @@ class L2EFChain_tau(L2EFChainDef): self.continueChain('EF', 'tr')]] # TrigTauRec and Hypo (no BDT) - if selection == 'kaonpi1' or selection == 'kaonpi2' or selection == 'dipion1' or selection=='dipion1loose' or selection == 'dipion2' or selection == 'dikaon' or selection == 'dikaontight' or selection == 'dikaonmass' or selection == 'dikaonmasstight' or selection == 'singlepion' or selection == 'singlepiontight': + if selection == 'kaonpi1' or selection == 'kaonpi2' or selection == 'dipion1' or selection=='dipion1loose' or selection == 'dipion2' or selection == 'dipion3' or selection == 'dikaon' or selection == 'dikaontight' or selection == 'dikaonmass' or selection == 'dikaonmasstight' or selection == 'singlepion' or selection == 'singlepiontight': self.EFsequenceList += [[[ self.currentItem ], - [recmerged_2012, theEFHypo], + [recmerged, theEFHypo], self.continueChain('EF', 'effinal')]] - else: - # TrigTauRec, BDT and Hypo - efmv = TrigTauDiscriGetter2015() - self.EFsequenceList += [[[ self.currentItem ], - [recmerged_2012, efmv, theEFHypo], - self.continueChain('EF', 'effinal')]] - - def setup_tauChainRunOne(self): - - threshold = self.chainPart['threshold'] - calibration = self.chainPart['calib'] - recoAlg = self.chainPart['recoAlg'] - selection = self.chainPart['selection'] - preselection= self.chainPart['preselection'] - idperf = "idperf" in self.chainPart['trkInfo'] - - # Handle Run-II naming scheme - if 'r1' in selection: - preselection = 'r1' - selection = selection.replace('r1', '') - - # Overrule the final EF selection - if idperf: - selection = 'perf' - - if preselection == 'r1': - # Try new hypo extraction method - theL2CaloHypo = self.hypoProvider.GetHypo('L2', threshold, selection, 'calo', 'r1') - theL2IDHypo = self.hypoProvider.GetHypo('L2', threshold, selection, 'id', 'r1') - theL2FinalHypo = self.hypoProvider.GetHypo('L2', threshold, selection, '', 'r1') - # Get the necessary fexes - - from TrigL2SiTrackFinder.TrigL2SiTrackFinder_Config import (TrigL2SiTrackFinder_TauA, - TrigL2SiTrackFinder_TauB, - TrigL2SiTrackFinder_TauC) - t2calo_2012 = T2CaloTau_Tau_Med() - l2sitrkfinder_tauB = TrigL2SiTrackFinder_TauB() - t2id_2012 = T2IDTau_Tau_1GeV_dZ02_dR0103() - t2final_2012 = T2TauFinal_Tau_dR03_1GeV_dZ02() - - if idperf: - l2sitrkfinder_tauA = TrigL2SiTrackFinder_TauA() - l2sitrkfinder_tauC = TrigL2SiTrackFinder_TauC() - - # L2 configuration - self.L2sequenceList += [[[ self.currentItem ], - [t2calo_2012, theL2CaloHypo], - self.continueChain('L2', 'calo')]] - - if idperf: - self.L2sequenceList += [[[ self.currentItem ], - [l2sitrkfinder_tauA, l2sitrkfinder_tauB, l2sitrkfinder_tauC, t2id_2012, theL2IDHypo], - self.continueChain('L2', 'id')]] - else: - self.L2sequenceList += [[[ self.currentItem ], - [l2sitrkfinder_tauB, t2id_2012, theL2IDHypo], - self.continueChain('L2', 'id')]] - - self.L2sequenceList += [[[ self.currentItem ], - [t2final_2012, theL2FinalHypo], - self.continueChain('L2', 'l2final')]] - - if preselection == 'r1': - - theEFHypo = self.hypoProvider.GetHypo('EF', threshold, selection, '', 'r1') - - # Get the necessary fexes - - cellmaker = TrigCaloCellMaker_tau() - clustermaker_topo = TrigCaloClusterMaker_topo() - efidinsideout = TrigEFIDInsideOut_Tau().getSequence() - recmerged_2012 = TrigTauRecMerged_Tau2012() - efmv = TrigTauDiscriGetter() - - self.EFsequenceList += [[[ self.currentItem ], - [cellmaker, clustermaker_topo], - self.continueChain('EF', 'clf0')]] - - self.EFsequenceList += [[[ self.currentItem ], - efidinsideout, - self.continueChain('EF', 'tr')]] - - self.EFsequenceList += [[[ self.currentItem ], - [recmerged_2012, efmv, theEFHypo], - self.continueChain('EF', 'effinal')]] - - - # Prototype for TwoStep configuration - def setup_tauChainTwoStep(self): - - threshold = self.chainPart['threshold'] - calibration = self.chainPart['calib'] - recoAlg = self.chainPart['recoAlg'] - selection = self.chainPart['selection'] - preselection= self.chainPart['preselection'] - idperf = "idperf" in self.chainPart['trkInfo'] - - # Overrule the final EF selection - if idperf: - selection = 'perf' - - if preselection == 'calo' or preselection == 'ptonly' or preselection == 'mvonly' or preselection == 'caloonly' or preselection == 'track' or preselection == 'trackonly': - # Test 2015 approach - log.info("Calo-based pre-selection configuration is not quite ready yet!") - log.info("Very preliminary version!!") - - cellmaker = TrigCaloCellMaker_tau() - clustermaker_topo = TrigCaloClusterMaker_topo() - - # Run topoclustering - self.EFsequenceList += [[[ self.currentItem ], - [cellmaker, clustermaker_topo], - self.continueChain('EF', 'clf0')]] + elif needsAlgo2018: + # don't evaluate BDT for RNN chains + EFsequence = [] + if selection not in ['verylooseRNN', 'looseRNN', 'mediumRNN', 'tightRNN']: + EFsequence.append( TrigTauDiscriGetter2015() ) - if preselection == 'track' or preselection == 'trackonly' or (preselection != 'r1' and idperf): - - # Get the necessary fexes - [trkfast, trkprec] = TrigInDetSequence("Tau", "tau", "IDTrig").getSequence() - - # Run fast-tracking - self.EFsequenceList += [[[ self.currentItem ], - trkfast, - self.continueChain('EF', 'trfast')]] - - # Here we're running the TrigTauRec based on all the stuff that ran before. Uh-oh, this is dangerous... - # For now, assume fast-tracking is always run - - recPreselection = TrigTauRecMerged_TauPreselection() - - self.EFsequenceList += [[[ self.currentItem ], - recPreselection, - self.continueChain('EF', 'prefinal')]] - - - # Insert generic hypothesis - - - - if preselection == 'calo' or preselection == 'ptonly' or preselection == 'mvonly' or preselection == 'caloonly' or preselection == 'trackonly' or preselection == 'track': - # Only run tracking and tau-rec : no need for topoclustering - if preselection == 'caloonly' or preselection == 'trackonly' or selection == 'cosmic': - theEFHypo = self.hypoProvider.GetHypo('EF', threshold, 'perf', '', 'r1') - else: - theEFHypo = self.hypoProvider.GetHypo('EF', threshold, selection, '', 'r1') - - # Get the necessary fexes - [trkfast, trkprec] = TrigInDetSequence("Tau", "tau", "IDTrig").getSequence() + EFsequence.append( theEFHypo ) + self.EFsequenceList += [[[ self.currentItem ], + [recmerged], + self.continueChain('EF', 'taurecef')]] - # Change track selection if we're running on cosmics... - if selection == 'cosmic': - recmerged_2012 = TrigTauRecCosmics_Tau2012() - else: - recmerged_2012 = TrigTauRecMerged_TauPrecision() + if not idperf: + theHLTTrackPre = self.hypoProvider.GetHypo('L2', threshold, selection, 'id', preselection) + self.EFsequenceList += [[[ self.currentItem ], + [theHLTTrackPre], + self.continueChain('EF', 'trackpre')]] - # Only run the fast-tracking if it wasn't run at pre-selection - if preselection != 'track' and preselection != 'trackonly' and not idperf: - efidinsideout = trkfast+trkprec + self.EFsequenceList += [[[ self.currentItem ], + EFsequence, + self.continueChain('EF', 'effinal')]] + else: - efidinsideout = trkprec - - efmv = TrigTauDiscriGetter2015() - - - self.EFsequenceList += [[[ self.currentItem ], - efidinsideout, - self.continueChain('EF', 'tr')]] + # TrigTauRec, BDT and Hypo + efmv = TrigTauDiscriGetter2015() + self.EFsequenceList += [[[ self.currentItem ], + [recmerged, efmv, theEFHypo], + self.continueChain('EF', 'effinal')]] - self.EFsequenceList += [[[ self.currentItem ], - [recmerged_2012, efmv, theEFHypo], - self.continueChain('EF', 'effinal')]] diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDefIdTest.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDefIdTest.py index a7254eecdb42b70031e8935be586108c9ac43474..4f035879bb7379ae088e3fb67b858e021f427408 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDefIdTest.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauDefIdTest.py @@ -121,8 +121,6 @@ class L2EFChain_tau(L2EFChainDef): def setup_tauChain(self): threshold = self.chainPart['threshold'] - calibration = self.chainPart['calib'] - recoAlg = self.chainPart['recoAlg'] selection = self.chainPart['selection'] preselection= self.chainPart['preselection'] idperf = "idperf" in self.chainPart['trkInfo'] diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py index fbaed18a3ad93b0571d46b6f0a9facb30f1afbac..4c5cdb184798337710d31d33018b99d25906d6c6 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauHypoProvider.py @@ -38,7 +38,6 @@ class TauHypoProvider: theThresh = self.thresholdsL2Calo[(criteria, int(threshold))] currentHypo = T2CaloTauHypo(currentHypoKey, theVars, theThresh) - if part == 'id': if criteria== 'perf': from TrigTauHypo.TrigTauHypoBase import T2IDTauHypo_tauNoCut @@ -68,44 +67,45 @@ class TauHypoProvider: from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo_tauNoCut currentHypo = EFTauMVHypo_tauNoCut(currentHypoKey.replace(threshold, '')) - elif criteria=='dikaon' or criteria=='dikaontight' or criteria=='dikaonmass' or criteria=='dikaonmasstight' or criteria=='kaonpi1' or criteria=='kaonpi2' or criteria=='dipion1' or criteria=='dipion1loose' or criteria=='dipion2': + elif criteria=='dikaon' or criteria=='dikaontight' or criteria=='dikaonmass' or criteria=='dikaonmasstight' or criteria=='kaonpi1' or criteria=='kaonpi2' or criteria=='dipion1' or criteria=='dipion1loose' or criteria=='dipion2' or criteria=='dipion3': from TrigTauHypo.TrigTauHypoConfig2012 import EFTauDiKaonHypo theVars = ['massTrkSysMin', 'massTrkSysMax', 'massTrkSysKaonMin', 'massTrkSysKaonMax', 'massTrkSysKaonPiMin', 'massTrkSysKaonPiMax', 'targetMassTrkSysKaonPi', 'leadTrkPtMin','EtCalibMin','EMPOverTrkSysPMax'] theThresh = self.thresholdsEF_dikaon[(criteria, int(threshold))] currentHypo = EFTauDiKaonHypo(currentHypoKey, theVars, theThresh) -# elif criteria=='dikaonmass' or criteria=='dikaonmasstight': -# from TrigTauHypo.TrigTauHypoConfig2012 import EFTauDiKaonHypo -# theVars = ['massTrkSysKaonMin', 'massTrkSysKaonMax', 'leadTrkPtMin','EtCalibMin','EMPOverTrkSysPMax','nWideTrackMax'] -# theThresh = self.thresholdsEF_dikaonmass[(criteria, int(threshold))] -# currentHypo = EFTauDiKaonHypo(currentHypoKey, theVars, theThresh) - elif criteria=='singlepion' or criteria=='singlepiontight': from TrigTauHypo.TrigTauHypoConfig2012 import EFTauDiKaonHypo theVars = ['leadTrkPtMin','EtCalibMin','nTrackMax','nWideTrackMax','dRmaxMax','etOverPtLeadTrkMin','etOverPtLeadTrkMax'] theThresh = self.thresholdsEF_singlepion[(criteria, int(threshold))] currentHypo = EFTauDiKaonHypo(currentHypoKey, theVars, theThresh) - elif criteria=='medium1HighptL' or criteria=='medium1HighptM' or criteria=='medium1HighptH': - from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo_highpt - theVars = ['NTrackMax', 'EtCalibMin', 'Level','HighptTrkThr','HighptIDThr','HighptJetThr'] - theThresh = self.thresholdsEF[(criteria, int(threshold))] - theThresh.extend(self.thresholdsHighpt[(criteria)]) - currentHypo = EFTauMVHypo_highpt(currentHypoKey, theVars, theThresh) - elif criteria=='medium0': from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo theVars = ['NTrackMin','NTrackMax', 'EtCalibMin', 'Level','ApplyIDon0p'] theThresh = self.thresholdsEF_FTK[(criteria, int(threshold))] currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh) + elif criteria=='medium1NoPt': + from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo + theVars = ['NTrackMax', 'EtCalibMin', 'Level'] + theThresh = self.thresholdsEF[('medium1', 0)] # do not apply pt cut at EF + currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh) + + elif criteria=='verylooseRNN' or criteria=='looseRNN' or criteria=='mediumRNN' or criteria=='tightRNN': + from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo + theVars = ['NTrackMax', 'EtCalibMin', 'Level'] + theThresh = self.thresholdsEF[(criteria, int(threshold))] + theVars.extend(['Method','NTrackMin','HighptIDThr']) + theThresh.extend([3,0,280000.]) + currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh) + else: from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo theVars = ['NTrackMax', 'EtCalibMin', 'Level'] theThresh = self.thresholdsEF[(criteria, int(threshold))] currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh) - if strategy == 'calo' or strategy =='ptonly' or strategy == 'mvonly' or strategy == 'caloonly' or strategy == 'track' or strategy == 'trackonly' or strategy == 'tracktwo' or strategy == 'trackcalo' or strategy == 'tracktwocalo' or strategy == 'tracktwo2015' or strategy == 'FTK' or strategy == 'FTKRefit' or strategy == 'FTKNoPrec': + if strategy == 'calo' or strategy =='ptonly' or strategy == 'mvonly' or strategy == 'caloonly' or strategy == 'track' or strategy == 'trackonly' or strategy == 'tracktwo' or strategy == 'tracktwoEF' or strategy == 'tracktwoEFmvaTES' or strategy == 'tracktwoMVA' or strategy == 'trackcalo' or strategy == 'tracktwocalo' or strategy == 'tracktwo2015' or strategy == 'FTK' or strategy == 'FTKRefit' or strategy == 'FTKNoPrec': # Simple implementation of 2015 pre-selection currentHypoKey = 'l2'+part+'_tau'+threshold+'_'+criteria+'_'+strategy @@ -143,7 +143,6 @@ class TauHypoProvider: if part == 'id': from TrigTauHypo.TrigTauHypoBase import HLTTrackTauHypo from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo - from TrigTauHypo.TrigTauHypoConfig2012 import EFTauMVHypo_highpt # Important Note: the pT cut here is an unused dummy if criteria == 'cosmic': theVars = ['LowerPtCut', 'TracksInCoreCut', 'TracksInIsoCut', 'DeltaZ0Cut'] @@ -155,19 +154,18 @@ class TauHypoProvider: theThresh = [0,3,1,0.*self.GeV,-1111,0] currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh) else: - if strategy != 'tracktwo' and strategy != 'FTK' and strategy != 'FTKRefit' and strategy != 'FTKNoPrec': + if strategy != 'tracktwo' and strategy != 'tracktwoEF' and strategy != 'tracktwoEFmvaTES' and strategy != 'tracktwoMVA' and strategy != 'FTK' and strategy != 'FTKRefit' and strategy != 'FTKNoPrec': theVars = ['LowerPtCut','LowerTrackPtCut'] theThresh = [int(threshold)*self.GeV,1.*self.GeV] currentHypo = HLTTrackTauHypo(currentHypoKey, theVars, theThresh) + elif strategy == 'tracktwoMVA': + theVars = ['NTrackMin','NTrackMax','NWideTrackMax','EtCalibMin', 'Level','Method'] + theThresh = [0,3,1,0.*self.GeV,-1111,0] + currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh) else: theVars = ['NTrackMin','NTrackMax','NWideTrackMax','EtCalibMin', 'Level','Method'] theThresh = [1,3,1,0.*self.GeV,-1111,0] - if criteria=='medium1HighptL' or criteria=='medium1HighptM' or criteria=='medium1HighptH': - theVars.extend(['HighptTrkThr','HighptIDThr','HighptJetThr']) - theThresh.extend(self.thresholdsHighpt[(criteria)]) - currentHypo = EFTauMVHypo_highpt(currentHypoKey, theVars, theThresh) - else: - currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh) + currentHypo = EFTauMVHypo(currentHypoKey, theVars, theThresh) assert currentHypo, 'unable to find hypothesis algorithm: '+currentHypoKey @@ -258,6 +256,7 @@ class TauHypoProvider: ('medium1', 29): [3, 29.0*GeV, 2], ('medium1', 35): [3, 35.0*GeV, 2], ('medium1', 38): [3, 38.0*GeV, 2], + ('medium1', 40): [3, 40.0*GeV, 2], ('medium1', 50): [3, 50.0*GeV, 2], ('medium1', 60): [3, 60.0*GeV, 2], ('medium1', 80): [3, 80.0*GeV, 2], @@ -277,40 +276,58 @@ class TauHypoProvider: ('tight1', 125): [3, 125.0*GeV, 3], ('tight1', 160): [3, 160.0*GeV, 3], ('tight1', 200): [3, 200.0*GeV, 3], - ('medium1HighptL', 20): [3, 20.0*GeV, 2], - ('medium1HighptL', 25): [3, 25.0*GeV, 2], - ('medium1HighptL', 29): [3, 29.0*GeV, 2], - ('medium1HighptL', 35): [3, 35.0*GeV, 2], - ('medium1HighptL', 38): [3, 38.0*GeV, 2], - ('medium1HighptL', 50): [3, 50.0*GeV, 2], - ('medium1HighptL', 60): [3, 60.0*GeV, 2], - ('medium1HighptL', 80): [3, 80.0*GeV, 2], - ('medium1HighptL', 115): [3, 115.0*GeV, 2], - ('medium1HighptL', 125): [3, 125.0*GeV, 2], - ('medium1HighptL', 160): [3, 160.0*GeV, 2], - ('medium1HighptM', 20): [3, 20.0*GeV, 2], - ('medium1HighptM', 25): [3, 25.0*GeV, 2], - ('medium1HighptM', 29): [3, 29.0*GeV, 2], - ('medium1HighptM', 35): [3, 35.0*GeV, 2], - ('medium1HighptM', 38): [3, 38.0*GeV, 2], - ('medium1HighptM', 50): [3, 50.0*GeV, 2], - ('medium1HighptM', 60): [3, 60.0*GeV, 2], - ('medium1HighptM', 80): [3, 80.0*GeV, 2], - ('medium1HighptM', 115): [3, 115.0*GeV, 2], - ('medium1HighptM', 125): [3, 125.0*GeV, 2], - ('medium1HighptM', 160): [3, 160.0*GeV, 2], - ('medium1HighptH', 20): [3, 20.0*GeV, 2], - ('medium1HighptH', 25): [3, 25.0*GeV, 2], - ('medium1HighptH', 29): [3, 29.0*GeV, 2], - ('medium1HighptH', 35): [3, 35.0*GeV, 2], - ('medium1HighptH', 38): [3, 38.0*GeV, 2], - ('medium1HighptH', 50): [3, 50.0*GeV, 2], - ('medium1HighptH', 60): [3, 60.0*GeV, 2], - ('medium1HighptH', 80): [3, 80.0*GeV, 2], - ('medium1HighptH', 115): [3, 115.0*GeV, 2], - ('medium1HighptH', 125): [3, 125.0*GeV, 2], - ('medium1HighptH', 160): [3, 160.0*GeV, 2], - ('medium1HighptH', 200): [3, 200.0*GeV, 2] + ('verylooseRNN', 20): [3, 20.0*GeV, 0], + ('verylooseRNN', 25): [3, 25.0*GeV, 0], + ('verylooseRNN', 29): [3, 29.0*GeV, 0], + ('verylooseRNN', 35): [3, 35.0*GeV, 0], + ('verylooseRNN', 38): [3, 38.0*GeV, 0], + ('verylooseRNN', 50): [3, 50.0*GeV, 0], + ('verylooseRNN', 60): [3, 60.0*GeV, 0], + ('verylooseRNN', 80): [3, 80.0*GeV, 0], + ('verylooseRNN', 115): [3, 115.0*GeV, 0], + ('verylooseRNN', 125): [3, 125.0*GeV, 0], + ('verylooseRNN', 160): [3, 160.0*GeV, 0], + ('verylooseRNN', 200): [3, 200.0*GeV, 0], + ('looseRNN', 20): [3, 20.0*GeV, 1], + ('looseRNN', 25): [3, 25.0*GeV, 1], + ('looseRNN', 29): [3, 29.0*GeV, 1], + ('looseRNN', 35): [3, 35.0*GeV, 1], + ('looseRNN', 38): [3, 38.0*GeV, 1], + ('looseRNN', 50): [3, 50.0*GeV, 1], + ('looseRNN', 60): [3, 60.0*GeV, 1], + ('looseRNN', 80): [3, 80.0*GeV, 1], + ('looseRNN', 115): [3, 115.0*GeV, 1], + ('looseRNN', 125): [3, 125.0*GeV, 1], + ('looseRNN', 160): [3, 160.0*GeV, 1], + ('looseRNN', 200): [3, 200.0*GeV, 1], + ('mediumRNN', 0): [3, 0.0*GeV, 2], + ('mediumRNN', 12): [3, 12.0*GeV, 2], + ('mediumRNN', 20): [3, 20.0*GeV, 2], + ('mediumRNN', 25): [3, 25.0*GeV, 2], + ('mediumRNN', 29): [3, 29.0*GeV, 2], + ('mediumRNN', 35): [3, 35.0*GeV, 2], + ('mediumRNN', 38): [3, 38.0*GeV, 2], + ('mediumRNN', 40): [3, 40.0*GeV, 2], + ('mediumRNN', 50): [3, 50.0*GeV, 2], + ('mediumRNN', 60): [3, 60.0*GeV, 2], + ('mediumRNN', 80): [3, 80.0*GeV, 2], + ('mediumRNN', 115): [3, 115.0*GeV, 2], + ('mediumRNN', 125): [3, 125.0*GeV, 2], + ('mediumRNN', 160): [3, 160.0*GeV, 2], + ('mediumRNN', 200): [3, 200.0*GeV, 2], + ('tightRNN', 20): [3, 20.0*GeV, 3], + ('tightRNN', 25): [3, 25.0*GeV, 3], + ('tightRNN', 29): [3, 29.0*GeV, 3], + ('tightRNN', 35): [3, 35.0*GeV, 3], + ('tightRNN', 38): [3, 38.0*GeV, 3], + ('tightRNN', 40): [3, 40.0*GeV, 3], + ('tightRNN', 50): [3, 50.0*GeV, 3], + ('tightRNN', 60): [3, 60.0*GeV, 3], + ('tightRNN', 80): [3, 80.0*GeV, 3], + ('tightRNN', 115): [3, 115.0*GeV, 3], + ('tightRNN', 125): [3, 125.0*GeV, 3], + ('tightRNN', 160): [3, 160.0*GeV, 3], + ('tightRNN', 200): [3, 200.0*GeV, 3] } thresholdsEF_FTK = { @@ -329,12 +346,8 @@ class TauHypoProvider: ('medium0', 160): [0,3, 160.0*GeV, 2, False], ('medium0', 200): [0,3, 200.0*GeV, 2, False], } - thresholdsHighpt = { - ('medium1HighptL'):[250.0*GeV,330.0*GeV,410.0*GeV], - ('medium1HighptM'):[200.0*GeV,330.0*GeV,410.0*GeV], - ('medium1HighptH'):[160.0*GeV,330.0*GeV,410.0*GeV] - } +# 'massTrkSysMin', 'massTrkSysMax', 'massTrkSysKaonMin', 'massTrkSysKaonMax', 'massTrkSysKaonPiMin', 'massTrkSysKaonPiMax', 'targetMassTrkSysKaonPi', 'leadTrkPtMin','EtCalibMin','EMPOverTrkSysPMax' thresholdsEF_dikaon = { ('dikaon', 25): [0.2*GeV, 0.45*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 15.0*GeV, 25.0*GeV, 1.5], ('dikaon', 35): [0.2*GeV, 0.45*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 25.0*GeV, 35.0*GeV, 1.5], @@ -353,7 +366,8 @@ class TauHypoProvider: ('dipion1loose', 25): [0.475*GeV, 1.075*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 25.0*GeV, 25.0*GeV, 1.5], ('dipion1loose', 35): [0.475*GeV, 1.075*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 25.0*GeV, 35.0*GeV, 1.5], ('dipion2', 25): [0.460*GeV, 0.538*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 15.0*GeV, 25.0*GeV, 1.0], - ('dipion2', 35): [0.460*GeV, 0.538*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 25.0*GeV, 35.0*GeV, 1.0] + ('dipion2', 35): [0.460*GeV, 0.538*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 25.0*GeV, 35.0*GeV, 1.0], + ('dipion3', 25): [0.279*GeV, 0.648*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 1000.0*GeV, 0.0*GeV, 25.0*GeV, 25.0*GeV, 2.2], #ATR-16600 } diff --git a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauSliceFlags.py b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauSliceFlags.py index 32e809dfc4b065523bb0e8ec1e85d2a5fa441e51..164db119f1bfe6cc0dfc4d48cfc1e46bb75a12d2 100755 --- a/Trigger/TriggerCommon/TriggerMenu/python/tau/TauSliceFlags.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/tau/TauSliceFlags.py @@ -2,11 +2,8 @@ """ Tau slice specific flags """ - - -from AthenaCommon.Logging import logging -from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer, jobproperties -from TriggerMenu.menu.CommonSliceHelper import CommonSliceHelper, AllowedList +from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer +from TriggerMenu.menu.CommonSliceHelper import CommonSliceHelper __author__ = '' __version__="$Revision: 1.34 $"