// File: /workspace/github_c_makefile_star2_O0/ugobas[P]tnm/anharmonic_tnm.c
// Function: Assign_interactions_SB
void Assign_interactions_SB(struct interaction *Int_list, int N_int,
			    struct interaction **Int_KB, int *aa_seq)
{
  printf("Assigning structure-based interactions\n");
  printf("--> NPAR  = %8d        number of parameters: ",NPAR);
  printf("2 (Morse) 3 (barrier)\n");
  printf("--> N_int = %8d        number of native interactions\n",N_int);
  printf("--> Int_list[]         list of all native interactions\n");
  printf("--> Int_KB[][]         knowledge-based interactions\n");
  printf("--> aa_seq[]           a.a. type ID of each residue in the seq\n");
  printf("--> OUTPUT: Int_list gets filled up with energy parameters\n");

  int n, n_err=0; struct interaction *Int=Int_list, *I_KB=NULL;
  for(n=0; n<N_int; n++){
    double V0, r3;
    Int->r1=100;
    if(NPAR==2 || aa_seq==NULL || Int_KB==NULL){
      Int->A1=0;
      Int->A4=E_repulsion;
      double fc;
      if(POW){
	Int->A2=-2*Int->A4*pow(Int->r0, -lambda_2);
	fc=pow(C_THR, -lambda);
      }else{
	Int->A2=-2*Int->A4*exp(-lambda_2*Int->r0);
	fc=exp(-lambda*C_THR);
      }
      double fc2=fc*fc;
      Int->A0=-Int->A4*fc2*fc2-Int->A2*fc2;
      V0=Compute_V(Int, Int->r0);
    }else{
      int a=aa_seq[Int->res1], b=aa_seq[Int->res1];
      I_KB=Int_KB[a]+b;
      V0=Compute_V(I_KB, Int->r0);
      if(Determine_Ak(Int, V0, Int->sec_der, n))n_err++;
      if(Int->A4<0){
	printf("POWER= %d lambda= %.2f (rSB/rKB)= %.3g\n",
	       POW, lambda, Int->r0/I_KB->r0);
      }
    }
    Int->E_min=V0;
    double kk=Compute_V2(Int, Int->r0, 0);
    if(fabs(1-Int->sec_der/kk)>0.001){
      printf("ERROR in Assign_int_SB n=%d r= %.2f ", n, Int->r0);
      printf("k= %.4g (old) %.4g (new) /= %.3f  ", 
	     Int->sec_der, kk, Int->sec_der/kk);
      printf("V0= %.3g\n", Compute_V(Int, Int->r0));
      if(I_KB){
	printf("Knowledge-based: NPAR=%d r0= %.3g r1=%.2g r2=%.2g r3=%.2g\n",
	       NPAR, I_KB->r0, I_KB->r1, I_KB->r2, I_KB->r3);
	printf("b= %.3g %.3g %.3g\n", I_KB->b3, I_KB->b4, I_KB->b5);
	printf("V_KB=  %.3g\n",Compute_V(I_KB, Int->r0));
      }
      exit(8);
    }
    if(NPAR==2){
      // Interpolation is not a good idea
      //r3=(Int->r0+C_THR)*0.5; if(r3>C1_THR)r3=C1_THR;
      r3=C_THR;
      Int->r1=r3; Int->r2=r3;
    }else{
      // Interpolate structure based and knowledge based
      float r1, r2;
      if(Int->r0<I_KB->r0){r1=Int->r0; r2=I_KB->r0;}
      else{r1=I_KB->r0; r2=Int->r0;}
      //r3=(r2+C_THR)*0.5; if(r3>C1_THR)r3=C1_THR;
      r3=C_THR;
      float d=(r2-r1)/3; r1+=d; r2-=d;
      Interpolation(Int, I_KB, r1, r2);
      if(isnan(Int->a0) || isnan(Int->a1) || isnan(Int->a2) ||
	 isnan(Int->a3) || isnan(Int->a4) || isnan(Int->a5)){
	printf("ERROR in Assign_SB, n=%d KB= %d\n", n, NPAR);
	printf("Interpolation r1= %.2f r2= %.2f\n", r1, r2);
	printf("a= %.3g %.3g %.3g %.3g %.3g %.3g\n",
	       Int->a0, Int->a1, Int->a2, Int->a3, Int->a4, Int->a5);
	exit(8);
      }
    }
    Int->r3=r3;
    /*Interpolation(Int, NULL, r3, C_THR);
    if(isnan(Int->b3) || isnan(Int->b4) || isnan(Int->b5)){
      printf("ERROR in Assign_SB, n=%d KB= %d\n", n, NPAR);
      printf("Interpolation r3= %.2f r4= %.2f\n", r3, C_THR);
      printf("b= %.3g %.3g %.3g\n", Int->b3, Int->b4, Int->b5);
      exit(8);
      }*/
    Int++;
  }
  printf("%d SB interactions assigned\n", N_int);
  if(n_err){
    printf("ERRORS in SB in %d pairs of residues/atoms\n", n_err);
    //exit(8);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
leaq 0x53dbc(%rip), %rdi     # 0x7cfbd
movb $0x0, %al
callq 0x10d0
movl 0x62c32(%rip), %esi     # 0x8be40
leaq 0x53dd0(%rip), %rdi     # 0x7cfe5
movb $0x0, %al
callq 0x10d0
leaq 0x53df0(%rip), %rdi     # 0x7d013
movb $0x0, %al
callq 0x10d0
movl -0xc(%rbp), %esi
leaq 0x53df6(%rip), %rdi     # 0x7d02a
movb $0x0, %al
callq 0x10d0
leaq 0x53e1e(%rip), %rdi     # 0x7d060
movb $0x0, %al
callq 0x10d0
leaq 0x53e48(%rip), %rdi     # 0x7d098
movb $0x0, %al
callq 0x10d0
leaq 0x53e6f(%rip), %rdi     # 0x7d0cd
movb $0x0, %al
callq 0x10d0
leaq 0x53ea1(%rip), %rdi     # 0x7d10d
movb $0x0, %al
callq 0x10d0
movl $0x0, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
cmpl -0xc(%rbp), %eax
jge 0x29964
movq -0x30(%rbp), %rax
movss 0x4ce07(%rip), %xmm0    # 0x760b0
movss %xmm0, 0x10(%rax)
cmpl $0x2, 0x62b8b(%rip)     # 0x8be40
je 0x292c9
cmpq $0x0, -0x20(%rbp)
je 0x292c9
cmpq $0x0, -0x18(%rbp)
jne 0x294b1
movq -0x30(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x38(%rax)
leaq 0x62dbc(%rip), %rax     # 0x8c098
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, 0x48(%rax)
leaq 0x622b8(%rip), %rax     # 0x8b5ac
cmpl $0x0, (%rax)
je 0x2938f
movq -0x30(%rbp), %rax
movsd 0x5314f(%rip), %xmm0    # 0x7c458
mulsd 0x48(%rax), %xmm0
movsd %xmm0, -0x80(%rbp)
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
movsd 0x72f7c(%rip), %xmm1    # 0x9c2a0
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
callq 0x1080
movaps %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, 0x40(%rax)
leaq 0x62ccc(%rip), %rax     # 0x8c028
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x62d29(%rip), %rax     # 0x8c094
movss (%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
cvtss2sd %xmm1, %xmm1
callq 0x1080
movsd %xmm0, -0x50(%rbp)
jmp 0x2941e
movq -0x30(%rbp), %rax
movsd 0x530bd(%rip), %xmm0    # 0x7c458
mulsd 0x48(%rax), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd 0x72ef0(%rip), %xmm0    # 0x9c2a0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movq -0x30(%rbp), %rax
mulsd 0x20(%rax), %xmm0
callq 0x1230
movaps %xmm0, %xmm1
movsd -0x88(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, 0x40(%rax)
leaq 0x62ca0(%rip), %rax     # 0x8c094
movss (%rax), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
leaq 0x62c1c(%rip), %rax     # 0x8c028
mulss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x1230
movsd %xmm0, -0x50(%rbp)
movsd -0x50(%rbp), %xmm0
mulsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movq -0x30(%rbp), %rax
movsd 0x48(%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x58(%rbp), %xmm0
movsd -0x58(%rbp), %xmm2
movq -0x30(%rbp), %rax
movsd 0x40(%rax), %xmm1
mulsd -0x58(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, 0x30(%rax)
movq -0x30(%rbp), %rdi
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
callq 0x27810
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x40(%rbp)
jmp 0x29582
movq -0x20(%rbp), %rax
movq -0x30(%rbp), %rcx
movslq 0x8(%rcx), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x5c(%rbp)
movq -0x20(%rbp), %rax
movq -0x30(%rbp), %rcx
movslq 0x8(%rcx), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x60(%rbp)
movq -0x18(%rbp), %rax
movslq -0x5c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x60(%rbp), %rcx
imulq $0xc8, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
callq 0x27810
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x40(%rbp)
movq -0x30(%rbp), %rdi
movsd -0x40(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd 0x28(%rax), %xmm1
movl -0x24(%rbp), %esi
callq 0x2a0a0
cmpl $0x0, %eax
je 0x2953a
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
movq -0x30(%rbp), %rax
xorps %xmm0, %xmm0
ucomisd 0x48(%rax), %xmm0
jbe 0x29580
leaq 0x6205d(%rip), %rax     # 0x8b5ac
movl (%rax), %esi
leaq 0x62b3c(%rip), %rax     # 0x8c094
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm1
movq -0x38(%rbp), %rax
divsd 0x20(%rax), %xmm1
leaq 0x53bd0(%rip), %rdi     # 0x7d149
movb $0x2, %al
callq 0x10d0
jmp 0x29582
movsd -0x40(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, 0xb8(%rax)
movq -0x30(%rbp), %rdi
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
xorl %esi, %esi
callq 0x28af0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x68(%rbp)
movq -0x30(%rbp), %rax
movsd 0x28(%rax), %xmm1
divsd -0x68(%rbp), %xmm1
movsd 0x4ca7e(%rip), %xmm0    # 0x76048
subsd %xmm1, %xmm0
movaps 0x52ebb(%rip), %xmm1    # 0x7c490
pand %xmm1, %xmm0
movsd 0x52e7f(%rip), %xmm1    # 0x7c460
ucomisd %xmm1, %xmm0
jbe 0x2970a
movl -0x24(%rbp), %esi
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
leaq 0x53b73(%rip), %rdi     # 0x7d171
movb $0x1, %al
callq 0x10d0
movq -0x30(%rbp), %rax
movsd 0x28(%rax), %xmm0
movsd -0x68(%rbp), %xmm1
movq -0x30(%rbp), %rax
movsd 0x28(%rax), %xmm2
divsd -0x68(%rbp), %xmm2
leaq 0x53b6e(%rip), %rdi     # 0x7d196
movb $0x3, %al
callq 0x10d0
movq -0x30(%rbp), %rdi
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
callq 0x27810
cvtss2sd %xmm0, %xmm0
leaq 0x53b69(%rip), %rdi     # 0x7d1b9
movb $0x1, %al
callq 0x10d0
cmpq $0x0, -0x38(%rbp)
je 0x29700
movl 0x627d8(%rip), %esi     # 0x8be40
movq -0x38(%rbp), %rax
movsd 0x20(%rax), %xmm0
movq -0x38(%rbp), %rax
movss 0x10(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
movq -0x38(%rbp), %rax
movss 0x14(%rax), %xmm2
cvtss2sd %xmm2, %xmm2
movq -0x38(%rbp), %rax
movss 0x18(%rax), %xmm3
cvtss2sd %xmm3, %xmm3
leaq 0x53b24(%rip), %rdi     # 0x7d1c3
movb $0x4, %al
callq 0x10d0
movq -0x38(%rbp), %rax
movsd 0xa0(%rax), %xmm0
movq -0x38(%rbp), %rax
movsd 0xa8(%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0xb0(%rax), %xmm2
leaq 0x58571(%rip), %rdi     # 0x81c42
movb $0x3, %al
callq 0x10d0
movq -0x38(%rbp), %rdi
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
callq 0x27810
cvtss2sd %xmm0, %xmm0
leaq 0x53b05(%rip), %rdi     # 0x7d1fe
movb $0x1, %al
callq 0x10d0
movl $0x8, %edi
callq 0x1210
cmpl $0x2, 0x6272f(%rip)     # 0x8be40
jne 0x29750
leaq 0x6290e(%rip), %rax     # 0x8c028
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x48(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, 0x10(%rax)
movsd -0x48(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, 0x14(%rax)
jmp 0x29936
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm1
movq -0x38(%rbp), %rax
movsd 0x20(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2978e
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x6c(%rbp)
movq -0x38(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x70(%rbp)
jmp 0x297b2
movq -0x38(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x6c(%rbp)
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x70(%rbp)
leaq 0x6286f(%rip), %rax     # 0x8c028
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
movss -0x70(%rbp), %xmm0
subss -0x6c(%rbp), %xmm0
movss 0x4c8a0(%rip), %xmm1    # 0x76078
divss %xmm1, %xmm0
movss %xmm0, -0x74(%rbp)
movss -0x74(%rbp), %xmm0
addss -0x6c(%rbp), %xmm0
movss %xmm0, -0x6c(%rbp)
movss -0x74(%rbp), %xmm1
movss -0x70(%rbp), %xmm0
subss %xmm1, %xmm0
movss %xmm0, -0x70(%rbp)
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
movss -0x6c(%rbp), %xmm0
movss -0x70(%rbp), %xmm1
callq 0x2a5e0
movq -0x30(%rbp), %rax
movsd 0x70(%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x298a3
movq -0x30(%rbp), %rax
movsd 0x78(%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x298a3
movq -0x30(%rbp), %rax
movsd 0x80(%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x298a3
movq -0x30(%rbp), %rax
movsd 0x88(%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x298a3
movq -0x30(%rbp), %rax
movsd 0x90(%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x298a3
movq -0x30(%rbp), %rax
movsd 0x98(%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x298a3
jmp 0x29934
movl -0x24(%rbp), %esi
movl 0x62594(%rip), %edx     # 0x8be40
leaq 0x53958(%rip), %rdi     # 0x7d20b
movb $0x0, %al
callq 0x10d0
movss -0x6c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movss -0x70(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
leaq 0x53959(%rip), %rdi     # 0x7d22c
movb $0x2, %al
callq 0x10d0
movq -0x30(%rbp), %rax
movsd 0x70(%rax), %xmm0
movq -0x30(%rbp), %rax
movsd 0x78(%rax), %xmm1
movq -0x30(%rbp), %rax
movsd 0x80(%rax), %xmm2
movq -0x30(%rbp), %rax
movsd 0x88(%rax), %xmm3
movq -0x30(%rbp), %rax
movsd 0x90(%rax), %xmm4
movq -0x30(%rbp), %rax
movsd 0x98(%rax), %xmm5
leaq 0x5392a(%rip), %rdi     # 0x7d24d
movb $0x6, %al
callq 0x10d0
movl $0x8, %edi
callq 0x1210
jmp 0x29936
movsd -0x48(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, 0x18(%rax)
movq -0x30(%rbp), %rax
addq $0xc8, %rax
movq %rax, -0x30(%rbp)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x29291
movl -0xc(%rbp), %esi
leaq 0x53901(%rip), %rdi     # 0x7d26f
movb $0x0, %al
callq 0x10d0
cmpl $0x0, -0x28(%rbp)
je 0x2998c
movl -0x28(%rbp), %esi
leaq 0x53907(%rip), %rdi     # 0x7d28c
movb $0x0, %al
callq 0x10d0
addq $0x90, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)