ATLAS Offline Software
dumpNswErrorDb.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2 import logging
3 import json
4 from 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 
15 if __name__ == "__main__":
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)
dumpNswErrorDb.setupArgParser
def setupArgParser()
Definition: dumpNswErrorDb.py:5
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
Trk::open
@ open
Definition: BinningType.h:40
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
confTool.parse_args
def parse_args()
Definition: confTool.py:36