petal-qc 0.0.19__py3-none-any.whl → 0.0.21__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of petal-qc might be problematic. Click here for more details.

@@ -112,9 +112,9 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
112
112
  self.create_test_box("Visual Inspection", "VISUAL_INSPECTION")
113
113
  self.create_test_box("Grounding", "GROUNDING_CHECK")
114
114
  self.create_test_box("Pipe bending", "BENDING120")
115
+ self.create_test_box("Delamination", "DELAMINATION")
115
116
  self.create_test_box("Weight", "PETAL_CORE_WEIGHT")
116
- self.create_test_box("Bot. loc. Diam", "PETAL_CORE_LOC_DIAM")
117
- self.create_test_box("Slot loc. Diam", "PETAL_CORE_SLOT_DIAM")
117
+ self.create_test_box("Metrology Template", "METROLOGY_TEMPLATE")
118
118
  self.create_test_box("X-rays", "XRAYIMAGING")
119
119
 
120
120
 
petal_qc/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
1
  """petal_qc python module."""
2
- __version__ = "0.0.19"
2
+ __version__ = "0.0.21"
3
3
 
4
4
 
5
5
  def coreMetrology():
@@ -3,6 +3,7 @@
3
3
  import json
4
4
  import sys
5
5
  import re
6
+ import copy
6
7
  from argparse import ArgumentParser
7
8
 
8
9
 
@@ -42,10 +43,35 @@ def petalCoreTest(session, options):
42
43
  suff = options.institute
43
44
 
44
45
  core_list = session.get("listComponents", json=payload)
45
- core_tests = ["PETAL_METROLOGY_FRONT", "PETAL_METROLOGY_BACK", "XRAYIMAGING", "THERMAL_EVALUATION", "BTTESTING"]
46
+
47
+ # We want details about these tests
48
+ core_tests = [
49
+ "PETAL_METROLOGY_FRONT",
50
+ "PETAL_METROLOGY_BACK",
51
+ "XRAYIMAGING",
52
+ "THERMAL_EVALUATION",
53
+ "BTTESTING",
54
+ "METROLOGY_TEMPLATE",
55
+ "PETAL_CORE_WEIGHT"
56
+ ]
57
+
58
+ # this is the full list
59
+ at_qc_tests = [
60
+ "VISUAL_INSPECTION",
61
+ "BTTESTING",
62
+ "GROUNDING_CHECK",
63
+ "BENDING120",
64
+ "THERMAL_EVALUATION",
65
+ "XRAYIMAGING",
66
+ "METROLOGY_TEMPLATE",
67
+ "PETAL_METROLOGY_FRONT",
68
+ "PETAL_METROLOGY_BACK",
69
+ "PETAL_CORE_WEIGHT",
70
+ "DELAMINATION",
71
+ ]
46
72
 
47
73
  do_check_stage = "AT_QC_SITE"
48
- #do_check_stage = None
74
+ # do_check_stage = None
49
75
  petal_id_db = {}
50
76
 
51
77
  has_list = len(options.cores) != 0
@@ -76,19 +102,29 @@ def petalCoreTest(session, options):
76
102
  return False
77
103
 
78
104
  print("\n\nPetal {} [{}] - {}. {}".format(SN, altid, coreStage, location))
79
-
80
- test_list = session.get("listTestRunsByComponent", json={"filterMap":{"serialNumber": SN, "state": "ready", "testType":core_tests}})
81
-
105
+ test_status = {}
106
+ test_list = session.get("listTestRunsByComponent", json={"filterMap":{"serialNumber": SN, "state": "ready", "stage": "AT_QC_SITE", "testType":at_qc_tests}})
107
+ missing_tests = copy.deepcopy(at_qc_tests)
82
108
  for tst in test_list:
83
109
  ttype = tst["testType"]["code"]
84
- if ttype not in core_tests:
85
- print(ttype)
86
- continue
110
+ if ttype in missing_tests:
111
+ missing_tests.remove(ttype)
112
+
113
+ #if ttype not in core_tests:
114
+ # print(ttype)
115
+ # continue
87
116
 
88
117
  T = session.get("getTestRun", json={"testRun": tst["id"]})
89
118
  if T["state"] != "ready":
90
119
  print(T)
91
120
 
121
+
122
+ if ttype in test_status:
123
+ if int(T["runNumber"]) > int(test_status[ttype]["runNumber"]):
124
+ test_status[ttype] = T
125
+ else:
126
+ test_status[ttype] = T
127
+
92
128
  print("-- {} [{}]".format(T["testType"]["name"], T["runNumber"]))
93
129
  if not T["passed"]:
94
130
  print("\t## test FAILED")
@@ -96,12 +132,29 @@ def petalCoreTest(session, options):
96
132
  for D in T["defects"]:
97
133
  print("\t{} - {}".format(D["name"], D["description"]))
98
134
 
135
+ passed = True
136
+ for ttype, T in test_status.items():
137
+ if not T["passed"]:
138
+ passed = False
139
+ break
140
+
141
+ if passed:
142
+ print("\n--- PASSED")
143
+ else:
144
+ print("\n*** FILED")
145
+
146
+ if options.show_missing:
147
+ print("missing tests:")
148
+ for tst in missing_tests:
149
+ print("-- {}".format(tst))
150
+
99
151
  with open("petal_ID_db_{}.json".format(suff), "w", encoding="utf-8") as fOut:
100
152
  json.dump(petal_id_db, fOut, indent=3)
101
153
 
102
154
  def main():
103
155
  """Main entry"""
104
156
  parser = ArgumentParser()
157
+ parser.add_argument("--show_missing", default=False, action="store_true", help="Show missing tests.")
105
158
  parser.add_argument("--institute", default=None, help="The petal current location")
106
159
  parser.add_argument("--cores", dest="cores", action=RangeListAction, default=[],
107
160
  help="Create list of cores to analyze. The list is made with numbers or ranges (ch1:ch2 or ch1:ch2:step) ")
@@ -121,4 +174,3 @@ def main():
121
174
 
122
175
  if __name__ == "__main__":
123
176
  main()
124
-
@@ -24,10 +24,10 @@ from petal_qc.utils.Geometry import fit_plane
24
24
  from petal_qc.utils.Geometry import flatness_conhull, flatness_LSPL
25
25
  from petal_qc.utils.Geometry import project_to_plane
26
26
 
27
- from .analyze_locking_points import analyze_locking_point_data, locking_point_positions
28
- from .analyze_locking_points import remove_outliers
29
- from .Cluster import cluster_points
30
- from .show_data_file import show_data, TOP_VIEW
27
+ from petal_qc.metrology.analyze_locking_points import analyze_locking_point_data, locking_point_positions
28
+ from petal_qc.metrology.analyze_locking_points import remove_outliers
29
+ from petal_qc.metrology.Cluster import cluster_points
30
+ from petal_qc.metrology.show_data_file import show_data, TOP_VIEW
31
31
 
32
32
  figure_width = 14
33
33
 
@@ -132,7 +132,7 @@ def petal_flatness(orig_data, options, document=None):
132
132
 
133
133
  # group points by sensors.
134
134
  sensor_dict = {0: "R0", 10: "R1", 20: "R2", 30: "R3_0", 31: "R3_1", 40: "R4_0", 41: "R4_1", 50: "R5_0", 51: "R5_1"}
135
- sensors, *_ = group_by_sensors(M, options.is_front, False)
135
+ sensors, *_ = group_by_sensors(M, options.is_front, True)
136
136
  all_data = np.vstack(list(sensors.values()))
137
137
 
138
138
  fig = show_data(all_data, "All points in core", view=TOP_VIEW, surf=False)
@@ -257,7 +257,7 @@ def get_iring(P, is_front):
257
257
  return -1
258
258
 
259
259
 
260
- def group_by_sensors(Min, is_front=True, remove_outliers=False):
260
+ def group_by_sensors(Min, is_front=True, no_outliers=False):
261
261
  """Groups data points by sensors."""
262
262
  # Now move in Y to be on the ATLAS reference
263
263
  M = np.array(Min)
@@ -275,10 +275,11 @@ def group_by_sensors(Min, is_front=True, remove_outliers=False):
275
275
  else:
276
276
  sensors.setdefault(iring, []).append(P)
277
277
 
278
- if remove_outliers:
278
+ if no_outliers:
279
279
  for key, val in sensors.items():
280
- if remove_outliers:
281
- sensors[key] = remove_outliers(sensors[key][:, 2], 0.075)
280
+ points = np.vstack(val)
281
+ indx = remove_outliers(points[:, 2])
282
+ sensors[key] = points[indx, :]
282
283
 
283
284
  return sensors, np.array(other)
284
285
 
@@ -323,10 +323,10 @@ if __name__ == "__main__":
323
323
  parser.add_argument("--cores", dest="cores", action=RangeListAction, default=[],
324
324
  help="Create list of cores to analyze. The list is made with numbers or ranges (ch1:ch2 or ch1:ch2:step) ")
325
325
 
326
-
326
+ opts = parser.parse_args()
327
327
  dlg = ITkDBlogin.ITkDBlogin()
328
328
  session = dlg.get_client()
329
329
 
330
- main(session, options)
330
+ main(session, opts)
331
331
 
332
332
  dlg.die()
@@ -6,17 +6,43 @@ from pathlib import Path
6
6
  import json
7
7
 
8
8
 
9
+ try:
10
+ import petal_qc
11
+
12
+ except ImportError:
13
+ cwd = Path(__file__).parent.parent
14
+ sys.path.append(cwd.as_posix())
15
+
16
+ from petal_qc.utils.ArgParserUtils import RangeListAction
17
+ from petal_qc.utils.all_files import all_files
18
+
19
+
9
20
 
10
21
  def main(options):
11
22
  """main entry."""
12
23
  petal_cores = {}
13
- for fnam in options.files:
14
- ifile = Path(fnam).expanduser().resolve()
15
- with open(ifile, "r", encoding="utf-8") as fin:
24
+ for fpath in options.files:
25
+ fnam = str(fpath)
26
+ if "PPC." not in fnam:
27
+ continue
28
+
29
+ ipos = fnam.find("PPC")
30
+ lpos = fnam[ipos:].find("-")
31
+ petal_id = fnam[ipos:ipos+lpos]
32
+ pid = int(petal_id[4:])
33
+
34
+ if len(options.cores)>0 and pid not in options.cores:
35
+ continue
36
+
37
+ with open(fpath, "r", encoding="utf-8") as fin:
16
38
  data = json.load(fin)
17
39
 
18
40
  if not data["passed"]:
19
- petalId = data["component"]
41
+ if data["component"] is None:
42
+ print("Petal {} has bad Serial number".format(petal_id))
43
+ continue
44
+
45
+ petalId = "{}-{}".format(petal_id, data["component"])
20
46
  if petalId not in petal_cores:
21
47
  petal_cores[petalId] = {"FRONT": [], "BACK": []}
22
48
 
@@ -40,12 +66,15 @@ def main(options):
40
66
  if __name__ == "__main__":
41
67
  parser = argparse.ArgumentParser()
42
68
  parser.add_argument('files', nargs='*', help="Input files")
69
+ parser.add_argument("--cores", dest="cores", action=RangeListAction, default=[],
70
+ help="Create list of cores to analyze. The list is made with numbers or ranges (ch1:ch2 or ch1:ch2:step) ")
43
71
  opts = parser.parse_args()
44
72
 
45
- from petal_qc.utils.all_files import all_files
46
73
 
74
+ folder = Path("/tmp/petal-metrology/results")
75
+ # folder = Path("~/tmp/petal-metrology/Production/Results").expanduser()
47
76
  opts.files = []
48
- for fnam in all_files(Path("~/tmp/petal-metrology/Production/Results").expanduser(), "*.json"):
77
+ for fnam in all_files(folder, "*.json"):
49
78
  opts.files.append(fnam)
50
79
 
51
80
  main(opts)
@@ -51,6 +51,7 @@ class IRDataGetter(object):
51
51
 
52
52
  def fine_tune_params(self, param):
53
53
  """Set default values for the parameters."""
54
+ param.sensor_max = -5
54
55
  return
55
56
 
56
57
  def get_IR_data(self, image, **kargs):
@@ -298,6 +299,7 @@ class IRDataDESY(IRDataGetter):
298
299
  """Set default values for the parameters."""
299
300
  param.distance = 16
300
301
  param.width = 16
302
+ param.sensor_max = -5
301
303
 
302
304
  def get_IR_data(self, image, **kargs):
303
305
  """Get the data from the image in the proper orientation.
@@ -1,5 +1,5 @@
1
1
  """Parameters needed for the thermal analysis of the petal."""
2
-
2
+ import sys
3
3
 
4
4
  class IRPetalParam(object):
5
5
  """Default values for IR image handling."""
@@ -30,6 +30,9 @@ class IRPetalParam(object):
30
30
  self.graphana = None # Graphana server
31
31
  self.save_pipes = False # If true save pipe path
32
32
  self.legend = True # if false do not plot legend
33
+ self.sensor_min = -sys.float_info.max # cut on lower temp for sensor contour average
34
+ self.sensor_max = sys.float_info.max # cut on higher temp for sensor contour average
35
+
33
36
 
34
37
  if values is not None:
35
38
  self.set_values(values)
@@ -79,4 +82,5 @@ class IRPetalParam(object):
79
82
  parser.add_argument("--report", action="store_true", default=False, help="True if figures kept for the report.")
80
83
  parser.add_argument("--save_pipes", default=False, action="store_true", help="SAve pipe path. Output is alias_pipe-i.txt")
81
84
  parser.add_argument("--no-legend", dest="legend", action="store_false", default=True, help="Do not show the legend in plots.")
82
-
85
+ parser.add_argument("--sensor_min", dest="sensor_min", default=P.sensor_min, help="cut on lower temp for sensor contour average")
86
+ parser.add_argument("--sensor_max", dest="sensor_max", default=P.sensor_max, help="cut on higher temp for sensor contour average")
@@ -88,7 +88,7 @@ def analyze_IR_image(img, pipe, sensors, iside, params) -> AnalysisResult:
88
88
  Savg = []
89
89
  Sstd = []
90
90
  for S in sensors:
91
- avg, std = contours.get_average_in_contour(img, S)
91
+ avg, std = contours.get_average_in_contour(img, S, tmin=params.sensor_min, tmax=params.sensor_max)
92
92
  Savg.append(avg)
93
93
  Sstd.append(std)
94
94
 
@@ -8,6 +8,8 @@ import random
8
8
  import sys
9
9
 
10
10
  import matplotlib.path as mplPath
11
+ import matplotlib.pyplot as plt
12
+
11
13
  import numpy as np
12
14
 
13
15
  from petal_qc.utils.Geometry import Point, remove_outliers_indx
@@ -258,8 +260,46 @@ def in_contour(x, y, C):
258
260
  path = mplPath.Path(C)
259
261
  return path.contains_point(x, y, C)
260
262
 
263
+ def show_contour_values(img, C):
264
+ """Creates an image of the contour values.
265
+
266
+ Args:
267
+ ----
268
+ img: The image
269
+ C: The contour
270
+
271
+
272
+ """
273
+ values = []
274
+ path = mplPath.Path(C)
275
+ my, mx = img.shape
276
+ min_x, min_y, max_x, max_y = contour_bounds(C)
277
+ imin_x = int(min_x)
278
+ imin_y = int(min_y)
279
+ chst = np.zeros([int(max_y-min_y+2), int(max_x-min_x+2)])
280
+ for ix in range(int(min_x), int(max_x+1)):
281
+ if ix < 0 or ix >= mx:
282
+ continue
283
+
284
+ for iy in range(int(min_y), int(max_y)+1):
285
+ if iy < 0 or iy >= my:
286
+ continue
287
+
288
+ if path.contains_point([ix, iy]):
289
+ chst[iy-imin_y, ix-imin_x] = img[iy, ix]
290
+ values.append(img[iy, ix])
291
+
292
+ values = np.array(values)
293
+ mean = np.mean(values)
294
+ std = np.std(values)
261
295
 
262
- def get_average_in_contour(img, C, remove_outliers=None):
296
+ fig, ax = plt.subplots(nrows=1,ncols=2)
297
+ ax[0].hist(values, 25, range=(mean-3*std, mean+3*std))
298
+ pcm = ax[1].imshow(chst, origin='lower', vmin=mean-3*std, vmax=mean+3*std)
299
+ fig.colorbar(pcm, ax=ax[1])
300
+
301
+
302
+ def get_average_in_contour(img, C, tmin=sys.float_info.min, tmax=sys.float_info.max, remove_outliers=None):
263
303
  """Gets average and std of points within contour.
264
304
 
265
305
  We are assuming here that coordinates are integers, ie,
@@ -269,7 +309,8 @@ def get_average_in_contour(img, C, remove_outliers=None):
269
309
  ----
270
310
  img: The image
271
311
  C: The contour
272
- remove_outliers: If an int,
312
+ tmin, tmax: only values in range [tmin, tmax] will be considered
313
+ remove_outliers: If an int,
273
314
 
274
315
  Returns
275
316
  -------
@@ -289,7 +330,9 @@ def get_average_in_contour(img, C, remove_outliers=None):
289
330
  continue
290
331
 
291
332
  if path.contains_point([ix, iy]):
292
- values.append(img[iy, ix])
333
+ val = img[iy, ix]
334
+ if val > tmin and val < tmax:
335
+ values.append(val)
293
336
 
294
337
  values = np.array(values)
295
338
  if remove_outliers is not None and isinstance(remove_outliers, (int, float)):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: petal_qc
3
- Version: 0.0.19
3
+ Version: 0.0.21
4
4
  Summary: A collection of scripts for Petal CORE QC.
5
5
  Author-email: Carlos Lacasta <carlos.lacasta@cern.ch>
6
6
  Project-URL: Homepage, https://gitlab.cern.ch/atlas-itk/sw/db/itk-pdb-gtk-gui-utils
@@ -1,7 +1,7 @@
1
- petal_qc/PetalReceptionTests.py,sha256=cSrq4PUjdV7T16ARonhsnXWPBBRuvliTKlZwEPfgRVY,10832
2
- petal_qc/__init__.py,sha256=lyJtmxO016y5gjORoAZhL6k14_G8Q_sAFhTvxOZYrsc,1595
1
+ petal_qc/PetalReceptionTests.py,sha256=xFFqh_TYVXOWP0H1Q4I8V8sP8p8_w5tCCrhtENN7yvM,10825
2
+ petal_qc/__init__.py,sha256=J6xF3JrSVAdwmg2ezs6nGmQ_uRs4vyV86I9VNZOC3kU,1595
3
3
  petal_qc/dashBoard.py,sha256=U_UHNMca3H2ogD4a0Vpe4ZVUKEv2-xmGZQEZ9_aH0E4,4034
4
- petal_qc/getPetalCoreTestSummary.py,sha256=hTv4A8gcEkvCZLcy9ZkpwOevksz6LfK1Rb1-4ENlC7I,3706
4
+ petal_qc/getPetalCoreTestSummary.py,sha256=obHSMwdFc6Y51TaFxb1Gj5s0mfgVWZljUTz83Lt8T5w,5130
5
5
  petal_qc/BTreport/CheckBTtests.py,sha256=CoKTnW_7gbL42rVaBy9FnH1SEYifmgg1P5Iy253vDFk,9855
6
6
  petal_qc/BTreport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  petal_qc/BTreport/bustapeReport.py,sha256=M0EZQEh8G-65p6-gCOyZ0WlvnRbzQHXPwAWta9ZExnQ,6907
@@ -21,7 +21,7 @@ petal_qc/metrology/data2csv.py,sha256=2ttMSmfGLPIaOqZGima2dH6sdnSRAFTHlEbSOfW5eb
21
21
  petal_qc/metrology/do_Metrology.py,sha256=wA3fKJrdDLGYd0lEi8uSP9uRwQeS59nX6F4VtNnm9LM,4356
22
22
  petal_qc/metrology/flatness4nigel.py,sha256=SUHwn6pCEUWQV_62-_9-VKrmUdL4gVQcSA3aTtYq958,4071
23
23
  petal_qc/metrology/gtkutils.py,sha256=1pOTxiE2EZR9zNNNT5cOetga_4NG9DzLaqQPI4c1EzE,3372
24
- petal_qc/metrology/petal_flatness.py,sha256=KksOFO_ZrKM4nUDHRC-3mSm1tp5C7wkE_6f9ZiH9B70,10610
24
+ petal_qc/metrology/petal_flatness.py,sha256=f8UqAmwbSkOngFbwekeGq6cX5flSkd7JNhCYRIn39LE,10695
25
25
  petal_qc/metrology/readAVSdata.py,sha256=6GRUac9b3iOoVoGfWr6rsNj1smsw9aT0tu5wuNuumAE,25615
26
26
  petal_qc/metrology/show_data_file.py,sha256=yZPcmMy-1EWWySiBBx0hNB3tPVh19bTr0PDaXSyIF4c,4057
27
27
  petal_qc/metrology/testSummary.py,sha256=0BhcEd1BPz2Mbonzi8nyZOzNSzpUqowBFNl5cVutqsk,994
@@ -36,10 +36,10 @@ petal_qc/test/createMetrologyTable.py,sha256=Dh9Mwab5geyojigVCS5mKba1EJU-4K1-ELD
36
36
  petal_qc/test/desyModuleBow.py,sha256=4RgDIVEMqzlGUVqKCjji95_JzfXtcgjK4kefKrVH9eY,3602
37
37
  petal_qc/test/findRawData.py,sha256=8wqvPILjfZZ0CKkDhOa_tcsYMwNwcKOLyaEoWfISBQY,2872
38
38
  petal_qc/test/getAVSjson.py,sha256=o8AYtyr7Vnp-enznmQ-NNiivZipmxtoVrmsfnRCl0X4,977
39
- petal_qc/test/getAVStests.py,sha256=GNqEpncUQdvo-qSf46ltGVeezSnHB2BQsKjApS6xomY,10285
39
+ petal_qc/test/getAVStests.py,sha256=MsphZFxiPLCo6gf1ZTQ5Sy415rF35NgvF13OGagunV0,10308
40
40
  petal_qc/test/listPetalCoreComponents.py,sha256=7U9wokRkgeZdYZKeZdAadA32BlhVK6okInuh94hmj24,2502
41
41
  petal_qc/test/prepareDESYfiles.py,sha256=uRir2fv0oGqB6hKnIqRltDW-oLz1tR2SDvVkMVxCfKI,4106
42
- petal_qc/test/reportFromJSon.py,sha256=3YTuWeeVtw5pITloLlwEYbx84f6k9XC_jTBK53I4mLM,1456
42
+ petal_qc/test/reportFromJSon.py,sha256=WKb6M_TDvQV7XzaJgElQNORXBiu31zJNp45ulNSl7kk,2367
43
43
  petal_qc/test/test_Graphana.py,sha256=4wADxS_ObG9n4vsCvD1GwPQnx8bFUiUOS6ZwK83wTl8,1082
44
44
  petal_qc/test/test_coreThermal.py,sha256=YRPK3DGG7Tz66K4Kka3euXgUDzW_JlIqSYicMBhb96E,1516
45
45
  petal_qc/thermal/CSVImage.py,sha256=Vt2kYmUsZWkQvxcF8fDda3HO1Rb29kPQHnEoHFCqWYo,2038
@@ -47,15 +47,15 @@ petal_qc/thermal/DESYdata.py,sha256=YAwxhnmA89uH1vZ_BjDo0VLATTGRngoBSFzYfLSJbZU,
47
47
  petal_qc/thermal/DebugPlot.py,sha256=OmREFwNDAKgoObDmcgHrB4d8m3bf2znfsKVGsb5rBGQ,2119
48
48
  petal_qc/thermal/IRBFile.py,sha256=_no8iUyuSQ41j34o3LVzUCjMYoviwjz02tsWvFsTUzA,23462
49
49
  petal_qc/thermal/IRCore.py,sha256=sidf7HtrzEUcllv0E_o1Hks-2_2dl4Og_LWcwgPNRcE,3062
50
- petal_qc/thermal/IRDataGetter.py,sha256=S-Xaizrop_xQ2pgkvuw_HdKbrsDD84KThwgTfjRg0bQ,11579
50
+ petal_qc/thermal/IRDataGetter.py,sha256=px9nFTuDPuwaSkhfA3wT52_3UhwVdD1BtB494poqIp4,11639
51
51
  petal_qc/thermal/IRPetal.py,sha256=hVOD0VAKTA2xvNXbZ-TXAYHNlihNWsUkI2i9IEwQhZk,40887
52
- petal_qc/thermal/IRPetalParam.py,sha256=PDf-IRB9Yz2PALNi5UdvammfRAJOzyaM0UlV1xbp_IU,4207
52
+ petal_qc/thermal/IRPetalParam.py,sha256=u-1tUxjWnLYr7mbdKEtnMssJep-AS7e7HCaUGwu99C8,4682
53
53
  petal_qc/thermal/PetalColorMaps.py,sha256=6CvJHzRdojLHu3BROYSekHw8g_BJ1lJ_edyhovTIydU,3831
54
- petal_qc/thermal/Petal_IR_Analysis.py,sha256=ALIER9fLn2R26IMhPVzEDL6tlK7XNbCtRtH0y6kTaEU,3950
54
+ petal_qc/thermal/Petal_IR_Analysis.py,sha256=BrTii0GZ6KsNM65JUpfRNgOjsR1b2vFJUf0AyskTe3g,3998
55
55
  petal_qc/thermal/PipeFit.py,sha256=8nEjpZC1mWh4-bhXzwXfjO8WkC_6hFYX0XXPjTHwNUw,18345
56
56
  petal_qc/thermal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  petal_qc/thermal/analyze_IRCore.py,sha256=-MsKGJR-5pJV93ipLau0FHQeconLhMPDuLQIT9LMWsU,21115
58
- petal_qc/thermal/contours.py,sha256=Bx4ghZhgZ4ya1rr4CZvjpqZd9M924Vms1oEGrgllWG4,8591
58
+ petal_qc/thermal/contours.py,sha256=l8eZOvOhJ50cpJZ2ZPOZ-yjsg3ByQAZ0BPUajag0MwU,9862
59
59
  petal_qc/thermal/coreThermal.py,sha256=lBPyBm3Fo5uXBw6AIpzTY4Ku238Gr9lwm36Iihfbqp0,16203
60
60
  petal_qc/thermal/create_IRCore.py,sha256=s3X-NBc6KdkqOG7kAcG5ldyTRSuommxIruzMFMu8CjQ,9183
61
61
  petal_qc/thermal/create_core_report.py,sha256=32F7u7ffnLmGX5J_YP2oa8O_pI0euh9z3p0CTpA3-WM,6135
@@ -72,8 +72,8 @@ petal_qc/utils/docx_utils.py,sha256=zVmSKHDVE8cUwbXxqyPtgS0z62VCFya1DWklOpO1rCQ,
72
72
  petal_qc/utils/fit_utils.py,sha256=3KUGWpBMV-bVDkQHWBigXot8chOpjAVBJ5H5b5dbdjk,5349
73
73
  petal_qc/utils/readGraphana.py,sha256=YVOztJC3q3P7F0I9Ggeiu6Mv9rZLKgj3clkLCU7k4i4,1918
74
74
  petal_qc/utils/utils.py,sha256=CqCsNIcEg6FQb3DN70tmqeLVLlQqsRfDzhfGevlnfBc,4035
75
- petal_qc-0.0.19.dist-info/METADATA,sha256=APlvpqVgGnSabKIK89z6KHFwbUZIWZi4mckoVETXxrc,953
76
- petal_qc-0.0.19.dist-info/WHEEL,sha256=DK49LOLCYiurdXXOXwGJm6U4DkHkg4lcxjhqwRa0CP4,91
77
- petal_qc-0.0.19.dist-info/entry_points.txt,sha256=YPrZOsRBRsiKNDvsnbug0-Khj7DcN_Sdpq-tB_XjykI,505
78
- petal_qc-0.0.19.dist-info/top_level.txt,sha256=CCo1Xe6kLS79PruhsB6bk2CuL9VFtNdNpgJjYUs4jk4,9
79
- petal_qc-0.0.19.dist-info/RECORD,,
75
+ petal_qc-0.0.21.dist-info/METADATA,sha256=DcO69dmOdXq0CtsnCIJSVpdkLy5lwtZKRKktWBxCv2k,953
76
+ petal_qc-0.0.21.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
77
+ petal_qc-0.0.21.dist-info/entry_points.txt,sha256=YPrZOsRBRsiKNDvsnbug0-Khj7DcN_Sdpq-tB_XjykI,505
78
+ petal_qc-0.0.21.dist-info/top_level.txt,sha256=CCo1Xe6kLS79PruhsB6bk2CuL9VFtNdNpgJjYUs4jk4,9
79
+ petal_qc-0.0.21.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.0.2)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5