10 from PyJobTransforms.TransformUtils
import processPreExec, processPreInclude, processPostExec, processPostInclude
12 from AthenaCommon.Logging
import logging
13 msg = logging.getLogger(
'IDAlign')
16 from AthenaCommon
import JobProperties
18 JobProperties.jobPropertiesDisallowed =
True
22 if runArgs.solve
and runArgs.iteration > 0:
23 outputFile = runArgs.outputConditionFile
24 iteration = runArgs.iteration - 1
26 elif hasattr(runArgs,
"outputTFile")
and "Block" in runArgs.outputTFile:
27 outputFile = runArgs.outputTFile
28 iteration = runArgs.iteration - 1
30 elif hasattr(runArgs,
"outputMonitorFile")
and "Block" in runArgs.outputMonitorFile:
32 outputFile = runArgs.outputMonitorFile
33 iteration = runArgs.iteration
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()
44 raise Exception(f
"Can not extract metadata from: {outputFile}")
47 localDatabaseWildcard = f
"{runArgs.eosT0Dir}/{data_period}/{data_stream}/{run}/{data_period}.{run}.{data_stream}.idalignsolve.ROOT_DB.Iter{iteration}*/*{block}*"
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"
57 localDataBases =
sorted(glob(localDatabaseWildcard), key = get_AMI_Tag, reverse =
True)
58 latestLocalDataBase = localDataBases[0]
61 raise Exception(f
"Could not find local database from wildcard: {localDatabaseWildcard}")
63 return latestLocalDataBase
66 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
70 for IDpart
in runArgs.excludeIDPart:
71 setattr(flags.InDet.Align, f
"align{IDpart}",
False)
74 if hasattr(runArgs,
"localDatabase"):
75 flags.InDet.Align.localDataBase = os.path.abspath(runArgs.localDatabase)
77 if runArgs.eosT0Dir !=
"":
81 flags.InDet.Align.localDataBase =
""
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))
88 from InDetAlignConfig.IDAlignFlags
import setL11AlignmentFlags, setL16AlignmentFlags, setL2AlignmentFlags, setL3AlignmentFlags
90 if runArgs.alignLevel == 11:
93 elif runArgs.alignLevel == 16:
96 elif runArgs.alignLevel == 2:
99 elif runArgs.alignLevel == 3:
103 raise Exception(f
"No valid alignment level has been selected: '{runArgs.alignLevel}'")
106 from InDetConfig.ConfigurationHelpers
import OnlyTrackingPreInclude
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]
115 if runArgs.accumulate:
116 if hasattr(runArgs,
"outputTFile"):
117 flags.InDet.Align.outputTFile = runArgs.outputTFile
119 if hasattr(runArgs,
"outputMonitorFile"):
120 flags.InDet.Align.doMonitoring =
True
121 flags.Output.HISTFileName = f
"{flags.InDet.Align.baseDir}/Accumulate/{runArgs.outputMonitorFile}"
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"
128 flags.Exec.MaxEvents = runArgs.maxEvents
if not runArgs.solve
else 1
129 flags.Exec.SkipEvents = runArgs.skipEvents
if hasattr(runArgs,
"skipEvents")
else 0
132 flags.IOVDb.GlobalTag = runArgs.globalTag
134 flags.GeoModel.Align.Dynamic =
True
135 flags.GeoModel.AtlasVersion = runArgs.atlasVersion
137 if not flags.Input.isMC
and runArgs.isCosmics:
138 from AthenaConfiguration.Enums
import BeamType
140 flags.Beam.NumberOfCollisions = 0
141 flags.Beam.Type = BeamType.Cosmics
142 flags.Beam.Energy = 0.
143 flags.Beam.BunchSpacing = 50
145 if runArgs.isHeavyIon:
146 flags.Beam.BunchSpacing = 50
147 flags.Reco.EnableHI =
True
148 flags.HeavyIon.doGlobal =
True
151 flags.Beam.BunchSpacing = 25
153 if not runArgs.isBFieldOff:
154 flags.BField.solenoidOn =
True
155 flags.BField.barrelToroidOn =
True
156 flags.BField.endcapToroidOn =
True
159 flags.BField.solenoidOn =
False
160 flags.BField.barrelToroidOn =
False
161 flags.BField.endcapToroidOn =
False
179 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
182 from ByteStreamCnvSvc.ByteStreamConfig
import ByteStreamReadCfg
186 with open(os.devnull,
'w')
as f, contextlib.redirect_stdout(f):
187 from InDetConfig.TrackRecoConfig
import InDetTrackRecoCfg
191 if runArgs.accumulate
and not runArgs.solve:
192 os.makedirs(f
"{flags.InDet.Align.baseDir}/Accumulate", exist_ok =
True)
193 os.chdir(f
"{flags.InDet.Align.baseDir}/Accumulate")
194 from InDetAlignConfig.AccumulateConfig
import AccumulateCfg
198 elif runArgs.solve
and not runArgs.accumulate:
199 os.makedirs(f
"{flags.InDet.Align.baseDir}/Solve", exist_ok =
True)
200 os.chdir(f
"{flags.InDet.Align.baseDir}/Solve")
201 from InDetAlignConfig.SolveConfig
import SolveCfg
205 raise Exception(
"You can run either the acculumation step or the solve step, but not both or neither at the same time!")
208 from InDetAlignConfig.IDAlignConditionConfig
import UpdateTagsCfg
219 sc = cfg.printConfig(summariseProps =
True)
225 if hasattr(runArgs,
"outputTaredLogFile"):
226 from glob
import glob
229 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"]
231 with tarfile.open(f
'{flags.InDet.Align.baseDir}/Solve/{runArgs.outputTaredLogFile}',
"w:gz")
as tar:
232 for fileName
in filesToTar:
233 tar.add(fileName, arcname = fileName.split(
'/')[-1])
236 if runArgs.eosT0Dir !=
"":
237 from glob
import glob
239 for file_name
in glob(f
"{flags.InDet.Align.baseDir}/Accumulate/*" if runArgs.accumulate
else f
"{flags.InDet.Align.baseDir}/Solve/*"):
240 os.system(f
"mv -fv {file_name} {flags.InDet.Align.baseDir}")
243 sys.exit(sc.isFailure())