77 def makeAlgs (self, config) :
78
79 sysService = config.createService( 'CP::SystematicsSvc', 'SystematicsSvc' )
80
81
82 streamName = self.streamName or config.defaultHistogramStream()
83
84
85 if self.runSystematics is False:
86 runSystematics = self.runSystematics
87 elif config.noSystematics() is not None:
88
89
90 self.runSystematics = not config.noSystematics()
91 runSystematics = self.runSystematics
92 else:
93 runSystematics = True
94
95
96 config._noSystematics = not runSystematics
97
98 if runSystematics:
99 sysService.sigmaRecommended = 1
100 if config.dataType() is DataType.Data:
101
102 self.onlySystematicsCategories = ['JER']
103 if self.onlySystematicsCategories is not None:
104
105 requested_categories =
set()
106 for category_str in self.onlySystematicsCategories:
107 try:
108 category_enum = SystematicsCategories[category_str.upper()]
109 requested_categories |= category_enum.value
110 except KeyError:
111 raise ValueError(f"Invalid systematics category passed to option 'onlySystematicsCategories': {category_str}. Must be one of {', '.join(category.name for category in SystematicsCategories)}")
112
113 if len(requested_categories):
114 sysService.systematicsRegex = "^(?=.*(" + "|".join(requested_categories) + ")|$).*"
115 if self.filterSystematics is not None:
116 sysService.systematicsRegex = self.filterSystematics
117 config.createService( 'CP::SelectionNameSvc', 'SelectionNameSvc')
118
119 if self.systematicsHistogram is not None:
120
121 allSysDumper = config.createAlgorithm( 'CP::SysListDumperAlg', 'SystematicsPrinter' )
122 allSysDumper.histogramName = self.systematicsHistogram
123 allSysDumper.RootStreamName = streamName
124
125 if self.separateWeightSystematics:
126
127 weightSysDumper = config.createAlgorithm( 'CP::SysListDumperAlg', 'OnlyWeightSystematicsPrinter' )
128 weightSysDumper.histogramName = f"{self.systematicsHistogram}OnlyWeights"
129 weightSysDumper.systematicsRegex = "^(GEN_|EL_EFF_|MUON_EFF_|PH_EFF_|TAUS_TRUEHADTAU_EFF_|FT_EFF_|JET_.*JvtEfficiency_|PRW_).*"
130
131 if self.metadataHistogram:
132
133 if not config.flags:
134 raise ValueError ("Writing out the metadata histogram requires to pass config flags")
135 metadataHistAlg = config.createAlgorithm( 'CP::MetadataHistAlg', 'MetadataHistAlg' )
136 metadataHistAlg.histogramName = self.metadataHistogram
137 metadataHistAlg.dataType =
str(config.dataType().value)
138 metadataHistAlg.campaign =
str(config.dataYear())
if config.dataType()
is DataType.Data
else str(config.campaign().value)
139 metadataHistAlg.mcChannelNumber =
str(config.dsid())
140 metadataHistAlg.RootStreamName = streamName
141 if config.dataType() is DataType.Data:
142 etag = "unavailable"
143 else:
144 from AthenaConfiguration.AutoConfigFlags import GetFileMD
145 metadata = GetFileMD(config.flags.Input.Files)
146 amiTags = metadata.get("AMITag", "not found!")
147 etag =
str(amiTags.split(
"_")[0])
148 metadataHistAlg.etag = etag
149
150 if self.enableExpertMode and config._pass == 0:
151
152 warnings.simplefilter('ignore', ExpertModeWarning)
153
154 log = logging.getLogger('CommonServices')
155 bold = "\033[1m"
156 red = "\033[91m"
157 yellow = "\033[93m"
158 reset = "\033[0m"
159 log.warning(red +r"""
160 ________ _______ ______ _____ _______ __ __ ____ _____ ______ ______ _ _ ____ _ ______ _____
161 | ____\ \ / / __ \| ____| __ \__ __| | \/ |/ __ \| __ \| ____| | ____| \ | | /\ | _ \| | | ____| __ \
162 | |__ \ V /| |__) | |__ | |__) | | | | \ / | | | | | | | |__ | |__ | \| | / \ | |_) | | | |__ | | | |
163 | __| > < | ___/| __| | _ / | | | |\/| | | | | | | | __| | __| | . ` | / /\ \ | _ <| | | __| | | | |
164 | |____ / . \| | | |____| | \ \ | | | | | | |__| | |__| | |____ | |____| |\ |/ ____ \| |_) | |____| |____| |__| |
165 |______/_/ \_\_| |______|_| \_\ |_| |_| |_|\____/|_____/|______| |______|_| \_/_/ \_\____/|______|______|_____/
166
167"""
168 +reset)
169 log.warning(f"{bold}{yellow}These settings are not recommended for analysis. Make sure you know what you're doing, or disable them with `enableExpertMode: False` in `CommonServices`.{reset}")
170
171 if self.setupONNX:
172 config.createService('AthOnnx::OnnxRuntimeSvc', 'OnnxRuntimeSvc')
173
174@groupBlocks