/* TA_Lib_internal::MoveGPSectionsAbsolute */
void MoveGPSectionsAbsolute_TA_Lib_internal(
  /* TA_Lib_internal::MoveGPSectionsAbsolute::ProfileIn */ GradientProfile_t_TrackAtlasTypes *ProfileIn,
  /* TA_Lib_internal::MoveGPSectionsAbsolute::msg_prvLRBG */ kcg_bool msg_prvLRBG,
  /* TA_Lib_internal::MoveGPSectionsAbsolute::msg_LRBG */ kcg_bool msg_LRBG,
  /* TA_Lib_internal::MoveGPSectionsAbsolute::pos_LRBG */ L_internal_Type_Obu_BasicTypes_Pkg pos_LRBG,
  /* TA_Lib_internal::MoveGPSectionsAbsolute::pos_prvLRBG */ L_internal_Type_Obu_BasicTypes_Pkg pos_prvLRBG,
  /* TA_Lib_internal::MoveGPSectionsAbsolute::ProfileOut */ GradientProfile_t_TrackAtlasTypes *ProfileOut)
{
  /* TA_Lib_internal::MoveGPSectionsAbsolute */
  static GradientProfile_t_TrackAtlasTypes acc;
  static kcg_int i;
  
  kcg_copy_GradientProfile_t_TrackAtlasTypes(ProfileOut, ProfileIn);
  /* 1 */ for (i = 0; i < 50; i++) {
    kcg_copy_GradientProfile_t_TrackAtlasTypes(&acc, ProfileOut);
    /* 1 */
    MoveGPSectionsAbsolute_Loop_TA_Lib_internal(
      i,
      &acc,
      msg_prvLRBG,
      msg_LRBG,
      pos_LRBG,
      pos_prvLRBG,
      ProfileOut);
  }
}
/* TA_Gradient_new::GP_Merge_New_P21_to_Profile_loop */
void GP_Merge_New_P21_to_Profile_loop_TA_Gradient_new(
  /* TA_Gradient_new::GP_Merge_New_P21_to_Profile_loop::i */ kcg_int i,
  /* TA_Gradient_new::GP_Merge_New_P21_to_Profile_loop::GP */ GradientProfile_t_TrackAtlasTypes *GP,
  /* TA_Gradient_new::GP_Merge_New_P21_to_Profile_loop::First_Section_To_Replace */ kcg_int First_Section_To_Replace,
  /* TA_Gradient_new::GP_Merge_New_P21_to_Profile_loop::new_GP_received */ GradientProfile_t_TrackAtlasTypes *new_GP_received,
  /* TA_Gradient_new::GP_Merge_New_P21_to_Profile_loop::GradientProfile_out */ GradientProfile_t_TrackAtlasTypes *GradientProfile_out)
{
  /* TA_Gradient_new::GP_Merge_New_P21_to_Profile_loop */
  static Gradient_section_t_TrackAtlasTypes tmp;
  
  kcg_copy_GradientProfile_t_TrackAtlasTypes(GradientProfile_out, GP);
  if ((0 <= i) & (i < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(&tmp, &(*new_GP_received)[i]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &tmp,
      (Gradient_section_t_TrackAtlasTypes *)
        &DEFAULT_GradientSection_TrackAtlasTypes);
  }
  if ((0 <= i + First_Section_To_Replace) & (i + First_Section_To_Replace <
      50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &(*GradientProfile_out)[i + First_Section_To_Replace],
      &tmp);
  }
}
/* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop */
void MoveGPSectionsToNewLRBGafter_Loop_TA_Lib_internal(
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::i */kcg_int i,
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::ProfileIn */GradientProfile_t_TrackAtlasTypes *ProfileIn,
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::FirstElement */kcg_int FirstElement,
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::Distance_2LRBGs */kcg_int Distance_2LRBGs,
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::ProfileOut */GradientProfile_t_TrackAtlasTypes *ProfileOut)
{
  Gradient_section_t_TrackAtlasTypes tmp;
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::_L6 */ Gradient_section_t_TrackAtlasTypes _L6;
  
  if ((0 <= FirstElement + i) & (FirstElement + i < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &_L6,
      &(*ProfileIn)[FirstElement + i]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &_L6,
      (Gradient_section_t_TrackAtlasTypes *)
        &DEFAULT_GradientSection_TrackAtlasTypes);
  }
  kcg_copy_GradientProfile_t_TrackAtlasTypes(ProfileOut, ProfileIn);
  kcg_copy_Gradient_section_t_TrackAtlasTypes(&tmp, &_L6);
  tmp.Loc_LRBG = /* 1 */
    NormalizePos_TA_Lib_internal(_L6.Loc_LRBG - Distance_2LRBGs, 0);
  if ((0 <= i) & (i < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(&(*ProfileOut)[i], &tmp);
  }
}
/* TA_Lib_internal::FindStartOfNewGradientProfile */
void FindStartOfNewGradientProfile_TA_Lib_internal(
  /* TA_Lib_internal::FindStartOfNewGradientProfile::Profile_in */GradientProfile_t_TrackAtlasTypes *Profile_in,
  /* TA_Lib_internal::FindStartOfNewGradientProfile::New_Profile */GradientProfile_t_TrackAtlasTypes *New_Profile,
  outC_FindStartOfNewGradientProfile_TA_Lib_internal *outC)
{
  kcg_int i2;
  kcg_int i1;
  kcg_int tmp;
  kcg_int i;
  kcg_int noname;
  
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L1, New_Profile);
  outC->_L2 = outC->_L1[0].Loc_LRBG;
  for (i2 = 0; i2 < 33; i2++) {
    outC->_L198[i2] = outC->_L2;
  }
  outC->_L100 = 0;
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L93, Profile_in);
  for (i1 = 0; i1 < 33; i1++) {
    kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L98[i1], &outC->_L93);
  }
  outC->_L96 = kcg_true;
  outC->_L99 = outC->_L100;
  if (outC->_L96) {
    for (i = 0; i < 33; i++) {
      tmp = outC->_L99;
      /* 1 */
      FindStartOfNewGradientPro_TA_Lib_internal(
        i,
        tmp,
        outC->_L198[i],
        &outC->_L98[i],
        &outC->Context_1[i]);
      outC->_L99 = outC->Context_1[i].relevant_section;
      outC->_L94 = i + 1;
      if (!outC->Context_1[i].cont) {
        break;
      }
    }
  }
  else {
    outC->_L94 = 0;
  }
  noname = outC->_L94;
  outC->relevant_section = outC->_L99;
}
/* TA_Gradient_new::GP_Truncate_at_BG */
void GP_Truncate_at_BG_TA_Gradient_new(
  /* TA_Gradient_new::GP_Truncate_at_BG::Profile_in */ GradientProfile_t_TrackAtlasTypes *Profile_in,
  /* TA_Gradient_new::GP_Truncate_at_BG::Profile_out */ GradientProfile_t_TrackAtlasTypes *Profile_out)
{
  /* TA_Gradient_new::GP_Truncate_at_BG */ kcg_int acc1;
  /* TA_Gradient_new::GP_Truncate_at_BG */ GradientProfile_t_TrackAtlasTypes acc;
  /* TA_Gradient_new::GP_Truncate_at_BG */ kcg_bool cond_iterw;
  kcg_int i;
  /* TA_Gradient_new::GP_Truncate_at_BG::_L5 */ kcg_int _L5;
  
  _L5 = 0;
  /* 2 */ for (i = 0; i < 50; i++) {
    acc1 = _L5;
    /* 1 */
    GP_Find_First_Gsection_After_BG_loop_TA_Gradient_new(
      i,
      acc1,
      Profile_in,
      &cond_iterw,
      &_L5);
    /* 2 */ if (!cond_iterw) {
      break;
    }
  }
  kcg_copy_GradientProfile_t_TrackAtlasTypes(
    Profile_out,
    (GradientProfile_t_TrackAtlasTypes *)
      &DEFAULT_GradientProfile_TrackAtlasTypes);
  /* 3 */ for (i = 0; i < 50; i++) {
    kcg_copy_GradientProfile_t_TrackAtlasTypes(&acc, Profile_out);
    /* 1 */
    GP_Truncate_at_BG_loop_TA_Gradient_new(
      i,
      &acc,
      Profile_in,
      _L5,
      &cond_iterw,
      Profile_out);
    /* 3 */ if (!cond_iterw) {
      break;
    }
  }
}
/* TA_Lib_internal::MoveGPSectionsAbsolute_Loop */
void MoveGPSectionsAbsolute_Loop_TA_Lib_internal(
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::i */kcg_int i,
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::ProfileIn */GradientProfile_t_TrackAtlasTypes *ProfileIn,
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::msg_prvLRBG */kcg_bool msg_prvLRBG,
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::msg_LRBG */kcg_bool msg_LRBG,
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::pos_LRBG */L_internal_Type_Obu_BasicTypes_Pkg pos_LRBG,
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::pos_prvLRBG */L_internal_Type_Obu_BasicTypes_Pkg pos_prvLRBG,
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::ProfileOut */GradientProfile_t_TrackAtlasTypes *ProfileOut)
{
  static Gradient_section_t_TrackAtlasTypes tmp1;
  static kcg_int tmp;
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::IfBlock1::else */
  static kcg_bool else_clock_IfBlock1;
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::IfBlock1 */
  static kcg_bool IfBlock1_clock;
  /* TA_Lib_internal::MoveGPSectionsAbsolute_Loop::_L6 */
  static Gradient_section_t_TrackAtlasTypes _L6;
  
  IfBlock1_clock = msg_LRBG & !msg_prvLRBG;
  if (IfBlock1_clock) {
  }
  else {
    else_clock_IfBlock1 = !msg_LRBG & msg_prvLRBG;
  }
  if ((0 <= i) & (i < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(&_L6, &(*ProfileIn)[i]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &_L6,
      (Gradient_section_t_TrackAtlasTypes *)
        &DEFAULT_GradientSection_TrackAtlasTypes);
  }
  kcg_copy_GradientProfile_t_TrackAtlasTypes(ProfileOut, ProfileIn);
  kcg_copy_Gradient_section_t_TrackAtlasTypes(&tmp1, &_L6);
  tmp1.Loc_LRBG = 0;
  if (_L6.valid) {
    if (IfBlock1_clock) {
      tmp = pos_LRBG;
    }
    else if (else_clock_IfBlock1) {
      tmp = pos_prvLRBG;
    }
    else {
      tmp = 0;
    }
  }
  else {
    tmp = 0;
  }
  tmp1.Loc_Absolute = _L6.Loc_Absolute + tmp;
  if ((0 <= i) & (i < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(&(*ProfileOut)[i], &tmp1);
  }
}
/* TA_Gradient::GP_Correct_StartSection */
void GP_Correct_StartSection_TA_Gradient(
  /* TA_Gradient::GP_Correct_StartSection::Profile_in */GradientProfile_t_TrackAtlasTypes *Profile_in,
  /* TA_Gradient::GP_Correct_StartSection::Loc_BG */kcg_int Loc_BG,
  /* TA_Gradient::GP_Correct_StartSection::Profile_out */GradientProfile_t_TrackAtlasTypes *Profile_out)
{
  kcg_copy_GradientProfile_t_TrackAtlasTypes(Profile_out, Profile_in);
  kcg_copy_Gradient_section_t_TrackAtlasTypes(
    &(*Profile_out)[0],
    &(*Profile_in)[0]);
  (*Profile_out)[0].Loc_LRBG = 0;
}
/* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop */
void MoveGPSectionsToNewLRBGaf_TA_Lib_internal(
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::i */kcg_int i,
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::ProfileIn */GradientProfile_t_TrackAtlasTypes *ProfileIn,
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::FirstElement */kcg_int FirstElement,
  /* TA_Lib_internal::MoveGPSectionsToNewLRBGafter_Loop::Distance_2LRBGs */kcg_int Distance_2LRBGs,
  outC_MoveGPSectionsToNewLRBGaf_TA_Lib_internal *outC)
{
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L2, ProfileIn);
  outC->_L3 = FirstElement;
  outC->_L1 = i;
  outC->_L5 = outC->_L3 + outC->_L1;
  if ((0 <= outC->_L5) & (outC->_L5 < 10)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L6,
      &outC->_L2[outC->_L5]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L6,
      (Gradient_section_t_TrackAtlasTypes *)
        &DEFAULT_GradientSection_TrackAtlasTypes);
  }
  outC->_L8 = outC->_L6.Loc_LRBG;
  outC->_L4 = Distance_2LRBGs;
  outC->_L10 = outC->_L8 - outC->_L4;
  /* 1 */ NormalizePos_TA_Lib_internal(outC->_L10, 0, &outC->Context_1);
  outC->_L12 = outC->Context_1.Out;
  kcg_copy_Gradient_section_t_TrackAtlasTypes(&outC->_L9, &outC->_L6);
  if (kcg_true) {
    outC->_L9.Loc_LRBG = outC->_L12;
  }
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L7, &outC->_L2);
  if ((0 <= outC->_L1) & (outC->_L1 < 10)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L7[outC->_L1],
      &outC->_L9);
  }
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->ProfileOut, &outC->_L7);
}
/* TA_Gradient::Update_GP_then_LRBG */
void Update_GP_then_LRBG_TA_Gradient(
  /* TA_Gradient::Update_GP_then_LRBG::GP_in */GradientProfile_t_TrackAtlasTypes *GP_in,
  /* TA_Gradient::Update_GP_then_LRBG::P27V1_in */P021_OBU_T_TM *P27V1_in,
  /* TA_Gradient::Update_GP_then_LRBG::TrainPosition_in */trainPosition_T_TrainPosition_Types_Pck *TrainPosition_in,
  outC_Update_GP_then_LRBG_TA_Gradient *outC)
{
  kcg_copy_trainPosition_T_TrainPosition_Types_Pck(
    &outC->_L4,
    TrainPosition_in);
  outC->_L13 = outC->_L4.LRBG.location.nominal;
  kcg_copy_P021_OBU_T_TM(&outC->_L2, P27V1_in);
  /* 1 */
  _21_Convert_P21_to_DistancePr_TA_Gradient(&outC->_L2, &outC->Context_1);
  kcg_copy_GradientProfile_t_TrackAtlasTypes(
    &outC->_L6,
    &outC->Context_1.GradientProfile);
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L1, GP_in);
  /* 1 */
  Update_GP_per_LRBG_TA_Lib_internal(
    &outC->_L6,
    &outC->_L1,
    &outC->_1_Context_1);
  kcg_copy_GradientProfile_t_TrackAtlasTypes(
    &outC->_L5,
    &outC->_1_Context_1.GradientdProfile_out);
  outC->_L11 = outC->_L4.prvLRBG.location.nominal;
  outC->_L10 = outC->_L13 - outC->_L11;
  /* 1 */
  MoveGPSectionsToNewLRBGafter_TA_Lib_internal(
    &outC->_L5,
    outC->_L10,
    &outC->_2_Context_1);
  kcg_copy_GradientProfile_t_TrackAtlasTypes(
    &outC->_L12,
    &outC->_2_Context_1.ProfileOut);
  kcg_copy_GradientProfile_t_TrackAtlasTypes(
    &outC->new_profile_out,
    &outC->_L12);
}
/* TA_Gradient_new::GP_Normalize_Profile_loop */
void GP_Normalize_Profile_loop_TA_Gradient_new(
  /* TA_Gradient_new::GP_Normalize_Profile_loop::i */ kcg_int i,
  /* TA_Gradient_new::GP_Normalize_Profile_loop::ProfileIn */ GradientProfile_t_TrackAtlasTypes *ProfileIn,
  /* TA_Gradient_new::GP_Normalize_Profile_loop::pos_BG */ L_internal_Type_Obu_BasicTypes_Pkg pos_BG,
  /* TA_Gradient_new::GP_Normalize_Profile_loop::ProfileNormalized_LRBG */ GradientProfile_t_TrackAtlasTypes *ProfileNormalized_LRBG)
{
  /* TA_Gradient_new::GP_Normalize_Profile_loop */ Gradient_section_t_TrackAtlasTypes tmp;
  /* TA_Gradient_new::GP_Normalize_Profile_loop::_L4 */ Gradient_section_t_TrackAtlasTypes _L4;
  /* TA_Gradient_new::GP_Normalize_Profile_loop::_L26 */ kcg_int _L26;
  
  if ((0 <= i) & (i < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(&_L4, &(*ProfileIn)[i]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &_L4,
      (Gradient_section_t_TrackAtlasTypes *)
        &DEFAULT_GP_Section_TA_Gradient_new);
  }
  if ((0 <= i + 1) & (i + 1 < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(&tmp, &(*ProfileIn)[i + 1]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &tmp,
      (Gradient_section_t_TrackAtlasTypes *)
        &DEFAULT_GP_Section_TA_Gradient_new);
  }
  _L26 = tmp.Loc_Absolute - _L4.Loc_Absolute;
  kcg_copy_GradientProfile_t_TrackAtlasTypes(ProfileNormalized_LRBG, ProfileIn);
  kcg_copy_Gradient_section_t_TrackAtlasTypes(&tmp, &_L4);
  /* 2 */ if (_L4.valid) {
    tmp.Loc_LRBG = _L4.Loc_Absolute - pos_BG;
  }
  else {
    tmp.Loc_LRBG = 0;
  }
  /* 3 */ if (_L26 > 0) {
    tmp.L_Gradient = _L26;
  }
  else {
    tmp.L_Gradient = 0;
  }
  if ((0 <= i) & (i < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &(*ProfileNormalized_LRBG)[i],
      &tmp);
  }
}
/* TA_Export::GradientProfile_to_DMI */
void GradientProfile_to_DMI_TA_Export(
  /* TA_Export::GradientProfile_to_DMI::Gradient_Profile_in */GradientProfile_t_TrackAtlasTypes *Gradient_Profile_in,
  outC_GradientProfile_to_DMI_TA_Export *outC)
{
  kcg_int i;
  
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L1, Gradient_Profile_in);
  for (i = 0; i < 50; i++) {
    /* 1 */
    GradientProfile_to_DMI_loop_TA_Export(&outC->_L1[i], &outC->Context_1[i]);
    kcg_copy__3_GradientProfile_for_DMI_section_t_TrackAtlasTypes(
      &outC->_L2[i],
      &outC->Context_1[i].Gradiient_section_for_DMI_out);
  }
  kcg_copy_GradientProfile_for_DMI_t_TrackAtlasTypes(
    &outC->Gradient_Profile_for_DMI_out,
    &outC->_L2);
}
/* TA_Lib_internal::FindStartOfNewGradientProfile_LOOP */
void FindStartOfNewGradientPro_TA_Lib_internal(
  /* TA_Lib_internal::FindStartOfNewGradientProfile_LOOP::i */kcg_int i,
  /* TA_Lib_internal::FindStartOfNewGradientProfile_LOOP::Acc */kcg_int Acc,
  /* TA_Lib_internal::FindStartOfNewGradientProfile_LOOP::distance_in */L_internal_Type_Obu_BasicTypes_Pkg distance_in,
  /* TA_Lib_internal::FindStartOfNewGradientProfile_LOOP::Profile_in */GradientProfile_t_TrackAtlasTypes *Profile_in,
  outC_FindStartOfNewGradientPro_TA_Lib_internal *outC)
{
  kcg_int noname;
  
  outC->_L14 = i;
  outC->_L12 = 0;
  outC->_L13 = outC->_L14 > outC->_L12;
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L2, Profile_in);
  outC->_L3 = i;
  if ((0 <= outC->_L3) & (outC->_L3 < 10)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L4,
      &outC->_L2[outC->_L3]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L4,
      (Gradient_section_t_TrackAtlasTypes *)
        &DEFAULT_GradientSection_TrackAtlasTypes);
  }
  outC->_L5 = outC->_L4.Loc_LRBG;
  outC->_L15 = outC->_L12 == outC->_L5;
  outC->_L16 = outC->_L13 & outC->_L15;
  outC->_L17 = !outC->_L16;
  outC->_L1 = distance_in;
  outC->_L6 = outC->_L5 < outC->_L1;
  outC->_L18 = outC->_L17 & outC->_L6;
  outC->_L8 = Acc;
  noname = outC->_L8;
  outC->_L7 = i;
  outC->relevant_section = outC->_L7;
  outC->cont = outC->_L18;
}
/* TA_Lib_internal::FindFirstRelevantGPForNewLRBG_Loop */
void FindFirstRelevantGPForNew_TA_Lib_internal(
  /* TA_Lib_internal::FindFirstRelevantGPForNewLRBG_Loop::i */kcg_int i,
  /* TA_Lib_internal::FindFirstRelevantGPForNewLRBG_Loop::Acc */kcg_int Acc,
  /* TA_Lib_internal::FindFirstRelevantGPForNewLRBG_Loop::Profile_in */GradientProfile_t_TrackAtlasTypes *Profile_in,
  /* TA_Lib_internal::FindFirstRelevantGPForNewLRBG_Loop::Distance_2LRBGs */kcg_int Distance_2LRBGs,
  outC_FindFirstRelevantGPForNew_TA_Lib_internal *outC)
{
  kcg_int noname;
  
  outC->_L182 = i;
  outC->_L176 = 0;
  outC->_L181 = outC->_L182 > outC->_L176;
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L170, Profile_in);
  outC->_L168 = i;
  if ((0 <= outC->_L168) & (outC->_L168 < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L172,
      &outC->_L170[outC->_L168]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L172,
      (Gradient_section_t_TrackAtlasTypes *)
        &DEFAULT_GradientSection_TrackAtlasTypes);
  }
  outC->_L173 = outC->_L172.Loc_LRBG;
  outC->_L177 = outC->_L176 == outC->_L173;
  outC->_L178 = outC->_L181 & outC->_L177;
  outC->_L179 = !outC->_L178;
  outC->_L171 = Distance_2LRBGs;
  outC->_L174 = outC->_L173 < outC->_L171;
  outC->_L180 = outC->_L179 & outC->_L174;
  outC->cont = outC->_L180;
  outC->_L175 = i;
  outC->_L169 = Acc;
  noname = outC->_L169;
  outC->relevant_section = outC->_L175;
}
/* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop */
void GP_Convert_P21_to_DistanceProfile_loop_TA_Gradient(
  /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::i */kcg_int i,
  /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::ProfileAccu */GradientProfile_t_TrackAtlasTypes *ProfileAccu,
  /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::SectionIn */P021_OBU_sectionlist_enum_T_TM *SectionIn,
  /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::q_scale */Q_SCALE q_scale,
  /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::GradientProfile */GradientProfile_t_TrackAtlasTypes *GradientProfile)
{
  static kcg_int tmp4;
  static kcg_int tmp3;
  static G_internal_Type_Obu_BasicTypes_Pkg tmp2;
  static L_internal_Type_Obu_BasicTypes_Pkg tmp1;
  static P021_section_enum_T_TM tmp;
  /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::_L123 */
  static P021_section_enum_T_TM _L123;
  /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::_L143 */
  static Gradient_section_t_TrackAtlasTypes _L143;
  
  if ((0 <= i - 1) & (i - 1 < 50)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(&_L143, &(*ProfileAccu)[i - 1]);
  }
  else {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &_L143,
      (Gradient_section_t_TrackAtlasTypes *) &DEFAULT_GP_Section_TA_Gradient);
  }
  if ((0 <= i) & (i < 33)) {
    kcg_copy_P021_section_enum_T_TM(&_L123, &(*SectionIn)[i]);
  }
  else {
    kcg_copy_P021_section_enum_T_TM(
      &_L123,
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
  tmp2 = /* 3 */
    Normalize_Distance_d_internal_t_TA_Lib_internal(q_scale, _L123.d_gradient);
  kcg_copy_GradientProfile_t_TrackAtlasTypes(GradientProfile, ProfileAccu);
  if (_L123.valid) {
    tmp4 = tmp2 + _L143.Loc_Absolute;
    tmp3 = tmp2 + _L143.Loc_LRBG;
  }
  else {
    tmp4 = 0;
    tmp3 = 0;
  }
  tmp2 = /* 2 */ EVAL_Q_GDIR_TA_Lib_internal(_L123.q_gdir, _L123.g_a);
  if ((0 <= i + 1) & (i + 1 < 33)) {
    kcg_copy_P021_section_enum_T_TM(&tmp, &(*SectionIn)[i + 1]);
  }
  else {
    kcg_copy_P021_section_enum_T_TM(
      &tmp,
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
  tmp1 = /* 4 */
    Normalize_Distance_d_internal_t_TA_Lib_internal(q_scale, tmp.d_gradient);
  if ((0 <= i) & (i < 50)) {
    (*GradientProfile)[i].valid = _L123.valid;
    (*GradientProfile)[i].Loc_Absolute = tmp4;
    (*GradientProfile)[i].Loc_LRBG = tmp3;
    (*GradientProfile)[i].Gradient = tmp2;
    (*GradientProfile)[i].L_Gradient = tmp1;
  }
}
/* TA_Gradient::Convert_P21_to_DistanceProfile_loop */
void Convert_P21_to_DistancePr_TA_Gradient(
  /* TA_Gradient::Convert_P21_to_DistanceProfile_loop::i */kcg_int i,
  /* TA_Gradient::Convert_P21_to_DistanceProfile_loop::acc */GradientProfile_t_TrackAtlasTypes *acc,
  /* TA_Gradient::Convert_P21_to_DistanceProfile_loop::SectionIn */P021_OBU_sectionlist_enum_T_TM *SectionIn,
  /* TA_Gradient::Convert_P21_to_DistanceProfile_loop::q_scale */Q_SCALE q_scale,
  outC_Convert_P21_to_DistancePr_TA_Gradient *outC)
{
  outC->_L134 = i;
  outC->_L126 = 1;
  outC->_L141 = outC->_L134 + outC->_L126;
  kcg_copy_P021_OBU_sectionlist_enum_T_TM(&outC->_L128, SectionIn);
  if ((0 <= outC->_L141) & (outC->_L141 < 33)) {
    kcg_copy_P021_section_enum_T_TM(&outC->_L140, &outC->_L128[outC->_L141]);
  }
  else {
    kcg_copy_P021_section_enum_T_TM(
      &outC->_L140,
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
  outC->_L139 = q_scale;
  kcg_copy_P021_OBU_sectionlist_enum_T_TM(&outC->_L121, SectionIn);
  if ((0 <= outC->_L134) & (outC->_L134 < 33)) {
    kcg_copy_P021_section_enum_T_TM(&outC->_L123, &outC->_L121[outC->_L134]);
  }
  else {
    kcg_copy_P021_section_enum_T_TM(
      &outC->_L123,
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
  outC->_L138 = outC->_L123.d_gradient;
  outC->_L137 = outC->_L140.d_gradient;
  outC->_L130 = outC->_L123.valid;
  /* 3 */
  Normalize_Distance_d_inte_TA_Lib_internal(
    outC->_L139,
    outC->_L138,
    &outC->Context_3);
  outC->_L135 = outC->Context_3.d_internal;
  outC->_L129 = outC->_L123.q_gdir;
  outC->_L124 = outC->_L123.g_a;
  /* 2 */
  EVAL_Q_GDIR_TA_Lib_internal(outC->_L129, outC->_L124, &outC->Context_2);
  outC->_L127 = outC->Context_2.gradient;
  /* 4 */
  Normalize_Distance_d_inte_TA_Lib_internal(
    outC->_L139,
    outC->_L137,
    &outC->Context_4);
  outC->_L122 = outC->Context_4.d_internal;
  outC->_L132 = outC->_L122 - outC->_L135;
  outC->_L136.valid = outC->_L130;
  outC->_L136.Loc_Absolute = outC->_L135;
  outC->_L136.Loc_LRBG = outC->_L135;
  outC->_L136.Gradient = outC->_L127;
  outC->_L136.L_Gradient = outC->_L132;
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L125, acc);
  outC->_L131 = i;
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L133, &outC->_L125);
  if ((0 <= outC->_L131) & (outC->_L131 < 10)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L133[outC->_L131],
      &outC->_L136);
  }
  kcg_copy_GradientProfile_t_TrackAtlasTypes(
    &outC->GradientProfile,
    &outC->_L133);
}
/* TA_Gradient::Build_GradientProfile */
void Build_GradientProfile_TA_Gradient(
  /* TA_Gradient::Build_GradientProfile::reset */kcg_bool reset,
  /* TA_Gradient::Build_GradientProfile::MessageIn */ReceivedMessage_T_Common_Types_Pkg *MessageIn,
  /* TA_Gradient::Build_GradientProfile::train_position */trainPosition_T_TrainPosition_Types_Pck *train_position,
  outC_Build_GradientProfile_TA_Gradient *outC)
{
  /* TA_Gradient::Build_GradientProfile::_L60 */
  static P021_OBU_T_TM _L60;
  /* TA_Gradient::Build_GradientProfile::_L108 */
  static kcg_int _L108;
  /* TA_Gradient::Build_GradientProfile::_L240 */
  static kcg_bool _L240;
  /* TA_Gradient::Build_GradientProfile::_L243 */
  static kcg_int _L243;
  /* TA_Gradient::Build_GradientProfile::_L244 */
  static kcg_bool _L244;
  
  /* 1 */ Read_P021_TM(&(*MessageIn).packets, &outC->updated, &_L60);
  if (outC->init) {
    _L243 = 0;
  }
  else {
    _L243 = outC->rem__L111;
  }
  _L240 = outC->updated | (_L243 != (*train_position).LRBG.nid_bg);
  /* 1 */ Eval_LRBG_TA_Lib_internal(MessageIn, &_L244, &_L243, &_L108);
  if (outC->updated) {
    /* 1 */
    GP_Preprocessing_TA_Gradient(
      &_L60,
      reset,
      (kcg_bool) (_L108 == (*train_position).LRBG.nid_bg),
      (kcg_bool) (_L108 == (*train_position).prvLRBG.nid_bg),
      (*train_position).LRBG.location.nominal,
      (*train_position).prvLRBG.location.nominal,
      &outC->_L237);
  }
  else if (outC->init) {
    kcg_copy_GradientProfile_t_TrackAtlasTypes(
      &outC->_L237,
      (GradientProfile_t_TrackAtlasTypes *)
        &DEFAULT_GradientProfile_TrackAtlasTypes);
  }
  if (_L240) {
    /* 1 */
    GP_Postprocessing_TA_Gradient(
      &outC->_L237,
      (*train_position).LRBG.location.nominal,
      (*train_position).prvLRBG.location.nominal,
      (*train_position).prvLRBG.valid,
      &outC->Context_1);
    kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->GP, &outC->Context_1.GP);
    outC->available = outC->Context_1.available;
  }
  else if (outC->init) {
    outC->available = kcg_false;
    kcg_copy_GradientProfile_t_TrackAtlasTypes(
      &outC->GP,
      (GradientProfile_t_TrackAtlasTypes *)
        &DEFAULT_GradientProfile_TrackAtlasTypes);
  }
  outC->init = kcg_false;
  outC->rem__L111 = (*train_position).LRBG.nid_bg;
}