diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/data/example_config.yaml b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/data/example_config.yaml
index 0e2e9eaf1d721a02a69b305e958b166f06b9d234..43233db3275c938a1465537466beb1f311773148 100644
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/data/example_config.yaml
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/data/example_config.yaml
@@ -58,6 +58,21 @@ TauJets:
     WorkingPoint:
       - selectionName: 'tight'
         quality: 'Tight'
+    TriggerSF:
+      tauID: 'Tight'
+      triggerChainsPerYear:
+        '2015':
+	  - 'HLT_tau25_medium1_tracktwo'
+	  - 'HLT_tau35_medium1_tracktwo'
+	'2016':
+	  - 'HLT_tau25_medium1_tracktwo'
+	  - 'HLT_tau35_medium1_tracktwo'
+	'2017':
+	  - 'HLT_tau25_medium1_tracktwo'
+	  - 'HLT_tau35_medium1_tracktwo'
+	'2018':
+	  - 'HLT_tau25_medium1_tracktwoEF_OR_mediumRNN_tracktwoMVA'
+	  - 'HLT_tau35_medium1_tracktwoEF_OR_mediumRNN_tracktwoMVA'
     PtEtaSelection: {}
 
 GeneratorLevelAnalysis: {}
diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/ConfigFactory.py b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/ConfigFactory.py
index 6829656c7abef2f016a849b86cd4a098b2891dc4..c598dc45b70c978540c328db4c6fa96a0046fa64 100644
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/ConfigFactory.py
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/ConfigFactory.py
@@ -271,6 +271,9 @@ class ConfigFactory():
         from TauAnalysisAlgorithms.TauAnalysisConfig import TauWorkingPointConfig
         self.addAlgConfigBlock(algName="WorkingPoint", alg=TauWorkingPointConfig,
             superBlocks="TauJets")
+        from TauAnalysisAlgorithms.TauAnalysisConfig import TauTriggerAnalysisSFBlock
+        self.addAlgConfigBlock(algName="TriggerSF", alg=TauTriggerAnalysisSFBlock,
+                               superBlocks="TauJets")
 
         # SystObjectLink
         from AsgAnalysisAlgorithms.SystObjectLinkConfig import SystObjectLinkBlock
diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
index 0c4dc6fd91c0ef3d08b2ab99795327a85717170e..d712a324ebb162505a8b6766274bf5cf51516840 100644
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
@@ -21,6 +21,12 @@ triggerChains = [
     'HLT_mu20_mu8noL1',
     'HLT_2e17_lhvloose_nod0'
 ]
+tauTriggerChainsSF = {
+    '2015': ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
+    '2016': ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
+    '2017': ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
+    '2018': ['HLT_tau25_medium1_tracktwoEF_OR_mediumRNN_tracktwoMVA', 'HLT_tau35_medium1_tracktwoEF_OR_mediumRNN_tracktwoMVA'],
+}
 
 # Example cuts used for event selection algorithm test
 exampleSelectionCuts = {
@@ -855,6 +861,12 @@ def makeSequenceBlocks (dataType, algSeq, forCompare, isPhyslite,
         selectionName='tight')
     configSeq.setOptionValue ('.quality', 'Tight')
 
+    if not forCompare:
+        configSeq += config.makeConfig('TauJets.TriggerSF')
+        configSeq.setOptionValue('.containerName', 'AnaTauJets')
+        configSeq.setOptionValue('.tauID', 'Tight')
+        configSeq.setOptionValue('.triggerChainsPerYear', tauTriggerChainsSF)
+
     configSeq += config.makeConfig ('TauJets.PtEtaSelection',
         containerName='AnaTauJets')
     configSeq.setOptionValue ('.selectionDecoration', 'selectPtEta')
diff --git a/PhysicsAnalysis/Algorithms/TauAnalysisAlgorithms/python/TauAnalysisConfig.py b/PhysicsAnalysis/Algorithms/TauAnalysisAlgorithms/python/TauAnalysisConfig.py
index 644b1470c7b85d6edde50633c324f918566ab62d..f09e60d4fdebcd9ad74ab7b5650d655ee71f0fb6 100644
--- a/PhysicsAnalysis/Algorithms/TauAnalysisAlgorithms/python/TauAnalysisConfig.py
+++ b/PhysicsAnalysis/Algorithms/TauAnalysisAlgorithms/python/TauAnalysisConfig.py
@@ -3,6 +3,7 @@
 # AnaAlgorithm import(s):
 from AnalysisAlgorithmsConfig.ConfigBlock import ConfigBlock
 from AnalysisAlgorithmsConfig.ConfigAccumulator import DataType
+from Campaigns.Utils import Campaign
 
 
 class TauCalibrationConfig (ConfigBlock):
@@ -228,3 +229,67 @@ def makeTauWorkingPointConfig( seq, containerName, workingPoint, selectionName,
     config.setOptionValue ('legacyRecommendations', legacyRecommendations)
     config.setOptionValue ('noEffSF', noEffSF)
     seq.append (config)
+
+
+class TauTriggerAnalysisSFBlock (ConfigBlock):
+
+    def __init__ (self, configName='') :
+        super (TauTriggerAnalysisSFBlock, self).__init__ ()
+
+        self.addOption ('triggerChainsPerYear', {}, type=None,
+                        info="a dictionary with key (string) the year and value (list of "
+                        "strings) the trigger chains. The default is {} (empty dictionary).")
+        self.addOption ('tauID', '', type=str,
+                        info="the tau quality WP (string) to use.")
+        self.addOption ('containerName', '', type=str,
+                        info="the input tau container, with a possible selection, in "
+                        "the format container or container.selection.")
+
+    def makeAlgs (self, config) :
+
+        if config.dataType() is not DataType.Data:
+            if config.campaign() is Campaign.MC20a:
+                triggers = self.triggerChainsPerYear.get('2015',[])
+                triggers += self.triggerChainsPerYear.get('2016',[])
+                # Remove potential duplicates
+                triggers = list(set(triggers))
+            elif config.campaign() is Campaign.MC20d:
+                triggers = self.triggerChainsPerYear.get('2017',[])
+            elif config.campaign() is Campaign.MC20e:
+                triggers = self.triggerChainsPerYear.get('2018',[])
+            elif config.campaign() in [Campaign.MC21a, Campaign.MC23a]:
+                triggers = self.triggerChainsPerYear.get('2022',[])
+            elif config.campaign() is Campaign.MC23c:
+                triggers = self.triggerChainsPerYear.get('2023',[])
+
+            for trig in triggers:
+                alg = config.createAlgorithm( 'CP::TauEfficiencyCorrectionsAlg',
+                                              'TauTrigEfficiencyCorrectionsAlg' + trig )
+                config.addPrivateTool( 'efficiencyCorrectionsTool',
+                                       'TauAnalysisTools::TauEfficiencyCorrectionsTool' )
+                # SFTriggerHadTau correction type from
+                # https://gitlab.cern.ch/atlas/athena/-/blob/main/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h#L79
+                alg.efficiencyCorrectionsTool.EfficiencyCorrectionTypes = [12]
+                alg.efficiencyCorrectionsTool.TriggerName = trig
+
+                # JetIDLevel from
+                # https://gitlab.cern.ch/atlas/athena/-/blob/main/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h#L79
+                if self.tauID=="Loose":
+                    JetIDLevel = 7
+                elif self.tauID=="Medium":
+                    JetIDLevel = 8
+                elif self.tauID=="Tight":
+                    JetIDLevel = 9
+                else:
+                    raise ValueError ("invalid tauID: \"" + self.tauID + "\". Allowed values are loose, medium, tight")
+                alg.efficiencyCorrectionsTool.JetIDLevel = JetIDLevel
+                alg.efficiencyCorrectionsTool.TriggerSFMeasurement = "combined"
+
+                alg.scaleFactorDecoration = 'tau_trigEffSF_' + trig + '_%SYS%'
+                alg.outOfValidity = 2 #silent
+                alg.outOfValidityDeco = 'bad_eff_tautrig_' + trig
+                alg.taus = config.readName (self.containerName)
+                alg.preselection = config.getPreselection (self.containerName, self.tauID)
+                config.addOutputVar (self.containerName, alg.scaleFactorDecoration, 'trigEffSF_' + trig)
+
+        return