HeshamAI commited on
Commit
9909975
·
verified ·
1 Parent(s): 105f16e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -21
app.py CHANGED
@@ -152,6 +152,7 @@ class DicomAnalyzer:
152
  except Exception as e:
153
  print(f"Error handling keyboard input: {str(e)}")
154
  return self.display_image
 
155
  def analyze_roi(self, evt: gr.SelectData):
156
  try:
157
  if self.current_image is None:
@@ -274,7 +275,6 @@ class DicomAnalyzer:
274
  except Exception as e:
275
  print(f"Error updating display: {str(e)}")
276
  return self.original_display
277
-
278
  def save_results(self):
279
  """
280
  Basic save function for raw results with improved error handling and logging
@@ -323,11 +323,13 @@ class DicomAnalyzer:
323
  cell1 = ws[f"{formula_col}{row1}"]
324
  cell1.value = formula1
325
  cell1.font = red_font
 
326
 
327
  formula2 = f"=({base_col}{row1}-{base_col}{row2})/{std_col}{row2}"
328
  cell2 = ws[f"{formula_col}{row2}"]
329
  cell2.value = formula2
330
  cell2.font = red_font
 
331
 
332
  logger.debug(f"Added formulas for rows {row1},{row2} in column {formula_col}")
333
  except Exception as e:
@@ -343,9 +345,8 @@ class DicomAnalyzer:
343
  red_font = openpyxl.styles.Font(color="FF0000")
344
  center_alignment = openpyxl.styles.Alignment(horizontal='center')
345
 
346
- #Define headers
347
  headers = ['Area', 'Mean', 'StdDev', 'Min', 'Max']
348
-
349
 
350
  column_groups = [
351
  ('B', 'C', 'D', 'E', 'F'), ('H', 'I', 'J', 'K', 'L'),
@@ -356,14 +357,14 @@ class DicomAnalyzer:
356
  ('BJ', 'BK', 'BL', 'BM', 'BN'), ('BP', 'BQ', 'BR', 'BS', 'BT'),
357
  ('BV', 'BW', 'BX', 'BY', 'BZ')
358
  ]
 
359
  # Add headers for each column group
360
  for cols in column_groups:
361
  for i, header in enumerate(headers):
362
  cell = ws[f"{cols[i]}1"]
363
  cell.value = header
364
- cell.alignment = center_alignment # Center align the headers
365
 
366
-
367
  row_pairs = [
368
  (2, 3), (5, 6), (8, 9), (11, 12), (14, 15),
369
  (17, 18), (20, 21), (23, 24), (26, 27), (29, 30)
@@ -375,8 +376,8 @@ class DicomAnalyzer:
375
  for i, size in enumerate(phantom_sizes):
376
  header_cell = ws.cell(row=row_pairs[i][0]-1, column=1, value=size)
377
  header_cell.font = red_font
378
- header_cell.alignment = center_alignment # Center align the phantom sizes
379
-
380
  result_idx = 0
381
  current_col_group = 0
382
  current_row_pair = 0
@@ -405,12 +406,13 @@ class DicomAnalyzer:
405
  current_col_group = 0
406
  current_row_pair += 1
407
 
408
- # Center align all data cells
409
  for cols in column_groups:
410
  for col in cols:
411
- for row in range(2, 31): # Adjust range based on your data
412
  cell = ws[f"{col}{row}"]
413
- cell.alignment = center_alignment
 
414
 
415
  wb.save(output_path)
416
  return output_path, f"Results saved successfully ({result_idx} measurements)"
@@ -422,16 +424,20 @@ class DicomAnalyzer:
422
  def _write_result_to_cells(self, ws, result, cols, row):
423
  """Helper method to write a single result to worksheet cells"""
424
  center_alignment = openpyxl.styles.Alignment(horizontal='center')
425
- ws[f"{cols[0]}{row}"] = float(result['Area (mm²)'])
426
- ws[f"{cols[1]}{row}"] = float(result['Mean'])
427
- ws[f"{cols[2]}{row}"] = float(result['StdDev'])
428
- ws[f"{cols[3]}{row}"] = float(result['Min'])
429
- ws[f"{cols[4]}{row}"] = float(result['Max'])
430
-
431
- for i, value in enumerate(['Area (mm²)', 'Mean', 'StdDev', 'Min', 'Max']):
432
- cell = ws[f"{cols[i]}{row}"]
433
- cell.value = float(result[value])
434
- cell.alignment = center_alignment
 
 
 
 
435
 
436
  def format_results(self):
437
  if not self.results:
@@ -470,7 +476,6 @@ class DicomAnalyzer:
470
  self.marks.pop()
471
  return self.update_display(), self.format_results()
472
 
473
- # Interface creation and main execution will be in the next part...
474
  def create_interface():
475
  print("Creating interface...")
476
  analyzer = DicomAnalyzer()
 
152
  except Exception as e:
153
  print(f"Error handling keyboard input: {str(e)}")
154
  return self.display_image
155
+
156
  def analyze_roi(self, evt: gr.SelectData):
157
  try:
158
  if self.current_image is None:
 
275
  except Exception as e:
276
  print(f"Error updating display: {str(e)}")
277
  return self.original_display
 
278
  def save_results(self):
279
  """
280
  Basic save function for raw results with improved error handling and logging
 
323
  cell1 = ws[f"{formula_col}{row1}"]
324
  cell1.value = formula1
325
  cell1.font = red_font
326
+ cell1.alignment = openpyxl.styles.Alignment(horizontal='center')
327
 
328
  formula2 = f"=({base_col}{row1}-{base_col}{row2})/{std_col}{row2}"
329
  cell2 = ws[f"{formula_col}{row2}"]
330
  cell2.value = formula2
331
  cell2.font = red_font
332
+ cell2.alignment = openpyxl.styles.Alignment(horizontal='center')
333
 
334
  logger.debug(f"Added formulas for rows {row1},{row2} in column {formula_col}")
335
  except Exception as e:
 
345
  red_font = openpyxl.styles.Font(color="FF0000")
346
  center_alignment = openpyxl.styles.Alignment(horizontal='center')
347
 
348
+ # Define headers
349
  headers = ['Area', 'Mean', 'StdDev', 'Min', 'Max']
 
350
 
351
  column_groups = [
352
  ('B', 'C', 'D', 'E', 'F'), ('H', 'I', 'J', 'K', 'L'),
 
357
  ('BJ', 'BK', 'BL', 'BM', 'BN'), ('BP', 'BQ', 'BR', 'BS', 'BT'),
358
  ('BV', 'BW', 'BX', 'BY', 'BZ')
359
  ]
360
+
361
  # Add headers for each column group
362
  for cols in column_groups:
363
  for i, header in enumerate(headers):
364
  cell = ws[f"{cols[i]}1"]
365
  cell.value = header
366
+ cell.alignment = center_alignment
367
 
 
368
  row_pairs = [
369
  (2, 3), (5, 6), (8, 9), (11, 12), (14, 15),
370
  (17, 18), (20, 21), (23, 24), (26, 27), (29, 30)
 
376
  for i, size in enumerate(phantom_sizes):
377
  header_cell = ws.cell(row=row_pairs[i][0]-1, column=1, value=size)
378
  header_cell.font = red_font
379
+ header_cell.alignment = center_alignment
380
+
381
  result_idx = 0
382
  current_col_group = 0
383
  current_row_pair = 0
 
406
  current_col_group = 0
407
  current_row_pair += 1
408
 
409
+ # Center align all data cells
410
  for cols in column_groups:
411
  for col in cols:
412
+ for row in range(2, 31):
413
  cell = ws[f"{col}{row}"]
414
+ if cell.value is not None:
415
+ cell.alignment = center_alignment
416
 
417
  wb.save(output_path)
418
  return output_path, f"Results saved successfully ({result_idx} measurements)"
 
424
  def _write_result_to_cells(self, ws, result, cols, row):
425
  """Helper method to write a single result to worksheet cells"""
426
  center_alignment = openpyxl.styles.Alignment(horizontal='center')
427
+
428
+ # Map the headers to the result keys
429
+ value_mapping = {
430
+ 'Area': 'Area (mm²)',
431
+ 'Mean': 'Mean',
432
+ 'StdDev': 'StdDev',
433
+ 'Min': 'Min',
434
+ 'Max': 'Max'
435
+ }
436
+
437
+ for i, (header, key) in enumerate(value_mapping.items()):
438
+ cell = ws[f"{cols[i]}{row}"]
439
+ cell.value = float(result[key])
440
+ cell.alignment = center_alignment
441
 
442
  def format_results(self):
443
  if not self.results:
 
476
  self.marks.pop()
477
  return self.update_display(), self.format_results()
478
 
 
479
  def create_interface():
480
  print("Creating interface...")
481
  analyzer = DicomAnalyzer()