petal-qc 0.0.20__tar.gz → 0.0.21__tar.gz

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.

Files changed (84) hide show
  1. {petal_qc-0.0.20 → petal_qc-0.0.21}/PKG-INFO +1 -1
  2. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/PetalReceptionTests.py +2 -2
  3. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/__init__.py +1 -1
  4. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/getPetalCoreTestSummary.py +61 -9
  5. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/getAVStests.py +2 -2
  6. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/reportFromJSon.py +7 -5
  7. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/IRDataGetter.py +2 -0
  8. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/IRPetalParam.py +6 -2
  9. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/Petal_IR_Analysis.py +1 -1
  10. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/contours.py +46 -3
  11. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc.egg-info/PKG-INFO +1 -1
  12. {petal_qc-0.0.20 → petal_qc-0.0.21}/pyproject.toml +1 -1
  13. {petal_qc-0.0.20 → petal_qc-0.0.21}/README.md +0 -0
  14. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/BTreport/CheckBTtests.py +0 -0
  15. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/BTreport/__init__.py +0 -0
  16. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/BTreport/bustapeReport.py +0 -0
  17. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/dashBoard.py +0 -0
  18. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/Cluster.py +0 -0
  19. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/DataFile.py +0 -0
  20. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/PetalMetrology.py +0 -0
  21. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/__init__.py +0 -0
  22. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/all2csv.py +0 -0
  23. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/analyze_locking_points.py +0 -0
  24. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/cold_noise.py +0 -0
  25. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/compare_Cores.py +0 -0
  26. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/comparisonTable.py +0 -0
  27. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/convert_mitutoyo.py +0 -0
  28. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/convert_smartscope.py +0 -0
  29. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/coreMetrology.py +0 -0
  30. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/data2csv.py +0 -0
  31. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/do_Metrology.py +0 -0
  32. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/flatness4nigel.py +0 -0
  33. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/gtkutils.py +0 -0
  34. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/petal_flatness.py +0 -0
  35. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/readAVSdata.py +0 -0
  36. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/show_data_file.py +0 -0
  37. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/testSummary.py +0 -0
  38. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/test_paralelism.py +0 -0
  39. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/metrology/uploadPetalInformation.py +0 -0
  40. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/analyzeMetrologyTable.py +0 -0
  41. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/checkAVStests.py +0 -0
  42. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/checkCoreShipments.py +0 -0
  43. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/compare_golden.py +0 -0
  44. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/createMetrologyFile.py +0 -0
  45. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/createMetrologyTable.py +0 -0
  46. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/desyModuleBow.py +0 -0
  47. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/findRawData.py +0 -0
  48. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/getAVSjson.py +0 -0
  49. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/listPetalCoreComponents.py +0 -0
  50. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/prepareDESYfiles.py +0 -0
  51. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/test_Graphana.py +0 -0
  52. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/test/test_coreThermal.py +0 -0
  53. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/CSVImage.py +0 -0
  54. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/DESYdata.py +0 -0
  55. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/DebugPlot.py +0 -0
  56. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/IRBFile.py +0 -0
  57. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/IRCore.py +0 -0
  58. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/IRPetal.py +0 -0
  59. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/PetalColorMaps.py +0 -0
  60. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/PipeFit.py +0 -0
  61. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/__init__.py +0 -0
  62. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/analyze_IRCore.py +0 -0
  63. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/coreThermal.py +0 -0
  64. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/create_IRCore.py +0 -0
  65. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/create_core_report.py +0 -0
  66. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/pipe_back.npz +0 -0
  67. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/pipe_front.npz +0 -0
  68. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/pipe_read.py +0 -0
  69. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/thermal/show_IR_petal.py +0 -0
  70. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/ArgParserUtils.py +0 -0
  71. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/Geometry.py +0 -0
  72. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/Progress.py +0 -0
  73. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/__init__.py +0 -0
  74. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/all_files.py +0 -0
  75. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/docx_utils.py +0 -0
  76. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/fit_utils.py +0 -0
  77. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/readGraphana.py +0 -0
  78. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc/utils/utils.py +0 -0
  79. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc.egg-info/SOURCES.txt +0 -0
  80. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc.egg-info/dependency_links.txt +0 -0
  81. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc.egg-info/entry_points.txt +0 -0
  82. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc.egg-info/requires.txt +0 -0
  83. {petal_qc-0.0.20 → petal_qc-0.0.21}/petal_qc.egg-info/top_level.txt +0 -0
  84. {petal_qc-0.0.20 → petal_qc-0.0.21}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: petal_qc
3
- Version: 0.0.20
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
@@ -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
 
@@ -1,5 +1,5 @@
1
1
  """petal_qc python module."""
2
- __version__ = "0.0.20"
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
-
@@ -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()
@@ -38,15 +38,17 @@ def main(options):
38
38
  data = json.load(fin)
39
39
 
40
40
  if not data["passed"]:
41
- petalId = data["component"]
42
- if petalId is None:
41
+ if data["component"] is None:
43
42
  print("Petal {} has bad Serial number".format(petal_id))
44
- if petal_id not in petal_cores:
45
- petal_cores[petal_id] = {"FRONT": [], "BACK": []}
43
+ continue
44
+
45
+ petalId = "{}-{}".format(petal_id, data["component"])
46
+ if petalId not in petal_cores:
47
+ petal_cores[petalId] = {"FRONT": [], "BACK": []}
46
48
 
47
49
  side = "FRONT" if "FRONT" in data["testType"] else "BACK"
48
50
  for D in data["defects"]:
49
- petal_cores[petal_id][side].append("{}: {}".format(D["name"], D["description"]))
51
+ petal_cores[petalId][side].append("{}: {}".format(D["name"], D["description"]))
50
52
 
51
53
 
52
54
  keys = sorted(petal_cores.keys())
@@ -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.20
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "petal_qc"
7
- version = "0.0.20"
7
+ version = "0.0.21"
8
8
  authors = [
9
9
  { name="Carlos Lacasta", email="carlos.lacasta@cern.ch" },
10
10
  ]
File without changes
File without changes