89 def makeAlgs (self, config) :
91 log = logging.getLogger(
'OutputAnalysisConfig')
93 self.vars =
set(self.vars)
94 self.varsOnlyForMC =
set(self.varsOnlyForMC)
95 self.metVars =
set(self.metVars)
96 self.truthMetVars =
set(self.truthMetVars)
99 if config.dataType()
is not DataType.Data:
100 self.vars |= self.varsOnlyForMC
107 keys_message = [
repr(key)
for key
in overlapping_keys]
108 raise KeyError(f
"containersOnlyForMC would overwrite the following container keys: {', '.join(keys_message)}")
111 self.containers.update(self.containersOnlyForMC)
113 self.containersOnlyForMC.
clear()
116 for container,dsid_filters
in self.containersOnlyForDSIDs.
items():
117 if container
not in self.containers:
118 log.warning(f
"Skipping unrecognised container {container} for DSID-filtering in OutputAnalysisConfig...")
120 if not filter_dsids (dsid_filters, config):
122 self.containers.pop (container)
124 if self.storeSelectionFlags:
125 self.createSelectionFlagBranches(config)
128 for prefix
in self.containers.
keys() :
129 containerName = self.containers[prefix]
130 outputDict = config.getOutputVars (containerName)
131 for outputName
in outputDict :
132 outputConfig = copy.deepcopy (outputDict[outputName])
133 if containerName != outputConfig.origContainerName :
134 outputConfig.outputContainerName = containerName +
'_%SYS%'
136 outputConfig.outputContainerName = config.readName (containerName)
137 outputConfigs[prefix + outputName] = outputConfig
140 for dsid, dsid_commands
in self.commandsOnlyForDSIDs.
items():
142 self.commands += dsid_commands
144 for command
in self.commands :
145 words = command.split (
' ')
146 if len (words) == 0 :
147 raise ValueError (
'received empty command for "commands" option')
148 if words[0] ==
'enable' :
149 if len (words) != 2 :
150 raise ValueError (
'enable takes exactly one argument: ' + command)
152 for name
in outputConfigs :
153 if re.match (words[1], name) :
154 outputConfigs[name].enabled =
True
156 if not used
and config.dataType()
is not DataType.Data:
157 raise KeyError (
'unknown branch pattern for enable: ' + words[1])
158 elif words[0] ==
'disable' :
159 if len (words) != 2 :
160 raise ValueError (
'disable takes exactly one argument: ' + command)
162 for name
in outputConfigs :
163 if re.match (words[1], name) :
164 outputConfigs[name].enabled =
False
166 if not used
and config.dataType()
is not DataType.Data:
167 raise KeyError (
'unknown branch pattern for disable: ' + words[1])
169 raise KeyError (
'unknown command for "commands" option: ' + words[0])
173 autoTruthMetVars =
set()
174 for outputName
in outputConfigs :
175 outputConfig = outputConfigs[outputName]
176 if outputConfig.enabled :
177 if config.isMetContainer (outputConfig.origContainerName):
178 if "Truth" in outputConfig.origContainerName:
179 myVars = autoTruthMetVars
184 if outputConfig.noSys :
185 outputConfig.outputContainerName = outputConfig.outputContainerName.replace (
'%SYS%',
'NOSYS')
186 outputConfig.variableName = outputConfig.variableName.replace (
'%SYS%',
'NOSYS')
187 if self.alwaysAddNosys :
188 outputName +=
"_NOSYS"
190 outputName +=
'_%SYS%'
191 myVars.add(f
"{outputConfig.outputContainerName}.{outputConfig.variableName} -> {outputName}")
194 postfix = self.postfix
196 postfix = self.treeName
199 treeMaker = config.createAlgorithm(
'CP::TreeMakerAlg', f
'TreeMaker{postfix}' )
200 treeMaker.TreeName = self.treeName
201 treeMaker.RootStreamName = self.streamName
205 if self.vars
or autoVars:
206 ntupleMaker = self.createOutputAlgs(config, f
'NTupleMaker{postfix}', self.vars | autoVars)
208 if self.metVars
or autoMetVars:
209 ntupleMaker = self.createOutputAlgs(config, f
'MetNTupleMaker{postfix}', self.metVars | autoMetVars, isMet=
True)
210 ntupleMaker.termName = self.metTermName
212 if config.dataType()
is not DataType.Data
and (self.truthMetVars
or autoTruthMetVars):
213 ntupleMaker = self.createOutputAlgs(config, f
'TruthMetNTupleMaker{postfix}', self.truthMetVars | autoTruthMetVars, isMet=
True)
214 ntupleMaker.termName = self.truthMetTermName
216 treeFiller = config.createAlgorithm(
'CP::TreeFillerAlg',
'TreeFiller' + postfix )
217 treeFiller.TreeName = self.treeName
218 treeFiller.RootStreamName = self.streamName