40 def makeAlgs (self, config) :
41
42
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")
48
49 postfix = self.postfix
50 if postfix != '' and postfix[0] != '_' :
51 postfix = '_' + postfix
52
53 inputContainer = "AnalysisTauJets" if config.isPhyslite() else "TauJets"
54 if self.inputContainer:
55 inputContainer = self.inputContainer
56 config.setSourceName (self.containerName, inputContainer)
57
58
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, '')
67
68
69 if self.decorateTruth and config.dataType() is not DataType.Data:
70 alg = config.createAlgorithm( 'CP::TauTruthDecorationsAlg',
71 'TauTruthDecorationsAlg',
72 reentrant=True )
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']
79 alg.prefix = 'truth_'
80
81
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()
86 else:
87 branchOutput = branchName
88 config.addOutputVar (self.containerName, branchName, branchOutput, noSys=True)
89
90
91 if self.decorateExtraVariables:
92 alg = config.createAlgorithm( 'CP::TauExtraVariablesAlg',
93 'TauExtraVariablesAlg',
94 reentrant=True )
95 alg.taus = config.readName (self.containerName)
96
97
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, '')
105
106
107 alg = config.createAlgorithm( 'CP::AsgEnergyDecoratorAlg', 'EnergyDecorator' )
108 alg.particles = config.readName (self.containerName)
109
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, auxType='int')
116 config.addOutputVar (self.containerName, 'passTATTauMuonOLR', 'passTATTauMuonOLR', noSys=True, auxType='char')
117 config.addOutputVar (self.containerName, 'TESCompatibility', 'TESCompatibility')
118 if self.decorateExtraVariables:
119 config.addOutputVar (self.containerName, 'nTracksCharged', 'nTracksCharged', noSys=True)
120
121