ATLAS Offline Software
MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
3 from AthenaConfiguration.ComponentFactory import CompFactory
4 
6  # If this is changed, remember to also test with other dependent tests
7  # e.g. run ctest with ActsEventCnv
8  return "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/MuonRecRTT/ATLAS-R3-MUONTEST_v3.db"
9 
11  from argparse import ArgumentParser
12 
13  parser = ArgumentParser()
14  parser.add_argument("--threads", type=int, help="number of threads", default=1)
15  parser.add_argument("--geoTag", default="ATLAS-R3S-2021-03-02-00", help="Geometry tag to use", choices=["ATLAS-R3S-2021-03-02-00",
16  "ATLAS-P2-RUN4-01-00-00"])
17  parser.add_argument("--condTag", default="OFLCOND-MC23-SDR-RUN3-02", help="Conditions tag to use",
18  choices= ["OFLCOND-MC23-SDR-RUN3-02", "CONDBR2-BLKPA-2023-02"])
19  parser.add_argument("--inputFile", "-i", default=[
20  #"/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/TCT_Run3/data22_13p6TeV.00431493.physics_Main.daq.RAW._lb0525._SFO-16._0001.data"
21  "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/MuonRecRTT/EVGEN_ParticleGun_FourMuon_Pt10to500.root"
22  ],
23  help="Input file to run on ", nargs="+")
24  parser.add_argument("--geoModelFile", default = geoModelFileDefault(), help="GeoModel SqLite file containing the muon geometry.")
25  parser.add_argument("--chambers", default=["all"], nargs="+", help="Chambers to check. If string is all, all chambers will be checked")
26  parser.add_argument("--outRootFile", default="NewGeoModelDump.root", help="Output ROOT file to dump the geomerty")
27  parser.add_argument("--nEvents", help="Number of events to rum", type = int ,default = 1)
28  parser.add_argument("--noMdt", help="Disable the Mdts from the geometry", action='store_true', default = False)
29  parser.add_argument("--noRpc", help="Disable the Rpcs from the geometry", action='store_true', default = False)
30  parser.add_argument("--noTgc", help="Disable the Tgcs from the geometry", action='store_true', default = False)
31  parser.add_argument("--noMM", help="Disable the MMs from the geometry", action='store_true', default = False)
32  parser.add_argument("--noSTGC", help="Disable the sTgcs from the geometry", action='store_true', default = False)
33  parser.add_argument("--eventPrintoutLevel", type=int, help="Interval of event heartbeat printouts from the loop manager", default = 1)
34  return parser
35 
36 def setupServicesCfg(flags):
37  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
38  result = MainServicesCfg(flags)
39 
40  from AthenaConfiguration.Enums import Format
41  if flags.Input.Format is Format.POOL:
42  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
43  result.merge(PoolReadCfg(flags))
44  elif flags.Input.Format == Format.BS:
45  from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg
46  result.merge(ByteStreamReadCfg(flags))
47 
48  from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
49  result.merge(PerfMonMTSvcCfg(flags))
50  from MuonConfig.MuonGeometryConfig import MuonIdHelperSvcCfg
51  result.merge(MuonIdHelperSvcCfg(flags))
52  return result
53 
54 def setupHistSvcCfg(flags, out_file="MdtGeoDump.root", out_stream="GEOMODELTESTER"):
55  result = ComponentAccumulator()
56  if len(out_file) == 0: return result
57  histSvc = CompFactory.THistSvc(Output=[f"{out_stream} DATAFILE='{out_file}', OPT='RECREATE'"])
58  result.addService(histSvc, primary=True)
59  return result
60 
61 
62 def GeoModelMdtTestCfg(flags, name = "GeoModelMdtTest", **kwargs):
63  result = ComponentAccumulator()
64  the_alg = CompFactory.MuonGMR4.GeoModelMdtTest(name, **kwargs)
65  result.addEventAlgo(the_alg, primary = True)
66  return result
67 
68 def GeoModelRpcTestCfg(flags, name = "GeoModelRpcTest", **kwargs):
69  result = ComponentAccumulator()
70  the_alg = CompFactory.MuonGMR4.GeoModelRpcTest(name, **kwargs)
71  result.addEventAlgo(the_alg, primary = True)
72  return result
73 
74 def GeoModelTgcTestCfg(flags, name = "GeoModelTgcTest", **kwargs):
75  result = ComponentAccumulator()
76  the_alg = CompFactory.MuonGMR4.GeoModelTgcTest(name, **kwargs)
77  result.addEventAlgo(the_alg, primary = True)
78  return result
79 
80 def GeoModelsTgcTestCfg(flags, name = "GeoModelsTgcTest", **kwargs):
81  result = ComponentAccumulator()
82  the_alg = CompFactory.MuonGMR4.GeoModelsTgcTest(name, **kwargs)
83  result.addEventAlgo(the_alg, primary = True)
84  return result
85 
86 def GeoModelMmTestCfg(flags, name = "GeoModelMmTest", **kwargs):
87  result = ComponentAccumulator()
88  the_alg = CompFactory.MuonGMR4.GeoModelMmTest(name, **kwargs)
89  result.addEventAlgo(the_alg, primary = True)
90  return result
91 
92 def NswGeoPlottingAlgCfg(flags, name="NswGeoPlotting", **kwargs):
93  result = ComponentAccumulator()
94  kwargs.setdefault("TestActsSurface", False)
95  the_alg = CompFactory.MuonGMR4.NswGeoPlottingAlg(name, **kwargs)
96  result.addEventAlgo(the_alg, primary = True)
97  return result
98 
99 def setupGeoR4TestCfg(args, setupSimJob = False):
100  from AthenaConfiguration.AllConfigFlags import initConfigFlags
101  flags = initConfigFlags()
102  flags.Concurrency.NumThreads = args.threads
103  flags.Concurrency.NumConcurrentEvents = args.threads
104  flags.Input.isMC = args.condTag.find("OFLCOND") != -1
105  flags.Input.Files = args.inputFile
106  flags.Exec.FPE= 500
107  flags.Exec.EventPrintoutInterval = args.eventPrintoutLevel
108  from os import path, system
109  if args.geoModelFile.startswith("root://"):
110  if not path.exists("Geometry/{geoTag}.db".format(geoTag=args.geoTag)):
111  print ("Copy geometry file from EOS {source}".format(source = args.geoModelFile))
112  system("mkdir Geometry/")
113  system("xrdcp {source} Geometry/{geoTag}.db".format(source = args.geoModelFile,
114  geoTag=args.geoTag))
115 
116  args.geoModelFile = "Geometry/{geoTag}.db".format(geoTag=args.geoTag)
117 
118  if setupSimJob:
119  from AthenaConfiguration.Enums import ProductionStep
120  flags.Common.ProductionStep = ProductionStep.Simulation
121 
122  from SimulationConfig.SimEnums import SimulationFlavour
123  flags.Sim.ISF.Simulator = SimulationFlavour.AtlasG4
124 
125  flags.GeoModel.AtlasVersion = args.geoTag
126  flags.IOVDb.GlobalTag = args.condTag
127  flags.GeoModel.SQLiteDB = True
128  from AtlasGeoModel import CommonGeoDB
129  CommonGeoDB.SetupLocalSqliteGeometryDb(args.geoModelFile,args.geoTag)
130 
131  flags.Detector.GeometryBpipe = False
132 
133  flags.Detector.GeometryBCM = False
134  flags.Detector.GeometryPixel = False
135  flags.Detector.GeometrySCT = False
136  flags.Detector.GeometryTRT = False
137 
138  flags.Detector.GeometryPLR = False
139  flags.Detector.GeometryBCMPrime = False
140  flags.Detector.GeometryITkPixel = False
141  flags.Detector.GeometryITkStrip = False
142 
143  flags.Detector.GeometryHGTD = False
144 
145  flags.Detector.GeometryLAr = False
146  flags.Detector.GeometryTile = False
147  flags.Detector.GeometryMBTS = False
148  flags.Detector.GeometryCalo = False
149 
150  flags.Detector.GeometryCSC = False
151  if args.noSTGC:
152  flags.Detector.GeometrysTGC = False
153  if args.noMM:
154  flags.Detector.GeometryMM = False
155  if args.noTgc:
156  flags.Detector.GeometryTGC = False
157  if args.noRpc:
158  flags.Detector.GeometryRPC = False
159  if args.noMdt:
160  flags.Detector.GeometryMDT = False
161 
162  flags.Scheduler.CheckDependencies = True
163  flags.Scheduler.ShowDataDeps = True
164  flags.Scheduler.ShowDataFlow = True
165  flags.Scheduler.ShowControlFlow = True
166  flags.Scheduler.EnableVerboseViews = True
167  flags.Scheduler.AutoLoadUnmetDependencies = True
168  flags.PerfMon.doFullMonMT = True
169 
170  flags.lock()
171  flags.dump(evaluate = True)
172  if not flags.Muon.usePhaseIIGeoSetup:
173  print ("Please make sure that the file you're testing contains the Muon R4 geometry")
174  exit(1)
175 
176  cfg = setupServicesCfg(flags)
177 
178  from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
179  cfg.merge(MuonGeoModelCfg(flags))
180 
181  from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
182  cfg.merge(ActsGeometryContextAlgCfg(flags))
183 
184 
185 
186  return flags, cfg
187 
188 def executeTest(cfg, num_events = 1):
189 
190  cfg.printConfig(withDetails=True, summariseProps=True)
191  if not cfg.run(num_events).isSuccess(): exit(1)
192 
193 if __name__=="__main__":
195  flags, cfg = setupGeoR4TestCfg(args)
196  cfg.merge(setupHistSvcCfg(flags, out_file = args.outRootFile))
197  chambToTest = args.chambers if len([x for x in args.chambers if x =="all"]) ==0 else []
198 
199  cfg.getCondAlgo("MuonDetectorManagerCondAlg").checkGeo = True
200  cfg.getService("MessageSvc").setVerbose = []
201  cfg.getService("MessageSvc").verboseLimit = 10000000
202 
203  from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
204  cfg.merge(TrackingGeometryCondAlgCfg(flags))
205  if flags.Detector.GeometryMDT:
206  cfg.merge(GeoModelMdtTestCfg(flags,
207  TestStations = [ch for ch in chambToTest if ch[0] == "B" or ch[0] == "E"],
208  ReadoutSideXML="ReadoutSides.xml",
209  ExtraInputs=[( 'MuonGM::MuonDetectorManager' , 'ConditionStore+MuonDetectorManager' ),
210  ( 'Trk::TrackingGeometry' , 'ConditionStore+AtlasTrackingGeometry' )
211  ]))
212 
213  if flags.Detector.GeometryRPC:
214  cfg.merge(GeoModelRpcTestCfg(flags, TestStations = [ch for ch in chambToTest if ch[0] == "B"],
215  ExtraInputs=[( 'MuonGM::MuonDetectorManager' , 'ConditionStore+MuonDetectorManager' )]))
216 
217  if flags.Detector.GeometryTGC:
218  cfg.merge(GeoModelTgcTestCfg(flags, TestStations = [ch for ch in chambToTest if ch[0] == "T"],
219  ExtraInputs=[( 'MuonGM::MuonDetectorManager' , 'ConditionStore+MuonDetectorManager' )]))
220 
221  if flags.Detector.GeometryMM:
222  cfg.merge(NswGeoPlottingAlgCfg(flags))
223  cfg.merge(GeoModelMmTestCfg(flags, TestStations = [ch for ch in chambToTest if ch[0] == "M"],
224  ExtraInputs=[( 'MuonGM::MuonDetectorManager' , 'ConditionStore+MuonDetectorManager' )]))
225 
226  if flags.Detector.GeometrysTGC:
227  cfg.merge(GeoModelsTgcTestCfg(flags, TestStations = [ch for ch in chambToTest if ch[0] == "S"],
228  ExtraInputs=[( 'MuonGM::MuonDetectorManager' , 'ConditionStore+MuonDetectorManager' )]))
229 
230  executeTest(cfg, num_events = args.nEvents)
python.testGeoModel.GeoModelMdtTestCfg
def GeoModelMdtTestCfg(flags, name="GeoModelMdtTest", **kwargs)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:62
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
vtune_athena.format
format
Definition: vtune_athena.py:14
AtlasTrackingGeometryCondAlgConfig.TrackingGeometryCondAlgCfg
def TrackingGeometryCondAlgCfg(flags, name='AtlasTrackingGeometryCondAlg', doMaterialValidation=False, **kwargs)
Definition: AtlasTrackingGeometryCondAlgConfig.py:128
python.testGeoModel.executeTest
def executeTest(cfg, num_events=1)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:188
python.testGeoModel.geoModelFileDefault
def geoModelFileDefault()
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:5
python.testGeoModel.setupGeoR4TestCfg
def setupGeoR4TestCfg(args, setupSimJob=False)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:99
python.ByteStreamConfig.ByteStreamReadCfg
def ByteStreamReadCfg(flags, type_names=None)
Definition: Event/ByteStreamCnvSvc/python/ByteStreamConfig.py:25
python.testGeoModel.setupHistSvcCfg
def setupHistSvcCfg(flags, out_file="MdtGeoDump.root", out_stream="GEOMODELTESTER")
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:54
python.PerfMonCompsConfig.PerfMonMTSvcCfg
def PerfMonMTSvcCfg(flags, **kwargs)
A minimal new-style configuration for PerfMonMTSvc.
Definition: PerfMonCompsConfig.py:10
python.testGeoModel.setupServicesCfg
def setupServicesCfg(flags)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:36
python.MuonGeometryConfig.MuonIdHelperSvcCfg
def MuonIdHelperSvcCfg(flags)
Definition: MuonGeometryConfig.py:15
python.testGeoModel.GeoModelTgcTestCfg
def GeoModelTgcTestCfg(flags, name="GeoModelTgcTest", **kwargs)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:74
AlignmentAlgsConfig.ActsGeometryContextAlgCfg
def ActsGeometryContextAlgCfg(flags, name="GeometryContextAlg", **kwargs)
Setup the Geometry context algorithm.
Definition: AlignmentAlgsConfig.py:125
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:256
python.testGeoModel.SetupArgParser
def SetupArgParser()
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:10
calibdata.exit
exit
Definition: calibdata.py:236
python.testGeoModel.NswGeoPlottingAlgCfg
def NswGeoPlottingAlgCfg(flags, name="NswGeoPlotting", **kwargs)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:92
python.testGeoModel.GeoModelRpcTestCfg
def GeoModelRpcTestCfg(flags, name="GeoModelRpcTest", **kwargs)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:68
python.testGeoModel.GeoModelsTgcTestCfg
def GeoModelsTgcTestCfg(flags, name="GeoModelsTgcTest", **kwargs)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:80
python.MuonGeometryConfig.MuonGeoModelCfg
def MuonGeoModelCfg(flags)
Definition: MuonGeometryConfig.py:28
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
confTool.parse_args
def parse_args()
Definition: confTool.py:35
python.testGeoModel.GeoModelMmTestCfg
def GeoModelMmTestCfg(flags, name="GeoModelMmTest", **kwargs)
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/python/testGeoModel.py:86
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69