static void dump_stats(FILE *log, int nsteps, int ndr, t_ilist *disres, t_iparams ip[], t_dr_result *dr, int isize, atom_id index[], t_atoms *atoms) { int i, j, nra; t_dr_stats *drs; fprintf(log, "\n"); fprintf(log, "++++++++++++++ STATISTICS ++++++++++++++++++++++++\n"); snew(drs, ndr); j = 0; nra = interaction_function[F_DISRES].nratoms+1; for (i = 0; (i < ndr); i++) { /* Search for the appropriate restraint */ for (; (j < disres->nr); j += nra) { if (ip[disres->iatoms[j]].disres.label == i) { break; } } drs[i].index = i; drs[i].bCore = is_core(i, isize, index); drs[i].up1 = ip[disres->iatoms[j]].disres.up1; drs[i].r = dr->aver1[i]/nsteps; drs[i].rT3 = std::pow(dr->aver_3[i]/nsteps, static_cast<real>(-1.0/3.0)); drs[i].rT6 = std::pow(dr->aver_6[i]/nsteps, static_cast<real>(-1.0/6.0)); drs[i].viol = std::max(0.0, static_cast<double>(drs[i].r-drs[i].up1)); drs[i].violT3 = std::max(0.0, static_cast<double>(drs[i].rT3-drs[i].up1)); drs[i].violT6 = std::max(0.0, static_cast<double>(drs[i].rT6-drs[i].up1)); if (atoms) { int j1 = disres->iatoms[j+1]; int j2 = disres->iatoms[j+2]; atoms->pdbinfo[j1].bfac += drs[i].violT3*5; atoms->pdbinfo[j2].bfac += drs[i].violT3*5; } } dump_viol(log, ndr, drs, FALSE); fprintf(log, "+++ Sorted by linear averaged violations: +++\n"); qsort(drs, ndr, sizeof(drs[0]), drs_comp); dump_viol(log, ndr, drs, TRUE); dump_dump(log, ndr, drs); sfree(drs); }
static void dump_clust_stats(FILE *fp,int ndr,t_ilist *disres, t_iparams ip[],t_blocka *clust,t_dr_result dr[], char *clust_name[],int isize,atom_id index[]) { int i,j,k,nra,mmm=0; double sumV,maxV,sumVT3,sumVT6,maxVT3,maxVT6; t_dr_stats *drs; fprintf(fp,"\n"); fprintf(fp,"++++++++++++++ STATISTICS ++++++++++++++++++++++\n"); fprintf(fp,"Cluster NFrames SumV MaxV SumVT MaxVT SumVS MaxVS\n"); snew(drs,ndr); for(k=0; (k<clust->nr); k++) { if (dr[k].nframes == 0) continue; if (dr[k].nframes != (clust->index[k+1]-clust->index[k])) gmx_fatal(FARGS,"Inconsistency in cluster %s.\n" "Found %d frames in trajectory rather than the expected %d\n", clust_name[k],dr[k].nframes, clust->index[k+1]-clust->index[k]); if (!clust_name[k]) gmx_fatal(FARGS,"Inconsistency with cluster %d. Invalid name",k); j = 0; nra = interaction_function[F_DISRES].nratoms+1; sumV = sumVT3 = sumVT6 = maxV = maxVT3 = maxVT6 = 0; for(i=0; (i<ndr); i++) { /* Search for the appropriate restraint */ for( ; (j<disres->nr); j+=nra) { if (ip[disres->iatoms[j]].disres.label == i) break; } drs[i].index = i; drs[i].bCore = is_core(i,isize,index); drs[i].up1 = ip[disres->iatoms[j]].disres.up1; drs[i].r = dr[k].aver1[i]/dr[k].nframes; if ((dr[k].aver_3[i] <= 0) || (dr[k].aver_3[i] != dr[k].aver_3[i])) gmx_fatal(FARGS,"dr[%d].aver_3[%d] = %f",k,i,dr[k].aver_3[i]); drs[i].rT3 = pow(dr[k].aver_3[i]/dr[k].nframes,-1.0/3.0); drs[i].rT6 = pow(dr[k].aver_6[i]/dr[k].nframes,-1.0/6.0); drs[i].viol = max(0,drs[i].r-drs[i].up1); drs[i].violT3 = max(0,drs[i].rT3-drs[i].up1); drs[i].violT6 = max(0,drs[i].rT6-drs[i].up1); sumV += drs[i].viol; sumVT3 += drs[i].violT3; sumVT6 += drs[i].violT6; maxV = max(maxV,drs[i].viol); maxVT3 = max(maxVT3,drs[i].violT3); maxVT6 = max(maxVT6,drs[i].violT6); } if (strcmp(clust_name[k],"1000") == 0) { mmm ++; } fprintf(fp,"%-10s%6d%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n", clust_name[k], dr[k].nframes,sumV,maxV,sumVT3,maxVT3,sumVT6,maxVT6); } fflush(fp); sfree(drs); }