DmitrMakeev commited on
Commit
c217f21
·
verified ·
1 Parent(s): c5b5633

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -14
app.py CHANGED
@@ -715,10 +715,15 @@ INPUT_DATA = {
715
  }
716
 
717
  class NutrientCalculator:
718
- def __init__(self, input_data):
719
- self.fertilizers = input_data["fertilizerConstants"]
720
- self.profile = input_data["profileSettings"]
721
- self.volume = self.profile["liters"]
 
 
 
 
 
722
 
723
  total_parts = self.profile["NO3_RAT"] + 1
724
  self.target = {
@@ -732,7 +737,6 @@ class NutrientCalculator:
732
  }
733
 
734
  self.actual = {k: 0.0 for k in self.target} # CaCl не учитываем в фактическом балансе
735
- # Инициализация всех удобрений с нулевым весом
736
  self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers}
737
 
738
  def calculate(self):
@@ -768,12 +772,12 @@ class NutrientCalculator:
768
  return
769
 
770
  grams = (target_ppm * self.volume) / (content * 1000)
771
- self.results[name]['граммы'] += grams
772
 
773
  for el, val in self.fertilizers[name].items():
774
  added_ppm = (grams * val * 1000) / self.volume
775
  if el in self.actual:
776
- self.actual[el] += added_ppm
777
 
778
  def _balance_k_s(self):
779
  """Балансировка калия и серы"""
@@ -795,23 +799,24 @@ class NutrientCalculator:
795
  remaining_k = self.target["K"] - self.actual["K"]
796
  if remaining_k > 0:
797
  self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
 
798
  def _distribute_calcium(self):
799
  """Распределение кальция между селитрой и хлоридом"""
800
  ca_target = self.target["Ca"] # Общий кальций
801
 
802
  # Проверка соотношения NO3/NH4
803
  no3_ratio = self.profile["NO3_RAT"]
804
- if no3_ratio >= 5: # Если соотношение NO3/NH4 >= 8, кальций хлористый не добавляется
805
  print("Соотношение NO3/NH4 >= 8. Кальций хлористый не добавляется.")
806
  remaining_ca = ca_target
807
  else:
808
  # 1. Определяем, сколько кальция взять из хлористого кальция
809
- cacl_ratio = 0.1 # Например, 50% кальция берем из хлористого кальция
810
  cacl_target = ca_target * cacl_ratio
811
 
812
  # 2. Вносим кальций из хлористого кальция
813
  if cacl_target > 0:
814
- self._apply_fertilizer("Кальций хлорид", "Ca", cacl_target) # Исправлено на "Кальций хлорид"
815
 
816
  # 3. Оставшийся кальций берем из кальциевой селитры
817
  remaining_ca = ca_target - cacl_target
@@ -826,13 +831,13 @@ class NutrientCalculator:
826
  for el in self.target:
827
  diff = self.target[el] - self.actual[el]
828
  if abs(diff) > 0.1:
829
- deficits[el] = round(diff, 3)
830
 
831
  return {
832
- 'fertilizers': {k: round(v['граммы'], 3) for k, v in self.results.items()},
833
- 'actual_profile': {k: round(v, 3) for k, v in self.actual.items()},
834
  'deficits': deficits,
835
- 'total_ppm': round(sum(self.actual.values()), 3)
836
  }
837
 
838
  def generate_report(self, results):
 
715
  }
716
 
717
  class NutrientCalculator:
718
+ def __init__(self, fertilizer_constants, profile_settings, liters, rounding_precision, activation_cacl, enhancement_cacl):
719
+ self.fertilizers = fertilizer_constants
720
+ self.profile = profile_settings
721
+ self.volume = liters
722
+ self.rounding_precision = rounding_precision # Точность округления
723
+
724
+ # Новые параметры
725
+ self.activation_cacl = activation_cacl # Активация CaCl
726
+ self.enhancement_cacl = enhancement_cacl # Усиление CaCl
727
 
728
  total_parts = self.profile["NO3_RAT"] + 1
729
  self.target = {
 
737
  }
738
 
739
  self.actual = {k: 0.0 for k in self.target} # CaCl не учитываем в фактическом балансе
 
740
  self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers}
741
 
742
  def calculate(self):
 
772
  return
773
 
774
  grams = (target_ppm * self.volume) / (content * 1000)
775
+ self.results[name]['граммы'] += round(grams, self.rounding_precision) # Округляем до заданной точности
776
 
777
  for el, val in self.fertilizers[name].items():
778
  added_ppm = (grams * val * 1000) / self.volume
779
  if el in self.actual:
780
+ self.actual[el] += round(added_ppm, self.rounding_precision)
781
 
782
  def _balance_k_s(self):
783
  """Балансировка калия и серы"""
 
799
  remaining_k = self.target["K"] - self.actual["K"]
800
  if remaining_k > 0:
801
  self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
802
+
803
  def _distribute_calcium(self):
804
  """Распределение кальция между селитрой и хлоридом"""
805
  ca_target = self.target["Ca"] # Общий кальций
806
 
807
  # Проверка соотношения NO3/NH4
808
  no3_ratio = self.profile["NO3_RAT"]
809
+ if no3_ratio >= 8: # Если соотношение NO3/NH4 >= 8, кальций хлористый не добавляется
810
  print("Соотношение NO3/NH4 >= 8. Кальций хлористый не добавляется.")
811
  remaining_ca = ca_target
812
  else:
813
  # 1. Определяем, сколько кальция взять из хлористого кальция
814
+ cacl_ratio = self.activation_cacl / 100 # Пример: активация в процентах
815
  cacl_target = ca_target * cacl_ratio
816
 
817
  # 2. Вносим кальций из хлористого кальция
818
  if cacl_target > 0:
819
+ self._apply_fertilizer("Кальций хлорид", "Ca", cacl_target)
820
 
821
  # 3. Оставшийся кальций берем из кальциевой селитры
822
  remaining_ca = ca_target - cacl_target
 
831
  for el in self.target:
832
  diff = self.target[el] - self.actual[el]
833
  if abs(diff) > 0.1:
834
+ deficits[el] = round(diff, self.rounding_precision)
835
 
836
  return {
837
+ 'fertilizers': {k: round(v['граммы'], self.rounding_precision) for k, v in self.results.items()},
838
+ 'actual_profile': {k: round(v, self.rounding_precision) for k, v in self.actual.items()},
839
  'deficits': deficits,
840
+ 'total_ppm': round(sum(self.actual.values()), self.rounding_precision)
841
  }
842
 
843
  def generate_report(self, results):