ATLAS Offline Software
Loading...
Searching...
No Matches
CaloScaleNoiseConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2023 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 CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
8from LArCalibUtils.LArHVScaleConfig import LArHVScaleCfg
9from IOVDbSvc.IOVDbSvcConfig import addOverride
10from AthenaCommon.Logging import logging
11
12def CaloScaleNoiseCfg(flagsIn,absolute=True,mu=60,dt=25,output='cellnoise_data.root'):
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=1
17 flags.LAr.doHVCorr = False #Avoid double-rescaling
18 flags.lock()
19
20 msg = logging.getLogger("CaloScaleNoiseCfg")
21 #pick noise-tag depending on mu and dt
22
23 if not absolute:
24 #relative rescale, use current UPD-online tag
25 noisetag="LARNoiseOflCellNoise-RUN2-UPD1-00"
26 msg.info("Noise rescaling using tag %s", noisetag)
27 else:
28 if (dt!=25):
29 raise RuntimeError("At this point (early run 3), only a dt of 25ns is supported")
30
31 if mu==0:
32 noisetag="LARNoiseOflCellNoisenoise-mc16-EposA3-ofc25mu0-25ns"
33 elif mu==60:
34 noisetag="LARNoiseOflCellNoisenoise-mc16-EposA3-ofc25mu60-25ns"
35 else:
36 raise RuntimeError("At this point (early run 3), only mu values of 0 and 60 are supported")
37
38
39 msg.info("Absolute noise scaling using tag %s for mu=%i and dt=%i" , noisetag,mu,dt)
40
41 result=ComponentAccumulator()
42
43 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
44 result.merge(LArGMCfg(flags))
45 from TileGeoModel.TileGMConfig import TileGMCfg
46 result.merge(TileGMCfg(flags))
47
48
49 result.merge(CaloNoiseCondAlgCfg(flags,noisetype="totalNoise"))
50 result.merge(CaloNoiseCondAlgCfg(flags,noisetype="electronicNoise"))
51 result.merge(CaloNoiseCondAlgCfg(flags,noisetype="pileupNoise"))
52
53
54 if absolute:
55 result.merge(addOverride(flags,"/LAR/NoiseOfl/CellNoise",noisetag))
56 else:
57 result.merge(addOverride(flags,"/LAR/NoiseOfl/CellNoise",noisetag))
58
59 result.merge(LArHVScaleCfg(flags))
60
61 result.addEventAlgo(CompFactory.CaloRescaleNoise(absScaling=absolute))
62
63 import os
64 rootfile="cellnoise_data.root"
65 if os.path.exists(rootfile):
66 os.remove(rootfile)
67 result.addService(CompFactory.THistSvc(Output = ["file1 DATAFILE='"+output+"' OPT='RECREATE'"]))
68 result.setAppProperty("HistogramPersistency","ROOT")
69
70 return result
71
72
73if __name__=="__main__":
74 import sys, argparse
75 parser= argparse.ArgumentParser(description="(Re-)scale noise based on HV DCS values")
76 parser.add_argument('datestamp',help="time specification like 2007-05-25:14:01:00")
77 parser.add_argument('-a', '--absolute', action="store_true", help="Absolute rescaling based on noise derived from MC")
78 parser.add_argument('-t', '--globaltag', type=str, help="Global conditions tag ")
79 parser.add_argument('-s', '--sqlite', type=str,help="sqlite with CellNoise and HVCorr folders to be scaled ")
80 parser.add_argument('-o', '--output',type=str,default="cellnoise_data.root",help="name stub for root and sqlite output files")
81 args = parser.parse_args()
82 print(args)
83
84 from time import strptime
85 from calendar import timegm
86 try:
87 ts=strptime(args.datestamp+'/UTC','%Y-%m-%d:%H:%M:%S/%Z')
88 TimeStamp=int(timegm(ts))
89 TimeStamp_ns=TimeStamp*1000000000
90 except ValueError as e:
91 print("ERROR in time specification, use e.g. 2007-05-25:14:01:00")
92 print(e)
93 sys.exit(-1)
94
95
96 from LArCalibProcessing.TimeStampToRunLumi import TimeStampToRunLumi
97 rlb=TimeStampToRunLumi(TimeStamp_ns)
98 if rlb is None:
99 #rlb=[0x7FFFFFFF-1,0]
100 rlb=[999999,0]
101 print("WARNING: CaloScaleNoise: Failed to convert time",TimeStamp_ns,"into a run/lumi number. Using 'infinite' run-number",rlb[0])
102
103
104 from AthenaConfiguration.AllConfigFlags import initConfigFlags
105 flags = initConfigFlags()
106 flags.Input.RunNumbers=[rlb[0]]
107 print("set the runnumber: ",flags.Input.RunNumbers)
108 flags.Input.TimeStamps=[TimeStamp]
109 flags.Input.Files=[]
110 flags.IOVDb.DatabaseInstance="CONDBR2"
111 from AthenaConfiguration.TestDefaults import defaultGeometryTags
112 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
113
114 if args.globaltag:
115 flags.IOVDb.GlobalTag=args.globaltag
116
117 if args.sqlite:
118 flags.IOVDb.SqliteInput=args.sqlite
119 flags.IOVDb.SqliteFolders=("/LAR/NoiseOfl/CellNoise","/LAR/ElecCalibFlat/HVScaleCorr",)
120
121 flags.lock()
122 cfg=MainEvgenServicesCfg(flags)
123 cfg.merge(CaloScaleNoiseCfg(flags,absolute=args.absolute,output=args.output))
124
125 print("Start running...")
126 cfg.run(1)
void print(char *figname, TCanvas *c1)
CaloScaleNoiseCfg(flagsIn, absolute=True, mu=60, dt=25, output='cellnoise_data.root')