33 def makeAlgs(self, config):
34
35
36 if not self.fixDAODTruthRecord: return
37
38 if config.dataType() is DataType.Data: return
39
40 partContainers = None
41 if self.truthParticleContainersToFix is not None:
42 partContainers = self.truthParticleContainersToFix
43 elif config.isPhyslite():
44 partContainers = [
45 "TruthBoson", "TruthBosonsWithDecayParticles",
46 "TruthElectrons", "TruthMuons", "TruthPhotons", "TruthNeutrinos",
47 "TruthTaus",
48 "TruthTop", "TruthBottom",
49 "TruthForwardProtons",
50 "TruthBSM", "TruthBSMWithDecayParticles",
51 "BornLeptons"
52 ]
53 else:
54 partContainers = [
55 "TruthBoson", "TruthBosonsWithDecayParticles",
56 "TruthElectrons", "TruthMuons", "TruthPhotons", "TruthNeutrinos",
57 "TruthTaus", "TruthTausWithDecayParticles",
58 "TruthTop", "TruthBottom", "TruthCharm", "TruthHFWithDecayParticles",
59 "TruthForwardProtons", "TruthPileupParticles",
60 "TruthBSM", "TruthBSMWithDecayParticles",
61 "BornLeptons"
62 ]
63
64 vertContainers = None
65 if self.truthVertexContainersToFix is not None:
66 vertContainers = self.truthVertexContainersToFix
67 elif config.isPhyslite():
68 vertContainers = [
69 "TruthBosonsWithDecayVertices",
70 "TruthBSMWithDecayVertices"
71 ]
72 else:
73 vertContainers = [
74 "TruthBosonsWithDecayVertices",
75 "TruthHFWithDecayVertices",
76 "TruthTausWithDecayVertices",
77 "TruthBSMWithDecayVertices"
78 ]
79
80
81 if DualUseConfig.isAthena:
82
83 ars = config.createService("AddressRemappingSvc", "AddressRemappingSvc")
84 pps = config.createService("ProxyProviderSvc", "ProxyProviderSvc")
85 if "AddressRemappingSvc" not in pps.ProviderNames:
86 pps.ProviderNames += ["AddressRemappingSvc"]
87 for container in partContainers:
88 ars.TypeKeyRenameMaps += [
89 f"xAOD::TruthParticleContainer#{container}->InFile{container}",
90 f"xAOD::AuxContainerBase#{container}Aux.->InFile{container}Aux.",
91 ]
92 for container in vertContainers:
93 ars.TypeKeyRenameMaps += [
94 f"xAOD::TruthVertexContainer#{container}->InFile{container}",
95 f"xAOD::AuxContainerBase#{container}Aux.->InFile{container}Aux.",
96 ]
97
98
99 for container in partContainers:
100 alg = config.createAlgorithm(
101 "xAODMaker::TruthParticleFixerAlg",
102 "TruthParticleFixerAlg_" + container,
103 reentrant=True,
104 )
105 alg.InputContainer = (
106 container if not DualUseConfig.isAthena else f"InFile{container}"
107 )
108 alg.OutputContainer = container
109
110
111 containers_without_parent_child_links = [
112 "TruthBosonsWithDecayParticles",
113 "TruthTausWithDecayParticles",
114 "BornLeptons", "TruthPileupParticles",
115 "TruthForwardProtons",
116 "TruthBSMWithDecayParticles"]
117 if DualUseConfig.isAthena and container not in containers_without_parent_child_links:
118 alg.LinkPrefixToRemove = "InFile"
119 alg.ParticleLinks = ["parentLinks", "childLinks"]
120
121 for container in vertContainers:
122 alg = config.createAlgorithm(
123 "xAODMaker::TruthVertexFixerAlg",
124 "TruthVertexFixerAlg_" + container,
125 reentrant=True,
126 )
127 alg.InputContainer = (
128 container if not DualUseConfig.isAthena else f"InFile{container}"
129 )
130 alg.OutputContainer = container
131
132 if DualUseConfig.isAthena :
133 alg.LinkPrefixToRemove = "InFile"