ATLAS Offline Software
Loading...
Searching...
No Matches
LArNewCalib_XtalkDelay.py
Go to the documentation of this file.
1#!/usr/bin/env python
2#
3# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
4#
5
6if __name__=='__main__':
7
8 import os,sys
9 import argparse
10 from AthenaCommon import Logging
11 log = Logging.logging.getLogger( 'LArXtalkDelay' )
12
13 # now process the CL options and assign defaults
14 parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
15 parser.add_argument('-r','--run', dest='run', default='00408918', help='Run number string as in input filename', type=str)
16 parser.add_argument('-g','--gain', dest='gain', default="MEDIUM", help='Gain string', type=str)
17 parser.add_argument('-p','--partition', dest='partition', default="Em", help='Data taking partition string', type=str)
18 parser.add_argument('-f','--fileprefix', dest='fprefix', default="data25_calib", help='File prefix string', type=str)
19 parser.add_argument('-d','--indir', dest='indir', default="", help='Full input dir string', type=str)
20 parser.add_argument('-t','--trigger', dest='trig', default='calibration_', help='Trigger string in filename', type=str)
21 parser.add_argument('-o','--outrwaveprefix', dest='outrwaveprefix', default="LArCaliWave", help='Prefix of CaliWave output root filename', type=str)
22 parser.add_argument('-e','--outrdir', dest='outrdir', default="/eos/atlas/atlascerngroupdisk/det-larg/Temp/Weekly/ntuples", help='Output root file directory', type=str)
23 parser.add_argument('-q','--insqlite', dest='insql', default="", help='Input sqlite file with pedestals, in pool output dir.', type=str)
24 parser.add_argument('-m','--subdet', dest='subdet', default="EMB", help='Subdetector, EMB, EMEC, HEC, FCAL or HECFCAL', type=str)
25 parser.add_argument('-s','--side', dest='side', default="C", help='Detector side empty (means both), C or A', type=str)
26 parser.add_argument('-c','--isSC', dest='supercells', default=False, action="store_true", help='is SC data ?')
27 parser.add_argument('-a','--isRawdata', dest='rawdata', default=False, action="store_true", help='is raw data ?')
28 parser.add_argument('-x','--ignoreBarrel', dest='ignoreB', default=False, action="store_true", help='ignore Barrel channels ?')
29 parser.add_argument('-v','--ignoreEndcap', dest='ignoreE', default=False, action="store_true", help='ignore Endcap channels ?')
30 parser.add_argument('-b','--badchansqlite', dest='badsql', default="", help='Output sqlite file, in pool output dir.', type=str)
31 parser.add_argument('-i','--pattdir', dest='pdir', default="", help='Full input pattern dir string', type=str)
32 parser.add_argument('-j','--ntrigg', dest='ntrig', default=100, help='Number of trigger per step', type=int)
33 parser.add_argument('-u','--usepatt', dest='pattern', default=1, help='Number of trigger per step', type=int)
34 parser.add_argument('-n','--nsteps', dest='nstep', default=5, help='Number of delay steps', type=int)
35 parser.add_argument('-y','--nsubstep', dest='nsubstep', default=1, help='Number of subststeps', type=int)
36 parser.add_argument('--maxev', dest='maxev', default=-1, help='Number of events to process', type=int)
37
38 args = parser.parse_args()
39
40 for _, value in args._get_kwargs():
41 if value is not None:
42 print(value)
43
44 if len(args.run) < 8:
45 args.run = args.run.zfill(8)
46
47 # now set flags according parsed options
48 if args.indir != "":
49 InputDir = args.indir
50 else:
51 log.error("Need input dir!")
52 sys.exit(-1)
53
54 #Import the configution-method we want to use (here: Pedestal and AutoCorr)
55 from LArCalibProcessing.LArCalib_Delay_OFCCaliConfig import LArXtalkDelayCfg
56
57 #Import the MainServices (boilerplate)
58 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
59
60 #Import the flag-container that is the arguemnt to the configuration methods
61 from AthenaConfiguration.AllConfigFlags import initConfigFlags
62 from LArCalibProcessing.LArCalibConfigFlags import addLArCalibFlags
63 flags=initConfigFlags()
64 addLArCalibFlags(flags, args.supercells)
65
66 #Now we set the flags as required for this particular job:
67 #The following flags help finding the input bytestream files:
68 flags.LArCalib.Input.Dir = InputDir
69 flags.LArCalib.Input.Type = args.trig
70 flags.LArCalib.Input.RunNumbers = [int(args.run),]
71 flags.LArCalib.Input.isRawData = args.rawdata
72 gainNumMap={"HIGH":0,"MEDIUM":1,"LOW":2}
73 flags.LArCalib.Gain=gainNumMap[args.gain.upper()]
74
75
76 # Input files
77 flags.Input.Files=flags.LArCalib.Input.Files
78 #Print the input files we found
79 print ("Input files to be processed:")
80 for f in flags.Input.Files:
81 print (f)
82
83 if len(flags.Input.Files) == 0 :
84 print("Unable to find any input files. Please check the input directory:",InputDir)
85 sys.exit(0)
86
87 #Some configs depend on the sub-calo in question
88 #(sets also the preselection of LArRawCalibDataReadingAlg)
89 if not flags.LArCalib.isSC:
90 if args.subdet == 'EMB' or args.subdet == 'EMEC':
91 flags.LArCalib.Input.SubDet="EM"
92 elif args.subdet:
93 flags.LArCalib.Input.SubDet=args.subdet
94
95 if not args.side:
96 flags.LArCalib.Preselection.Side = [0,1]
97 elif args.side == "C":
98 flags.LArCalib.Preselection.Side = [0]
99 elif args.side == "A":
100 flags.LArCalib.Preselection.Side = [1]
101 else:
102 print("unknown side ",args.side)
103 sys.exit(-1)
104
105 if args.subdet != "EM":
106 if args.subdet == 'EMB':
107 flags.LArCalib.Preselection.BEC = [0]
108 else:
109 flags.LArCalib.Preselection.BEC = [1]
110
111 if args.subdet == 'FCAL':
112 flags.LArCalib.Preselection.FT = [6]
113 elif args.subdet == 'HEC':
114 flags.LArCalib.Preselection.FT = [3,10,16,22]
115 elif args.subdet == 'HECFCAL':
116 flags.LArCalib.Preselection.FT = [3,6,10,16,22]
117
118 #Configure the Bad-Channel database we are reading
119 #(the AP typically uses a snapshot in an sqlite file
120
121 if args.badsql.startswith("/"):
122 flags.LArCalib.BadChannelDB = args.badsql
123 else:
124 flags.LArCalib.BadChannelDB = "LAR_OFL"
125
126 #Output of this job:
127 OutputCaliWaveRootFileName = args.outrwaveprefix + "_" + args.run
128
129 if args.subdet != "" and not flags.LArCalib.isSC:
130 OutputCaliWaveRootFileName += "_"+args.subdet
131
132 if flags.LArCalib.Input.SubDet=="EM":
133 OutputCaliWaveRootFileName += args.side
134
135 OutputCaliWaveRootFileName += ".root"
136
137 flags.LArCalib.Output.ROOTFile = args.outrdir + "/" + OutputCaliWaveRootFileName
138 #The global tag we are working with
139 flags.IOVDb.GlobalTag = "LARCALIB-RUN2-00"
140
141 #Other potentially useful flags-settings:
142
143 # nsteps
144 flags.LArCalib.CaliWave.Nsteps=args.nstep
145 # patterns file
146 pfile = args.pdir + '/parameters.dat'
147 flags.LArCalib.Input.paramsFile = pfile
148 # number of triggers (misusing OFC flags, which are not use in this job)
149 flags.LArCalib.OFC.Ncoll = args.ntrig
150 # number of substeps
151 flags.LArCalib.CaliWave.NSubSteps = args.nsubstep
152 # which pattern to use
153 flags.LArCalib.OFC.Nsamples = args.pattern
154
155 if args.insql:
156 flags.LArCalib.Input.Database = args.insql
157 else:
158 flags.LArCalib.Input.Database = "LAR_ONL"
159 flags.LArCalib.Pedestal.Folder = "/LAR/ElecCalibFlat/Pedestal"
160
161 #Define the global output Level:
162 from AthenaCommon.Constants import INFO,DEBUG
163 flags.Exec.OutputLevel = INFO
164
165 from AthenaConfiguration.Enums import LHCPeriod
166 flags.GeoModel.Run = LHCPeriod.Run3
167
168 from AthenaConfiguration.TestDefaults import defaultGeometryTags
169 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
170
171 flags.lock()
172 flags.dump(evaluate=True)
173
174 cfg=MainServicesCfg(flags)
175
176 cfg.merge(LArXtalkDelayCfg(flags))
177
178 if flags.LArCalib.isSC:
179 fwversion=5
180 # autoconfig
181 from LArConditionsCommon.LArRunFormat import getLArDTInfoForRun
182 try:
183 runinfo=getLArDTInfoForRun(flags.Input.RunNumbers[0], connstring="COOLONL_LAR/CONDBR2")
184 log.info("Got DT run info !")
185 except Exception:
186 log.warning("Could not get DT run info, using defaults !")
187 else:
188 fwversion=runinfo.FWversion()
189 if args.fw6 or fwversion==6:
190 from IOVDbSvc.IOVDbSvcConfig import addOverride
191 cfg.merge(addOverride(flags,"/LAR/Identifier/LatomeMapping","LARIdentifierLatomeMapping-fw6"))
192
193
194 # ignore some channels ?
195 if args.ignoreB:
196 if args.rawdata:
197 cfg.getEventAlgo("LArRawSCDataReadingAlg").LATOMEDecoder.IgnoreBarrelChannels=args.ignoreB
198 else:
199 cfg.getEventAlgo("LArRawSCCalibDataReadingAlg").LATOMEDecoder.IgnoreBarrelChannels=args.ignoreB
200 if args.ignoreE:
201 if args.rawdata:
202 cfg.getEventAlgo("LArRawSCDataReadingAlg").LATOMEDecoder.IgnoreEndcapChannels=args.ignoreE
203 else:
204 cfg.getEventAlgo("LArRawSCCalibDataReadingAlg").LATOMEDecoder.IgnoreEndcapChannels=args.ignoreE
205
206 if args.insql:
207 cfg.getService("IOVDbSvc").DBInstance=""
208 else:
209 cfg.getService("IOVDbSvc").DBInstance="LAR_OFL"
210
211 #cfg.getService("MessageSvc").defaultLimit=2000000 #more messages
212 #cfg.getEventAlgo("LArCalibDigitMaker").OutputLevel=DEBUG
213 #cfg.getEventAlgo("LArCalibDigitsAccumulator").OutputLevel=2
214 #cfg.getEventAlgo("LArCaliWaveBuilder").OutputLevel=DEBUG
215 #cfg.getEventAlgo("LArCaliWaves2Ntuple").OutputLevel=DEBUG
216 #cfg.getEventAlgo("LArCalibDigitsAccumulator").OutputLevel=2
217
218 #run the application
219 cfg.run(args.maxev)
220
void print(char *figname, TCanvas *c1)