ATLAS Offline Software
Loading...
Searching...
No Matches
LArCalib_HVCorrConfig.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
4
5from AthenaConfiguration.ComponentFactory import CompFactory
6from AthenaConfiguration.MainServicesConfig import MainEvgenServicesCfg
7
8def HVCorrConfig(flags,outputName="hvcorr",runOut=0, lbOut=0):
9
10 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
11 result=LArGMCfg(flags)
12
13 #Use the standard LArHVScaleCfg and adjust properties afterwards as needed
14 from LArCalibUtils.LArHVScaleConfig import LArHVScaleCfg
15
16 result.merge(LArHVScaleCfg(flags))
17 result.getCondAlgo("LArHVCondAlg").UndoOnlineHVCorr=False
18 result.getCondAlgo("LArHVCondAlg").keyOutputCorr="NewLArHVScaleCorr"
19
20 from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
21 result.merge(LArOnOffIdMappingSCCfg(flags))
22 result.addEventAlgo(CompFactory.LArHVCorrToSCHVCorr(ContainerKey="NewLArHVScaleCorr",OutputKey="NewSCLArHVScaleCorr",
23 OutputFolder="/LAR/ElecCalibFlatSC/HVScaleCorrNew",
24 IsHeavyIons=False, PatchInHeavyIons=1.0,
25 PhysicsWeights="TrigT1CaloCalibUtils/HVcorrPhysicsWeights.txt"))
26
27 #The LArHVCorrMaker creates a flat blob in a CondAttrListCollection
28 #Input: The HV Scale Correction computed by the LArHVCondAlg based on the DCS HV values
29 result.addEventAlgo(CompFactory.LArHVCorrMaker(LArHVScaleCorr="NewLArHVScaleCorr",folderName="/LAR/ElecCalibFlat/HVScaleCorrNew"))
30
33
34 #Ntuple writing ...
35 from LArCalibTools.LArCalib_HVScale2NtupleConfig import LArHVScaleCorr2NtupleCfg
36 result.merge(LArHVScaleCorr2NtupleCfg(flags,rootfile=outputName+'_ntuple.root',addSC=True))
37 result.getEventAlgo("LArHVScaleCorr2Ntuple").ContainerKey="NewLArHVScaleCorr"
38 result.getEventAlgo("LArSCHVScaleCorr2Ntuple").ContainerKey="NewSCLArHVScaleCorr"
39 result.getEventAlgo("LArSCHVScaleCorr2Ntuple").NtuplePath="/NTUPLES/FILE1/HVSCALESC"
40
41 #sqlite writing ...
42 from RegistrationServices.OutputConditionsAlgConfig import OutputConditionsAlgCfg
43 result.merge(OutputConditionsAlgCfg(flags,
44 outputFile="dummy.root",
45 ObjectList=["CondAttrListCollection#/LAR/ElecCalibFlat/HVScaleCorrNew#/LAR/ElecCalibFlat/HVScaleCorr",
46 "CondAttrListCollection#/LAR/ElecCalibFlatSC/HVScaleCorrNew#/LAR/ElecCalibFlatSC/HVScaleCorr",],
47 Run1=runOut,
48 LB1=lbOut
49 ))
50
51
52
53 #RegistrationSvc
54 result.addService(CompFactory.IOVRegistrationSvc(RecreateFolders = True,
55 SVFolder=True,
56 OverrideNames = ["HVScaleCorr"],
57 OverrideTypes = ["Blob16M"],
58 ))
59
60 result.getService("IOVDbSvc").DBInstance=""
61 return result
62
63
64if __name__=="__main__":
65 import sys
66 from time import time,strptime
67 from calendar import timegm
68 import argparse
69 parser= argparse.ArgumentParser(description="Recalclulate HV corrections based on DCS values")
70 parser.add_argument('datestamp',help="time specification like 2007-05-25:14:01:00")
71 parser.add_argument('Run',type=int, nargs='?', default=0,help="IOV start (run-number)")
72 parser.add_argument('LB',type=int, nargs='?', default=0,help="IOV start (run-number)")
73 parser.add_argument('-g', '--globaltag', type=str, help="Geometry Tag ")
74 parser.add_argument('-o', '--output',type=str,default="hvcorr",help="name stub for root and sqlite output files")
75 parser.add_argument('-l','--olevel',type=int, default=3,help="OutputLevel")
76
77 args = parser.parse_args()
78 try:
79 ts=strptime(args.datestamp+'/UTC','%Y-%m-%d:%H:%M:%S/%Z')
80 TimeStamp=int(timegm(ts))
81 TimeStamp_ns=TimeStamp*1000000000
82 except ValueError as e:
83 print("ERROR in time specification, use e.g. 2007-05-25:14:01:00")
84 print(e)
85 sys.exit(-1)
86
87 from LArCalibProcessing.TimeStampToRunLumi import TimeStampToRunLumi
88
89 rlb=TimeStampToRunLumi(TimeStamp_ns)
90 if rlb is None:
91 rlb=[0xFFFFFFF-1,0]
92 print("WARNING: Failed to convert time",TimeStamp_ns,"into a run/lumi number. Using 'infinite' run-number",rlb[0])
93
94
95 print("---> Working on run",rlb[0],"LB",rlb[1],"Timestamp:",TimeStamp)
96 timediff=int(time()-TimeStamp)
97 if timediff<0:
98 print("ERROR: Timestamp in the future???")
99 else:
100 (days,remainder)=divmod(timediff,24*60*60)
101 (hours,seconds)=divmod(remainder,60*60)
102 print ("---> Timestamp is %i days %i hours and %i minutes ago" % (days,hours,int(seconds/60)))
103 pass
104
105 print("Output IOV will be from run %i lumiblock %i to INF" % (args.Run,args.LB))
106
107 outputName=args.output
108
109 from AthenaConfiguration.TestDefaults import defaultGeometryTags
110 from AthenaConfiguration.AllConfigFlags import initConfigFlags
111 ConfigFlags=initConfigFlags()
112
113 if args.globaltag:
114 ConfigFlags.IOVDb.GlobalTag=args.globaltag
115
116 ConfigFlags.Input.RunNumbers=[rlb[0]]
117 ConfigFlags.Input.LumiBlockNumbers=[rlb[1]]
118 ConfigFlags.Input.TimeStamps=[TimeStamp]
119 ConfigFlags.Input.Files=[]
120 ConfigFlags.IOVDb.DatabaseInstance="CONDBR2"
121 ConfigFlags.IOVDb.DBConnection="sqlite://;schema="+outputName+".sqlite;dbname=CONDBR2"
122 ConfigFlags.GeoModel.AtlasVersion=defaultGeometryTags.RUN3
123 ConfigFlags.Exec.OutputLevel=args.olevel
124 ConfigFlags.lock()
125 cfg=MainEvgenServicesCfg(ConfigFlags)
126 #First LB not set by McEventSelectorCfg, set it here:
127 cfg.getService("EventSelector").FirstLB=ConfigFlags.Input.LumiBlockNumbers[0]
128 cfg.merge(HVCorrConfig(ConfigFlags,outputName,args.Run,args.LB))
129
130
131 print("Start running...")
132 import sys
133 sys.exit(cfg.run(1).isFailure())
void print(char *figname, TCanvas *c1)
HVCorrConfig(flags, outputName="hvcorr", runOut=0, lbOut=0)