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
67 flags = 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))
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'")
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"
101 from InDetAlignConfig.IDAlignFlags
import setL11AlignmentFlags, setL16AlignmentFlags, setL2AlignmentFlags, setL3AlignmentFlags
103 if runArgs.alignLevel == 11:
104 setL11AlignmentFlags(flags)
106 elif runArgs.alignLevel == 16:
107 setL16AlignmentFlags(flags)
109 elif runArgs.alignLevel == 2:
110 setL2AlignmentFlags(flags)
112 elif runArgs.alignLevel == 3:
113 setL3AlignmentFlags(flags)
116 raise Exception(f
"No valid alignment level has been selected: '{runArgs.alignLevel}'")
119 from InDetConfig.ConfigurationHelpers
import OnlyTrackingPreInclude
120 OnlyTrackingPreInclude(flags)
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]
128 if runArgs.accumulate:
129 if hasattr(runArgs,
"outputTFile"):
130 flags.InDet.Align.outputTFile = runArgs.outputTFile
132 if hasattr(runArgs,
"outputMonitorFile"):
133 flags.InDet.Align.doMonitoring =
True
134 flags.Output.HISTFileName = f
"{flags.InDet.Align.baseDir}/Accumulate/{runArgs.outputMonitorFile}"
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"
141 flags.Exec.MaxEvents = runArgs.maxEvents
if not runArgs.solve
else 1
142 flags.Exec.SkipEvents = runArgs.skipEvents
if hasattr(runArgs,
"skipEvents")
else 0
145 flags.IOVDb.GlobalTag = runArgs.globalTag
147 flags.GeoModel.Align.Dynamic =
True
148 flags.GeoModel.AtlasVersion = runArgs.atlasVersion
150 if not flags.Input.isMC
and runArgs.isCosmics:
151 from AthenaConfiguration.Enums
import BeamType
153 flags.Beam.NumberOfCollisions = 0
154 flags.Beam.Type = BeamType.Cosmics
155 flags.Beam.Energy = 0.
156 flags.Beam.BunchSpacing = 50
158 if runArgs.isHeavyIon:
159 flags.Beam.BunchSpacing = 50
160 flags.Reco.EnableHI =
True
161 flags.HeavyIon.doGlobal =
True
164 flags.Beam.BunchSpacing = 25
166 if not runArgs.isBFieldOff:
167 flags.BField.solenoidOn =
True
168 flags.BField.barrelToroidOn =
True
169 flags.BField.endcapToroidOn =
True
172 flags.BField.solenoidOn =
False
173 flags.BField.barrelToroidOn =
False
174 flags.BField.endcapToroidOn =
False
177 processPreInclude(runArgs, flags)
178 processPreExec(runArgs, flags)
192 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
193 cfg = MainServicesCfg(flags)
195 from ByteStreamCnvSvc.ByteStreamConfig
import ByteStreamReadCfg
196 cfg.merge(ByteStreamReadCfg(flags))
199 with open(os.devnull,
'w')
as f, contextlib.redirect_stdout(f):
200 from InDetConfig.TrackRecoConfig
import InDetTrackRecoCfg
201 cfg.merge(InDetTrackRecoCfg(flags))
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))
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))
218 raise Exception(
"You can run either the acculumation step or the solve step, but not both or neither at the same time!")
221 from InDetAlignConfig.IDAlignConditionConfig
import UpdateTagsCfg
222 cfg.merge(UpdateTagsCfg(flags))
225 processPostInclude(runArgs, flags, cfg)
228 processPostExec(runArgs, flags, cfg)
232 sc = cfg.printConfig(summariseProps =
True)
238 if hasattr(runArgs,
"outputTaredLogFile"):
239 from glob
import glob
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"]
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])
249 if runArgs.eosT0Dir !=
"":
250 from glob
import glob
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}")
256 sys.exit(sc.isFailure())