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 AthenaConfiguration.ComponentFactory import CompFactory
3from AthenaConfiguration.Enums import LHCPeriod, ProductionStep
4from LArRecUtils.LArADC2MeVCondAlgConfig import LArADC2MeVCondAlgCfg
5from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBCfg
6from LArRecUtils.LArRecUtilsConfig import LArOFCCondAlgCfg
7from LArConfiguration.LArConfigFlags import RawChannelSource
8
9
10def LArOFFCRawChannelBuilderCfg(flags, name="LArOFFCRawChannelBuilder", **kwargs):
11
12 acc = LArADC2MeVCondAlgCfg(flags)
13
14 # Default OFFC Configuration
15 kwargs.setdefault("BelowThreshold", flags.LAr.ROD.OFFCBelowThreshold)
16 kwargs.setdefault("BelowTillReset", flags.LAr.ROD.OFFCBelowTillReset)
17 kwargs.setdefault("NPulse", flags.LAr.ROD.OFFCNPulse)
18 kwargs.setdefault("Q3Cut", flags.LAr.ROD.OFFCQ3Cut)
19 kwargs.setdefault("FilterThreshold", flags.LAr.ROD.OFFCFilterThreshold)
20
21 kwargs.setdefault(
22 "firstSample",
23 (
24 (flags.LAr.ROD.nPreceedingSamples - 1)
25 if flags.LAr.ROD.nPreceedingSamples != 0
26 else flags.LAr.ROD.FirstSample
27 ),
28 )
29 obj = "AthenaAttributeList"
30 dspkey = "Run2DSPThresholdsKey"
31 from IOVDbSvc.IOVDbSvcConfig import addFolders
32
33 kwargs.setdefault("ShapeKey", "LArShapeSym")
34
35 if flags.Input.isMC:
36 acc.merge(LArOFCCondAlgCfg(flags))
37 kwargs.setdefault("LArRawChannelKey", "LArRawChannels")
38
39 if flags.GeoModel.Run is LHCPeriod.Run1: # back to flat threshold
40 kwargs.setdefault("useDB", False)
41 dspkey = ""
42 else:
43 fld = "/LAR/NoiseOfl/DSPThresholds"
44 sgkey = fld
45 dbString = "OFLP200"
46 dbInstance = "LAR_OFL"
47 acc.merge(
48 addFolders(flags, fld, dbInstance, className=obj, db=dbString)
49 )
50
51 if flags.Common.ProductionStep is ProductionStep.PileUpPresampling:
52 kwargs.setdefault(
53 "LArDigitKey", flags.Overlay.BkgPrefix + "LArDigitContainer_MC"
54 )
55 else:
56 kwargs.setdefault("LArDigitKey", "LArDigitContainer_MC")
57 else:
58 acc.merge(LArElecCalibDBCfg(flags, ("OFC", "Shape", "Pedestal")))
59 if flags.Overlay.DataOverlay:
60 kwargs.setdefault("LArDigitKey", "LArDigitContainer_MC")
61 kwargs.setdefault("LArRawChannelKey", "LArRawChannels")
62 else:
63 kwargs.setdefault("LArRawChannelKey", "LArRawChannels_FromDigits")
64
65 if "COMP200" in flags.IOVDb.DatabaseInstance:
66 fld = "/LAR/Configuration/DSPThreshold/Thresholds"
67 obj = "LArDSPThresholdsComplete"
68 dspkey = "Run1DSPThresholdsKey"
69 sgkey = "LArDSPThresholds"
70 dbString = "COMP200"
71 else:
72 fld = "/LAR/Configuration/DSPThresholdFlat/Thresholds"
73 sgkey = fld
74 dbString = "CONDBR2"
75 dbInstance = "LAR_ONL"
76 acc.merge(addFolders(flags, fld, dbInstance, className=obj, db=dbString))
77
78 kwargs.setdefault(dspkey, sgkey)
79
80 if (
81 flags.LAr.ROD.forceIter
82 or flags.LAr.RawChannelSource is RawChannelSource.Calculated
83 ):
84 # iterative OFC procedure
85 kwargs.setdefault("minSample", 2)
86 kwargs.setdefault("maxSample", 12)
87 kwargs.setdefault("minADCforIterInSigma", 4)
88 kwargs.setdefault("minADCforIter", 15)
89 kwargs.setdefault("defaultPhase", 12)
90 nominalPeakSample = 2
91 from LArConditionsCommon.LArRunFormat import getLArFormatForRun
92
93 larformat = getLArFormatForRun(
94 flags.Input.RunNumber[0],
95 connstring="COOLONL_LAR/" + flags.IOVDb.DatabaseInstance,
96 )
97 if larformat is not None:
98 nominalPeakSample = larformat.firstSample()
99 else:
100 print("WARNING: larformat not found, use nominalPeakSample = 2")
101 nominalPeakSample = 2
102 if nominalPeakSample > 1:
103 kwargs.setdefault("DefaultShiftTimeSample", nominalPeakSample - 2)
104 else:
105 kwargs.setdefault("DefaultShiftTimeSample", 0)
106
107 acc.addEventAlgo(CompFactory.LArRawChannelBuilderIterAlg(**kwargs))
108 else:
109
110 acc.addEventAlgo(CompFactory.LArOFFCRawChannelBuilder(name, **kwargs))
111
112 return acc
113
114
115if __name__ == "__main__":
116
117 from AthenaConfiguration.AllConfigFlags import initConfigFlags
118 from AthenaCommon.Logging import log
119 from AthenaCommon.Constants import DEBUG
120
121 log.setLevel(DEBUG)
122
123 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
124
125 flags = initConfigFlags()
126 flags.Input.Files = defaultTestFiles.RAW_RUN2
127 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
128 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
129 # in case of testing iterative OFC:
130 #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']
131 flags.Input.isMC = False
132 flags.Detector.GeometryTile = False
133 flags.lock()
134
135 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
136 from LArByteStream.LArRawDataReadingConfig import LArRawDataReadingCfg
137
138 acc = MainServicesCfg(flags)
139 acc.merge(LArRawDataReadingCfg(flags))
140 acc.merge(LArOFFCRawChannelBuilderCfg(flags))
141
142 DumpLArRawChannels = CompFactory.DumpLArRawChannels
143 acc.addEventAlgo(
145 LArRawChannelContainerName="LArRawChannels_FromDigits",
146 ),
147 sequenceName="AthAlgSeq",
148 )
149
150 acc.run(3)
void print(char *figname, TCanvas *c1)
LArOFFCRawChannelBuilderCfg(flags, name="LArOFFCRawChannelBuilder", **kwargs)