41 def makeAlgs (self, config) :
42
43
44 if 'EleRM' in self.inputContainer:
45 if config.dataType() is DataType.Data and config.dataYear() <= 2023:
46 raise RuntimeError("EleRM taus are only available from 2024 dataset onward")
47 elif config.dataType() is not DataType.Data and config.campaign() <= Campaign.MC23d:
48 raise RuntimeError("EleRM taus are only available from 2024 dataset onward")
49
50 postfix = self.postfix
51 if postfix != '' and postfix[0] != '_' :
52 postfix = '_' + postfix
53
54 inputContainer = "AnalysisTauJets" if config.isPhyslite() else "TauJets"
55 if self.inputContainer:
56 inputContainer = self.inputContainer
57 config.setSourceName (self.containerName, inputContainer)
58
59
60 if self.rerunTruthMatching and config.dataType() is not DataType.Data:
61 alg = config.createAlgorithm( 'CP::TauTruthMatchingAlg',
62 'TauTruthMatchingAlg' )
63 config.addPrivateTool( 'matchingTool',
64 'TauAnalysisTools::TauTruthMatchingTool' )
65 alg.matchingTool.TruthJetContainerName = 'AntiKt4TruthDressedWZJets'
66 alg.taus = config.readName (self.containerName)
67 alg.preselection = config.getPreselection (self.containerName, '')
68
69
70 if self.decorateTruth and config.dataType() is not DataType.Data:
71 alg = config.createAlgorithm( 'CP::TauTruthDecorationsAlg',
72 'TauTruthDecorationsAlg',
73 reentrant=True )
74 alg.taus = config.readName (self.containerName)
75 alg.doubleDecorations = ['pt_vis', 'pt_invis', 'eta_vis', 'eta_invis', 'phi_vis', 'phi_invis', 'm_vis', 'm_invis']
76 alg.floatDecorations = []
77 alg.intDecorations = ['pdgId']
78 alg.unsignedIntDecorations = ['classifierParticleOrigin', 'classifierParticleType']
79 alg.charDecorations = ['IsHadronicTau']
80 alg.prefix = 'truth_'
81
82
83 for var in ['DecayMode', 'ParticleType', 'PartonTruthLabelID'] + alg.doubleDecorations[:] + alg.floatDecorations[:] + alg.intDecorations[:] + alg.unsignedIntDecorations[:] + alg.charDecorations[:]:
84 branchName = alg.prefix + var
85 if 'classifierParticle' in var:
86 branchOutput = alg.prefix + var.replace('classifierParticle', '').lower()
87 else:
88 branchOutput = branchName
89 config.addOutputVar (self.containerName, branchName, branchOutput, noSys=True)
90
91
92 if self.decorateExtraVariables:
93 alg = config.createAlgorithm( 'CP::TauExtraVariablesAlg',
94 'TauExtraVariablesAlg',
95 reentrant=True )
96 alg.taus = config.readName (self.containerName)
97
98
99 alg = config.createAlgorithm( 'CP::TauSmearingAlg', 'TauSmearingAlg' )
100 config.addPrivateTool( 'smearingTool', 'TauAnalysisTools::TauSmearingTool' )
101 alg.smearingTool.useFastSim = config.dataType() is DataType.FastSim
102 alg.smearingTool.Campaign = "mc23" if config.geometry() is LHCPeriod.Run3 else "mc20"
103 alg.taus = config.readName (self.containerName)
104 alg.tausOut = config.copyName (self.containerName)
105 alg.preselection = config.getPreselection (self.containerName, '')
106
107
108 alg = config.createAlgorithm( 'CP::AsgEnergyDecoratorAlg', 'EnergyDecorator' )
109 alg.particles = config.readName (self.containerName)
110
111 config.addOutputVar (self.containerName, 'pt', 'pt')
112 config.addOutputVar (self.containerName, 'eta', 'eta', noSys=True)
113 config.addOutputVar (self.containerName, 'phi', 'phi', noSys=True)
114 config.addOutputVar (self.containerName, 'e_%SYS%', 'e')
115 config.addOutputVar (self.containerName, 'charge', 'charge', noSys=True)
116 config.addOutputVar (self.containerName, 'NNDecayMode', 'NNDecayMode', noSys=True, auxType='int')
117 config.addOutputVar (self.containerName, 'passTATTauMuonOLR', 'passTATTauMuonOLR', noSys=True, auxType='char')
118 config.addOutputVar (self.containerName, 'TESCompatibility', 'TESCompatibility')
119 if self.decorateExtraVariables:
120 config.addOutputVar (self.containerName, 'nTracksCharged', 'nTracksCharged', noSys=True)
121
122