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
56 from InDetConfig.ConfigurationHelpers
import OnlyTrackingPreInclude
60 flags.InDet.Align.accumulate = kwargs[
"accumulate"]
61 flags.InDet.Align.baseDir = os.path.abspath(kwargs[
"baseDir"])
63 flags.InDet.Align.alignInDet = kwargs[
"alignInDet"]
64 flags.InDet.Align.alignSilicon = kwargs[
"alignInDet"]
or kwargs[
"alignSilicon"]
65 flags.InDet.Align.alignPixel = kwargs[
"alignInDet"]
or kwargs[
"alignSilicon"]
or kwargs[
"alignPixel"]
66 flags.InDet.Align.alignSCT = kwargs[
"alignInDet"]
or kwargs[
"alignSilicon"]
or kwargs[
"alignSCT"]
67 flags.InDet.Align.alignTRT = kwargs[
"alignInDet"]
or kwargs[
"alignTRT"]
69 flags.InDet.Align.writeSilicon = flags.InDet.Align.alignPixel
or flags.InDet.Align.alignSCT
70 flags.InDet.Align.writeTRT = flags.InDet.Align.alignTRT
72 flags.InDet.Align.useDynamicAlignFolders =
bool(kwargs[
"dynamicGlobalDatabase"])
73 flags.InDet.Align.inputAlignmentConstants = kwargs[
"alignmentConstants"]
74 flags.InDet.Align.inputBowingDatabase = kwargs[
"bowingDatabase"]
75 flags.InDet.Align.inputDynamicGlobalDatabase = kwargs[
"dynamicGlobalDatabase"]
76 flags.InDet.Align.inputTFiles = kwargs[
"inputTFiles"]
78 flags.Input.Files = kwargs[
"input"]
79 flags.Exec.MaxEvents = kwargs[
"maxEvents"]
if not kwargs[
"solve"]
else 1
80 flags.IOVDb.GlobalTag = kwargs[
"globalTag"]
82 flags.addFlag(
"ConstrainedTrackProvider.InputTracksCollection", kwargs[
"inputTracksCollection"])
84 flags.GeoModel.Align.Dynamic =
True
85 flags.GeoModel.AtlasVersion = kwargs[
"atlasVersion"]
87 if not flags.Input.isMC
and kwargs[
"isCosmics"]:
88 from AthenaConfiguration.Enums
import BeamType
90 flags.Beam.NumberOfCollisions = 0
91 flags.Beam.Type = BeamType.Cosmics
92 flags.Beam.Energy = 0.
93 flags.Beam.BunchSpacing = 50
95 if kwargs[
"isHeavyIon"]:
96 flags.Beam.BunchSpacing = 50
97 flags.Reco.EnableHI =
True
98 flags.HeavyIon.doGlobal =
True
101 flags.Beam.BunchSpacing = 25
103 if not kwargs[
"isBFieldOff"]:
104 flags.BField.solenoidOn =
True
105 flags.BField.barrelToroidOn =
True
106 flags.BField.endcapToroidOn =
True
109 flags.BField.solenoidOn =
False
110 flags.BField.barrelToroidOn =
False
111 flags.BField.endcapToroidOn =
False
113 if not flags.InDet.Align.alignTRT:
114 flags.Detector.GeometryTRT =
False
115 flags.Detector.EnableTRT =
False
119 from RecJobTransforms.RecoSteering
import RecoSteering
122 from MuonConfig.MuonGeometryConfig
import MuonIdHelperSvcCfg
130 if kwargs[
"accumulate"]
and not kwargs[
"solve"]:
131 os.makedirs(f
"{flags.InDet.Align.baseDir}/Accumulate", exist_ok =
True)
132 os.chdir(
"Accumulate")
133 from InDetAlignConfig.AccumulateConfig
import AccumulateCfg
137 elif kwargs[
"solve"]
and not kwargs[
"accumulate"]:
138 os.makedirs(f
"{flags.InDet.Align.baseDir}/Solve", exist_ok =
True)
140 from InDetAlignConfig.SolveConfig
import SolveCfg
144 raise Exception(
"You can run either the acculumation step or the solve step, but not both or neither at the same time!")