NCBI C Toolkit Cross Reference

C/biostruc/newVSch/vast2cn3dDB_comb.cpp


  1 /* 
  2  * $Id: vast2cn3dDB_comb.cpp,v 1.1 2005/07/26 17:12:50 chenj Exp $
  3  *
  4  *
  5  * ===========================================================================
  6  * 
  7  *                            PUBLIC DOMAIN NOTICE
  8  *            National Center for Biotechnology Information (NCBI)
  9  *
 10  *  This software/database is a "United States Government Work" under the
 11  *  terms of the United States Copyright Act.  It was written as part of
 12  *  the author's official duties as a United States Government employee and
 13  *  thus cannot be copyrighted.  This software/database is freely available
 14  *  to the public for use. The National Library of Medicine and the U.S.
 15  *  Government do not place any restriction on its use or reproduction.
 16  *  We would, however, appreciate having the NCBI and the author cited in
 17  *  any work or product based on this material
 18  *
 19  *  Although all reasonable efforts have been taken to ensure the accuracy
 20  *  and reliability of the software and data, the NLM and the U.S.
 21  *  Government do not and cannot warrant the performance or results that
 22  *  may be obtained by using this software or data. The NLM and the U.S.
 23  *  Government disclaim all warranties, express or implied, including
 24  *  warranties of performance, merchantability or fitness for any particular
 25  *  purpose.
 26  *
 27  * ===========================================================================
 28  *
 29  *
 30  * Author: Jie Chen, Lewis Geer, Chris Hogue, Siqian He
 31  * 
 32  *
 33  * $Log: vast2cn3dDB_comb.cpp,v $
 34  * Revision 1.1  2005/07/26 17:12:50  chenj
 35  * Making linux VSNbr.cgi
 36  *
 37  * Revision 1.3  2003/01/15 16:21:47  chenj
 38  * add construcMaxSdi()
 39  *
 40  * Revision 1.2  2003/01/14 20:42:32  chenj
 41  * change VastToCn3D() to VastToCn3DAndAli()
 42  *
 43  * Revision 1.1.1.1  2002/12/06 20:17:21  chenj
 44  * Imported Scouces
 45  *
 46  *
 47  *
 48  * This file fetches data from pubvast database, but for Vast Search job, it 
 49  * still reads data from files.
 50  *
 51  * =========================================================================
 52  *
 53  */
 54 
 55 
 56 #define NLM_GENERATED_CODE_PROTO
 57 #undef  DOWNLOAD_DEBUG_MODE
 58 
 59 #include <corelib/ncbiexec.hpp>
 60 #include <corelib/ncbifile.hpp>
 61 #include <ctools/asn_converter.hpp>
 62 #include "hUtilib.hpp"
 63 #include "VastSrchUti.hpp"
 64 #include "vastuti.hpp"
 65 #include <accutils.h>
 66 #include <mmdbapi1.h>
 67 #include <objmime.h>
 68 #include "cddalignview.h"
 69 #include <objalign.h>
 70 #include "vast2mage.h"
 71 #include "mkbioseq.h"
 72 
 73 #define CPUTIME_MAX 120
 74 
 75 #define VIEW_STR_SUBBUT         0
 76 #define VIEW_ALI_SUBBUT         1
 77 #define VIEW_IN_Cn3DCACHE       'a'
 78 #define VIEW_IN_Cn3D_GEN        'c'
 79 #define VIEW_IN_HTML            'h'
 80 #define VIEW_IN_FASTA           'f'
 81 #define VIEW_IN_TEXT            't'
 82 #define VIEW_IN_HTML_PAGE       'H'
 83 #define VIEW_IN_FASTA_PAGE      'F'
 84 #define VIEW_IN_TEXT_PAGE       'T'
 85 
 86 
 87 #define ALL_NBR         0
 88 #define CHECKED_NBR     1
 89 
 90 extern  void    WWWPrintFileData(CharPtr FName,  FILE *pFile);
 91 extern  string  MAILto, JobID, Passwd;
 92 extern  Char    Database[PATH_MAX], VSPATH[PATH_MAX];
 93 extern  unsigned        aSdi, aMmdbId, aChnNo;
 94 extern  long long       ReqId;
 95 
 96 using namespace ncbi;
 97 
 98 static void AddMMDBIdToBioseq(BioseqPtr bsp, unsigned mmdbid)
 99 {
100     DbtagPtr    dbtp;
101     SeqIdPtr    sip_new = NULL;
102     SeqAnnotPtr sap_new = NULL;
103 
104     if (bsp == NULL) return;
105 
106     sap_new= SeqAnnotNew();
107     sap_new->type = 4;
108     sip_new = (SeqIdPtr)ValNodeNew(NULL);
109     sip_new->choice = SEQID_GENERAL;
110     dbtp = (DbtagPtr)DbtagNew();
111     dbtp->db = new char [10];
112     sprintf(dbtp->db, "mmdb");
113     dbtp->tag = (ObjectIdPtr) ObjectIdNew();
114     dbtp->tag->id = mmdbid;
115     sip_new->data.ptrvalue = dbtp;
116     sap_new->data = sip_new;
117     if (bsp->annot == NULL) bsp->annot = sap_new;
118     else {
119             sap_new->next = bsp->annot;
120             bsp->annot = sap_new;
121     }
122 
123     return;
124 
125 }       /* AddMMDBIdToBioseq */
126 
127 
128 
129 
130 static void RemoveGi(BioseqPtr bsp) 
131 {
132     SeqIdPtr preSid=NULL, thisSid = (SeqIdPtr)bsp->id;
133 
134     while (thisSid != NULL) {
135         
136         if (thisSid->choice == SEQID_GI) {
137             if (preSid) preSid->next = thisSid->next;
138             else bsp->id = thisSid->next;
139         }       
140 
141         preSid = thisSid;
142         thisSid = thisSid->next;
143     }
144 }       /* RemoveGi */
145 
146 
147 
148 
149 /* Display a structural alignment in Cn3D and in HTML*/
150 
151 void LIBCALL VastToCn3DAndAli(WWWInfoPtr www_info)
152 {
153   char          szName[5], AsnPath[PATH_MAX], AsnName[10]; 
154   char          cViewType, pdbname_m[5], chain_m=' ';
155   char          *Name, *www_arg, *szTemp;
156   short         iPDB = 0, complexity, indx;
157   short         nbr_complexity;
158   unsigned      iFidCount=0, domNo_m, i, hits_num=0, iSubBut, *gi;
159   unsigned      aGi=0, Fid, Fsid, NumLabels, *BsfId;
160   /* Fsid = aMmdbId * 10000 + aChnNo * 100 + aDomCumulNo , only used in VS job*/
161   /* Fid = bMmdbId * 100000 + bChnNo * 1000 + bDomCumulNo * 10 + bAlignId */
162   AsnIoPtr              paiFile, aipr;
163   BioseqPtr             biosp;
164   BiostrucAnnotSetPtr   pbsa = NULL, pbsaShort = NULL;
165   BiostrucAlignSeqPtr   basp = NULL;
166   BiostrucFeatureSetPtr pbsfs = NULL;
167   BiostrucFeaturePtr    pbsf = NULL;
168   BiostrucResidueGraphSetPtr    stdDictionary;
169   BiostrucPtr           pbsMaster=NULL, pbsSlave=NULL, pbsSlaveHead = NULL;
170   BiostrucPtr           pbsSlaveTail;
171   BiostrucAlignPtr      pbsaStruct;
172   BundleSeqsAlignsPtr   bsap = NULL;
173   NcbiMimeAsn1Ptr       pvnNcbi;
174   ObjectIdPtr           objid;
175   SeqAnnotPtr           psaAlignHead = NULL, psaAlignTail;
176   SeqAlignPtr           salpHead, salpTail;
177   SeqEntryPtr           sep;
178   SeqIdPtr              sid;
179   ValNodePtr            pvnFids = NULL;
180   VastPageDataPtr       vpp;
181 
182   /* action == 0 indicates MIME; action == 1 is text; action == 2 is save */
183   if ((indx = WWWFindName(www_info, (char *)"action")) < 0) iPDB = 0;
184   else {
185     www_arg = WWWGetValueByIndex(www_info, indx);
186 
187     if (isInt(www_arg)) iPDB = (Int4) atoi(www_arg);
188     else iPDB = 0;
189   }
190 
191 
192   if ( (indx=WWWFindName(www_info, (char *)"viewstr.x")) >=0
193                 || (indx=WWWFindName(www_info, (char *)"viewstr")) >=0 ) 
194                 iSubBut=VIEW_STR_SUBBUT;  
195   else if ((indx=WWWFindName(www_info, (char *)"viewali.x")) >=0 
196                 || (indx=WWWFindName(www_info, (char *)"viewali")) >=0 ) 
197                 iSubBut=VIEW_ALI_SUBBUT;
198   else {
199         PrtMesC("", "VASTSRV (Vast2Cn3D)", "Please click either \"View 3D Alignment\" or \"View Sequence Alignment\".", "", false); 
200   }
201 
202 
203   if (iSubBut == VIEW_STR_SUBBUT) {
204         if ((indx = WWWFindName(www_info, (char *)"calltype")) >=0) {
205                 www_arg = WWWGetValueByIndex(www_info, indx);
206                 cViewType = www_arg[0];
207         }
208         else 
209            PrtMesC(MAILto, "VASTSRV (Vast2Cn3D)", "No calltype code -- Please choose either Cn3D or Cn3D/Cache.\n", "", false); 
210 
211   }
212   else if ((indx = WWWFindName(www_info, (char *)"alitype")) >=0) {
213         CharPtr www_arg2;
214 
215         www_arg = WWWGetValueByIndex(www_info, indx);
216         
217         if ((indx = WWWFindName(www_info, (char *)"nbr_complexity")) >=0) {
218             www_arg2 = WWWGetValueByIndex(www_info, indx);
219             if (isInt(www_arg2)) nbr_complexity = (Int2)atoi(www_arg2);
220             else nbr_complexity = ALL_NBR;
221         }
222         else nbr_complexity = ALL_NBR;
223 
224         cViewType = www_arg[0];
225         if (nbr_complexity == ALL_NBR) {
226             if (cViewType == VIEW_IN_HTML) cViewType = VIEW_IN_HTML_PAGE;
227             else if (cViewType == VIEW_IN_FASTA) 
228                         cViewType = VIEW_IN_FASTA_PAGE;
229             else if (cViewType == VIEW_IN_TEXT) 
230                         cViewType = VIEW_IN_TEXT_PAGE;
231         }
232   }
233   else 
234     PrtMesC(MAILto, "VASTSRV (Vast2Cn3D)", "No alitype code -- Please choose Hypertext, Plain text or mFASTA.", "", true); 
235 
236 
237   if ((indx = WWWFindName(www_info, (char *)"atm_complexity")) < 0)
238         complexity = ONECOORDRES; /* select alpha Carbons only by default */
239   else {
240     www_arg = WWWGetValueByIndex(www_info, indx);
241     if (isInt(www_arg)) complexity = (Int2) atoi(www_arg);
242     else complexity = ONECOORDRES;
243   }
244   if ((complexity != ONECOORDRES) && (complexity != ONECOORDATOM))
245     complexity = ONECOORDRES; 
246                 /* bizarre value, but default to alpha-Carbons only */
247 
248   if (cViewType == 'H' || cViewType == 'F' || cViewType == 'T') {
249 
250         nbr_complexity = ALL_NBR;
251         if ((indx = WWWFindName(www_info, (char *)"allbfid")) < 0)  {
252               PrtMesC(MAILto, "VASTSRV (Vast2Cn3D)", "No \"allbfid\" was submitted!", "", true);
253         }
254 
255         www_arg = WWWGetValueByIndex(www_info, indx);
256         MakeNbrList(www_arg, NULL, &BsfId,  &hits_num, 0);
257         gi = new unsigned [hits_num];
258         for (i=0; i< hits_num; i++) {
259             Fid = BsfId[i];
260             if (JobID != "") ValNodeAddInt(&pvnFids, 0, Fid);
261         }
262         iFidCount = i-1;
263   }
264   else {
265      nbr_complexity = CHECKED_NBR;
266 
267      if ((indx = WWWFindName(www_info, (char *)"hit")) <0) {
268         if ((indx = WWWFindName(www_info, (char *)"defhit")) <0) {
269             PrtMesC(MAILto, "VASTSRV (Vast2Cn3D)", "No defhit was submitted!", "", false);
270         }
271         else {
272            www_arg = WWWGetValueByIndex(www_info, indx);
273                 
274            hits_num = 1;
275            gi = new unsigned;
276            BsfId = new unsigned; 
277         
278            if (isInt(www_arg))
279                 BsfId[0] = Fid = atol(www_arg);
280            else {
281                    PrtMesC(MAILto, (char *)"VASTSRV (Vast2Cn3D)", 
282                         (char *)"Non-numeric defhit: defhit = ", www_arg, TRUE);
283            }
284 
285            if (cViewType == VIEW_IN_Cn3D_GEN || JobID != "") {
286                         ValNodeAddInt(&pvnFids, 0, Fid);
287                         iFidCount=1;
288            }
289         }
290      }
291      else {      /* loop over all the "hit" values in the list */
292 
293          NumLabels = WWWGetNumEntries(www_info);
294 
295          for (indx = 0; indx < NumLabels; indx++) {
296                 Name = WWWGetNameByIndex(www_info, indx);
297                 if (!StrICmp(Name, "hit")) hits_num++;
298          }
299 
300          gi = new unsigned [hits_num];
301          BsfId = new unsigned [hits_num];
302       
303          for (indx = 0; indx < NumLabels; indx++) {
304 
305              Name = WWWGetNameByIndex(www_info, indx);
306              
307              if (!StrICmp(Name, "hit")) {
308                  www_arg = WWWGetValueByIndex(www_info, indx);
309 
310                  if (isInt(www_arg)) Fid =atoi(www_arg);
311                  else {
312                    PrtMesC(MAILto,  (char *)"VASTSRV (Vast2Cn3D)",
313                         (char *)"Non-numeric hit: hit = .", www_arg, TRUE);
314                  }
315         
316                  if (++iFidCount > 10 && cViewType == VIEW_IN_Cn3D_GEN) 
317                  {
318                      PrtMesC("", "VASTSrv (Vast2Cn3D)", "With general Cn3D, at most only 10 alignments can be displayed simultaneously. You may reselect neighbors or use Cn3D/Cache.", "", false);
319                         /* up to 10 boxes, ignore the rest. */
320                  }
321                  ValNodeAddInt(&pvnFids, 0, Fid);
322                  BsfId[iFidCount-1] = Fid;
323              }
324          }
325      }
326   }
327 
328 
329   /* Get BiostrucAnnotSet and SeqAnnot */
330 
331 /*
332   if (JobID != "" && !ReqId) {  // old VastSearch 
333     OpenMMDBAPI((POWER_VIEW  // ^ FETCH_ENTREZ ), NULL);
334     pbsa = LocalGetFeatureSet(aMmdbId, Fsid);
335   }
336   else
337 */
338 
339     VastPageDataPtr vpptmp;
340 
341     if (hits_num > 1)
342         vpptmp = new VastPageData [hits_num];
343     vpp = new VastPageData [hits_num];
344     if (JobID == "") {
345         if (hits_num ==1) 
346             i=constructVastPagesByNbrs(vpp,BsfId,hits_num,aSdi, (SortBy)(-1));
347         else 
348             i=constructVastPagesByNbrs(vpptmp,BsfId,hits_num,aSdi,(SortBy)(-1));
349     }
350     else {
351         if (hits_num ==1) 
352             i=GetVSVppByNbrs(aSdi, vpp, BsfId, hits_num, (SortBy)(-1));
353         else i=GetVSVppByNbrs(aSdi, vpptmp, BsfId, hits_num, (SortBy)(-1));
354 
355     }
356     if (i != hits_num) 
357             PrtMesC(MAILto,"VASTSRV (Vast2Cn3D)","Error in getting VAST data.",
358                                                                  "", false); 
359     if (hits_num > 1) {
360       OrderCopyVpp(vpptmp, vpp, hits_num, BsfId);
361       delete [] vpptmp;
362     }
363  
364     if (JobID == "") pbsa = constructBASPFromVastPagePtr(vpp, hits_num, 0);
365     else pbsa = constructBASPFromVastPagePtr(vpp, hits_num, 1);
366 
367     delete [] vpp;
368 
369 
370   if (pbsa == NULL) {
371     printf("Content-type: text/html\n\n");
372     printf("<br><center><h2>VASTSrv Error (VastToCn3D):</h2><p>\n");
373     printf("No alignment record exists for master mmdb_id = %d.</h3>\n",
374                         aMmdbId);
375     printf("Please alert \"%s\" of this problem.</center>\n",MAILto.c_str());
376   }
377 
378    pbsaShort = pbsa;
379 
380 {AsnIoPtr aipr;
381 aipr=AsnIoOpen("pbsa2.out", "w");
382 BiostrucAnnotSetAsnWrite(pbsaShort, aipr, NULL);
383 AsnIoClose(aipr);
384 }
385 
386 
387   if (pbsaShort == NULL) 
388      PrtMesC("","VASTSRV (Vast2Cn3D)","Can't find alignment record.","",false);
389   pbsfs = pbsaShort->features;
390   if (pbsfs) {
391       pbsf = pbsfs->features;
392       szTemp = pbsf->name;
393       StrCut(szName, pbsf->name, 1, 4);
394       sprintf(pdbname_m, szName);
395       chain_m = szTemp[4];
396       domNo_m = (Int4) atol (szTemp+5);
397   }
398 
399   if (cViewType == VIEW_IN_Cn3DCACHE) bsap = BundleSeqsAlignsNew();
400   else if (cViewType != VIEW_IN_Cn3D_GEN) basp = BiostrucAlignSeqNew();
401 
402   for (i=0; i< hits_num; i++) {
403       unsigned bsdi;
404       bsdi = BsfId[i]/100;
405       gi[i] = constructGi(SdiToMmdbId(bsdi), SdiToChainNo(bsdi));
406   }
407 
408   if (JobID == "") aGi = constructGi(aMmdbId, aChnNo);
409   else aGi = GetVSGi(atoi(JobID.c_str()+2), aChnNo); // new VS
410 
411   /* Get Biostruc for Cn3d, and SeqEntry (Bioseq)  */
412 
413   if (cViewType==VIEW_IN_Cn3D_GEN || JobID!="") {
414 
415     pbsaStruct = BiostrucAlignNew();
416 
417     if (JobID == "") {     /* not a VS job */
418         bool psok;
419         pbsMaster = OpenBSP(aMmdbId, complexity, 1, TRUE, FALSE, FALSE, psok, Database);
420     }
421     else {
422         string dir = "/tmp/" + string(JobID) + "_w/";
423         string bFile = dir + "biostr.txt";
424         if (!CDir(dir).Exists()) {
425             CExec::System((string("mkdir ") + dir).c_str());
426             CExec::System((string("chmod 777 ") + dir).c_str());  // temp.!!!!
427         }
428         
429         DownloadBiostrFromDB(JobID, bFile);
430         pbsMaster = FetchBS((char*)bFile.c_str(),1, complexity, 1,POWER_VIEW);
431         CExec::System((string("rm -r ") + dir).c_str());
432     }
433 
434     if (pbsMaster == NULL) 
435       PrtMesC(NULL, "VASTSrv (Vast2Cn3D)", "Unable to load master structure from a Vast Search result.", "", false); 
436 
437     if (JobID == "") {
438         sep = (SeqEntryPtr) constructSeqEntryForGi(aGi, TRUE, Database);
439     }
440     else if (ReqId) {   /* new VS job */
441 
442         sep = (SeqEntryPtr) GetVSSeqEntryForGi(aGi, false, NULL);
443         if (sep->choice == 1) { /* Bioseq */
444             RemoveGi((BioseqPtr)sep->data.ptrvalue);
445         }
446         else {
447         
448              fprintf(stderr, "sep->choice != 1 sth wrong\n");
449              exit(1);
450         }
451     }
452 
453     if (sep == NULL)  
454       PrtMesC(MAILto, "VASTSERV (Vast2Cn3D)", "Unable to get SeqEntry.", "", false);
455 
456     if (cViewType == VIEW_IN_Cn3D_GEN) {
457         ValNodeLink(&(pbsaStruct->sequences), sep);
458         if (JobID != "") {
459                 biosp = (BioseqPtr)sep->data.ptrvalue;
460                 sid = biosp->id;
461                 objid = (ObjectIdPtr) sid->data.ptrvalue;
462         }       
463         
464     }
465     else if (cViewType != VIEW_IN_Cn3DCACHE) 
466                 ValNodeLink(&(basp->sequences), sep);
467     else 
468         PrtMesC("", "VASTSRV (Vast2Cn3D)", "Can't work in Cn3D/Cache mode -- please try Cn3D mode.", "", false); 
469 
470         
471   /* Make a linked list of Biostrucs of the slave structures */
472 
473     for (i=0; i< hits_num; i++) {
474       Int4 bMmdbId;
475 
476       bMmdbId = SdiToMmdbId(BsfId[i]/100);        
477       if (!pbsSlaveHead) {
478         bool psok; 
479 
480         pbsSlaveHead = OpenBSP(bMmdbId, complexity, 1, TRUE, FALSE, FALSE, psok, Database);
481         if (!pbsSlaveHead)  
482           PrtMesC("", "VASTSRV (Vast2Cn3D)", "Unable to load slave structure.", "", false);
483 
484       /* Make Bioseq for Slaves */
485         sep = (SeqEntryPtr) constructSeqEntryForGi(gi[i], TRUE, Database);
486         if (sep == NULL) 
487           PrtMesC(MAILto, "VASTSRV (Vast2Cn3D)","Unable to get SeqEntry.","",false);
488 
489         if (cViewType == VIEW_IN_Cn3D_GEN) 
490                 ValNodeLink(&(pbsaStruct->sequences), sep);
491         else if (cViewType != VIEW_IN_Cn3DCACHE) 
492                 ValNodeLink(&(basp->sequences), sep);
493         else 
494            PrtMesC("", "VASTSRV (Vast2Cn3D)", "Can't work in Cn3D/Cache mode -- please try Cn3D mode.", "", false);
495 
496         pbsSlaveTail = pbsSlaveHead;
497       }
498       else { 
499         bool psok;
500         
501         pbsSlave =OpenBSP(bMmdbId, complexity, 1, TRUE, FALSE, FALSE, psok, Database);
502         if (!pbsSlave) 
503                 PrtMesC("", "VASTSERV (Vast2Cn3D)", "Unable to load slave structure.", "", false);
504 
505         sep = (SeqEntryPtr) constructSeqEntryForGi(gi[i], TRUE, Database);
506         if (sep == NULL) 
507                 PrtMesC(MAILto, "VASTSRV (Vast2Cn3D)", "Unable to get SeqEntry.", "", false);
508 
509         if (cViewType == VIEW_IN_Cn3D_GEN) 
510                 ValNodeLink(&(pbsaStruct->sequences), sep);
511         else if (cViewType != VIEW_IN_Cn3DCACHE) 
512                 ValNodeLink(&(basp->sequences), sep);
513         else 
514            PrtMesC("", "VASTSRV (Vast2Cn3D)", "Can't work in Cn3d/Cache mode -- please try Cn3D mode.", "", false);
515 
516         pbsSlaveTail->next = pbsSlave;
517         pbsSlaveTail = pbsSlaveTail->next;
518         pbsSlaveTail->next = NULL;
519       }
520     }
521   }
522   else {     /* cViewType != Cn3D_IN_GEN */
523 
524     BioseqPtr           bsp;
525 
526 /* Get SeqEntryPtr */
527 
528     if (JobID == "")    /* not a VS job */
529         sep = constructSeqEntryForGi(aGi, TRUE, Database);
530     else sep = GetVSSeqEntryForGi(aGi, false, NULL);
531     if (sep == NULL) 
532        PrtMesC(MAILto,"VASTSRV (Vast2Cn3D)","Unable to get Bioseq.", "", false);
533 
534     bsp = (BioseqPtr)sep->data.ptrvalue;
535     if (JobID == "") AddMMDBIdToBioseq(bsp, aMmdbId);
536 
537     if (cViewType == VIEW_IN_Cn3DCACHE) ValNodeLink(&(bsap->sequences), sep);
538     else ValNodeLink(&(basp->sequences), sep);
539 
540     for (i=0; i< hits_num; i++) {
541 
542       sep = constructSeqEntryForGi(gi[i], TRUE, Database);
543 
544       if (sep == NULL) 
545          PrtMesC(MAILto,"VASTSRV (Vast2Cn3D)","Unable to get Bioseq.","",false);
546 
547       bsp = (BioseqPtr)sep->data.ptrvalue;
548       AddMMDBIdToBioseq(bsp, SdiToMmdbId(BsfId[i]/100));      
549 
550       if (cViewType == VIEW_IN_Cn3DCACHE) ValNodeLink(&(bsap->sequences), sep);
551       else ValNodeLink(&(basp->sequences), sep);
552     }
553   }
554 
555   delete [] gi;
556   delete [] BsfId;
557 
558   /* Make a linked list of sequence alignments of master and slaves */
559   pbsf=pbsfs->features;
560 
561   while (pbsf) {
562     if (!psaAlignHead) {
563       psaAlignHead = fnPBSFtoPSA (pbsf); /* get the sequence alignments */
564 
565       if (psaAlignHead == NULL || psaAlignHead->data == NULL) 
566         PrtMesC(MAILto, "VASTSERV (Vast2Cn3D)", "Unable to create SeqAnnot.", "", false);
567 
568       salpHead = (SeqAlignPtr)(psaAlignHead->data);
569       salpTail = salpHead;
570 
571       if (JobID!="" && cViewType == VIEW_IN_Cn3D_GEN) {
572         DenseDiagPtr dendiag;
573 
574         for (dendiag=(DenseDiagPtr)salpHead->segs;dendiag;dendiag=dendiag->next)
575         {
576                 sid = dendiag->id;
577                 sid->choice = 1; 
578                 sid->data.ptrvalue = (ObjectIdPtr)objid;
579         }
580       }
581     }
582     else {
583       psaAlignTail = fnPBSFtoPSA (pbsf);
584 
585       salpTail->next = (SeqAlignPtr)(psaAlignTail->data);
586       if (psaAlignTail == NULL || psaAlignTail->data == NULL) 
587         PrtMesC(NULL, "VASTSRV (Vast2Cn3D)", "Unable to create SeqAnnot.","",false);
588       
589       salpTail = salpTail->next;
590       if (JobID != "" && cViewType == VIEW_IN_Cn3D_GEN) {
591         DenseDiagPtr dendiag;
592 
593         for (dendiag=(DenseDiagPtr)salpTail->segs;dendiag;dendiag=dendiag->next)
594         {
595                 sid = dendiag->id;
596                 sid->choice = 1;
597                 sid->data.ptrvalue = (ObjectIdPtr)objid;
598         }
599      }
600       salpTail->next = NULL;
601     }
602     pbsf = pbsf->next;
603   }
604 
605   /* assemble pvnNcbi */
606   
607   pvnNcbi = ValNodeNew(NULL);
608   if (cViewType == VIEW_IN_Cn3D_GEN) {
609 
610     pbsaStruct->master = pbsMaster;
611     pbsaStruct->slaves = pbsSlaveHead;
612     pbsaStruct->alignments = pbsaShort;
613     pbsaStruct->seqalign = psaAlignHead;
614 
615     pvnNcbi->choice =  NcbiMimeAsn1_alignstruc;
616     pvnNcbi->data.ptrvalue = pbsaStruct;
617 /*    pvnNcbi = (NcbiMimeAsn1Ptr) CheckId(pvnNcbi, JobID); */
618         /* to check identity, yanli  */
619   }
620   else if (cViewType == VIEW_IN_HTML || cViewType == VIEW_IN_FASTA
621         || cViewType == VIEW_IN_HTML_PAGE || cViewType == VIEW_IN_FASTA_PAGE
622         || cViewType == VIEW_IN_TEXT || cViewType == VIEW_IN_TEXT_PAGE) {
623 
624 
625 
626 
627     if (JobID != "") {          // VS job
628 
629 // first modification, could be done when uploading SeqEntry.
630         sep=NULL;
631         BioseqPtr   bsp=NULL;
632         SeqIdPtr    sip=NULL, sip_next=NULL;
633         ObjectIdPtr oip=NULL;
634         PDBSeqIdPtr psip=NULL;
635 
636         sep=basp->sequences;
637         bsp = (BioseqPtr)sep->data.ptrvalue;
638         sip = bsp->id;
639         if (sip->choice == SEQID_LOCAL) {
640             sip_next = sip->next;
641             oip = (ObjectIdPtr)sip->data.ptrvalue;
642             psip = PDBSeqIdNew();
643             psip->mol= (char *) MemNew (6);
644             StrCut(psip->mol, oip->str, 1, 4);
645 //strcpy(psip->mol, "Query");
646             psip->chain = (Uint1)(oip->str)[5];
647             oip = ObjectIdFree(oip);
648             sip->choice = SEQID_PDB;
649             sip->next = sip_next;
650             sip->data.ptrvalue = psip;
651         }
652         else 
653             PrtMesC(MAILto, "VastSrv(Vast2Cn3D)", 
654                 "Can't find local id in JobId = ",(char *)JobID.c_str(), false);
655         
656 
657 /*
658 // second modification: could be done by changing vpp.aDomName
659         salpHead = (SeqAlignPtr) psaAlignHead->data.ptrvalue;           
660         DenseDiagPtr  dendiag;
661         for (dendiag = (DenseDiagPtr)salpHead->segs;dendiag;dendiag=dendiag->next)
662         { 
663            sid = dendiag->id;
664            psip = (PDBSeqIdPtr) sip->data.ptrvalue;
665            delete [] psip->mol;
666            psip->mol = new char [6];
667            strcpy(psip->mol, "Query");
668         }
669 
670 */
671     }
672 
673     basp->seqalign = psaAlignHead;
674 
675     pvnNcbi->choice = NcbiMimeAsn1_alignseq;
676     pvnNcbi->data.ptrvalue = basp; 
677 
678   }
679   else {        /*if (cViewType == VIEW_IN_Cn3dCache) */
680 
681     BiostrucSeqsAlignsCddPtr bsacp;
682     SeqAlignData_seq_align_dataPtr sadp;
683 
684     bsap->seqaligns = psaAlignHead; 
685     bsap->strucaligns = pbsaShort;
686 
687     sadp = ValNodeNew(NULL);
688     sadp->data.ptrvalue = bsap;
689     sadp->choice = SeqAlignData_seq_align_data_bundle;
690     bsacp = BiostrucSeqsAlignsCddNew();
691     bsacp->SeqAlignData_seq_align_data = sadp;
692     if (complexity == ONECOORDRES)     
693                 bsacp->structure_type = 2;      /* ncbi_backbone */
694     else bsacp->structure_type = 3;             /* ncbi_all_atoms */
695 
696     pvnNcbi->choice = NcbiMimeAsn1_general;
697     pvnNcbi->data.ptrvalue = bsacp;
698 
699   } 
700 
701 {AsnIoPtr aipr;
702 aipr=AsnIoOpen("pvnNcbi.out", "w");
703 NcbiMimeAsn1AsnWrite(pvnNcbi, aipr, NULL);
704 AsnIoClose(aipr);
705 }
706 
707   if (cViewType == VIEW_IN_Cn3D_GEN || cViewType == VIEW_IN_Cn3DCACHE) {
708     if (iPDB == 0)    /* cn3d MIME */
709       printf ("Content-type: chemical/ncbi-asn1-binary\n\n");
710 
711     else if (iPDB == 1) {    /* "See File" */
712       printf ("Content-type: text/html\n\n");
713       printf ("<HTML><body><pre>\n");
714     }
715     else        /* "Save File" */
716       printf ("Content-type: application/octet-stream\n\n");
717 
718     if (iPDB != 1) paiFile = AsnIoNew(ASNIO_BIN_OUT, stdout, NULL, NULL, NULL); 
719     else paiFile = AsnIoNew(ASNIO_TEXT_OUT, stdout, NULL, NULL, NULL);
720 
721     NcbiMimeAsn1AsnWrite(pvnNcbi, paiFile, NULL); 
722     AsnIoFlush(paiFile); 
723     AsnIoClose(paiFile);
724   }
725   else {
726 
727     CNcbi_mime_asn1 *ptr = new CNcbi_mime_asn1;
728     CAsnConverter < CNcbi_mime_asn1, NcbiMimeAsn1>
729                 CtoCpp((AsnWriteFunc)NcbiMimeAsn1AsnWrite,
730                                         (AsnReadFunc)NcbiMimeAsn1AsnRead);
731 
732     if ( CtoCpp.FromC(pvnNcbi, ptr) ) {
733 
734         printf("Content-type: text/html\n\n");
735         WWWPrintFileData((char *)"sshead.txt", stdout);
736         printf("<TABLE width=800 BORDER=0 CELLPADDING=3 CELLSPACING=0 bgcolor=#FFFFCC>\n\n");
737         PrintQueryInfo(stdout, pdbname_m, chain_m, domNo_m);
738         printf("</TABLE>\n");
739         printf("<br>\n");
740         if (cViewType == VIEW_IN_HTML || cViewType == VIEW_IN_HTML_PAGE)
741             CAV_DisplayMultiple(*ptr, CAV_HTML|CAV_SHOW_IDENTITY, 60, 2.0, 
742                                                 NULL, 0, NULL, NULL, NULL); 
743         else if (cViewType == VIEW_IN_FASTA || cViewType == VIEW_IN_FASTA_PAGE) 
744         {
745             printf("<pre>\n");
746             CAV_DisplayMultiple(*ptr, 
747                 CAV_FASTA|CAV_LEFTTAILS|CAV_RIGHTTAILS|CAV_FASTA_LOWERCASE, 
748                 60, 2.0, NULL, 0, NULL, NULL, NULL);
749             printf("</pre>\n");
750         }
751         else if (cViewType == VIEW_IN_TEXT || cViewType == VIEW_IN_TEXT_PAGE) {
752                 printf("<pre>\n");
753                 CAV_DisplayMultiple(*ptr, CAV_TEXT, 60, 2.0, NULL, 0, NULL,NULL, NULL);
754                 printf("</pre>\n");
755         }
756     }
757     else {
758         printf("Content-type: text/html\n\n");
759         WWWPrintFileData((char *)"sshead.txt", stdout);
760         printf("CtoCpp.FromC failed\n");
761 
762     }
763 
764     printf("<HR SIZE=5 NOSHADE>\n");
765     printf("</body></html>\n");
766 
767     delete ptr;         // forgot 6/23/65
768   }
769 
770   if (cViewType==VIEW_IN_Cn3D_GEN) {
771         CloseMMDBAPI();
772         MMDBFini();
773   }
774 
775   VastSrchFinish();
776 
777   NcbiMimeAsn1Free(pvnNcbi); 
778 
779 }       /* end of VastToCn3DAndAli */
780 

source navigation ]   [ diff markup ]   [ identifier search ]   [ freetext search ]   [ file search ]  

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.