9 from AthenaConfiguration.TestDefaults
import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
12 from argparse
import ArgumentParser
13 parser = ArgumentParser(description=
'Script for the IDAlignment')
16 parser.add_argument(
"-a",
'--accumulate', action=
"store_true", help=
'Run accumulation step')
17 parser.add_argument(
"-s",
'--solve', action=
"store_true", help=
'Run solve step')
18 parser.add_argument(
"-d",
'--dryRun', action=
"store_true", help=
'Only configure, print and dont execute')
19 parser.add_argument(
"-b",
'--baseDir', default =
"./", help=
'Base dir where output is placed')
22 parser.add_argument(
"-i",
"--input", default = defaultTestFiles.RAW_RUN3, nargs =
"+", help=
'Input file(s)')
23 parser.add_argument(
"--maxEvents", default = -1, type = int, help=
'Number of maximal processed events')
24 parser.add_argument(
"-t",
"--inputTracksCollection", default =
"CombinedInDetTracks", type = str, help=
'Name of the track collection to use')
25 parser.add_argument(
"--inputTFiles", default =
"AlignmentTFile.root", type = str, help=
'ROOT file produced in MatrixTool in the accumulation step')
27 parser.add_argument(
"--alignmentConstants", default = [], nargs =
"+", help=
'Local alignment constants to use')
28 parser.add_argument(
"--bowingDatabase", default =
"", help=
'Local bowing database to use')
29 parser.add_argument(
"--dynamicGlobalDatabase", default =
"", help=
'Local dynamic global database to use')
32 parser.add_argument(
"--alignInDet", action=
"store_true", help=
'Align whole inner detector')
33 parser.add_argument(
"--alignSilicon", action=
"store_true", help=
'Align silicon part of the inner detector')
34 parser.add_argument(
"--alignPixel", action=
"store_true", help=
'Align pixel')
35 parser.add_argument(
"--alignSCT", action=
"store_true", help=
'Align SCT')
36 parser.add_argument(
"--alignTRT", action=
"store_true", help=
'Align TRT')
39 parser.add_argument(
"--globalTag", default = defaultConditionsTags.RUN3_DATA, help=
'Global tag')
40 parser.add_argument(
"--atlasVersion", default = defaultGeometryTags.RUN3, help=
'Global tag')
41 parser.add_argument(
"--projectName", default =
"data23_13p6TeV", help=
'Global tag')
43 parser.add_argument(
"--isBFieldOff", action=
"store_true", help=
'Check if Bfield is off')
44 parser.add_argument(
"--isCosmics", action=
"store_true", help=
'Check if cosmics run')
45 parser.add_argument(
"--isHeavyIon", action=
"store_true", help=
'Check if heavy ion run')
47 return parser.parse_args()
52 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
53 from InDetAlignConfig.IDAlignFlags
import createInDetAlignFlags
56 flags.addFlagsCategory(
"InDet.Align", createInDetAlignFlags, prefix=
True)
59 from InDetConfig.ConfigurationHelpers
import OnlyTrackingPreInclude
63 flags.InDet.Align.accumulate = kwargs[
"accumulate"]
64 flags.InDet.Align.baseDir = os.path.abspath(kwargs[
"baseDir"])
66 flags.InDet.Align.alignInDet = kwargs[
"alignInDet"]
67 flags.InDet.Align.alignSilicon = kwargs[
"alignInDet"]
or kwargs[
"alignSilicon"]
68 flags.InDet.Align.alignPixel = kwargs[
"alignInDet"]
or kwargs[
"alignSilicon"]
or kwargs[
"alignPixel"]
69 flags.InDet.Align.alignSCT = kwargs[
"alignInDet"]
or kwargs[
"alignSilicon"]
or kwargs[
"alignSCT"]
70 flags.InDet.Align.alignTRT = kwargs[
"alignInDet"]
or kwargs[
"alignTRT"]
72 flags.InDet.Align.writeSilicon = flags.InDet.Align.alignPixel
or flags.InDet.Align.alignSCT
73 flags.InDet.Align.writeTRT = flags.InDet.Align.alignTRT
75 flags.InDet.Align.useDynamicAlignFolders =
bool(kwargs[
"dynamicGlobalDatabase"])
76 flags.InDet.Align.inputAlignmentConstants = kwargs[
"alignmentConstants"]
77 flags.InDet.Align.inputBowingDatabase = kwargs[
"bowingDatabase"]
78 flags.InDet.Align.inputDynamicGlobalDatabase = kwargs[
"dynamicGlobalDatabase"]
79 flags.InDet.Align.inputTFiles = kwargs[
"inputTFiles"]
81 flags.Input.Files = kwargs[
"input"]
82 flags.Exec.MaxEvents = kwargs[
"maxEvents"]
if not kwargs[
"solve"]
else 1
83 flags.IOVDb.GlobalTag = kwargs[
"globalTag"]
85 flags.addFlag(
"ConstrainedTrackProvider.InputTracksCollection", kwargs[
"inputTracksCollection"])
87 flags.GeoModel.Align.Dynamic =
True
88 flags.GeoModel.AtlasVersion = kwargs[
"atlasVersion"]
90 if not flags.Input.isMC
and kwargs[
"isCosmics"]:
91 from AthenaConfiguration.Enums
import BeamType
93 flags.Beam.NumberOfCollisions = 0
94 flags.Beam.Type = BeamType.Cosmics
95 flags.Beam.Energy = 0.
96 flags.Beam.BunchSpacing = 50
98 if kwargs[
"isHeavyIon"]:
99 flags.Beam.BunchSpacing = 50
100 flags.Reco.EnableHI =
True
101 flags.HeavyIon.doGlobal =
True
104 flags.Beam.BunchSpacing = 25
106 if not kwargs[
"isBFieldOff"]:
107 flags.BField.solenoidOn =
True
108 flags.BField.barrelToroidOn =
True
109 flags.BField.endcapToroidOn =
True
112 flags.BField.solenoidOn =
False
113 flags.BField.barrelToroidOn =
False
114 flags.BField.endcapToroidOn =
False
116 if not flags.InDet.Align.alignTRT:
117 flags.Detector.GeometryTRT =
False
118 flags.Detector.EnableTRT =
False
122 from RecJobTransforms.RecoSteering
import RecoSteering
125 from MuonConfig.MuonGeometryConfig
import MuonIdHelperSvcCfg
133 if kwargs[
"accumulate"]
and not kwargs[
"solve"]:
134 os.makedirs(f
"{flags.InDet.Align.baseDir}/Accumulate", exist_ok =
True)
135 os.chdir(
"Accumulate")
136 from InDetAlignConfig.AccumulateConfig
import AccumulateCfg
140 elif kwargs[
"solve"]
and not kwargs[
"accumulate"]:
141 os.makedirs(f
"{flags.InDet.Align.baseDir}/Solve", exist_ok =
True)
143 from InDetAlignConfig.SolveConfig
import SolveCfg
147 raise Exception(
"You can run either the acculumation step or the solve step, but not both or neither at the same time!")