/* pam.c 19-June-86 copyright (c) 1987 William R. Pearson read in the alphabet and pam matrix data designed for universal matcher */ #include #include #include #include #define XTERNAL #include "uascii.gbl" #include "upam.gbl" #undef XTERNAL extern int dnaseq; int initpam (char *mfname) { char line[512], *lp; int i, j, iaa, ipam; FILE *fmat; if ((fmat = fopen (mfname, "r")) == NULL) { printf (" cannot open scoring matrix file %s\n", mfname); return 0; } while (fgets (line, sizeof(line), fmat) != NULL && line[0]=='#'); /* clear out sascii */ for (i = 0; i <= AAMASK; i++) sascii[i] = NA; /* set end of line stop */ sascii[0] = sascii['\r'] = sascii['\n'] = EL; /* set end of sequence stop */ sascii['*'] = ES; /* read the alphabet */ sq[0] = '\0'; for (i = 0, nsq = 0; line[i]; i++) { if (line[i] == '*') continue; if (line[i] > ' ') sq[nsq++] = toupper (line[i]); } sq[nsq] = '\0'; /* initialize sascii */ for (iaa = 0; iaa < nsq; iaa++) { sascii[sq[iaa]] = iaa; if (sascii[aa[iaa]] < NA && sq[iaa] >= 'A' && sq[iaa] <= 'Z') sascii[aa[iaa] - 'A' + 'a'] = sascii[aa[iaa]]; } if (dnaseq) sascii['U'] = sascii['u'] = sascii['T']; /* read in hnt values */ hsq[0] = 0; for (iaa = 0; iaa < nsq; iaa++) { hsq[iaa]=iaa; } if (dnaseq) { hsq[sascii['R']]=hsq[sascii['M']]=hsq[sascii['W']]=hsq[sascii['A']]; hsq[sascii['D']]=hsq[sascii['H']]=hsq[sascii['V']]=hsq[sascii['A']]; hsq[sascii['N']]=hsq[sascii['X']]=hsq[sascii['A']]; hsq[sascii['Y']]=hsq[sascii['S']]=hsq[sascii['B']]=hsq[sascii['C']]; hsq[sascii['K']]=hsq[sascii['G']]; } else { hsq[sascii['B']] = hsq[sascii['N']]; hsq[sascii['Z']] = hsq[sascii['E']]; hsq[sascii['X']] = hsq[sascii['A']]; } for (iaa = 1, ipam = 0; iaa < nsq; iaa++) { if (fgets(line,sizeof(line),fmat)==NULL) { fprintf (stderr," error reading pam line: %s\n",line); exit (1); } strtok(line," \t\n"); /* discard 'A' residue */ for (i = 0; i < iaa; i++) { lp = strtok(NULL," \t\n"); pam[ipam++]=atoi(lp); } } fclose (fmat); #ifdef DEBUG for (i=0; iabbrev[0]; std_pam_p++ ) { if (strcmp(smstr,std_pam_p->abbrev)==0) { strncpy(smstr,std_pam_p->name,6); smstr[6]='\0'; *pam = std_pam_p->pam; #ifndef GAP_OPEN if (!del_set) *gdelval = std_pam_p->gdel; #else if (!del_set) *gdelval = std_pam_p->gdel - std_pam_p->ggap; #endif if (!gap_set) *ggapval = std_pam_p->ggap; return 1; } } return 0; }