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