ATLAS Offline Software
Loading...
Searching...
No Matches
TileTestBeamRecoConfig.py
Go to the documentation of this file.
1#!/usr/bin/env python
2#
3# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
4#
5'''
6@file TileTestBeamRecoConfig.py
7'''
8
9from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
10from AthenaConfiguration.ComponentFactory import CompFactory
11
12import sys
13
14
15def TileTestBeamRawChannelMakerCfg(flags, nsamples, useFELIX=False, **kwargs):
16
17 ''' Function to configure reconstruction of Tile raw channels from digits.'''
18
19 acc = ComponentAccumulator()
20
21 suffix = "Flx" if useFELIX else ""
22 kwargs.setdefault('name', f'TileRCh{suffix}Maker')
23 kwargs.setdefault('TileDigitsContainer', f'TileDigits{suffix}Cnt')
24 kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads)
25 kwargs.setdefault('TileInfoName', f'TileInfo{suffix}')
26
27 from TileRecUtils.TileRawChannelMakerConfig import TileRawChannelMakerCfg
28 rawChMaker = acc.getPrimaryAndMerge(TileRawChannelMakerCfg(flags, **kwargs))
29 if flags.Tile.doFit:
30 rawChannelBuilderFitFilter = rawChMaker.TileRawChannelBuilder['TileRawChannelBuilderFitFilter']
31 rawChannelBuilderFitFilter.FrameLength = nsamples
32 rawChannelBuilderFitFilter.SaturatedSample = 4095 if useFELIX else -1
33 for tool in rawChMaker.TileRawChannelBuilder:
34 tool.TileRawChannelContainer = str(tool.TileRawChannelContainer).replace('TileRawChannel', f'TileRawChannel{suffix}')
35 tool.TileInfoName = f'TileInfo{suffix}'
36
37 # Configure TileInfoLoader to set up number of samples
38 from TileConditions.TileInfoLoaderConfig import TileInfoLoaderCfg
39 acc.merge(TileInfoLoaderCfg(flags, name=f'TileInfoLoader{suffix}', TileInfo=f'TileInfo{suffix}',
40 NSamples=nsamples, TrigSample=((nsamples-1)//2) ))
41
42 return acc
43
44
45def TileTestBeamRecoCfg(flags, useDemoCabling, nsamples, useFELIX=False, filterDigits=False, filterChannels=True):
46
47 ''' Function to configure reconstruction of Tile TestBeam data.'''
48
49 acc = ComponentAccumulator()
50
51 suffix = "Flx" if useFELIX else ""
52 digitsContainer = f'TileDigits{suffix}Cnt'
53 rawChannelContainer = flags.Tile.RawChannelContainer.replace('TileRawChannel', f'TileRawChannel{suffix}')
54
55 # =====> For FELIX configure the algorithm to select one gain
56 if useFELIX and filterDigits:
57 digitsContainer = 'TileDigitsFlxFiltered'
58 TileDigitsGainFilter = CompFactory.TileDigitsGainFilter
59 acc.addEventAlgo( TileDigitsGainFilter(HighGainThreshold=4095,
60 InputDigitsContainer='TileDigitsFlxCnt',
61 OutputDigitsContainer=digitsContainer) )
62
63 # =====> Configure reconstruction of Tile raw channels from digits
64 acc.merge(TileTestBeamRawChannelMakerCfg(flags, nsamples, useFELIX, TileDigitsContainer=digitsContainer))
65
66 if useFELIX and filterChannels:
67 rawChannelContainerFiltered = f'{rawChannelContainer}Filtered'
68 TileRawChannelGainFilter = CompFactory.TileRawChannelGainFilter
69 acc.addEventAlgo( TileRawChannelGainFilter(InputRawChannelContainer=rawChannelContainer,
70 OutputRawChannelContainer=rawChannelContainerFiltered) )
71 rawChannelContainer = rawChannelContainerFiltered
72
73 # =====> Configure reconstruction of Tile cells from raw channels
74 from TileRecUtils.TileCellMakerConfig import TileCellMakerCfg
75 skipGains = [0, 1] if flags.Tile.RunType.isBiGain() else [-1]
76 gainName = {-1 : "", 0 : "HG", 1 : "LG"} # Skip gain to actually used gain name mapping
77 for skipGain in skipGains:
78 cellMaker = acc.getPrimaryAndMerge(TileCellMakerCfg(flags, name=f'TileCell{suffix}Maker{gainName[skipGain]}',
79 CaloCellsOutputName=f'AllCalo{suffix}{gainName[skipGain]}',
80 mergeChannels=False, SkipGain=skipGain))
81 cellBuilder = cellMaker.CaloCellMakerToolNames['TileCellBuilder']
82 cellBuilder.TileRawChannelContainer = rawChannelContainer
83 cellBuilder.UseDemoCabling = useDemoCabling
84 cellBuilder.maskBadChannels = False
85 cellBuilder.MBTSContainer = ""
86 cellBuilder.E4prContainer = ""
87
88
89 # Configure TileInfoLoader to set up number of samples
90 ADCmax = 4095 if useFELIX else 1023
91 ADCmaskValue = 4800 if useFELIX else 2047
92 from TileConditions.TileInfoLoaderConfig import TileInfoLoaderCfg
93 acc.merge(TileInfoLoaderCfg(flags, name=f'TileInfoLoader{suffix}', TileInfo=f'TileInfo{suffix}',
94 NSamples=nsamples, TrigSample=((nsamples-1)//2),
95 ADCmax=ADCmax, ADCmaskValue=ADCmaskValue))
96
97 return acc
98
99
100if __name__ == '__main__':
101
102 # Setup logs
103 from AthenaCommon.Logging import log
104 from AthenaCommon.Constants import INFO
105 log.setLevel(INFO)
106
107 # Set the Athena configuration flags
108 from AthenaConfiguration.AllConfigFlags import initConfigFlags
109 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
110
111 flags = initConfigFlags()
112 parser = flags.getArgumentParser()
113 parser.add_argument('--demo-cabling', dest='demoCabling', type=int, default=2018, help='Time Demonatrator cabling to be used')
114 parser.add_argument('--nsamples', type=int, default=15, help='Number of samples')
115 args, _ = parser.parse_known_args()
116
117 flags.Exec.MaxEvents = 3
118 flags.Common.isOnline = True
119 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
120 flags.Input.Files = defaultTestFiles.RAW_RUN3
121 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN3_DATA
122
123 flags.Tile.doFit = True
124 flags.Tile.useDCS = False
125 flags.Tile.NoiseFilter = 0
126 flags.Tile.correctTime = False
127 flags.Tile.correctTimeJumps = False
128 flags.Tile.BestPhaseFromCOOL = False
129 flags.Tile.doOverflowFit = False
130
131 flags.fillFromArgs(parser=parser)
132 flags.lock()
133
134 flags.dump()
135
136 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
137 cfg = MainServicesCfg(flags)
138
139 from TileByteStream.TileByteStreamConfig import TileRawDataReadingCfg
140 cfg.merge( TileRawDataReadingCfg(flags, readMuRcv=False,
141 readDigits=True,
142 readRawChannel=True,
143 readDigitsFlx=True,
144 readBeamElem=True) )
145
146 cfg.merge( TileTestBeamRecoCfg(flags, useDemoCabling=args.demoCabling, nsamples=args.nsamples) )
147 cfg.merge( TileTestBeamRecoCfg(flags, useDemoCabling=args.demoCabling, nsamples=16, useFELIX=True) )
148
149 # Scan first event for all fragments to create proper ROD to ROB map
150 cfg.getCondAlgo('TileHid2RESrcIDCondAlg').RODStatusProxy = None
151
152 cfg.printConfig(withDetails=True, summariseProps=True, printDefaults=True)
153
154 sc = cfg.run()
155 # Success should be 0
156 sys.exit(not sc.isSuccess())
This algorithm copies TileDigits from input container to output container.
This algorithm copies TileRawChannel from input container to output container.
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:310
TileTestBeamRecoCfg(flags, useDemoCabling, nsamples, useFELIX=False, filterDigits=False, filterChannels=True)
TileTestBeamRawChannelMakerCfg(flags, nsamples, useFELIX=False, **kwargs)