ATLAS Offline Software
Loading...
Searching...
No Matches
LArCalib_PhysWavePredictionConfig.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
4from AthenaConfiguration.ComponentFactory import CompFactory
5from AthenaConfiguration.MainServicesConfig import MainServicesCfg
6
8
9 #Get basic services and cond-algos
10 from LArCalibProcessing.LArCalibBaseConfig import LArCalibBaseCfg,chanSelStr
11 result=LArCalibBaseCfg(flags)
12
13 from LArCalibProcessing.utils import FolderTagResolver
14 FolderTagResolver._globalTag=flags.IOVDb.GlobalTag
15 if flags.LArCalib.isSC:
16 FolderTagResolver._defaultSuffix="-RUN2-UPD3-00"
17 rs=FolderTagResolver()
18 CaliWaveTag=rs.getFolderTag(flags.LArCalib.CaliWave.Folder)
19 DetCellParamsTag=rs.getFolderTag(flags.LArCalib.DetCellParams.Folder)
20 CaliPulseParamsTag=rs.getFolderTag(flags.LArCalib.CaliPulseParams.Folder)
21 MphysOverMcalTag=rs.getFolderTag(flags.LArCalib.MphysOverMcal.Folder)
22 PhysWaveTag=rs.getFolderTag(flags.LArCalib.PhysWave.Folder)
23 del rs #Close database
24
25 bcKey = "LArBadChannelSC" if flags.LArCalib.isSC else "LArBadChannel"
26
27 #Lots of special settings for HEC
28 isHEC= (flags.LArCalib.Input.SubDet == "HEC")
29
30 #"default" settings for CaliPulseParams (matter only for HEC)
31 #In reality, we use only the first TdriftVector (no double-triangle)
32 #copied from the old-cfg, mostly to maintain a record of the numbers.
33 HV = 2000
34 if ( HV == 2000 ):
35 TdriftVector = [ 420 , 469 , 469 , 469 ]
36 TdriftVector2 = [ 420 , 921 , 921 , 921 ]
37 TdriftWeight2 = [ 0. , 0.0672 , 0.0672 , 0.0672 ]
38 elif ( HV == 1600 ):
39 TdriftVector = [ 451.92 , 504.644 , 504.644 , 504.644 ]
40 TdriftVector2 = [ 451.92 , 990.996 , 990.996 , 990.996 ]
41 TdriftWeight2 = [ 0. , 0.0672 , 0.0672 , 0.0672 ]
42
43
44 #Retrieve inputs
45 from IOVDbSvc.IOVDbSvcConfig import addFolders
46 result.merge(addFolders(flags,flags.LArCalib.CaliWave.Folder,detDb=flags.LArCalib.Input.Database, tag=CaliWaveTag, modifiers=chanSelStr(flags)))
47 if flags.LArCalib.isSC:
48 result.merge(addFolders(flags,"/LAR/ElecCalibOflSC/Tdrift/Computed",detDb="LAR_OFL",tag="LARElecCalibOflSCTdriftComputed-000"))
49 result.merge(addFolders(flags,"/LAR/ElecCalibOflSC/PhysWaves/HECIdeal",detDb="LAR_OFL",tag="LARElecCalibOflSCPhysWavesHECIdeal-calib-02"))
50 # in case main readout shape should be used:
51 #result.merge(addFolders(flags,flags.LArCalib.FCALPhysWave.Folder,detDb="LAR_OFL",tag="LARElecCalibOflPhysWavesFCALFromTB-calib-01",modifiers="<key>FCALFromTB</key>"))
52 # otherwise:
53 result.merge(addFolders(flags,"/LAR/ElecCalibOflSC/PhysWaves/FCALmeasured",detDb="LAR_OFL",tag="LARElecCalibOflSCPhysWavesFCALmeasured-data-00",modifiers="<key>FCALFromData</key>"))
54 else:
55 result.merge(addFolders(flags,"/LAR/ElecCalibOfl/Tdrift/Computed",detDb="LAR_OFL",tag="LARElecCalibOflTdriftComputed-calib-03"))
56
57
58 if isHEC:
59 result.merge(addFolders(flags,"/LAR/ElecCalibOfl/PhysWaves/HECIdeal",detDb="LAR_OFL",tag="LARElecCalibOflPhysWavesHECIdeal-calib-02"))
60 if flags.LArCalib.isSC:
61 result.merge(addFolders(flags,flags.LArCalib.CaliPulseParams.Folder,detDb=flags.LArCalib.Input.Database, tag=CaliPulseParamsTag))
62 result.merge(addFolders(flags,flags.LArCalib.DetCellParams.Folder,detDb=flags.LArCalib.Input.Database, tag=DetCellParamsTag))
63 else:
64 result.merge(addFolders(flags,flags.LArCalib.CaliPulseParams.Folder,detDb="LAR_OFL", tag=CaliPulseParamsTag))
65 else:
66 result.merge(addFolders(flags,flags.LArCalib.CaliPulseParams.Folder,detDb=flags.LArCalib.Input.Database, tag=CaliPulseParamsTag))
67 result.merge(addFolders(flags,flags.LArCalib.DetCellParams.Folder,detDb=flags.LArCalib.Input.Database, tag=DetCellParamsTag))
68
69 LArPhysWavePredictor = CompFactory.LArPhysWavePredictor( "LArPhysWavePredictor" )
70 LArPhysWavePredictor.ProblemsToMask= ["deadCalib","deadReadout","deadPhys","almostDead","short"]
71 LArPhysWavePredictor.TestMode = False
72 LArPhysWavePredictor.isSC = flags.LArCalib.isSC
73 LArPhysWavePredictor.KeyCaliList = [ "LArCaliWave" ]
74 LArPhysWavePredictor.UseCaliPulseParamsFromJO = isHEC
75 LArPhysWavePredictor.UseDetCellParamsFromJO = isHEC
76 LArPhysWavePredictor.UseTdriftFromJO = isHEC
77 LArPhysWavePredictor.Tdrift = TdriftVector
78 LArPhysWavePredictor.UseDoubleTriangle = False
79 LArPhysWavePredictor.Tdrift2 = TdriftVector2
80 LArPhysWavePredictor.WeightTriangle2 = TdriftWeight2
81 LArPhysWavePredictor.UseTimeShiftFromJO = True
82 LArPhysWavePredictor.GroupingType = flags.LArCalib.GroupingType
83 LArPhysWavePredictor.NormalizeCali = not isHEC
84 LArPhysWavePredictor.KeyMphysMcali = "LArMphysOverMcal"
85 LArPhysWavePredictor.DumpMphysMcali = False # set to True to dump on a ASCII file
86 LArPhysWavePredictor.KeyPhys = "LArPhysWave"
87 LArPhysWavePredictor.isHEC = isHEC
88 LArPhysWavePredictor.BadChanKey = bcKey
89
90 if flags.LArCalib.isSC:
91 LArPhysWavePredictor.KeyFcal = "FCALFromData"
92
93 result.addEventAlgo(LArPhysWavePredictor)
94
95 if (flags.LArCalib.isSC or flags.LArCalib.Input.SubDet == "HEC"):
96 LArPhysWaveHECTool=CompFactory.LArPhysWaveHECTool("LArPhysWaveHECTool")
97 LArPhysWaveHECTool.NormalizeCali = False
98 LArPhysWaveHECTool.TimeOriginShift = False
99 LArPhysWaveHECTool.SubtractBaseline = False
100 LArPhysWaveHECTool.isSC = flags.LArCalib.isSC
101 result.addPublicTool(LArPhysWaveHECTool)
102
103
104 if flags.LArCalib.isSC or flags.LArCalib.Input.SubDet != "HEC":
105 LArPhysWaveTool=CompFactory.LArPhysWaveTool("LArPhysWaveTool")
106 LArPhysWaveTool.NormalizeCali = False # this is taken care by LArPhysWavePredictor
107 LArPhysWaveTool.TimeOriginShift = False
108 LArPhysWaveTool.SubtractBaseline = False
109 LArPhysWaveTool.InjPointCorrLayer = [ 1, 1, 1, 1 ]
110 LArPhysWaveTool.InjPointUseTauR = [ 1, 1, 1, 1 ]
111 result.addPublicTool(LArPhysWaveTool)
112
113
114 rootfile=flags.LArCalib.Output.ROOTFile
115 if rootfile != "":
116 LArPhysWaves2Ntuple = CompFactory.LArPhysWaves2Ntuple("LArPhysWaves2Ntuple")
117 LArPhysWaves2Ntuple.NtupleName = "PHYSWAVE"
118 LArPhysWaves2Ntuple.AddFEBTempInfo = False
119 LArPhysWaves2Ntuple.KeyList = [ "LArPhysWave" ]
120 LArPhysWaves2Ntuple.isSC = flags.LArCalib.isSC
121 LArPhysWaves2Ntuple.AddCalib = True
122 LArPhysWaves2Ntuple.BadChanKey = bcKey
123 result.addEventAlgo(LArPhysWaves2Ntuple)
124
125 LArMphysOverMcal2Ntuple = CompFactory.LArMphysOverMcal2Ntuple( "LArMphysOverMcal2Ntuple" )
126 LArMphysOverMcal2Ntuple.ContainerKey = "LArMphysOverMcal"
127 LArMphysOverMcal2Ntuple.AddFEBTempInfo = False
128 LArMphysOverMcal2Ntuple.isSC = flags.LArCalib.isSC
129 LArMphysOverMcal2Ntuple.BadChanKey = bcKey
130 result.addEventAlgo(LArMphysOverMcal2Ntuple)
131
132 import os
133 if os.path.exists(rootfile):
134 os.remove(rootfile)
135 result.addService(CompFactory.NTupleSvc(Output = [ "FILE1 DATAFILE='"+rootfile+"' OPT='NEW'" ]))
136 result.setAppProperty("HistogramPersistency","ROOT")
137 pass # end if ROOT ntuple writing
138
139
140 from RegistrationServices.OutputConditionsAlgConfig import OutputConditionsAlgCfg
141 result.merge(OutputConditionsAlgCfg(flags,
142 outputFile=flags.LArCalib.Output.POOLFile,
143 ObjectList=["LArPhysWaveContainer#LArPhysWave#"+flags.LArCalib.PhysWave.Folder,
144 "LArMphysOverMcalComplete#LArMphysOverMcal#"+flags.LArCalib.MphysOverMcal.Folder,],
145 IOVTagList=[PhysWaveTag,MphysOverMcalTag],
146 Run1=flags.LArCalib.IOVStart,
147 Run2=flags.LArCalib.IOVEnd
148 ))
149
150 #RegistrationSvc
151 result.addService(CompFactory.IOVRegistrationSvc(RecreateFolders = False))
152 result.getService("IOVDbSvc").DBInstance=""
153
154 #MC Event selector since we have no input data file
155 from McEventSelector.McEventSelectorConfig import McEventSelectorCfg
156 result.merge(McEventSelectorCfg(flags,
157 RunNumber = flags.LArCalib.Input.RunNumbers[0],
158 EventsPerRun = 1,
159 FirstEvent = 1,
160 InitialTimeStamp = 0,
161 TimeStampInterval = 1))
162
163 from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
164 result.merge(PerfMonMTSvcCfg(flags))
165
166 return result
167
168
169
170if __name__ == "__main__":
171
172 import sys
173 from AthenaConfiguration.AllConfigFlags import initConfigFlags
174 ConfigFlags=initConfigFlags()
175 from LArCalibProcessing.LArCalibConfigFlags import addLArCalibFlags
176 addLArCalibFlags(ConfigFlags)
177
178 ConfigFlags.Input.Files=[]
179 ConfigFlags.LArCalib.Input.RunNumbers=[401351,]
180 ConfigFlags.LArCalib.Input.Database="/home/wlampl/calibTest/00400939_00400943_00400945_Barrel-EMB-EMEC_HIGH_40_21.0.20_1/poolFiles/myDB200_00400939_00400943_00400945_EB-EMBA_one.db_Delay"
181 ConfigFlags.LArCalib.Input.SubDet="EM"
182 ConfigFlags.LArCalib.BadChannelDB="/home/wlampl/calibTest/00400939_00400943_00400945_Barrel-EMB-EMEC_HIGH_40_21.0.20_1/poolFiles/SnapshotBadChannel_00400939_00400943_00400945_EB-EMBA.db"
183 ConfigFlags.LArCalib.BadChannelTag="-RUN2-UPD3-00"
184 ConfigFlags.LArCalib.Output.ROOTFile="physwave.root"
185 ConfigFlags.IOVDb.DatabaseInstance="CONDBR2"
186 ConfigFlags.IOVDb.DBConnection="sqlite://;schema=output.sqlite;dbname=CONDBR2"
187 ConfigFlags.IOVDb.GlobalTag="LARCALIB-RUN2-02"
188 from AthenaConfiguration.TestDefaults import defaultGeometryTags
189 ConfigFlags.GeoModel.AtlasVersion=defaultGeometryTags.RUN3
190 ConfigFlags.IOVDb.DatabaseInstance="CONDBR2"
191 ConfigFlags.LAr.doAlign=False
192 ConfigFlags.Input.RunNumbers=ConfigFlags.LArCalib.Input.RunNumbers
193
194 #ConfigFlags.Exec.OutputLevel=1
195 ConfigFlags.fillFromArgs()
196 ConfigFlags.lock()
197 cfg=MainServicesCfg(ConfigFlags)
198 cfg.merge(LArPhysWavePredictionCfg(ConfigFlags))
199
200 print("Start running...")
201 sys.exit(cfg.run(1).isFailure())
202
void print(char *figname, TCanvas *c1)