HeshamAI commited on
Commit
5b1f4dd
·
verified ·
1 Parent(s): f7553a2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -23
app.py CHANGED
@@ -325,8 +325,8 @@ class DicomAnalyzer:
325
  cell1.font = red_font
326
  cell1.alignment = openpyxl.styles.Alignment(horizontal='center')
327
 
328
- # CNR Formula for second row
329
- formula2 = f"=IF(OR({std_col}{row2}=0,{base_col}{row1}=0,{base_col}{row2}=0),0,({base_col}{row1}-{base_col}{row2})/{std_col}{row2})"
330
  cell2 = ws[f"{formula_col}{row2}"]
331
  cell2.value = formula2
332
  cell2.font = red_font
@@ -456,35 +456,34 @@ class DicomAnalyzer:
456
  # Calculate CNR averages for each row pair
457
  for i, size in enumerate(phantom_sizes):
458
  row_number = row_pairs[i][1] # Second row for CNR
459
- cnr_references = []
460
 
461
- # Get all CNR formula references
462
  for cols in column_groups:
463
  formula_col = get_column_letter(column_index_from_string(cols[-1]) + 1)
464
- cnr_cell = f"{formula_col}{row_number}"
 
465
 
466
- # Check if the cell would have a valid CNR value
467
- mean_col = cols[1] # Mean column
468
- mean1 = ws[f"{mean_col}{row_pairs[i][0]}"].value # First row mean
469
- mean2 = ws[f"{mean_col}{row_pairs[i][1]}"].value # Second row mean
470
- stddev2 = ws[f"{cols[2]}{row_pairs[i][1]}"].value # Second row StdDev
471
 
472
- # Only add to references if values are valid
473
  if (mean1 not in [0, None, ''] and
474
  mean2 not in [0, None, ''] and
475
- stddev2 not in [0, None, '']):
476
- cnr_references.append(cnr_cell)
477
 
478
- if cnr_references:
479
- # Create AVERAGE formula excluding zero values
480
- formula = f"=AVERAGEIF({','.join(cnr_references)},\"<>0\")"
481
- size_cell = ws.cell(row=current_row, column=1, value=size)
482
- size_cell.alignment = center_alignment
483
-
484
- avg_cell = ws.cell(row=current_row, column=2)
485
- avg_cell.value = formula
 
486
  avg_cell.number_format = '0.000'
487
- avg_cell.alignment = center_alignment
488
 
489
  current_row += 1
490
 
@@ -517,7 +516,7 @@ class DicomAnalyzer:
517
 
518
  for i, (header, key) in enumerate(value_mapping.items()):
519
  cell = ws[f"{cols[i]}{row}"]
520
- cell.value = float(result[key])
521
  cell.alignment = center_alignment
522
 
523
  def format_results(self):
 
325
  cell1.font = red_font
326
  cell1.alignment = openpyxl.styles.Alignment(horizontal='center')
327
 
328
+ # CNR Formula for second row with zero handling
329
+ formula2 = f"=IF(OR({std_col}{row2}=0,{base_col}{row1}=0,{base_col}{row2}=0),\"\",({base_col}{row1}-{base_col}{row2})/{std_col}{row2})"
330
  cell2 = ws[f"{formula_col}{row2}"]
331
  cell2.value = formula2
332
  cell2.font = red_font
 
456
  # Calculate CNR averages for each row pair
457
  for i, size in enumerate(phantom_sizes):
458
  row_number = row_pairs[i][1] # Second row for CNR
459
+ valid_cnr_refs = []
460
 
 
461
  for cols in column_groups:
462
  formula_col = get_column_letter(column_index_from_string(cols[-1]) + 1)
463
+ mean_col = cols[1]
464
+ std_col = cols[2]
465
 
466
+ # Check if the values used in CNR calculation are valid
467
+ mean1 = ws[f"{mean_col}{row_pairs[i][0]}"].value
468
+ mean2 = ws[f"{mean_col}{row_pairs[i][1]}"].value
469
+ std2 = ws[f"{std_col}{row_pairs[i][1]}"].value
 
470
 
 
471
  if (mean1 not in [0, None, ''] and
472
  mean2 not in [0, None, ''] and
473
+ std2 not in [0, None, '']):
474
+ valid_cnr_refs.append(f"{formula_col}{row_number}")
475
 
476
+ # Add row to the averages table
477
+ size_cell = ws.cell(row=current_row, column=1, value=size)
478
+ size_cell.alignment = center_alignment
479
+
480
+ avg_cell = ws.cell(row=current_row, column=2)
481
+ if valid_cnr_refs:
482
+ # Create average formula that ignores blank cells
483
+ refs = ",".join(valid_cnr_refs)
484
+ avg_cell.value = f'=AVERAGE(IF(LEN({refs})>0,{refs}))'
485
  avg_cell.number_format = '0.000'
486
+ avg_cell.alignment = center_alignment
487
 
488
  current_row += 1
489
 
 
516
 
517
  for i, (header, key) in enumerate(value_mapping.items()):
518
  cell = ws[f"{cols[i]}{row}"]
519
+ cell.value = float(result[key]) if result[key] != '' else ''
520
  cell.alignment = center_alignment
521
 
522
  def format_results(self):