65def configureFlags(runArgs):
66 from AthenaConfiguration.AllConfigFlags import initConfigFlags
67 flags = initConfigFlags()
68
69
70 for IDpart in runArgs.excludeIDPart:
71 setattr(flags.InDet.Align, f"align{IDpart}", False)
72
73
74 if hasattr(runArgs, "localDatabase"):
75 flags.InDet.Align.localDataBase = os.path.abspath(runArgs.localDatabase)
76
77 if runArgs.eosT0Dir != "":
78 flags.InDet.Align.localDataBase = getT0SolveDB(runArgs)
79
80 else:
81 flags.InDet.Align.localDataBase = ""
82
83
84 for tag in [tag for tag in dir(runArgs) if "Tag" in tag and tag != "globalTag"]:
85 setattr(flags.InDet.Align, tag, getattr(runArgs, tag))
86
87
88 from InDetAlignConfig.IDAlignFlags import setL11AlignmentFlags, setL16AlignmentFlags, setL2AlignmentFlags, setL3AlignmentFlags
89
90 if runArgs.alignLevel == 11:
91 setL11AlignmentFlags(flags)
92
93 elif runArgs.alignLevel == 16:
94 setL16AlignmentFlags(flags)
95
96 elif runArgs.alignLevel == 2:
97 setL2AlignmentFlags(flags)
98
99 elif runArgs.alignLevel == 3:
100 setL3AlignmentFlags(flags)
101
102 else:
103 raise Exception(f"No valid alignment level has been selected: '{runArgs.alignLevel}'")
104
105
106 from InDetConfig.ConfigurationHelpers import OnlyTrackingPreInclude
107 OnlyTrackingPreInclude(flags)
108
109
110 flags.InDet.Align.accumulate = runArgs.accumulate
111 flags.InDet.Align.baseDir = os.path.abspath(runArgs.baseDir)
112 flags.InDet.Align.inputTracksCollection = runArgs.inputTracksCollection
113 flags.Input.Files = [os.path.abspath(inputFile) for inputFile in runArgs.inputRAWFile]
114
115 if runArgs.accumulate:
116 if hasattr(runArgs, "outputTFile"):
117 flags.InDet.Align.outputTFile = runArgs.outputTFile
118
119 if hasattr(runArgs, "outputMonitorFile"):
120 flags.InDet.Align.doMonitoring = True
121 flags.Output.HISTFileName = f"{flags.InDet.Align.baseDir}/Accumulate/{runArgs.outputMonitorFile}"
122
123 if runArgs.solve:
124 flags.InDet.Align.inputTFiles = [os.path.abspath(inputTFile) for inputTFile in runArgs.inputTFile]
125 flags.InDet.Align.outputConditionFile = f"{flags.InDet.Align.baseDir}/Solve/{runArgs.outputConditionFile}"
126 flags.IOVDb.DBConnection = f"sqlite://;schema={flags.InDet.Align.baseDir}/Solve/{runArgs.outputDBFile};dbname=CONDBR2"
127
128 flags.Exec.MaxEvents = runArgs.maxEvents if not runArgs.solve else 1
129 flags.Exec.SkipEvents = runArgs.skipEvents if hasattr(runArgs, "skipEvents") else 0
131 flags.Exec.FPE = -2
132 flags.IOVDb.GlobalTag = runArgs.globalTag
133
134 flags.GeoModel.Align.Dynamic = True
135 flags.GeoModel.AtlasVersion = runArgs.atlasVersion
136
137 if not flags.Input.isMC and runArgs.isCosmics:
138 from AthenaConfiguration.Enums import BeamType
139
140 flags.Beam.NumberOfCollisions = 0
141 flags.Beam.Type = BeamType.Cosmics
142 flags.Beam.Energy = 0.
143 flags.Beam.BunchSpacing = 50
144
145 if runArgs.isHeavyIon:
146 flags.Beam.BunchSpacing = 50
147 flags.Reco.EnableHI = True
148 flags.HeavyIon.doGlobal = True
149
150 else:
151 flags.Beam.BunchSpacing = 25
152
153 if not runArgs.isBFieldOff:
154 flags.BField.solenoidOn = True
155 flags.BField.barrelToroidOn = True
156 flags.BField.endcapToroidOn = True
157
158 else:
159 flags.BField.solenoidOn = False
160 flags.BField.barrelToroidOn = False
161 flags.BField.endcapToroidOn = False
162
163
164 processPreInclude(runArgs, flags)
165 processPreExec(runArgs, flags)
166
167
168 flags.fillFromArgs()
169
170
171 flags.lock()
172
173 return flags
174
175