ATLAS Offline Software
Loading...
Searching...
No Matches
CaloComputeNoiseConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentFactory import CompFactory
4from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
5from AthenaConfiguration.MainServicesConfig import MainEvgenServicesCfg
6
7from AthenaCommon.Logging import logging
8
9def CaloComputeNoiseCfg(flagsIn,mu=60,nsamp=4,dt=25,output='cellnoise_data.root'):
10
11 if (dt!=25):
12 raise RuntimeError("At this point (early run 3), only a dt of 25ns is supported")
13
14 #Clone flags-container and modify it, since this is not a standard reco job
15 flags=flagsIn.clone()
16 flags.Calo.Noise.fixedLumiForNoise=mu*0.17241*50/25
17 flags.LAr.doHVCorr = False #Avoid double-rescaling
18 flags.LAr.ROD.NumberOfCollisions = mu # for OFC computation
19 flags.LAr.ROD.nSamples = nsamp # number of samples to use
20 flags.lock()
21
22 msg = logging.getLogger("CaloComputeNoiseCfg")
23 #pick noise-tag depending on mu and dt
24
25 #FIXME: make this configurable
26 if flags.LArCalib.isSC:
27 minbiastag="LARElecCalibMCSCMinBias-mc16-Epos-A3-s3687"
28 fsampltag="LARElecCalibMCSCfSampl-000"
29 shapetag="LARElecCalibMCSCShape-000"
30 #hvcorrtag="LARElecCalibMCSC-" not existing yet
31 else:
32 minbiastag="LARElecCalibMCMinBias-mc16-Epos-A3-s3687"
33 fsampltag="LARElecCalibMCfSampl-G4101-20371-FTFP_BERT_BIRK_v2"
34 shapetag="LARElecCalibMCShapeLArPileupShape-RUN2-2018"
35 hvcorrtag="LARElecCalibMCHVScaleCorr-IOVDEP-02"
36
37 msg.info("Noise computing for mu=%i and dt=%i" , mu,dt)
38
39 result=ComponentAccumulator()
40
41 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
42 result.merge(LArGMCfg(flags))
43 from TileGeoModel.TileGMConfig import TileGMCfg
44 result.merge(TileGMCfg(flags))
45
46 if flags.LArCalib.isSC:
47 from LArRecUtils.LArADC2MeVSCCondAlgConfig import LArADC2MeVSCCondAlgCfg
48 result.merge(LArADC2MeVSCCondAlgCfg(flags))
49 from LArRecUtils.LArRecUtilsConfig import LArOFCSCCondAlgCfg
50 result.merge(LArOFCSCCondAlgCfg(flags))
51 #result.addCondAlgo(CompFactory.LArHVCondAlg(doHV=False, doAffectedHV=False))
52
53 else:
54 from LArRecUtils.LArADC2MeVCondAlgConfig import LArADC2MeVCondAlgCfg
55 from LArRecUtils.LArRecUtilsConfig import LArOFCCondAlgCfg
56 from LArCalibUtils.LArHVScaleConfig import LArHVScaleCfg
57 result.merge(LArADC2MeVCondAlgCfg(flags))
58 result.merge(LArOFCCondAlgCfg(flags))
59 result.merge(LArHVScaleCfg(flags))
60
61 #make proper overrides
62 from IOVDbSvc.IOVDbSvcConfig import addOverride
63 if flags.LArCalib.isSC:
64 #result.merge(addOverride(flags,"/LAR/NoiseOflSCi/CellNoise", "LARNoiseOflSCCellNoise-empty"))
65 result.getService("IOVDbSvc").Folders.append("/LAR/ElecCalibMCSC/HVScaleCorr")
66 result.getCondAlgo("CondInputLoader").Load.add(("CondAttrListCollection","/LAR/ElecCalibMCSC/HVScaleCorr"))
67 result.addCondAlgo(CompFactory.getComp("LArFlatConditionsAlg<LArHVScaleCorrSC>")(ReadKey="/LAR/ElecCalibMCSC/HVScaleCorr", WriteKey="LArHVScaleCorrSC"))
68 pass
69 else:
70 result.merge(addOverride(flags,"/LAR/ElecCalibMC/MinBias", minbiastag))
71 result.merge(addOverride(flags,"/LAR/ElecCalibMC/fSampl", fsampltag))
72 result.merge(addOverride(flags,"/LAR/ElecCalibMC/Shape", shapetag))
73 result.merge(addOverride(flags,"/LAR/ElecCalibMC/HVScaleCorr", hvcorrtag))
74 result.merge(addOverride(flags,"/LAR/NoiseOfl/CellNoise", "LARNoiseOflCellNoise-empty"))
75 result.merge(addOverride(flags,"/TILE/OFL02/NOISE/CELL", "TileOfl02NoiseCell-OF2-05-25ns-R2-single-IOV"))
76 result.merge(addOverride(flags,"/CALO/Ofl/Noise/CellNoise", "CaloOflNoiseCellnoise-empty"))
77
78 #if not flags.LArCalib.isSC:
79 if True:
80 #we need a pedestal folder from data
81 #first remove the MC folder
82 iovdbsvc=result.getService("IOVDbSvc")
83 # check existing list of folders and remove it if found
84 folder="/LAR/ElecCalibMCSC/Pedestal" if flags.LArCalib.isSC else "/LAR/ElecCalibMC/Pedestal"
85 for i in range(0,len(iovdbsvc.Folders)):
86 if (iovdbsvc.Folders[i].find(folder)>=0):
87 del iovdbsvc.Folders[i]
88 break
89 condInputLoader=result.getCondAlgo("CondInputLoader")
90 for cil_Loadval in condInputLoader.Load:
91 if folder in cil_Loadval:
92 condInputLoader.Load.remove(cil_Loadval)
93 break
94
95 #and now configure data one
96 dfolder="/LAR/ElecCalibFlatSC/Pedestal" if flags.LArCalib.isSC else "/LAR/ElecCalibFlat/Pedestal"
97 iovdbsvc.Folders.append(dfolder+"<db>COOLONL_LAR/CONDBR2</db>")
98 condInputLoader.Load.add(("CondAttrListCollection",dfolder))
99 if flags.LArCalib.isSC:
100 #result.addCondAlgo(CompFactory.getComp("LArFlatConditionsAlg<LArPedestalSC>")(ReadKey=dfolder,WriteKey="LArPedestalSC"))
101 result.getCondAlgo("LArFlatConditionsAlg<LArPedestalSC>").ReadKey=dfolder
102 else:
103 result.addCondAlgo(CompFactory.getComp("LArFlatConditionsAlg<LArPedestalFlat>")(ReadKey=dfolder,WriteKey="LArPedestal"))
104
105 if flags.LArCalib.isSC:
106 result.addEventAlgo(CompFactory.CaloNoiseCompCondAlg(NMinBias=flags.Calo.Noise.fixedLumiForNoise,
107 ADC2MeVKey="LArADC2MeVSC",PedestalKey="LArPedestalSC",
108 AutocorrKey="LArAutoCorrSC",OFKey="LArOFCSC",
109 ShapeKey="LArShapeSC",fSamplKey="LArfSamplSC",
110 LArMinBiasKey="LArMinBiasSC", SuperCell=True, DiagnosticHG=True
111 ))
112 else:
113 result.addEventAlgo(CompFactory.CaloNoiseCompCondAlg(NMinBias=flags.Calo.Noise.fixedLumiForNoise))
114
115 result.addEventAlgo(CompFactory.CaloRescaleNoise(absScaling=True, SuperCell=flags.LArCalib.isSC,
116 OnlineLArHVScaleCorr="LArHVScaleCorrSC" if flags.LArCalib.isSC else "LArHVScaleCorr",
117 CablingKey= "LArOnOffIdMapSC" if flags.LArCalib.isSC else "LArOnOffIdMap",
118 ElecNoiseKey="elecNoise",PileupNoiseKey="pileupNoise"))
119
120 result.getCondAlgo("LArADC2MeVCondAlg").LArHVScaleCorrKey = "" #Avoid double-rescaling
121
122 import os
123 if os.path.exists(output):
124 os.remove(output)
125 result.addService(CompFactory.THistSvc(Output = ["file1 DATAFILE='"+output+"' OPT='RECREATE'"]))
126 result.setAppProperty("HistogramPersistency","ROOT")
127
128 return result
129
130
131if __name__=="__main__":
132 import argparse
133 parser= argparse.ArgumentParser(description="(Compute noise")
134
135 parser.add_argument('-r', '--run', type=int, default=358013, help="Which run number to use ")
136 parser.add_argument('-t', '--globaltag', type=str, default="OFLCOND-MC21-SDR-RUN3-12",help="Global conditions tag ")
137 parser.add_argument('-o', '--output',type=str,default="cellnoise_data.root",help="name stub for root and sqlite output files")
138 parser.add_argument('-m', '--mu', type=int, default=60, help="Which mu to use ")
139 parser.add_argument('-n', '--nsamples', type=int, default=4, help="Number of samples for OFC/Autocorr ")
140 parser.add_argument('-s', '--isSC', default=False, action="store_true", help="Running for SC? ")
141 parser.add_argument('--olevel', type=int, default=3, help="Output level to use ")
142
143 args = parser.parse_args()
144 print(args)
145
146
147 from AthenaConfiguration.AllConfigFlags import initConfigFlags
148 flags = initConfigFlags()
149 from LArCalibProcessing.LArCalibConfigFlags import addLArCalibFlags
150 addLArCalibFlags(flags)
151
152 flags.Input.RunNumbers=[args.run]
153 print("set the runnumber: ",flags.Input.RunNumbers)
154 flags.Input.Files=[]
155 flags.IOVDb.DatabaseInstance="OFLP200"
156 flags.Input.isMC=True
157 from Campaigns.Utils import Campaign
158 flags.Input.MCCampaign=Campaign.Unknown
159 from AthenaConfiguration.TestDefaults import defaultGeometryTags
160 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
161
162 flags.LAr.ROD.UseHighestGainAutoCorr = True
163 flags.LArCalib.isSC=args.isSC
164
165 #FIXME need to upload to COOL
166 flags.IOVDb.SqliteFolders=("/LAR/ElecCalibMCSC/HVScaleCorr",)
167 flags.IOVDb.SqliteInput="SCHVcorr_mc.db"
168
169 if args.globaltag:
170 flags.IOVDb.GlobalTag=args.globaltag
171
172 flags.lock()
173 cfg=MainEvgenServicesCfg(flags)
174 from McEventSelector.McEventSelectorConfig import McEventSelectorCfg
175 cfg.merge(McEventSelectorCfg(flags,
176 FirstLB = 0,
177 EventsPerRun = 1,
178 FirstEvent = 1,
179 InitialTimeStamp = 0,
180 TimeStampInterval = 1))
181
182 cfg.merge(CaloComputeNoiseCfg(flags,output=args.output,mu=args.mu,nsamp=args.nsamples))
183
184 # could not put into algo config
185 if flags.LArCalib.isSC:
186 cfg.getCondAlgo("LArADC2MeVSCCondAlg").LArHVScaleCorrKey=""
187 else:
188 cfg.getCondAlgo("LArADC2MeVCondAlg").LArHVScaleCorrKey=""
189
190 cfg.getService("DetectorStore").Dump=True
191 cfg.getService("ConditionStore").Dump=True
192
193 cfg.getService("MessageSvc").OutputLevel=args.olevel
194 if args.olevel < 3:
195 if flags.LArCalib.isSC:
196 cfg.getCondAlgo("LArAutoCorrTotalSCCondAlg").OutputLevel=3
197 cfg.getCondAlgo("LArOFCSCCondAlg").OutputLevel=3
198 else:
199 cfg.getCondAlgo("LArAutoCorrTotalCondAlg").OutputLevel=3
200 cfg.getCondAlgo("LArOFCCondAlg").OutputLevel=3
201 cfg.getService("MessageSvc").defaultLimit=999999999
202
203 cfg.printConfig(withDetails=True)
204
205 print("Start running...")
206 cfg.run(1)
void print(char *figname, TCanvas *c1)
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138
CaloComputeNoiseCfg(flagsIn, mu=60, nsamp=4, dt=25, output='cellnoise_data.root')