ATLAS Offline Software
Loading...
Searching...
No Matches
IDAlign_Skeleton Namespace Reference

Functions

 getT0SolveDB (runArgs)
 configureFlags (runArgs)
 fromRunArgs (runArgs)

Variables

 msg = logging.getLogger('IDAlign')
 jobPropertiesDisallowed

Function Documentation

◆ configureFlags()

IDAlign_Skeleton.configureFlags ( runArgs)

Definition at line 65 of file IDAlign_Skeleton.py.

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 if flags.InDet.Align.localDataBase:
88 msg.info(f"Change IBLDist tag from '{flags.InDet.Align.IBLDistTag}' to 'InDetAlignIBLDIST-T0-Alignment'")
89 msg.info(f"Change L1IDTag tag from '{flags.InDet.Align.L1IDTag}' to 'InDetAlignL1-T0-Alignment'")
90 msg.info(f"Change L2PIXTag tag from '{flags.InDet.Align.L2PIXTag}' to 'InDetAlignL2PIX-T0-Alignment'")
91 msg.info(f"Change L2SCTTag tag from '{flags.InDet.Align.L2SCTTag}' to 'InDetAlignL2SCT-T0-Alignment'")
92 msg.info(f"Change L1TRTTag tag from '{flags.InDet.Align.L1TRTTag}' to 'InDetAlignL1TRT-T0-Alignment'")
93
94 flags.InDet.Align.IBLDistTag = "InDetAlignIBLDIST-T0-Alignment"
95 flags.InDet.Align.L1IDTag = "InDetAlignL1-T0-Alignment"
96 flags.InDet.Align.L2PIXTag = "InDetAlignL2PIX-T0-Alignment"
97 flags.InDet.Align.L2SCTTag = "InDetAlignL2SCT-T0-Alignment"
98 flags.InDet.Align.L1TRTTag = "InDetAlignL1TRT-T0-Alignment"
99
100
101 from InDetAlignConfig.IDAlignFlags import setL11AlignmentFlags, setL16AlignmentFlags, setL2AlignmentFlags, setL3AlignmentFlags
102
103 if runArgs.alignLevel == 11:
104 setL11AlignmentFlags(flags)
105
106 elif runArgs.alignLevel == 16:
107 setL16AlignmentFlags(flags)
108
109 elif runArgs.alignLevel == 2:
110 setL2AlignmentFlags(flags)
111
112 elif runArgs.alignLevel == 3:
113 setL3AlignmentFlags(flags)
114
115 else:
116 raise Exception(f"No valid alignment level has been selected: '{runArgs.alignLevel}'")
117
118
119 from InDetConfig.ConfigurationHelpers import OnlyTrackingPreInclude
120 OnlyTrackingPreInclude(flags)
121
122
123 flags.InDet.Align.accumulate = runArgs.accumulate
124 flags.InDet.Align.baseDir = os.path.abspath(runArgs.baseDir)
125 flags.InDet.Align.inputTracksCollection = runArgs.inputTracksCollection
126 flags.Input.Files = [os.path.abspath(inputFile) for inputFile in runArgs.inputRAWFile]
127
128 if runArgs.accumulate:
129 if hasattr(runArgs, "outputTFile"):
130 flags.InDet.Align.outputTFile = runArgs.outputTFile
131
132 if hasattr(runArgs, "outputMonitorFile"):
133 flags.InDet.Align.doMonitoring = True
134 flags.Output.HISTFileName = f"{flags.InDet.Align.baseDir}/Accumulate/{runArgs.outputMonitorFile}"
135
136 if runArgs.solve:
137 flags.InDet.Align.inputTFiles = [os.path.abspath(inputTFile) for inputTFile in runArgs.inputTFile]
138 flags.InDet.Align.outputConditionFile = f"{flags.InDet.Align.baseDir}/Solve/{runArgs.outputConditionFile}"
139 flags.IOVDb.DBConnection = f"sqlite://;schema={flags.InDet.Align.baseDir}/Solve/{runArgs.outputDBFile};dbname=CONDBR2"
140
141 flags.Exec.MaxEvents = runArgs.maxEvents if not runArgs.solve else 1
142 flags.Exec.SkipEvents = runArgs.skipEvents if hasattr(runArgs, "skipEvents") else 0
143 flags.Exec.OutputLevel = getattr(AthenaCommon.Constants, runArgs.logLevel)
144 flags.Exec.FPE = -2
145 flags.IOVDb.GlobalTag = runArgs.globalTag
146
147 flags.GeoModel.Align.Dynamic = True
148 flags.GeoModel.AtlasVersion = runArgs.atlasVersion
149
150 if not flags.Input.isMC and runArgs.isCosmics:
151 from AthenaConfiguration.Enums import BeamType
152
153 flags.Beam.NumberOfCollisions = 0
154 flags.Beam.Type = BeamType.Cosmics
155 flags.Beam.Energy = 0.
156 flags.Beam.BunchSpacing = 50
157
158 if runArgs.isHeavyIon:
159 flags.Beam.BunchSpacing = 50
160 flags.Reco.EnableHI = True
161 flags.HeavyIon.doGlobal = True
162
163 else:
164 flags.Beam.BunchSpacing = 25
165
166 if not runArgs.isBFieldOff:
167 flags.BField.solenoidOn = True
168 flags.BField.barrelToroidOn = True
169 flags.BField.endcapToroidOn = True
170
171 else:
172 flags.BField.solenoidOn = False
173 flags.BField.barrelToroidOn = False
174 flags.BField.endcapToroidOn = False
175
176 # process pre-include/exec
177 processPreInclude(runArgs, flags)
178 processPreExec(runArgs, flags)
179
180 # To respect --athenaopts
181 flags.fillFromArgs()
182
183 # Lock flags
184 flags.lock()
185
186 return flags
187
188

◆ fromRunArgs()

IDAlign_Skeleton.fromRunArgs ( runArgs)

Definition at line 189 of file IDAlign_Skeleton.py.

189def fromRunArgs(runArgs):
190 flags = configureFlags(runArgs)
191
192 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
193 cfg = MainServicesCfg(flags)
194
195 from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg
196 cfg.merge(ByteStreamReadCfg(flags))
197
198
199 with open(os.devnull, 'w') as f, contextlib.redirect_stdout(f):
200 from InDetConfig.TrackRecoConfig import InDetTrackRecoCfg
201 cfg.merge(InDetTrackRecoCfg(flags))
202
203
204 if runArgs.accumulate and not runArgs.solve:
205 os.makedirs(f"{flags.InDet.Align.baseDir}/Accumulate", exist_ok = True)
206 os.chdir(f"{flags.InDet.Align.baseDir}/Accumulate")
207 from InDetAlignConfig.AccumulateConfig import AccumulateCfg
208 cfg.merge(AccumulateCfg(flags))
209
210
211 elif runArgs.solve and not runArgs.accumulate:
212 os.makedirs(f"{flags.InDet.Align.baseDir}/Solve", exist_ok = True)
213 os.chdir(f"{flags.InDet.Align.baseDir}/Solve")
214 from InDetAlignConfig.SolveConfig import SolveCfg
215 cfg.merge(SolveCfg(flags))
216
217 else:
218 raise Exception("You can run either the acculumation step or the solve step, but not both or neither at the same time!")
219
220
221 from InDetAlignConfig.IDAlignConditionConfig import UpdateTagsCfg
222 cfg.merge(UpdateTagsCfg(flags))
223
224
225 processPostInclude(runArgs, flags, cfg)
226
227
228 processPostExec(runArgs, flags, cfg)
229
230
231 if runArgs.dryRun:
232 sc = cfg.printConfig(summariseProps = True)
233
234 else:
235 sc = cfg.run()
236
237
238 if hasattr(runArgs, "outputTaredLogFile"):
239 from glob import glob
240 import tarfile
241
242 filesToTar = glob(f"{flags.InDet.Align.baseDir}/Solve/Old*") + glob(f"{flags.InDet.Align.baseDir}/Solve/Output*") + [f"{flags.InDet.Align.baseDir}/Solve/alignlogfile.txt"]
243
244 with tarfile.open(f'{flags.InDet.Align.baseDir}/Solve/{runArgs.outputTaredLogFile}', "w:gz") as tar:
245 for fileName in filesToTar:
246 tar.add(fileName, arcname = fileName.split('/')[-1])
247
248
249 if runArgs.eosT0Dir != "":
250 from glob import glob
251
252 for file_name in glob(f"{flags.InDet.Align.baseDir}/Accumulate/*" if runArgs.accumulate else f"{flags.InDet.Align.baseDir}/Solve/*"):
253 os.system(f"mv -fv {file_name} {flags.InDet.Align.baseDir}")
254
255 import sys
256 sys.exit(sc.isFailure())

◆ getT0SolveDB()

IDAlign_Skeleton.getT0SolveDB ( runArgs)

Definition at line 20 of file IDAlign_Skeleton.py.

20def getT0SolveDB(runArgs):
21 # Check which file to use to extract metadata
22 if runArgs.solve and runArgs.iteration > 0:
23 outputFile = runArgs.outputConditionFile
24 iteration = runArgs.iteration - 1
25
26 elif hasattr(runArgs, "outputTFile") and "Block" in runArgs.outputTFile:
27 outputFile = runArgs.outputTFile
28 iteration = runArgs.iteration - 1
29
30 elif hasattr(runArgs, "outputMonitorFile") and "Block" in runArgs.outputMonitorFile:
31 # For monitoring, the iteration DB file to use is the one from the current iteration
32 outputFile = runArgs.outputMonitorFile
33 iteration = runArgs.iteration
34
35 else:
36 return ""
37
38 # Extract data taking period, stream, ect from output file name
39 try:
40 meta_data = re.search(r"^(data.*?_.*?)\.(\d+)\.(\w+).*?(c\d+.*?).*?(Block\d+)", outputFile)
41 data_period, run, data_stream, AMI_tag, block = meta_data.groups()
42
43 except Exception:
44 raise Exception(f"Can not extract metadata from: {outputFile}")
45
46 # Try to find local database file
47 localDatabaseWildcard = f"{runArgs.eosT0Dir}/{data_period}/{data_stream}/{run}/{data_period}.{run}.{data_stream}.idalignsolve.ROOT_DB.Iter{iteration}*/*{block}*"
48
49 try:
50 from glob import glob
51
52 # Get always latest DB files, in case a job restarted with a new AMI tag
53 def get_AMI_Tag(file_name):
54 m = re.search(r'c\d+', file_name)
55 return m.group(0) if m else "c0000"
56
57 localDataBases = sorted(glob(localDatabaseWildcard), key = get_AMI_Tag, reverse = True)
58 latestLocalDataBase = localDataBases[0]
59
60 except Exception:
61 raise Exception(f"Could not find local database from wildcard: {localDatabaseWildcard}")
62
63 return latestLocalDataBase
64

Variable Documentation

◆ jobPropertiesDisallowed

IDAlign_Skeleton.jobPropertiesDisallowed

Definition at line 18 of file IDAlign_Skeleton.py.

◆ msg

IDAlign_Skeleton.msg = logging.getLogger('IDAlign')

Definition at line 13 of file IDAlign_Skeleton.py.