ATLAS Offline Software
Loading...
Searching...
No Matches
dumpNswErrorDb.py
Go to the documentation of this file.
1# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2import logging
3import json
4from itertools import product
6 from argparse import ArgumentParser
7
8 parser = ArgumentParser()
9 parser.add_argument("--outFilePreFix", help="Output JSON file",
10 default="NswUncerts")
11 parser.add_argument("--scaleError", help="Scale the uncertainties of the MM",type=float, default = 1. )
12 parser.add_argument("--addErrorMMClusterTime", help="add fixed error to the uncertainties of the MM",type=float, default = 0.)
13 return parser
14
15if __name__ == "__main__":
16 args = setupArgParser().parse_args()
17
18 dbEntriesMMASide = []
19 dbEntriesMMCSide = []
20
21 for stationName, stationEta, stationPhi, multilayer, gasGap, author in product([ "MMS", "MML"], [-2,-1,1,2], range(1,9), [1,2],range(1,5), [0,65,66]):
22
23 #CTP for MMG
24 if author == 66:
25 #----------Side A
26 if stationEta > 0:
27 if abs(stationEta) == 1:
28 constant = args.scaleError * 0.163
29 linear = args.scaleError * 0.0
30 quad = args.scaleError * 1.312
31 elif abs(stationEta) == 2:
32 constant = args.scaleError * 0.113
33 linear = args.scaleError * 0.0
34 quad = args.scaleError * 1.258
35 #constant = args.scaleError * 0.0475
36 #linear = args.scaleError * 0.0
37 #quad = args.scaleError * 1.796
38
39 #----------Side C
40 else:
41
42 if abs(stationEta) == 1:
43 constant = args.scaleError * 0.127
44 linear = args.scaleError * 0.0
45 quad = args.scaleError * 1.192
46 elif abs(stationEta) == 2 and stationName == "MML":
47 constant = args.scaleError * (-0.496)
48 linear = args.scaleError * 0.0
49 quad = args.scaleError * 4.086
50 elif abs(stationEta) == 2 and stationName == "MMS":
51 constant = args.scaleError * 0.319
52 linear = args.scaleError * 0.0
53 quad = args.scaleError * 0.117
54
55 else:
56 #Keep original values for centroid
57 constant = args.scaleError * 0.1796
58 linear = args.scaleError * 0.0
59 quad = args.scaleError * 1.9821
60
61
62 minStrip = 1
63 maxStrip = (5 if abs(stationEta)==1 else 3)*1024
64
65 calibEntry = dict({"station": stationName, "eta":stationEta, "phi": stationPhi, "multilayer": multilayer, "gasGap": gasGap, "minStrip": minStrip,"maxStrip": maxStrip, "modelName":"tanThetaPolynomial" ,"modelPars": [constant, linear, quad], "clusterAuthor": author})
66 logging.debug(calibEntry)
67 if(stationEta<0):
68 dbEntriesMMCSide.append(calibEntry)
69 else:
70 dbEntriesMMASide.append(calibEntry)
71
72
73# for stationName, stationEta, stationPhi, multilayer, gasGap, author in product([ "MMS", "MML"], [-2,-1,1,2], range(1,9), [1,2],range(1,5), [66]):
74# constant = args.scaleError* 0.0615 + args.addErrorMMClusterTime
75# linear = args.scaleError * 0
76# quad = args.scaleError * 0.275
77#
78# minStrip = 1
79# maxStrip = (5 if abs(stationEta)==1 else 3)*1024
80#
81# calibEntry = dict({"station": stationName, "eta":stationEta, "phi": stationPhi, "multilayer": multilayer, "gasGap": gasGap, "minStrip": minStrip,"maxStrip": maxStrip, "modelName":"tanThetaPolynomial" ,"modelPars": [constant, linear, quad], "clusterAuthor": author})
82# logging.debug(calibEntry)
83# if(stationEta<0):
84# dbEntriesMMCSide.append(calibEntry)
85# else:
86# dbEntriesMMCSide.append(calibEntry)
87
88
89 dbEntriessTGCASide = []
90 dbEntriessTGCCSide = []
91 maxStripStgc = dict({"QL1": 408 ,"QL2": 366,"QL3": 353,"QS1": 406, "QS2": 365, "QS3": 307})
92 for stationName, stationEta, stationPhi, multilayer, gasGap in product([ "STL", "STS"], [-3, -2,-1,1,2,3], range(1,9), [1,2],range(1,5)):
93 chamberKey = f"Q{stationName[2]}{abs(stationEta)}"
94 minStrip = 1
95 maxStrip = maxStripStgc[chamberKey]
96
97 if abs(stationEta) == 1:
98 const = args.scaleError * 0.261
99 linear = args.scaleError * 0
100 quad = args.scaleError * (-0.1949)
101 elif abs(stationEta) == 2:
102 const = args.scaleError * 0.228
103 linear = args.scaleError * 0
104 quad = args.scaleError * (0.0252)
105 elif abs(stationEta) == 3:
106 const = args.scaleError * 0.3158
107 linear = args.scaleError * 0
108 quad = args.scaleError * (-0.1223)
109
110 author = 3 # centroid
111 calibEntry = dict({"station": stationName, "eta":stationEta, "phi": stationPhi, "multilayer": multilayer, "gasGap": gasGap, "minStrip": minStrip,"maxStrip": maxStrip, "modelName":"tanThetaPolynomial" ,"modelPars": [const, linear, quad], "clusterAuthor": author})
112 logging.debug(calibEntry)
113 if(stationEta<0):
114 dbEntriessTGCCSide.append(calibEntry)
115 else:
116 dbEntriessTGCASide.append(calibEntry)
117
118# author = 4 #caruana
119# const = args.scaleError * 0.175
120# linear = args.scaleError * 0
121# quad = args.scaleError * 0.201
122# calibEntry = dict({"station": stationName, "eta":stationEta, "phi": stationPhi, "multilayer": multilayer, "gasGap": gasGap, "minStrip": minStrip,"maxStrip": maxStrip, "modelName": "tanThetaPolynomial" ,"modelPars": [const, linear, quad], "clusterAuthor": author})
123# logging.debug(calibEntry)
124# if(stationEta<0):
125# dbEntriessTGCCSide.append(calibEntry)
126# else:
127# dbEntriessTGCASide.append(calibEntry)
128
129
130 #Global json database for quick tests on reco
131 outFileName = f"{args.outFilePreFix}_scale_x{args.scaleError}_mmConstOffset_{args.addErrorMMClusterTime}.json"
132 with open(outFileName,'w') as outStream:
133 json.dump(dbEntriesMMASide + dbEntriesMMCSide +dbEntriessTGCASide + dbEntriessTGCCSide, outStream)
134
135 #Individual databases to be converted to cool
136# outFileName = f"{args.outFilePreFix}_MMonly_ASide_scale_x{args.scaleError}_mmConstOffset_{args.addErrorMMClusterTime}.json"
137# with open(outFileName,'w') as outStream:
138# json.dump(dbEntriesMMASide, outStream)
139#
140# outFileName = f"{args.outFilePreFix}_MMonly_CSide_scale_x{args.scaleError}_mmConstOffset_{args.addErrorMMClusterTime}.json"
141# with open(outFileName,'w') as outStream:
142# json.dump(dbEntriesMMCSide, outStream)
143#
144# outFileName = f"{args.outFilePreFix}_sTGConly_ASide_scale_x{args.scaleError}.json"
145# with open(outFileName,'w') as outStream:
146# json.dump(dbEntriessTGCASide, outStream)
147#
148# outFileName = f"{args.outFilePreFix}_sTGConly_CSide_scale_x{args.scaleError}.json"
149# with open(outFileName,'w') as outStream:
150# json.dump(dbEntriessTGCCSide, outStream)
if(febId1==febId2)