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