petal-qc 0.0.20__py3-none-any.whl → 0.0.22__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.

@@ -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
 
@@ -357,7 +357,7 @@ class PipeFit(object):
357
357
  dst, P = contours.find_closest_point(X[0], X[1], self.cpipe)
358
358
  D[i, :] = P - X
359
359
  ddd[i] = dst
360
- W = 1 + 1.6*(y_max - X[1])/height
360
+ W = 1 + 2*(y_max - X[1])/height
361
361
  weights[i] = W
362
362
  sum_weights += W
363
363
 
@@ -369,7 +369,7 @@ class PipeFit(object):
369
369
  res = np.dot(ddd, weights)/sum_weights
370
370
 
371
371
  if self.debug:
372
- dbg_ax. clear()
372
+ dbg_ax.clear()
373
373
  dbg_ax.plot(self.cpipe[:, 0], self.cpipe[:, 1])
374
374
  dbg_ax.plot(out[:, 0], out[:, 1])
375
375
  dbg_ax.set_title("area {:3f} dist {:.3f}".format(real_area, np.sum(ddd)/npts))
@@ -420,7 +420,7 @@ class PipeFit(object):
420
420
 
421
421
  return res
422
422
 
423
- def fit(self, data, M0=None, factor=1.0):
423
+ def fit(self, data, M0=None, factor=1.0, simplify=True):
424
424
  """Do the fit.
425
425
 
426
426
  Args:
@@ -451,12 +451,15 @@ class PipeFit(object):
451
451
  print("\n** Initial guess")
452
452
  self.print_transform(M)
453
453
  else:
454
- M = M0
454
+ M = M0[0:5]
455
455
 
456
456
  self.core_center, self.core_band = self.get_data_center(data)
457
457
 
458
-
459
- self.data = contours.contour_simplify(data, 1.25*factor)
458
+ if simplify:
459
+ self.data = contours.contour_simplify(data, 1.25*factor)
460
+ else:
461
+ self.data = np.array(data)
462
+
460
463
  # self.data = data
461
464
  verbose = 0
462
465
  if self.debug:
@@ -482,9 +485,9 @@ class PipeFit(object):
482
485
  self.R = M
483
486
  return M
484
487
 
485
- def fit_ex(self, data, limit=5e6, factor=1):
488
+ def fit_ex(self, data, M0=None, limit=5e6, factor=1, simplify=True):
486
489
  """Does the regular fit and tries to correct."""
487
- R = self.fit(data, factor=factor)
490
+ R = self.fit(data, factor=factor, M0=M0, simplify=simplify)
488
491
 
489
492
  # Check for an offset...
490
493
  if self.res.cost > limit:
@@ -0,0 +1,74 @@
1
+ import sys
2
+ from pathlib import Path
3
+ import numpy as np
4
+ import matplotlib.pyplot as plt
5
+
6
+
7
+
8
+ cwd = Path(__file__).parent
9
+ if cwd.exists():
10
+ sys.path.insert(0, cwd.as_posix())
11
+
12
+ from petal_qc.thermal import PipeFit, contours
13
+
14
+
15
+ class PipeIterFit:
16
+ """makes an iterative fit removing outliers in each iteration."""
17
+
18
+ def __init__(self, data):
19
+ """Initialize class."""
20
+ self.data = data
21
+ ptype = PipeFit.PipeFit.guess_pipe_type(data)
22
+ self.PF = PipeFit.PipeFit(ptype)
23
+
24
+ def remove_outsiders(self, data, thrs):
25
+ """Removes points which are further than thrs from the fit."""
26
+ D = np.zeros(len(data))
27
+ out = self.PF.transform_data(data, self.PF.R)
28
+ i = 0
29
+ for x, y in out:
30
+ dst, P = contours.find_closest_point(x, y, self.PF.pipe)
31
+ D[i] = dst
32
+ i += 1
33
+
34
+ indx = np.where(D < thrs)[0]
35
+ return np.array(data[indx, :])
36
+
37
+ def fit(self, threshold=20, factor=1.0):
38
+ total_data = self.data
39
+ data_size = len(total_data)
40
+
41
+ fig, ax = plt.subplots(1, 1, tight_layout=True)
42
+
43
+ M0 = self.PF.fit_ex(total_data, factor=factor)
44
+ sample_data = self.remove_outsiders(self.PF.data, threshold)
45
+ last_size = len(sample_data)
46
+
47
+ # Adaptively determining the number of iterations
48
+ while True:
49
+ M0 = self.PF.fit_ex(sample_data, M0=M0, factor=factor, simplify=False)
50
+
51
+ out = self.PF.transform_data(self.PF.data, M0)
52
+ D = []
53
+ for x, y in out:
54
+ dst, P = contours.find_closest_point(x, y, self.PF.pipe)
55
+ D.append(dst)
56
+
57
+ ax.clear()
58
+ ax.hist(D)
59
+ plt.draw()
60
+ plt.pause(0.0001)
61
+ self.PF.plot()
62
+
63
+ sample_data = self.remove_outsiders(self.PF.data, 20)
64
+ sample_size = len(sample_data)
65
+ if sample_size == last_size:
66
+ break
67
+
68
+ last_size = sample_size
69
+
70
+ self.PF.plot()
71
+ return M0
72
+
73
+ def plot(self):
74
+ self.PF.plot()
@@ -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)):
@@ -21,7 +21,7 @@ from petal_qc.thermal import IRBFile
21
21
  from petal_qc.thermal import IRCore
22
22
  from petal_qc.thermal import IRPetal
23
23
  from petal_qc.thermal import Petal_IR_Analysis
24
- from petal_qc.thermal import PipeFit
24
+ from petal_qc.thermal import PipeFit, PipeIterFit
25
25
  from petal_qc.thermal.PetalColorMaps import HighContrast
26
26
  from petal_qc.thermal.IRDataGetter import IRDataGetter
27
27
  from petal_qc.thermal.IRPetalParam import IRPetalParam
@@ -182,8 +182,13 @@ def create_IR_core(options):
182
182
  ofile = output_folder(options.folder, "{}_pipe_{}.txt".format(prfx, pipe_type))
183
183
  np.savetxt(ofile, pipes[i])
184
184
 
185
- PF = PipeFit.PipeFit(pipe_type)
186
- R = PF.fit_ex(pipes[i], factor=getter.factor)
185
+ #PF = PipeFit.PipeFit(pipe_type)
186
+ #R = PF.fit_ex(pipes[i], factor=getter.factor)
187
+
188
+ iPF = PipeIterFit.PipeIterFit(pipes[i])
189
+ PF = iPF.PF
190
+ R = iPF.fit(factor=getter.factor, threshold=12*getter.factor)
191
+
187
192
  if options.debug or options.report:
188
193
  _X = all_3d_points[i][:, 0]
189
194
  _Y = all_3d_points[i][:, 1]
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env python3
2
+ """Test dashboard."""
3
+ import os
4
+ import sys
5
+ import copy
6
+ from pathlib import Path
7
+ from argparse import ArgumentParser
8
+
9
+ try:
10
+ import itkdb_gtk
11
+
12
+ except ImportError:
13
+ cwd = Path(__file__).parent.parent
14
+ sys.path.append(cwd.as_posix())
15
+ import itkdb_gtk
16
+
17
+ from itkdb_gtk import ITkDBlogin, ITkDButils, UploadTest
18
+ from petal_qc.utils.ArgParserUtils import RangeListAction
19
+
20
+
21
+ HOME=os.getenv("HOME")
22
+ cloud=Path("{}/Nextcloud/ITk/5-Petal_cores".format(HOME))
23
+
24
+ def uploadXrays(session, options):
25
+ """Upload Xray tests."""
26
+ if len(options.cores) == 0:
27
+ print("I need a list of cores.")
28
+ return
29
+
30
+ defaults = {
31
+ "institution": "IFIC",
32
+ "runNumber": "1",
33
+ }
34
+
35
+ dto = ITkDButils.get_test_skeleton(session, "CORE_PETAL", "XRAYIMAGING", defaults)
36
+ dto["properties"]["OPERATOR"]="Nico"
37
+ dto["properties"]["MACHINEID"]="Xray"
38
+
39
+ for core in options.cores:
40
+ petal_id = "PPC.{:03d}".format(core)
41
+ try:
42
+ obj = ITkDButils.get_DB_component(session, petal_id)
43
+ SN = obj["serialNumber"]
44
+
45
+ except Exception as E:
46
+ print("Could not find {} in DB:\n{}".format(petal_id, E))
47
+ continue
48
+
49
+ values = copy.deepcopy(dto)
50
+ print("Petal {}".format(petal_id))
51
+ values["component"] = SN
52
+
53
+ image = cloud / petal_id / "Rx_{}.png".format(petal_id)
54
+ if not image.exists():
55
+ print("Xray image does not esxist.\n\t{}".format(image))
56
+ continue
57
+
58
+ A = ITkDButils.Attachment(path=image.as_posix(), title=image.name, desc="X-ray image")
59
+ values["results"]["IMAGELINK"] = image.name
60
+ uploadW = UploadTest.UploadTest(session, values, [A, ])
61
+
62
+
63
+
64
+ def main():
65
+ """Main entry"""
66
+ parser = ArgumentParser()
67
+ parser.add_argument("--cores", dest="cores", action=RangeListAction, default=[],
68
+ help="Create list of cores to analyze. The list is made with numbers or ranges (ch1:ch2 or ch1:ch2:step) ")
69
+ options = parser.parse_args()
70
+
71
+ # ITk_PB authentication
72
+ dlg = ITkDBlogin.ITkDBlogin()
73
+ session = dlg.get_client()
74
+
75
+ try:
76
+ uploadXrays(session, options)
77
+
78
+ except Exception as E:
79
+ print(E)
80
+
81
+ dlg.die()
82
+
83
+
84
+
85
+ if __name__ == "__main__":
86
+ main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: petal_qc
3
- Version: 0.0.20
3
+ Version: 0.0.22
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,22 +1,24 @@
1
- petal_qc/PetalReceptionTests.py,sha256=cSrq4PUjdV7T16ARonhsnXWPBBRuvliTKlZwEPfgRVY,10832
2
- petal_qc/__init__.py,sha256=wWhkImfHsRq6bdiB9KpR1wF1DsTymn7ydqz71fLtYWw,1595
1
+ petal_qc/PetalReceptionTests.py,sha256=xFFqh_TYVXOWP0H1Q4I8V8sP8p8_w5tCCrhtENN7yvM,10825
2
+ petal_qc/__init__.py,sha256=ltg8iE7hMGTw0UPsUVJo4An7tiOxiDvom962DOfjNOs,1736
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=OnvX5zFfyfnLhmPy84kZq2XkfOH5DaDrYSXpiwrmln8,5436
5
+ petal_qc/readTemplateTable.py,sha256=zh6j_g_AYKCJ4ajmGEoy9KI9giL7tBhZdpbUE8s2b7I,8405
6
+ petal_qc/uploadXrays.py,sha256=j_iKGjxWAKLGTFVXivwdnhsleTuYcR4zvuSWxwzCGKU,2289
5
7
  petal_qc/BTreport/CheckBTtests.py,sha256=CoKTnW_7gbL42rVaBy9FnH1SEYifmgg1P5Iy253vDFk,9855
6
8
  petal_qc/BTreport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
9
  petal_qc/BTreport/bustapeReport.py,sha256=M0EZQEh8G-65p6-gCOyZ0WlvnRbzQHXPwAWta9ZExnQ,6907
8
10
  petal_qc/metrology/Cluster.py,sha256=UtZ5q1EFb8f3qC0hEYBbhRg2pPbW_28aJX2EEMu00Ho,2105
9
11
  petal_qc/metrology/DataFile.py,sha256=PbFqy3-WSj69epV5EjhHc1GKhA8I74FmJYOXUjN0V20,1367
10
- petal_qc/metrology/PetalMetrology.py,sha256=ZEJnkR2vjNmbH7SChPtSsC1YNKgFwfa9YkHc1XNleK8,12333
12
+ petal_qc/metrology/PetalMetrology.py,sha256=zTJ5xSGz5d9flDvnQpQnq5cWvNMP5DXJkhDw_SmLFEU,12748
11
13
  petal_qc/metrology/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
14
  petal_qc/metrology/all2csv.py,sha256=KTgEGaediylwkGN7gyWyQqUjU0f9FOa3xF4z1W38EcU,1569
13
- petal_qc/metrology/analyze_locking_points.py,sha256=83f8nNgmXWClQnIG1plu3YYuxNmeEeTu8VKJE9izw70,20531
15
+ petal_qc/metrology/analyze_locking_points.py,sha256=1uUN4dfBDk9NopQxyLePJ8r_qJHcsxogB1M4z7FZh6g,20912
14
16
  petal_qc/metrology/cold_noise.py,sha256=PuTaQ73WrQCJdE9ezS4UFmA3atwCuvM0ZsUOYu1ZIBw,3106
15
- petal_qc/metrology/compare_Cores.py,sha256=dP0i_C_VrM4s3i0RrI2g4ZcjRmgIHlAgodhGS87YYgw,9458
17
+ petal_qc/metrology/compare_Cores.py,sha256=7t6RJ2QiJl-zmNG886jSLswS8rhD4zgipZlxjz7oTbM,9931
16
18
  petal_qc/metrology/comparisonTable.py,sha256=6Zmh-x0ahs28ZJQuHMrIiRcblUmTN1_-1otFSRNMPds,1743
17
19
  petal_qc/metrology/convert_mitutoyo.py,sha256=tpnB_fHBR8PpJeb7_q9foYKGNDRhJzxHNemmpfbSt8E,5650
18
20
  petal_qc/metrology/convert_smartscope.py,sha256=0vAEYn7ec4qTnLfjphj1QA6tK3vZsXyF6nYYj3jE5Yc,6174
19
- petal_qc/metrology/coreMetrology.py,sha256=rGzCyPqlfsnh2XUUDiykQFlRt3kkFkrQqVOhOJUNhyU,13427
21
+ petal_qc/metrology/coreMetrology.py,sha256=Dg5aVLOQzdl1IK15iugtnsqKks1ydePelkWFuFH5MUc,12962
20
22
  petal_qc/metrology/data2csv.py,sha256=2ttMSmfGLPIaOqZGima2dH6sdnSRAFTHlEbSOfW5ebA,1809
21
23
  petal_qc/metrology/do_Metrology.py,sha256=wA3fKJrdDLGYd0lEi8uSP9uRwQeS59nX6F4VtNnm9LM,4356
22
24
  petal_qc/metrology/flatness4nigel.py,sha256=SUHwn6pCEUWQV_62-_9-VKrmUdL4gVQcSA3aTtYq958,4071
@@ -25,9 +27,9 @@ petal_qc/metrology/petal_flatness.py,sha256=f8UqAmwbSkOngFbwekeGq6cX5flSkd7JNhCY
25
27
  petal_qc/metrology/readAVSdata.py,sha256=6GRUac9b3iOoVoGfWr6rsNj1smsw9aT0tu5wuNuumAE,25615
26
28
  petal_qc/metrology/show_data_file.py,sha256=yZPcmMy-1EWWySiBBx0hNB3tPVh19bTr0PDaXSyIF4c,4057
27
29
  petal_qc/metrology/testSummary.py,sha256=0BhcEd1BPz2Mbonzi8nyZOzNSzpUqowBFNl5cVutqsk,994
28
- petal_qc/metrology/test_paralelism.py,sha256=_j__OdUwdXWM494_9HpGPuPHixMwwVphCcvHEfzWi_k,1981
29
- petal_qc/metrology/uploadPetalInformation.py,sha256=K2hHXmoQ-qi5HLTmFNn5jVsZDDXX88psGV-XIRgx1kA,26728
30
- petal_qc/test/analyzeMetrologyTable.py,sha256=_ipKV8-rXgLca5Bu3ATLZjGR5koFN4-qwpj88rgf-x0,3098
30
+ petal_qc/metrology/test_paralelism.py,sha256=Ij9WlHxyG8It3JqdCVVIWPeuv1OjBGeOsLkD44V2h5A,2024
31
+ petal_qc/metrology/uploadPetalInformation.py,sha256=EM2ThfXxVbZYXMxUuzTcKeGnh3SjOHQUzk09AwK80hI,27560
32
+ petal_qc/test/analyzeMetrologyTable.py,sha256=hYyDGm7yns5i5SS6--DZfDX4bXbCEvilYPKk1Nm54e0,6759
31
33
  petal_qc/test/checkAVStests.py,sha256=0xAJLazfkgfQ0ouc17fivaj69OXTiS9sali0DhH-jTs,4814
32
34
  petal_qc/test/checkCoreShipments.py,sha256=d9W_uE0tMdfJGRuiiTOGyIW60SIj08QKWjd3Y8aVBi8,1554
33
35
  petal_qc/test/compare_golden.py,sha256=lG1rtYLw_PwKWrLk0VVdbnRhi7Ytu78q7PGWcYptM_8,1171
@@ -36,10 +38,11 @@ petal_qc/test/createMetrologyTable.py,sha256=Dh9Mwab5geyojigVCS5mKba1EJU-4K1-ELD
36
38
  petal_qc/test/desyModuleBow.py,sha256=4RgDIVEMqzlGUVqKCjji95_JzfXtcgjK4kefKrVH9eY,3602
37
39
  petal_qc/test/findRawData.py,sha256=8wqvPILjfZZ0CKkDhOa_tcsYMwNwcKOLyaEoWfISBQY,2872
38
40
  petal_qc/test/getAVSjson.py,sha256=o8AYtyr7Vnp-enznmQ-NNiivZipmxtoVrmsfnRCl0X4,977
39
- petal_qc/test/getAVStests.py,sha256=GNqEpncUQdvo-qSf46ltGVeezSnHB2BQsKjApS6xomY,10285
41
+ petal_qc/test/getAVStests.py,sha256=MsphZFxiPLCo6gf1ZTQ5Sy415rF35NgvF13OGagunV0,10308
40
42
  petal_qc/test/listPetalCoreComponents.py,sha256=7U9wokRkgeZdYZKeZdAadA32BlhVK6okInuh94hmj24,2502
41
43
  petal_qc/test/prepareDESYfiles.py,sha256=uRir2fv0oGqB6hKnIqRltDW-oLz1tR2SDvVkMVxCfKI,4106
42
- petal_qc/test/reportFromJSon.py,sha256=GHx4Jk5_DTGiaxUd98mdnuFePsCqrJ_v86ufF0_wCBs,2296
44
+ petal_qc/test/reportFromJSon.py,sha256=raF83IArZusR5kh7Lg-Q_3SoHJuM5hPpnnLYgrKBHlQ,2366
45
+ petal_qc/test/testMitutoyo.py,sha256=xN0H13rmcpGbXDLBjccNL8ybdevu-j_gMnracY29ONg,228
43
46
  petal_qc/test/test_Graphana.py,sha256=4wADxS_ObG9n4vsCvD1GwPQnx8bFUiUOS6ZwK83wTl8,1082
44
47
  petal_qc/test/test_coreThermal.py,sha256=YRPK3DGG7Tz66K4Kka3euXgUDzW_JlIqSYicMBhb96E,1516
45
48
  petal_qc/thermal/CSVImage.py,sha256=Vt2kYmUsZWkQvxcF8fDda3HO1Rb29kPQHnEoHFCqWYo,2038
@@ -47,17 +50,18 @@ petal_qc/thermal/DESYdata.py,sha256=YAwxhnmA89uH1vZ_BjDo0VLATTGRngoBSFzYfLSJbZU,
47
50
  petal_qc/thermal/DebugPlot.py,sha256=OmREFwNDAKgoObDmcgHrB4d8m3bf2znfsKVGsb5rBGQ,2119
48
51
  petal_qc/thermal/IRBFile.py,sha256=_no8iUyuSQ41j34o3LVzUCjMYoviwjz02tsWvFsTUzA,23462
49
52
  petal_qc/thermal/IRCore.py,sha256=sidf7HtrzEUcllv0E_o1Hks-2_2dl4Og_LWcwgPNRcE,3062
50
- petal_qc/thermal/IRDataGetter.py,sha256=S-Xaizrop_xQ2pgkvuw_HdKbrsDD84KThwgTfjRg0bQ,11579
51
- petal_qc/thermal/IRPetal.py,sha256=hVOD0VAKTA2xvNXbZ-TXAYHNlihNWsUkI2i9IEwQhZk,40887
52
- petal_qc/thermal/IRPetalParam.py,sha256=PDf-IRB9Yz2PALNi5UdvammfRAJOzyaM0UlV1xbp_IU,4207
53
+ petal_qc/thermal/IRDataGetter.py,sha256=px9nFTuDPuwaSkhfA3wT52_3UhwVdD1BtB494poqIp4,11639
54
+ petal_qc/thermal/IRPetal.py,sha256=Im3Xa1ADAzuCKLEzl9i40qOMvfLCGJ8dopA2jGVT7zU,41638
55
+ petal_qc/thermal/IRPetalParam.py,sha256=u-1tUxjWnLYr7mbdKEtnMssJep-AS7e7HCaUGwu99C8,4682
53
56
  petal_qc/thermal/PetalColorMaps.py,sha256=6CvJHzRdojLHu3BROYSekHw8g_BJ1lJ_edyhovTIydU,3831
54
- petal_qc/thermal/Petal_IR_Analysis.py,sha256=ALIER9fLn2R26IMhPVzEDL6tlK7XNbCtRtH0y6kTaEU,3950
55
- petal_qc/thermal/PipeFit.py,sha256=8nEjpZC1mWh4-bhXzwXfjO8WkC_6hFYX0XXPjTHwNUw,18345
57
+ petal_qc/thermal/Petal_IR_Analysis.py,sha256=BrTii0GZ6KsNM65JUpfRNgOjsR1b2vFJUf0AyskTe3g,3998
58
+ petal_qc/thermal/PipeFit.py,sha256=7jeGPlIBCzeXIKKprGmucxWRrWLxhS4A4HZdt-tQpF4,18502
59
+ petal_qc/thermal/PipeIterFit.py,sha256=5ZOUKlZIsYVB3NSKsT-o3kNojHCXzX9ctMrqvWlJYfM,2053
56
60
  petal_qc/thermal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
61
  petal_qc/thermal/analyze_IRCore.py,sha256=-MsKGJR-5pJV93ipLau0FHQeconLhMPDuLQIT9LMWsU,21115
58
- petal_qc/thermal/contours.py,sha256=Bx4ghZhgZ4ya1rr4CZvjpqZd9M924Vms1oEGrgllWG4,8591
62
+ petal_qc/thermal/contours.py,sha256=l8eZOvOhJ50cpJZ2ZPOZ-yjsg3ByQAZ0BPUajag0MwU,9862
59
63
  petal_qc/thermal/coreThermal.py,sha256=lBPyBm3Fo5uXBw6AIpzTY4Ku238Gr9lwm36Iihfbqp0,16203
60
- petal_qc/thermal/create_IRCore.py,sha256=s3X-NBc6KdkqOG7kAcG5ldyTRSuommxIruzMFMu8CjQ,9183
64
+ petal_qc/thermal/create_IRCore.py,sha256=pRHanrKdN9rCL2BurpnCI_958CySu0Ku9yjwssBeCpg,9354
61
65
  petal_qc/thermal/create_core_report.py,sha256=32F7u7ffnLmGX5J_YP2oa8O_pI0euh9z3p0CTpA3-WM,6135
62
66
  petal_qc/thermal/pipe_back.npz,sha256=yooZuVYtHU541HcV6Gh_5B0BqdYAVEvYAuVvMMSY7Jc,3632
63
67
  petal_qc/thermal/pipe_front.npz,sha256=DuwruG9C2Z1rLigqWMApY4Orsf1SGUQGKy0Yan8Bk8A,3697
@@ -72,8 +76,8 @@ petal_qc/utils/docx_utils.py,sha256=zVmSKHDVE8cUwbXxqyPtgS0z62VCFya1DWklOpO1rCQ,
72
76
  petal_qc/utils/fit_utils.py,sha256=3KUGWpBMV-bVDkQHWBigXot8chOpjAVBJ5H5b5dbdjk,5349
73
77
  petal_qc/utils/readGraphana.py,sha256=YVOztJC3q3P7F0I9Ggeiu6Mv9rZLKgj3clkLCU7k4i4,1918
74
78
  petal_qc/utils/utils.py,sha256=CqCsNIcEg6FQb3DN70tmqeLVLlQqsRfDzhfGevlnfBc,4035
75
- petal_qc-0.0.20.dist-info/METADATA,sha256=EHoZu8c1KUKkam4HCqJRmWP3cnu-AjydFTB4edKmmCI,953
76
- petal_qc-0.0.20.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
77
- petal_qc-0.0.20.dist-info/entry_points.txt,sha256=YPrZOsRBRsiKNDvsnbug0-Khj7DcN_Sdpq-tB_XjykI,505
78
- petal_qc-0.0.20.dist-info/top_level.txt,sha256=CCo1Xe6kLS79PruhsB6bk2CuL9VFtNdNpgJjYUs4jk4,9
79
- petal_qc-0.0.20.dist-info/RECORD,,
79
+ petal_qc-0.0.22.dist-info/METADATA,sha256=wOc_109Gke7y9aMvGCDFvSW_ciFb2aVuHO39MeB1W6Q,953
80
+ petal_qc-0.0.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
81
+ petal_qc-0.0.22.dist-info/entry_points.txt,sha256=8cW3MiDBs3BdBPIzf4YtkOjr-MhPKu9aWfc0BTYBhxQ,554
82
+ petal_qc-0.0.22.dist-info/top_level.txt,sha256=CCo1Xe6kLS79PruhsB6bk2CuL9VFtNdNpgJjYUs4jk4,9
83
+ petal_qc-0.0.22.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -9,4 +9,5 @@ doMetrology = petal_qc:doMetrology
9
9
  petalCoreTestSummary = petal_qc:petalCoreTestSummary
10
10
  petalReceptionTests = petal_qc:petalReceptionTests
11
11
  petalqc_dashBoard = petal_qc:dashBoard
12
+ readReceptionTests = petal_qc:readReceptionTests
12
13
  uploadPetalInformation = petal_qc:uploadPetalInformation