ATLAS Offline Software
Loading...
Searching...
No Matches
LArOFFCChannelBuilder.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2from AthenaCommon.Logging import logging
3from AthenaConfiguration.ComponentFactory import CompFactory
4from AthenaConfiguration.Enums import LHCPeriod, ProductionStep
5from LArRecUtils.LArADC2MeVCondAlgConfig import LArADC2MeVCondAlgCfg
6from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBCfg
7from LArRecUtils.LArRecUtilsConfig import LArOFCCondAlgCfg
8from LArConfiguration.LArConfigFlags import RawChannelSource
9
10
11def LArOFFCRawChannelBuilderCfg(flags, name="LArOFFCRawChannelBuilder", **kwargs):
12
13 acc = LArADC2MeVCondAlgCfg(flags)
14
15 # Index of the digit sample the OFC window starts at, same convention as
16 # the other raw channel builders
17 kwargs.setdefault(
18 "firstSample",
19 (
20 flags.LAr.ROD.nPreceedingSamples
21 if flags.LAr.ROD.nPreceedingSamples != 0
22 else flags.LAr.ROD.FirstSample
23 ),
24 )
25 obj = "AthenaAttributeList"
26 dspkey = "Run2DSPThresholdsKey"
27 from IOVDbSvc.IOVDbSvcConfig import addFolders
28
29 kwargs.setdefault("ShapeKey", "LArShapeSym")
30
31 if flags.Input.isMC:
32 acc.merge(LArOFCCondAlgCfg(flags))
33 kwargs.setdefault("LArRawChannelKey", "LArRawChannels")
34
35 if flags.GeoModel.Run is LHCPeriod.Run1: # back to flat threshold
36 kwargs.setdefault("useDB", False)
37 dspkey = ""
38 else:
39 fld = "/LAR/NoiseOfl/DSPThresholds"
40 sgkey = fld
41 dbString = "OFLP200"
42 dbInstance = "LAR_OFL"
43 acc.merge(
44 addFolders(flags, fld, dbInstance, className=obj, db=dbString)
45 )
46
47 if flags.LAr.ROD.ApplyRODBCIDCorr:
48 # Read the digits produced by LArRODBCIDCorrAlg instead of the raw ones
49 mlog = logging.getLogger("LArOFFCRawChannelBuilderCfg")
50 mlog.info("LAr.ROD.ApplyRODBCIDCorr is set: reading pile-up "
51 "corrected digits LArDigitContainer_PileupCorrected")
52 kwargs.setdefault("LArDigitKey", "LArDigitContainer_PileupCorrected")
53 elif flags.Common.ProductionStep is ProductionStep.PileUpPresampling:
54 kwargs.setdefault(
55 "LArDigitKey", flags.Overlay.BkgPrefix + "LArDigitContainer_MC"
56 )
57 else:
58 kwargs.setdefault("LArDigitKey", "LArDigitContainer_MC")
59
60 else:
61 acc.merge(LArElecCalibDBCfg(flags, ("OFC", "Shape", "Pedestal")))
62 if flags.Overlay.DataOverlay:
63 kwargs.setdefault("LArDigitKey", "LArDigitContainer_MC")
64 kwargs.setdefault("LArRawChannelKey", "LArRawChannels")
65 else:
66 kwargs.setdefault("LArRawChannelKey", "LArRawChannels_FromDigits")
67
68 if "COMP200" in flags.IOVDb.DatabaseInstance:
69 fld = "/LAR/Configuration/DSPThreshold/Thresholds"
70 obj = "LArDSPThresholdsComplete"
71 dspkey = "Run1DSPThresholdsKey"
72 sgkey = "LArDSPThresholds"
73 dbString = "COMP200"
74 else:
75 fld = "/LAR/Configuration/DSPThresholdFlat/Thresholds"
76 sgkey = fld
77 dbString = "CONDBR2"
78 dbInstance = "LAR_ONL"
79 acc.merge(addFolders(flags, fld, dbInstance, className=obj, db=dbString))
80
81 # Run 1 MC falls back to a flat threshold and sets no folder at all
82 if len(dspkey) > 0:
83 kwargs.setdefault(dspkey, sgkey)
84
85 if (
86 flags.LAr.ROD.forceIter
87 or flags.LAr.RawChannelSource is RawChannelSource.Calculated
88 ):
89 # Iterative OFC procedure. There is no OFFC variant of it, so this
90 # falls back to the standard iterative builder and none of the OFFC
91 # properties below may be set here: it declares none of them.
92 kwargs.setdefault("minSample", 2)
93 kwargs.setdefault("maxSample", 12)
94 kwargs.setdefault("minADCforIterInSigma", 4)
95 kwargs.setdefault("minADCforIter", 15)
96 kwargs.setdefault("defaultPhase", 12)
97 nominalPeakSample = 2
98 from LArConditionsCommon.LArRunFormat import getLArFormatForRun
99
100 larformat = getLArFormatForRun(
101 flags.Input.RunNumbers[0],
102 connstring="COOLONL_LAR/" + flags.IOVDb.DatabaseInstance,
103 )
104 if larformat is not None:
105 nominalPeakSample = larformat.firstSample()
106 else:
107 print("WARNING: larformat not found, use nominalPeakSample = 2")
108 nominalPeakSample = 2
109 if nominalPeakSample > 1:
110 kwargs.setdefault("DefaultShiftTimeSample", nominalPeakSample - 2)
111 else:
112 kwargs.setdefault("DefaultShiftTimeSample", 0)
113
114 acc.addEventAlgo(CompFactory.LArRawChannelBuilderIterAlg(**kwargs))
115 else:
116 # Default OFFC Configuration
117 kwargs.setdefault("BelowThreshold", flags.LAr.ROD.OFFCBelowThreshold)
118 kwargs.setdefault("BelowTillReset", flags.LAr.ROD.OFFCBelowTillReset)
119 kwargs.setdefault("NPulse", flags.LAr.ROD.OFFCNPulse)
120 kwargs.setdefault("Q3Cut", flags.LAr.ROD.OFFCQ3Cut)
121 kwargs.setdefault("Q3Offset", flags.LAr.ROD.OFFCQ3Offset)
122 kwargs.setdefault("FilterThreshold", flags.LAr.ROD.OFFCFilterThreshold)
123
124 acc.addEventAlgo(CompFactory.LArOFFCRawChannelBuilder(name, **kwargs))
125
126 return acc
127
128
129if __name__ == "__main__":
130
131 from AthenaConfiguration.AllConfigFlags import initConfigFlags
132 from AthenaCommon.Logging import log
133 from AthenaCommon.Constants import DEBUG
134
135 log.setLevel(DEBUG)
136
137 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
138
139 flags = initConfigFlags()
140 flags.Input.Files = defaultTestFiles.RAW_RUN2
141 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
142 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
143 # in case of testing iterative OFC:
144 #flags.Input.Files = ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/RecJobTransformTests/data15_1beam/data15_1beam.00260466.physics_L1Calo.merge.RAW._lb1380._SFO-ALL._0001.1']
145 flags.Input.isMC = False
146 flags.Detector.GeometryTile = False
147 flags.lock()
148
149 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
150 from LArByteStream.LArRawDataReadingConfig import LArRawDataReadingCfg
151
152 acc = MainServicesCfg(flags)
153 acc.merge(LArRawDataReadingCfg(flags))
154 acc.merge(LArOFFCRawChannelBuilderCfg(flags))
155
156 DumpLArRawChannels = CompFactory.DumpLArRawChannels
157 acc.addEventAlgo(
159 LArRawChannelContainerName="LArRawChannels_FromDigits",
160 ),
161 sequenceName="AthAlgSeq",
162 )
163
164 acc.run(3)
void print(char *figname, TCanvas *c1)
LArOFFCRawChannelBuilderCfg(flags, name="LArOFFCRawChannelBuilder", **kwargs)