extern SeqLocPtr SeqLocDup (SeqLocPtr slpold) { SeqLocPtr slpnew, slpn, slp; SeqIdPtr id; if (slpold == NULL) return NULL; slpnew = (SeqLocPtr) AsnIoMemCopy ((Pointer) slpold, (AsnReadFunc) SeqLocAsnRead, (AsnWriteFunc) SeqLocAsnWrite); slp = slpnew->next; while (slp != NULL) { slpn = slp->next; id = SeqLocId (slp); if (id != NULL) id->next = SeqIdSetFree (id->next); SeqLocFree (slp); slp = slpn; } slpnew->next = NULL; return slpnew; }
extern SeqLocPtr SeqLocDupAll (SeqLocPtr slpold) { SeqLocPtr slpnew; if (slpold == NULL) return NULL; slpnew = (SeqLocPtr) AsnIoMemCopy ((Pointer) slpold, (AsnReadFunc) SeqLocAsnRead, (AsnWriteFunc) SeqLocAsnWrite); return slpnew; }
/*---------------- To put Local_id in segs for Vastsearch - Ken -----------*/ void AssignLocaIdToSeqAlignMaster(SeqIdPtr sip, SeqAlignPtr salpHead) { DenseDiagPtr ddp; SeqIdPtr sipTemp = NULL; ddp = salpHead->segs; while(ddp) { if(ddp->id!=NULL) { sipTemp = ddp->id->next; SeqIdFree(ddp->id); ddp->id = AsnIoMemCopy(sip, (AsnReadFunc) SeqIdAsnRead, (AsnWriteFunc) SeqIdAsnWrite); ddp->id->next = sipTemp; } else ErrPostEx(SEV_ERROR,0,0,"AssignLocalIdToSeqAlignMaster: No SeqId on SeqALign\n"); ddp = ddp->next; } }
SeqIdPtr CpySeqIdList(SeqIdPtr sip) { SeqIdPtr sipNew = NULL, sipNewHead = NULL, sipLast = NULL; if(!sip) { return sipNewHead; } while(sip) { sipNew = (SeqIdPtr)AsnIoMemCopy(sip, (AsnReadFunc)SeqIdAsnRead, (AsnWriteFunc)SeqIdAsnWrite); if(sipNewHead == NULL) { sipNewHead = sipNew; sipLast = sipNew; } else { sipLast->next = sipNew; sipLast = sipNew; } sip = sip->next; } return sipNewHead; }
BiomolDescrPtr CpyBiomolDescrList(BiomolDescrPtr bdp) { BiomolDescrPtr bdpNew = NULL, bdpNewHead = NULL, bdpLast = NULL; if(bdp == NULL) { return bdpNewHead; } while(bdp != NULL) { bdpNew = (BiomolDescrPtr)AsnIoMemCopy(bdp, (AsnReadFunc)BiomolDescrAsnRead, (AsnWriteFunc)BiomolDescrAsnWrite); if(bdpNewHead == NULL) { bdpNewHead = bdpNew; bdpLast = bdpNew; } else { bdpLast->next = bdpNew; bdpLast = bdpNew; } bdp = bdp->next; } return bdpNewHead; }
static BioseqPtr BioseqFromAccession(CharPtr accver, Boolean is_na) { CharPtr accession, version_str; Int4 version=0, gi, number; SeqIdPtr sip = NULL; TextSeqIdPtr tsip; PDBSeqIdPtr psip; BioseqPtr bsp = NULL, bsp_tmp = NULL; SeqPortPtr spp; Int2 retval, buf_length=512; Uint1 buf[512]; char* defline = NULL; char* dummy_ptr = NULL; if (!ID1BioseqFetchEnable ("bl2seq", TRUE)) ErrPostEx(SEV_FATAL, 1, 0, "Entrez access interface currently unavailable\n"); if (!IS_DIGIT(*accver)) { accession = StringTokMT(accver, ".", &version_str); if (version_str) version = atoi(version_str); if((sip = ValNodeNew (NULL)) == NULL) return NULL; if((tsip = TextSeqIdNew ()) == NULL) return NULL; tsip->accession = StringSave(accession); tsip->version = version; /* GenBank, EMBL, and DDBJ. */ sip->choice = SEQID_GENBANK; sip->data.ptrvalue = (Pointer) tsip; gi = ID1FindSeqId (sip); if (gi == 0) { /* SwissProt. */ sip->choice = SEQID_SWISSPROT; gi = ID1FindSeqId (sip); } if (gi == 0) { /* PIR */ sip->choice = SEQID_PIR; gi = ID1FindSeqId (sip); } if (gi == 0) { /* PRF */ sip->choice = SEQID_PRF; gi = ID1FindSeqId (sip); } if (gi == 0) { /* OTHER, probably 'ref' */ sip->choice = SEQID_OTHER; gi = ID1FindSeqId (sip); } if(gi == 0) { /* OK. We failed to find gi using string as TextSeqId. Now trying last time - with PDBSeqIdPtr */ if((psip = PDBSeqIdNew()) == NULL) return NULL; sip->choice = SEQID_PDB; tsip = TextSeqIdFree(tsip); sip->data.ptrvalue = psip; psip->mol = accession; psip->chain = version; gi = ID1FindSeqId (sip); } if (gi == 0) { ErrPostEx(SEV_WARNING, 0, 0, "Sequence %s not found\n", accver); return NULL; } sip = SeqIdFree(sip); } else gi = atoi(accver); ID1BioseqFetchDisable(); if (gi > 0) { /* First attempt to retrieve Bioseq from BLAST databases. */ char* db_name = (is_na ? "nucl_dbs" : "prot_dbs"); ValNodeAddInt(&sip, SEQID_GI, gi); ReadDBBioseqFetchEnable ("bl2seq", db_name, is_na, TRUE); bsp_tmp = BioseqLockById(sip); ReadDBBioseqFetchDisable(); if (!bsp_tmp) { /* Try ID1 again as a last resort. */ ID1BioseqFetchEnable("bl2seq", TRUE); bsp_tmp = BioseqLockById(sip); ID1BioseqFetchDisable(); } sip = SeqIdFree(sip); } if (!bsp_tmp) { ErrPostEx(SEV_WARNING, 0, 0, "Gi %ld not found", gi); return NULL; } if (ISA_na(bsp_tmp->mol) != is_na) { BioseqUnlock(bsp_tmp); if (is_na) ErrPostEx(SEV_FATAL, 1, 0, "%s is a protein sequence, program requires nucleotide", accver); else ErrPostEx(SEV_FATAL, 1, 0, "%s is a nucleotide sequence, program requires protein", accver); return NULL; } bsp = AsnIoMemCopy(bsp_tmp, (AsnReadFunc) BioseqAsnRead, (AsnWriteFunc) BioseqAsnWrite); SeqMgrDeleteFromBioseqIndex(bsp_tmp); BioseqUnlock(bsp_tmp); BioseqPack(bsp); return bsp; }