int main(int argc, char **argv) { AjPFile inf = NULL; AjPFile inf2 = NULL; AjPFeattable tab = NULL; AjPReport report = NULL; AjPSeq sequence = NULL; AjPStr redatanew = NULL; AjPStr str = NULL; AjPStr regexp = NULL; AjPStr temp = NULL; AjPStr text = NULL; AjPStr docdata = NULL; AjPStr data = NULL; AjPStr accession = NULL; AjPStr name = NULL; EmbPPatMatch match = NULL; AjPStr savereg = NULL; AjPStr fthit = NULL; AjBool full; AjBool prune; ajint i; ajint number; ajint start; ajint end; ajint length; ajint zstart; ajint zend; const char *p; ajint seqlength; AjPStr tmpstr = NULL; AjPStr tailstr = NULL; AjPFeature gf; embInit("patmatmotifs", argc, argv); ajStrAssignC(&fthit, "SO:0001067"); savereg = ajStrNew(); str = ajStrNew(); regexp = ajStrNew(); temp = ajStrNew(); data = ajStrNew(); accession = ajStrNew(); text = ajStrNew(); name = ajStrNew(); sequence = ajAcdGetSeq("sequence"); report = ajAcdGetReport("outfile"); full = ajAcdGetBoolean("full"); prune = ajAcdGetBoolean("prune"); ajSeqFmtUpper(sequence); /* prosite regexs are all upper case */ tab = ajFeattableNewSeq(sequence); ajStrAssignC(&tailstr, ""); seqlength = ajStrGetLen(str); str = ajSeqGetSeqCopyS(sequence); redatanew = ajStrNewC("PROSITE/prosite.lines"); docdata = ajStrNewC("PROSITE/"); inf = ajDatafileNewInNameS(redatanew); if(!inf) ajFatal("Either EMBOSS_DATA undefined or PROSEXTRACT needs running"); ajFmtPrintAppS(&tmpstr, "Full: %B\n", full); ajFmtPrintAppS(&tmpstr, "Prune: %B\n", prune); ajFmtPrintAppS(&tmpstr, "Data_file: %F\n", inf); ajReportSetHeaderS(report, tmpstr); while(ajReadlineTrim(inf, ®exp)) { p=ajStrGetPtr(regexp); if(*p && *p!=' ' && *p!='^') { p=ajSysFuncStrtok(p," "); ajStrAssignC(&name,p); if(prune) if(ajStrMatchCaseC(name,"myristyl") || ajStrMatchCaseC(name,"asn_glycosylation") || ajStrMatchCaseC(name,"camp_phospho_site") || ajStrMatchCaseC(name,"pkc_phospho_site") || ajStrMatchCaseC(name,"ck2_phospho_site") || ajStrMatchCaseC(name,"tyr_phospho_site")) { for(i=0;i<4;++i) ajReadlineTrim(inf, ®exp); continue; } p=ajSysFuncStrtok(NULL," "); ajStrAssignC(&accession,p); } if(ajStrPrefixC(regexp, "^")) { p = ajStrGetPtr(regexp); ajStrAssignC(&temp,p+1); ajStrAssignC(&savereg,p+1); match = embPatMatchFind(temp, str, ajFalse, ajFalse); number = embPatMatchGetNumber(match); for(i=0; i<number; i++) { seqlength = ajStrGetLen(str); start = 1+embPatMatchGetStart(match, i); end = 1+embPatMatchGetEnd(match, i); length = embPatMatchGetLen(match, i); gf = ajFeatNew(tab, NULL, fthit, start, end, (float) length, ' ', 0); ajFmtPrintS(&tmpstr, "*motif %S", name); ajFeatTagAddSS(gf, NULL, tmpstr); if(start-5<0) zstart = 0; else zstart = start-5; if(end+5> seqlength) zend = end; else zend = end+5; ajStrAssignSubS(&temp, str, zstart, zend); } if(full && number) { ajStrAssignC(&redatanew,ajStrGetPtr(docdata)); ajStrAppendC(&redatanew,ajStrGetPtr(accession)); inf2 = ajDatafileNewInNameS(redatanew); if(!inf2) continue; /* ** Insert Prosite documentation from files made by ** prosextract.c */ ajFmtPrintAppS(&tailstr, "Motif: %S\n", name); ajFmtPrintAppS(&tailstr, "Count: %d\n\n", number); while(ajReadlineTrim(inf2, &text)) ajFmtPrintAppS(&tailstr, "%S\n", text); ajFmtPrintAppS(&tailstr, "\n***************\n\n"); ajFileClose(&inf2); } embPatMatchDel(&match); } } ajReportSetTailS(report,tailstr); ajReportWrite(report, tab, sequence); ajReportDel(&report); ajFeattableDel(&tab); ajStrDel(&temp); ajStrDel(®exp); ajStrDel(&savereg); ajStrDel(&str); ajStrDel(&data); ajStrDel(&docdata); ajStrDel(&text); ajStrDel(&redatanew); ajStrDel(&accession); ajSeqDel(&sequence); ajStrDel(&tailstr); ajStrDel(&fthit); ajStrDel(&name); ajStrDel(&tmpstr); ajFeattableDel(&tab); ajFileClose(&inf); embExit(); return 0; }
int main(int argc, char **argv) { AjPSeq seq = NULL; AjPReport report = NULL; AjPFeattable feat=NULL; AjPStr sstr = NULL; const AjPStr sname = NULL; AjPStr revcomp = NULL; ajint RStotal; AjPStr enzymes = NULL; /* string for RE selection */ AjPList relist = NULL; ajint begin; ajint end; ajint radj; ajint start; AjBool sshow; AjBool tshow; AjBool allmut; AjPList results1 = NULL; /* for forward strand */ AjPList results2 = NULL; /* for reverse strand */ AjPList shits; AjPList nshits; AjPStr tailstr = NULL; embInit("silent", argc, argv); seq = ajAcdGetSeq("sequence"); enzymes = ajAcdGetString("enzymes"); sshow = ajAcdGetBoolean("sshow"); tshow = ajAcdGetBoolean("tshow"); allmut = ajAcdGetBoolean("allmut"); report = ajAcdGetReport ("outfile"); shits = ajListNew(); nshits = ajListNew(); /*calling function to read in RE info*/ RStotal = silent_restr_read(&relist,enzymes); begin = ajSeqGetBegin(seq); /* returns the seq start posn, or 1 if no start has been set */ end = ajSeqGetEnd(seq); /* returns the seq end posn, or seq length if no end has been set */ radj=begin+end+1; /* posn adjustment for complementary strand */ ajStrAssignSubC(&sstr,ajSeqGetSeqC(seq),--begin,--end); ajStrFmtUpper(&sstr); sname = ajSeqGetNameS(seq); ajStrAssignC(&revcomp,ajStrGetPtr(sstr)); ajSeqstrReverse(&revcomp); start = begin+1; feat = ajFeattableNewDna(ajSeqGetNameS(seq)); if(sshow) { silent_fmt_sequence("SEQUENCE", sstr,&tailstr,start,ajTrue); } results1 = silent_mismatch(sstr,relist,&tailstr,sname,RStotal,begin,radj, ajFalse,end,tshow); silent_split_hits(&results1,&shits,&nshits,allmut); ajReportSetHeaderC(report, "KEY:\n" "EnzymeName: Enzyme name\n" "RS-Pattern: Restriction enzyme recognition site " "pattern\n" "Base-Posn: Position of base to be mutated\n" "AAs: Amino acid. Original sequence(.)After mutation\n" "Silent: Yes for unchanged amino acid\n" "Mutation: The base mutation to perform\n\n" "Creating silent and non-silent mutations\n"); silent_fmt_hits(shits,feat, ajTrue, ajFalse); if(allmut) { silent_fmt_hits(nshits,feat, ajFalse, ajFalse); } if(sshow) { silent_fmt_sequence("REVERSE SEQUENCE", revcomp,&tailstr,start,ajTrue); } results2 = silent_mismatch(revcomp,relist,&tailstr, sname,RStotal,begin,radj, ajTrue,end,tshow); silent_split_hits(&results2,&shits,&nshits,allmut); silent_fmt_hits(shits,feat, ajTrue, ajTrue); if(allmut) { silent_fmt_hits(nshits,feat, ajFalse, ajTrue); } ajReportSetStatistics(report, 1, ajSeqGetLenTrimmed(seq)); ajReportSetTailS(report, tailstr); (void) ajReportWrite (report,feat,seq); ajFeattableDel(&feat); ajStrDel(&revcomp); ajStrDel(&enzymes); ajListFree(&results1); ajListFree(&results2); ajListFree(&shits); ajListFree(&nshits); ajReportClose(report); ajReportDel(&report); ajSeqDel(&seq); ajStrDel(&sstr); silent_relistdel(&relist); ajStrDel(&tailstr); embExit(); return 0; }