ATLAS Offline Software
Loading...
Searching...
No Matches
TileTimingConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3"""Define methods to construct configured Tile timing conditions tool and algorithm"""
4
5from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6from AthenaConfiguration.ComponentFactory import CompFactory
7from TileConfiguration.TileConfigFlags import TileRunType
8
9def TileTimingCondAlgCfg(flags, **kwargs):
10 """Return component accumulator with configured Tile timing conditions algorithm
11
12 Arguments:
13 flags -- Athena configuration flags
14 Keyword arguments:
15 Source -- source of Tile timing conditions (COOL, FILE). Defaults to COOL.
16 TileTiming -- name of Tile timing conditions object. Defaults to TileTiming.
17 ForceOnline -- flag to use online timing in offline. Defaults to False.
18 """
19
20 acc = ComponentAccumulator()
21
22 source = kwargs.get('Source', 'COOL')
23 timing = kwargs.get('TileTiming', 'TileTiming')
24 forceOnline = kwargs.get('ForceOnline', False)
25
26 runType = flags.Tile.RunType
27 timingType = runType.getTimingType().value
28
29 name = timing + 'CondAlg'
30
31 if source == 'COOL':
32 # Connect COOL Tile conditions proxies to the algorithm (default)
33
34 from TileConditions.TileFolders import TileFolders
35 folders = TileFolders(isMC = flags.Input.isMC, isOnline = flags.Common.isOnline)
36
37 if flags.IOVDb.DatabaseInstance == 'CONDBR2':
38 onlineTimingFolder = '/TILE/ONL01/TIME/CHANNELOFFSET/' + timingType
39 else:
40 if timingType == 'GAP/LAS':
41 raise(Exception("No Tile GAP/LAS timing in DB: %s" % flags.IOVDb.DatabaseInstance))
42
43 onlineTimingFolder = '/TILE/OFL01/TIME/CHANNELOFFSET/' + timingType
44
45 if forceOnline:
46 timingFolder = folders.add(onlineTimingFolder, 'TILE')
47 else:
48 timingFolder = folders.addSplitOnline(onlineTimingFolder, '/TILE/OFL02/TIME/CHANNELOFFSET/' + timingType)
49
50 TileCondProxyCoolFlt=CompFactory.getComp("TileCondProxyCool<TileCalibDrawerFlt>")
51 timingProxy = TileCondProxyCoolFlt('TileCondProxyCool_AdcOffset', Source = timingFolder)
52
53 from IOVDbSvc.IOVDbSvcConfig import addFolderList
54 acc.merge( addFolderList(flags, folders.get()) )
55
56 elif source == 'FILE':
57 # Connect FILE Tile conditions proxies to the algorithm
58 fileExtention = {'PHY' : 'tcphy', 'LAS' : 'tclas', 'CIS' : 'tccis'}
59
60 TileCondProxyFileFlt=CompFactory.getComp("TileCondProxyFile<TileCalibDrawerFlt>")
61 timingProxy = TileCondProxyFileFlt('TileCondProxyFile_AdcOffset',
62 Source = 'TileDefault.' + fileExtention[timingType])
63 else:
64 raise(Exception("Invalid source: %s" % source))
65
66 TileTimingCondAlg = CompFactory.getComp("TileCondAlg<TileTiming,TileCalibDrawerFlt>")
67 timingCondAlg = TileTimingCondAlg( name = name,
68 ConditionsProxy = timingProxy,
69 TileCondData = timing)
70
71 acc.addCondAlgo(timingCondAlg)
72
73 return acc
74
75
76
77def TileCondToolTimingCfg(flags, **kwargs):
78 """Return component accumulator with configured private Tile timing conditions tool
79
80 Arguments:
81 flags -- Athena configuration flags
82 Keyword arguments:
83 Source -- source of Tile timing conditions (COOL, FILE). Defaults to COOL.
84 TileTiming -- name of Tile timing conditions object. Defaults to TileTiming (TileOnlineTiming if ForceOnline).
85 TimingType -- type of Tile timing. Defaults to run type (PED->PHY, BILAS->LAS, MONOCIS->CIS).
86 Possible Tile timing types: PHY, LAS, GAP/LAS, CIS.
87 ForceOnline -- flag to use online timing in offline. Defaults to False.
88 """
89
90 acc = ComponentAccumulator()
91
92 kwargs.setdefault('Source', 'COOL')
93 kwargs.setdefault('ForceOnline', False)
94
95 forceOnline = kwargs['ForceOnline']
96 kwargs.setdefault('TileTiming', 'TileOnlineTiming' if forceOnline else 'TileTiming')
97
98 timing = kwargs['TileTiming']
99
100 name = 'TileCondToolTiming'
101
102 acc.merge( TileTimingCondAlgCfg(flags, **kwargs) )
103
104 TileCondToolTiming=CompFactory.TileCondToolTiming
105 acc.setPrivateTools( TileCondToolTiming(name, TileTiming = timing) )
106
107 return acc
108
109
110
111def TileCondToolOnlineTimingCfg(flags, **kwargs):
112 return TileCondToolTimingCfg(flags, ForceOnline = True)
113
114if __name__ == "__main__":
115
116 from AthenaConfiguration.AllConfigFlags import initConfigFlags
117 from AthenaConfiguration.TestDefaults import defaultTestFiles
118 from AthenaCommon.Logging import log
119 from AthenaCommon.Constants import DEBUG
120
121 # Test setup
122 log.setLevel(DEBUG)
123
124 flags = initConfigFlags()
125 flags.Input.Files = defaultTestFiles.RAW_RUN2
126 flags.Tile.RunType = TileRunType.PHY
127 flags.lock()
128
129 acc = ComponentAccumulator()
130
131 timingTool = acc.popToolsAndMerge( TileCondToolTimingCfg(flags) )
132 print(timingTool)
133
134 onlineTimingTool = acc.popToolsAndMerge( TileCondToolOnlineTimingCfg(flags) )
135 print(onlineTimingTool)
136
137 acc.printConfig(withDetails = True, summariseProps = True)
138 print(acc.getService('IOVDbSvc'))
139 acc.store( open('TileTiming.pkl','wb') )
140
141 print('All OK')
142
void print(char *figname, TCanvas *c1)
TileCondToolOnlineTimingCfg(flags, **kwargs)
TileCondToolTimingCfg(flags, **kwargs)
TileTimingCondAlgCfg(flags, **kwargs)