// File: /workspace/github_c_makefile_star2_O1/ugobas[P]tnm/ridge_regression.c
// Function: Score_computation
void Score_computation(struct ridge_fit *fit,
		       float *lambda, float **evec,
		       float *yalpha, float *ya2, float *D,
		       float E0, float Y2, float *A_ref, float *A_inf,
		       int P, int N)
{
  int a;
  double H1=0, H2=0, H3=0, H2l=0, H3l=0, L1=0; 
  for(a=0; a<P; a++){
    float laLa=lambda[a]+fit->Lambda;   
    L1+=1./laLa;
    float yl=ya2[a]/laLa;  H1+=yl;
    yl/=laLa; H2+=yl;
    H2l+=yl*lambda[a];
    yl/=laLa; H3+=yl;
    H3l+=yl*lambda[a];
  }
  float csi=H2/H2l;
  //fit->nu=1.+fit->Lambda*csi; 
  fit->nu=H1/H2l; 
  fit->E=Y2-H1*fit->nu;
  fit->Cv=fit->Lambda*H1*(H1*H3-H2*H2)/(H2l*H2l);
  fit->A2=H2*fit->nu*fit->nu;
  fit->Sv1=fit->Lambda*H3-H3l;

  //*Cv2=yL5;
  //double E_nu=Y2-(H1+Lambda*H2);
  float Trace=(N-P+fit->Lambda*L1);
  float E_nu=Y2-2*H1+H2l;
  fit->GCV=N*E_nu/(Trace*Trace);
  fit->RR=((N-P)*E_nu/E0-2*Trace)/N;

  float A_ns[P]; 
  for(a=0; a<P; a++)A_ns[a]=yalpha[a]/(lambda[a]+fit->Lambda);
  for(a=0; a<P; a++){
    double sum=0; for(int b=0; b<P; b++)sum+=A_ns[b]*evec[b][a];
    fit->A[a]=fit->nu*sum;
  }

  double sum_csi=0, sum_inf=0;
  for(a=0; a<P; a++){
    float d=fit->A[a]-csi*A_ref[a]; sum_csi+=d*d;
    d=fit->A[a]-A_inf[a]; sum_inf+=d*d;
  }
  fit->LF_csi=fit->Lambda*sum_csi;
  fit->LF_inf=fit->Lambda*sum_inf;
  float mu_inv=1./(1+2*fit->Lambda*(csi-csi_inf));
  fit->LF_mu=fit->LF_inf*mu_inv;

  double norm=0, R2=0, Sh=0;
  for(a=0; a<P; a++){
    float x=fabs(fit->A[a]); R2+=x*x; if(x)Sh+=x*log(x); norm+=x;
  }
  fit->R2=R2/(norm*norm);
  fit->Sh=-Sh/norm+log(norm);

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
movl 0x20(%rbp), %edi
movl 0x18(%rbp), %eax
movl %eax, %r14d
testl %eax, %eax
jle 0x2c0a1
movss 0xc(%rbx), %xmm8
xorpd %xmm4, %xmm4
xorl %r10d, %r10d
movsd 0x2504d(%rip), %xmm9    # 0x51040
xorpd %xmm2, %xmm2
xorpd %xmm6, %xmm6
xorpd %xmm3, %xmm3
xorpd %xmm7, %xmm7
xorpd %xmm5, %xmm5
movss (%rsi,%r10,4), %xmm10
movaps %xmm10, %xmm11
addss %xmm8, %xmm11
xorps %xmm12, %xmm12
cvtss2sd %xmm11, %xmm12
movapd %xmm9, %xmm13
divsd %xmm12, %xmm13
movss (%r8,%r10,4), %xmm12
divss %xmm11, %xmm12
xorps %xmm14, %xmm14
cvtss2sd %xmm12, %xmm14
addsd %xmm13, %xmm5
addsd %xmm14, %xmm4
divss %xmm11, %xmm12
xorps %xmm13, %xmm13
cvtss2sd %xmm12, %xmm13
addsd %xmm13, %xmm2
movaps %xmm10, %xmm13
mulss %xmm12, %xmm13
cvtss2sd %xmm13, %xmm13
addsd %xmm13, %xmm3
divss %xmm11, %xmm12
xorps %xmm11, %xmm11
cvtss2sd %xmm12, %xmm11
mulss %xmm10, %xmm12
addsd %xmm11, %xmm6
xorps %xmm10, %xmm10
cvtss2sd %xmm12, %xmm10
addsd %xmm10, %xmm7
incq %r10
cmpq %r10, %r14
jne 0x2c007
jmp 0x2c0b9
xorpd %xmm5, %xmm5
xorpd %xmm7, %xmm7
xorpd %xmm3, %xmm3
xorpd %xmm6, %xmm6
xorpd %xmm2, %xmm2
xorpd %xmm4, %xmm4
movapd %xmm4, %xmm8
divsd %xmm3, %xmm8
xorps %xmm9, %xmm9
cvtsd2ss %xmm8, %xmm9
movss %xmm9, 0x8(%rbx)
xorps %xmm8, %xmm8
cvtss2sd %xmm1, %xmm8
xorps %xmm10, %xmm10
cvtss2sd %xmm9, %xmm10
movapd %xmm4, %xmm1
mulsd %xmm10, %xmm1
movaps %xmm8, %xmm9
subsd %xmm1, %xmm9
xorps %xmm1, %xmm1
cvtsd2ss %xmm9, %xmm1
movss %xmm1, 0x10(%rbx)
movss 0xc(%rbx), %xmm1
xorps %xmm9, %xmm9
cvtss2sd %xmm1, %xmm9
movapd %xmm4, %xmm11
mulsd %xmm9, %xmm11
movapd %xmm2, %xmm12
mulsd %xmm2, %xmm12
movapd %xmm4, %xmm13
mulsd %xmm6, %xmm13
subsd %xmm12, %xmm13
mulsd %xmm11, %xmm13
movapd %xmm3, %xmm11
mulsd %xmm3, %xmm11
divsd %xmm11, %xmm13
xorps %xmm11, %xmm11
cvtsd2ss %xmm13, %xmm11
movss %xmm11, 0x14(%rbx)
movapd %xmm2, %xmm11
mulsd %xmm10, %xmm11
mulsd %xmm10, %xmm11
xorps %xmm10, %xmm10
cvtsd2ss %xmm11, %xmm10
mulsd %xmm9, %xmm6
subsd %xmm7, %xmm6
xorps %xmm7, %xmm7
cvtsd2ss %xmm6, %xmm7
movss %xmm10, 0x24(%rbx)
xorps %xmm6, %xmm6
cvtsi2ss %edi, %xmm6
subl %eax, %edi
xorps %xmm10, %xmm10
cvtsi2sd %edi, %xmm10
mulsd %xmm9, %xmm5
addsd %xmm10, %xmm5
cvtsd2ss %xmm5, %xmm5
addsd %xmm4, %xmm4
subsd %xmm4, %xmm8
addsd %xmm3, %xmm8
xorps %xmm4, %xmm4
cvtsd2ss %xmm8, %xmm4
movss %xmm7, 0x28(%rbx)
xorps %xmm7, %xmm7
cvtsi2ss %edi, %xmm7
movaps %xmm5, %xmm8
mulss %xmm4, %xmm7
divss %xmm0, %xmm7
addss %xmm5, %xmm5
subss %xmm5, %xmm7
divss %xmm6, %xmm7
mulss %xmm4, %xmm6
mulss %xmm8, %xmm8
divss %xmm8, %xmm6
movss %xmm6, 0x34(%rbx)
movss %xmm7, 0x38(%rbx)
movq %rsp, %rdi
leaq 0xf(,%r14,4), %r8
andq $-0x10, %r8
subq %r8, %rdi
movq %rdi, %rsp
testl %eax, %eax
jle 0x2c235
xorl %r8d, %r8d
movss (%rcx,%r8,4), %xmm0
movss (%rsi,%r8,4), %xmm4
addss %xmm1, %xmm4
divss %xmm4, %xmm0
movss %xmm0, (%rdi,%r8,4)
incq %r8
cmpq %r8, %r14
jne 0x2c213
divsd %xmm3, %xmm2
testl %eax, %eax
jle 0x2c285
movq (%rbx), %rcx
xorl %esi, %esi
xorps %xmm0, %xmm0
xorl %r8d, %r8d
movss (%rdi,%r8,4), %xmm1
movq (%rdx,%r8,8), %r10
mulss (%r10,%rsi,4), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %r8
cmpq %r8, %r14
jne 0x2c248
xorps %xmm1, %xmm1
cvtss2sd 0x8(%rbx), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, (%rcx,%rsi,4)
incq %rsi
cmpq %r14, %rsi
jne 0x2c242
xorps %xmm0, %xmm0
cvtsd2ss %xmm2, %xmm0
xorps %xmm6, %xmm6
xorpd %xmm2, %xmm2
xorps %xmm1, %xmm1
testl %eax, %eax
jle 0x2c2e5
movq 0x10(%rbp), %rcx
movq (%rbx), %rdx
movaps 0x2a688(%rip), %xmm3    # 0x56930
xorps %xmm0, %xmm3
xorl %esi, %esi
movss (%rdx,%rsi,4), %xmm4
movss (%r9,%rsi,4), %xmm5
mulss %xmm3, %xmm5
addss %xmm4, %xmm5
mulss %xmm5, %xmm5
cvtss2sd %xmm5, %xmm5
addsd %xmm5, %xmm2
subss (%rcx,%rsi,4), %xmm4
mulss %xmm4, %xmm4
cvtss2sd %xmm4, %xmm4
addsd %xmm4, %xmm1
incq %rsi
cmpq %rsi, %r14
jne 0x2c2ad
movss 0xc(%rbx), %xmm3
xorps %xmm4, %xmm4
cvtss2sd %xmm3, %xmm4
mulsd %xmm4, %xmm2
cvtsd2ss %xmm2, %xmm2
movss %xmm2, 0x18(%rbx)
mulsd %xmm4, %xmm1
cvtsd2ss %xmm1, %xmm1
movss %xmm1, 0x1c(%rbx)
addss %xmm3, %xmm3
subss 0x4d0f5(%rip), %xmm0    # 0x7940c
mulss %xmm3, %xmm0
movss 0x24ced(%rip), %xmm2    # 0x51010
addss %xmm2, %xmm0
divss %xmm0, %xmm2
mulss %xmm1, %xmm2
movss %xmm2, 0x20(%rbx)
xorps %xmm2, %xmm2
xorps %xmm1, %xmm1
testl %eax, %eax
jle 0x2c3c8
xorl %r15d, %r15d
xorps %xmm6, %xmm6
movq (%rbx), %rax
movss (%rax,%r15,4), %xmm3
movaps %xmm3, %xmm0
andps 0x2afc5(%rip), %xmm0    # 0x57320
ucomiss 0x24caa(%rip), %xmm3    # 0x5100c
xorps %xmm4, %xmm4
cvtss2sd %xmm0, %xmm4
jne 0x2c36d
jnp 0x2c3ad
movaps %xmm4, %xmm0
movsd %xmm6, -0x28(%rbp)
movsd %xmm1, -0x20(%rbp)
movsd %xmm2, -0x38(%rbp)
movaps %xmm3, -0x50(%rbp)
movsd %xmm4, -0x30(%rbp)
callq 0x2120
movsd -0x30(%rbp), %xmm4
movaps -0x50(%rbp), %xmm3
movsd -0x38(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
movsd -0x28(%rbp), %xmm6
mulsd %xmm4, %xmm0
addsd %xmm0, %xmm1
mulss %xmm3, %xmm3
xorps %xmm0, %xmm0
cvtss2sd %xmm3, %xmm0
addsd %xmm0, %xmm2
addsd %xmm4, %xmm6
incq %r15
cmpq %r15, %r14
jne 0x2c348
movsd %xmm1, -0x20(%rbp)
movsd %xmm6, -0x28(%rbp)
movaps %xmm6, %xmm0
mulsd %xmm6, %xmm0
divsd %xmm0, %xmm2
xorps %xmm0, %xmm0
cvtsd2ss %xmm2, %xmm0
movss %xmm0, 0x2c(%rbx)
movapd %xmm6, %xmm0
callq 0x2120
movsd -0x20(%rbp), %xmm1
divsd -0x28(%rbp), %xmm1
subsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x30(%rbx)
leaq -0x18(%rbp), %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq