NCBI C Toolkit Cross Reference

C/demo/dotmain.c


  1 /* dotmain.c 
  2 * ===========================================================================
  3 *
  4 *                            PUBLIC DOMAIN NOTICE
  5 *            National Center for Biotechnology Information (NCBI)
  6 *
  7 *  This software/database is a "United States Government Work" under the
  8 *  terms of the United States Copyright Act.  It was written as part of
  9 *  the author's official duties as a United States Government employee and
 10 *  thus cannot be copyrighted.  This software/database is freely available
 11 *  to the public for use. The National Library of Medicine and the U.S.
 12 *  Government do not place any restriction on its use or reproduction.
 13 *  We would, however, appreciate having the NCBI and the author cited in
 14 *  any work or product based on this material
 15 *
 16 *  Although all reasonable efforts have been taken to ensure the accuracy
 17 *  and reliability of the software and data, the NLM and the U.S.
 18 *  Government do not and cannot warrant the performance or results that
 19 *  may be obtained by using this software or data. The NLM and the U.S.
 20 *  Government disclaim all warranties, express or implied, including
 21 *  warranties of performance, merchantability or fitness for any particular
 22 *  purpose.
 23 *
 24 * ===========================================================================
 25 *
 26 * File Name:  dotmain.c
 27 *
 28 * Author:  Fasika Aklilu
 29 *
 30 * Version Creation Date:   8/8/01
 31 *
 32 * $Revision: 6.6 $
 33 *
 34 * File Description:  contains main function for dot matrix viewer
 35 
 36 * Modifications:  
 37 * --------------------------------------------------------------------------
 38 * Date     Name        Description of modification
 39 * -------  ----------  -----------------------------------------------------
 40 *
 41 *
 42 * ==========================================================================
 43 */
 44 
 45 #include <dotviewer.h>
 46 #include <accid1.h>
 47 #include <lsqfetch.h>
 48 
 49 /****************************************************************************
 50 
 51        GLOBAL VARS                                                                  
 52  ***************************************************************************/
 53 #define NUMARGS  (sizeof(myargs)/sizeof(myargs[0]))
 54 
 55 static Args myargs[] = {
 56     /* 0 */
 57     {"Sequence1 --  filename",NULL,NULL,NULL,TRUE,'q',ARG_FILE_IN,0.0,0,NULL},
 58     /* 1*/
 59     {"Sequence2 -- filename",NULL, NULL,NULL,TRUE,'s',ARG_FILE_IN,0.0,0,NULL},
 60     /* 2 */
 61     {"Orientation -- 1(+/+), 2(+/-)","1", NULL,NULL,TRUE,'o',ARG_INT,0.0,0,NULL},
 62     /* 3 */
 63     {"Start -- on sequence1","0", NULL,NULL,TRUE,'a',ARG_INT,0.0,0,NULL},
 64     /* 4 */
 65     {"Stop -- on sequence1","5", NULL,NULL,TRUE,'b',ARG_INT,0.0,0,NULL},
 66     /* 5 */
 67     {"Start -- on sequence2","0", NULL,NULL,TRUE,'c',ARG_INT,0.0,0,NULL},
 68     /* 6 */
 69     {"Stop -- on sequence2", "5", NULL,NULL,TRUE,'d',ARG_INT,0.0,0,NULL},
 70     /* 7 */
 71     { "Word size -- nuc[4 - 11], prot[1 or 2], default 8",  "8", NULL, NULL, TRUE, 'w', ARG_INT, 0.0, 0, NULL},
 72     /*8 */
 73     { "Hit size",  "100000", NULL, NULL, TRUE, 'k', ARG_INT, 0.0, 0, NULL},
 74     /* 9*/
 75     {"Alignment as seqannot -- filename",NULL, NULL,NULL,TRUE,'l',ARG_FILE_IN,0.0,0,NULL},
 76     /* 10 */
 77     {"Sequence1 -- GI or Accession",NULL,NULL,NULL,TRUE,'i',ARG_STRING,0.0,0,NULL},
 78     /* 11 */
 79     {"Sequence2 -- GI or Accession",NULL, NULL,NULL,TRUE,'j',ARG_STRING,0.0,0,NULL},
 80     /* 12 */
 81     {"Program -- Dotmatrix=1 Blast2seqs=2","1", NULL,NULL,TRUE,'p',ARG_INT,0.0,0,NULL},
 82 
 83 };
 84 
 85 typedef struct dotstartdata{
 86   WindoW  hStart;
 87   ButtoN  dot;
 88   ButtoN  reg_blast;
 89   ButtoN  auto_blast;
 90   ButtoN  GorL;
 91   ButtoN  mask_repeats;
 92   ButtoN  mask_simple;
 93   ButtoN  megablast;
 94   ButtoN  seqa;
 95   ButtoN  entrez;
 96   ButtoN  file;
 97   GrouP  plusorminus;
 98   GrouP  gapped;
 99   TexT    id1, id2;
100   TexT    hitsize;
101   TexT    wordsize;
102   TexT    eval;
103   TexT    querystart;
104   TexT    querystop;
105   TexT    subjectstart;
106   TexT    subjectstop;
107   TexT    progname;
108 } DOTStartData, PNTR DOTStartDataPtr;
109 
110 static FILE        *qfile=NULL, *sfile=NULL, *afile=NULL;
111 static Int4        q_start=0,q_stop=5,s_start=0, s_stop=5, tree_limit=10, word_size=11;
112 static CharPtr     id1=NULL, id2=NULL;
113 static Boolean     Bool_dotplot=TRUE;
114 static char *date_of_compilation = __DATE__;
115 static char *time_of_compilation = __TIME__;
116 
117 
118 
119 static  void DOT_quitProgram(ButtoN b)
120 {
121   QuitProgram();
122 }
123 
124 
125 static BioseqPtr DOT_GetBspFromGIOrAcc(CharPtr str)
126 {
127    BioseqPtr  bsp;
128    Int4       gi;
129    Char       ptr;
130    SeqIdPtr   sip;
131    ValNode    vn;
132    LinkSetPtr lsp;
133    Int4       uid;
134 
135    str = TrimSpacesAroundString(str);
136    ptr = *str;
137    if (IS_ALPHA(ptr))  /* accession */
138    {
139       sip = SeqIdFromAccessionDotVersion(str);   
140       bsp = BioseqLockById(sip);
141    } else  /* it's a GI */
142    {
143       gi = atoi(str);
144       vn.choice = SEQID_GI;
145       vn.data.intvalue = gi;
146       vn.next = NULL;
147       bsp = BioseqLockById(&vn);
148    }
149    return bsp;
150 }
151 
152 static BioseqPtr DOT_FetchBioseqGivenString(CharPtr id, Int2Ptr rtn)
153 {
154   BioseqPtr bsp = NULL;
155 
156    bsp = DOT_GetBspFromGIOrAcc(id);
157    if (bsp == NULL)
158      *rtn = -1;
159    else
160      *rtn = 1;
161 
162    return bsp;
163 }
164 
165 static void DOT_AlignTwoSeqsAndDisplay(BioseqPtr bsp1, BioseqPtr bsp2, SeqLocPtr slp1, SeqLocPtr slp2, Int4 word_size, Int4 tree_limit, CharPtr program)
166 {
167    SCP_ResultPtr        scp=NULL;
168 
169    scp=SCP_CompareOrderOrganizeBioseqs(bsp1, bsp2, slp1, slp2, program, word_size, tree_limit);
170    if (scp == NULL){
171      Message (MSG_OK, "Blast 2 Seqs - return NULL");
172      DOT_quitProgram(NULL);
173      return;
174    }
175    DOT_AlignPlotGivenScp(scp);
176 }
177 
178 
179 static void DOT_CenterString (RectPtr rptr, CharPtr text, FonT fnt, Int2 inc)
180 
181 {
182   if (fnt != NULL) {
183     SelectFont (fnt);
184   }
185   rptr->bottom = rptr->top + LineHeight ();
186   DrawString (rptr, text, 'c', FALSE);
187   rptr->top = rptr->bottom + inc;
188 }
189 
190 static FloatHi DOT_get_eval(Int4 exp)
191 {
192   FloatHi eval;
193   Int4 i;
194 
195   eval = 1;
196   for (i=1; i<=exp; i++)
197   {
198      eval = eval/10;
199   }
200   return eval;
201 }
202 
203 static SeqAlignPtr DOT_RunBlast2Seqs(BioseqPtr bsp1, BioseqPtr bsp2, SeqLocPtr slp1, SeqLocPtr slp2, DOTStartDataPtr sdata)
204 {
205   BLAST_OptionsBlkPtr options;
206   Char                eval[10];
207   Char                progname[10];
208   Int4                e;
209   Int2                i;
210   SeqAlignPtr         sap;
211   Uint2               entityID;
212 
213 
214   GetTitle(sdata->progname, progname, 10);
215   options = BLASTOptionNew(progname, TRUE);
216   
217   i = GetValue(sdata->gapped);
218   if (i == 1)
219     options->gapped_calculation = TRUE;
220   else {
221     BLASTOptionDelete(options);
222     options = BLASTOptionNew(progname, FALSE);
223     options->gapped_calculation = FALSE;
224   }
225 
226   GetTitle(sdata->eval, eval, 14);
227   if (eval != NULL)
228     {
229       e = atoi(eval);
230       options->expect_value = DOT_get_eval(e);
231     }
232 
233   GetTitle(sdata->wordsize, eval, 5);
234   if (eval != NULL)
235     options->wordsize = atoi(eval);
236   if (GetStatus(sdata->mask_repeats) == TRUE)
237     {
238       if (GetStatus(sdata->mask_simple) == TRUE)
239         options->filter_string = StringSave("m L;R");
240       else
241         options->filter_string = StringSave("m R");
242     } else if (GetStatus(sdata->mask_simple) == TRUE)
243       options->filter_string = StringSave("m L");
244 
245   if (GetStatus(sdata->megablast))
246     options->is_megablast_search=TRUE;
247 
248   if (slp1 == NULL || slp2 == NULL)
249     sap = BlastTwoSequences(bsp1, bsp2, progname, options);
250   else
251     sap = BlastTwoSequencesByLoc(slp1, slp2, progname, options);
252   
253   BLASTOptionDelete(options);
254 
255   if (sap == NULL)
256     return NULL;
257     
258   entityID = ObjMgrRegister(OBJ_SEQALIGN, (Pointer)sap);
259 
260   sap->saip = NULL;
261   AlnMgrIndexLite(sap);
262   AssignIDsInEntity(entityID, OBJ_SEQALIGN, (Pointer)sap);
263 
264   return sap;
265 }
266 
267 static void DOT_RunRequest(WindoW w, BioseqPtr qbsp, BioseqPtr sbsp, DOTStartDataPtr sdata){
268   Char            str1[100]={""}, str2[100]={""};
269   SeqLocPtr       slp1=NULL, slp2=NULL;
270   SeqAlignPtr     sap = NULL;
271   DOTMainDataPtr  mip;
272   DOTAlignInfoPtr alp=NULL;
273   SCP_ResultPtr    scp=NULL;
274 
275 
276   MemSet((Pointer)str1, '\0', sizeof(str1));
277   GetTitle (sdata->querystart,  str1,  sizeof(str1));
278   if (StringCmp(str1, "All")==0)
279      q_start=0; 
280   else
281     q_start=DOT_GetValue(sdata->querystart);
282   MemSet((Pointer)str1, '\0', sizeof(str1));
283   GetTitle(sdata->querystop, str1, sizeof(str1));
284   if (StringCmp(str1, "All")==0)
285     q_stop=qbsp->length-1;
286   else
287       q_stop=DOT_GetValue(sdata->querystop);
288   MemSet((Pointer)str1, '\0', sizeof(str1));
289   GetTitle(sdata->subjectstart, str1, sizeof(str1));
290   if (StringCmp(str1, "All")==0)
291     s_start=0;
292   else
293     s_start=DOT_GetValue(sdata->subjectstart);
294   MemSet((Pointer)str1, '\0', sizeof(str1));
295   GetTitle(sdata->subjectstop, str1, sizeof(str1));
296   if (StringCmp(str1, "All")==0)
297     s_stop=sbsp->length-1;
298   else
299     s_stop=DOT_GetValue(sdata->subjectstop);
300   if (qbsp->length<q_start || sbsp->length<s_start || q_start>q_stop|| s_start>s_stop || s_start<0 || q_start<0)
301     {
302       ErrPostEx(SEV_FATAL, 1, 0, "Bad sequence offset values");
303       return;
304     }
305   
306   if (GetStatus(sdata->reg_blast)){
307     if (GetValue(sdata->plusorminus) == 1){
308       slp1 = NULL;
309       slp2 = NULL;
310     }
311     else {
312       slp1= SeqLocIntNew(q_start, q_stop, 1, qbsp->id);
313       if (GetValue(sdata->plusorminus) == 2)
314         slp2 = SeqLocIntNew(s_start, s_stop, 1, sbsp->id);
315       else
316         slp2 = SeqLocIntNew(s_start, s_stop,2, sbsp->id);
317     }
318   }
319   else if (GetStatus(sdata->auto_blast)){
320     slp1 = SeqLocIntNew(q_start, q_stop, 1, qbsp->id);
321     slp2 = SeqLocIntNew(s_start, s_stop,1, sbsp->id);
322   }
323   else if (GetStatus(sdata->dot)){
324     slp1= SeqLocIntNew(q_start, q_stop, 1, qbsp->id);
325     if (GetValue(sdata->plusorminus) == 1)
326       slp2 = SeqLocIntNew(s_start, s_stop,1, sbsp->id);
327     else
328       slp2 = SeqLocIntNew(s_start, s_stop, 2, sbsp->id);
329   }
330   
331   if (GetStatus(sdata->reg_blast)){
332     sap = DOT_RunBlast2Seqs(qbsp, sbsp, slp1, slp2, sdata);
333     if (sap == NULL){
334       Message (MSG_OK, "Blast 2 Seqs -  returned NULL");
335       DOT_quitProgram(NULL);
336       return;
337     }
338     DOT_AlignPlotGivenSeqAlign(sap);
339   }
340   else if (GetStatus(sdata->dot) || GetStatus(sdata->auto_blast)){
341     
342     word_size=DOT_GetValue(sdata->wordsize);
343     tree_limit=DOT_GetValue(sdata->hitsize);
344     
345     if (GetStatus(sdata->dot)){
346       mip=DOT_CreateAndStorebyLoc(slp1, slp2, word_size, tree_limit);
347       if (mip == NULL){
348         Message (MSG_OK, "Dot Plot analysis returned NULL");
349         DOT_quitProgram(NULL);
350         return;
351       }
352       Remove(sdata->hStart);
353       Remove(w);
354       DOT_MakeMainViewer(mip, alp);
355     }
356     else if (GetStatus(sdata->auto_blast)){
357       scp=SCP_CompareOrderOrganizeBioseqs(qbsp, sbsp, slp1, slp2, "blastn", word_size, tree_limit);
358       if (scp == NULL){
359         Message (MSG_OK, "Blast 2 Seqs - return NULL");
360         DOT_quitProgram(NULL);
361         return;
362       }
363       DOT_AlignPlotGivenScp(scp);
364     } 
365   } 
366 }
367 
368 static void DOT_OpenAcceptProc(ButtoN b)
369 {
370   DOTStartDataPtr sdata;
371   WindoW          w;
372   Char            str1[100]={""}, str2[100]={""};
373   BioseqPtr       qbsp=NULL, sbsp=NULL;
374   SeqEntryPtr     qsep=NULL, ssep=NULL;
375   Uint2           entityID, entityID1, entityID2;
376   SeqLocPtr       slp1=NULL, slp2=NULL;
377   Pointer         dataptr=NULL;
378   Uint2           datatype=0;
379   SeqAlignPtr     sap=NULL;
380   SeqAnnotPtr     sanp=NULL;
381   DOTAlignInfoPtr alp;
382 
383   w=ParentWindow(b);  
384   Hide(w);
385   sdata=(DOTStartDataPtr)GetObjectExtra(w);
386   GetTitle(sdata->id1, str1, sizeof(str1));
387   if (!GetStatus(sdata->seqa))
388     GetTitle(sdata->id2, str2, sizeof(str2));
389   if (StringHasNoText (str1)) {
390     if (!GetStatus(sdata->seqa) && StringHasNoText(str2)){
391       Message (MSG_ERROR, "invalid filename");
392       Show (w);
393       Select (w);
394       Select (sdata->id1);
395       return;
396     }
397   }
398   else{
399       qfile = FileOpen(str1, "r");
400       if (!qfile){
401         Message (MSG_ERROR, "invalid filename");
402         Show (w);
403         Select (w);
404         Select (sdata->id1);
405         return;
406       }
407       if (GetStatus(sdata->seqa)){
408         dataptr = ReadAsnFastaOrFlatFile (qfile, &datatype, &entityID, FALSE, TRUE, TRUE, TRUE);
409         if (!dataptr || datatype != OBJ_SEQANNOT) goto seqa_end;
410         sanp = (SeqAnnotPtr)(dataptr);
411         sap = (SeqAlignPtr)(sanp->data);
412         AlnMgrIndexLite(sap);
413         AssignIDsInEntity(entityID, OBJ_SEQALIGN, (Pointer)sap);
414 
415         fclose(afile);
416         alp=DOT_AlignInfoNew();
417         alp->sap=sap;
418         if (!DOT_FillAlignInfoPointer(alp)){
419           goto seqa_end;
420         }
421         DOT_MakeMainViewer(NULL, alp);
422       seqa_end:
423         fclose(qfile);
424         return;
425       }
426       sfile = FileOpen(str2, "r");
427       if (!sfile){
428         fclose(qfile);
429         Message (MSG_ERROR, "invalid filename");
430         Show (w);
431         Select (w);
432         Select (sdata->id1);
433         return;
434       }
435    while ((dataptr = ReadAsnFastaOrFlatFile (qfile, &datatype, &entityID1, FALSE, FALSE, TRUE, FALSE)) != NULL)
436      {
437        qsep= GetTopSeqEntryForEntityID(entityID1);
438        entityID1 = SeqMgrIndexFeatures(0, qsep);
439        qbsp = qsep->data.ptrvalue;
440      }
441    
442    while ((dataptr = ReadAsnFastaOrFlatFile (sfile, &datatype, &entityID2, FALSE, FALSE, TRUE, FALSE)) != NULL)
443      {
444        ssep= GetTopSeqEntryForEntityID(entityID2);
445        entityID2 = SeqMgrIndexFeatures(0, ssep);
446        sbsp = ssep->data.ptrvalue;
447 
448      }
449     if (qbsp== NULL || sbsp== NULL)
450     {
451         Message (MSG_ERROR, "Can't read sequences");
452         Show (w);
453         Select (w);
454         Select (sdata->id1);
455         goto file_end;
456     }
457    if (qbsp->mol != sbsp->mol)
458     {
459       Message (MSG_ERROR, "Mismatched molecule types");
460       Show (w);
461       Select (w);
462       Select (sdata->id1);
463       goto file_end;
464     }
465    
466    DOT_RunRequest(w, qbsp, sbsp, sdata);
467   file_end:
468       if (qfile)fclose(qfile);
469       if (sfile)fclose(sfile);
470       return;
471   }
472 }
473   
474 static void DOT_RespondtoFetch(Int2 rtn, WindoW w, DOTStartDataPtr sdata)
475 {
476   if (rtn==-2){
477     Message (MSG_ERROR, "Network is unavailable -- load local files");
478   }
479   else if (rtn==-1){
480     Message (MSG_ERROR, "bad GI or Accession -- try again?");
481   }
482   
483   Show (w);
484   Select (w);
485   Select (sdata->id1);
486   return;
487 }
488 
489 static void DOT_AcceptNetworkProc(ButtoN b)
490 {
491   DOTStartDataPtr sdata;
492   WindoW          w;
493   Char            str1[50]={""}, str2[50]={""};
494   BioseqPtr       qbsp=NULL, sbsp=NULL;
495   SeqEntryPtr     qsep, ssep;
496   Uint2           entityID1, entityID2;
497   Int2            rtn=0;
498   DOTMainDataPtr  mip;
499   SeqLocPtr       slp1=NULL, slp2=NULL;
500 
501   w=ParentWindow(b);  
502   Hide(w);
503   sdata=(DOTStartDataPtr)GetObjectExtra(w);
504   GetTitle(sdata->id1, str1, sizeof(str1));
505   GetTitle(sdata->id2, str2, sizeof(str2));
506   if (StringHasNoText (str1) || StringHasNoText(str2)) {
507     Message (MSG_ERROR, "enter GI or Accession number");
508     Show (w);
509     Select (w);
510     Select (sdata->id1);
511     return;
512   }
513 
514   qbsp = DOT_FetchBioseqGivenString(str1, &rtn);
515   sbsp = DOT_FetchBioseqGivenString(str2, &rtn);
516 
517   if (rtn <0 || !qbsp || !sbsp){
518     DOT_RespondtoFetch(rtn, w, sdata);
519     return;
520   }
521   
522   DOT_RunRequest(w, qbsp, sbsp, sdata);
523   
524 }
525 
526 static void DOT_CancelProc(ButtoN b)
527 {
528   DOTStartDataPtr sdata;
529   sdata=(DOTStartDataPtr)GetObjectExtra(ParentWindow(b));
530   Remove(ParentWindow(b));
531   Show(sdata->hStart);
532 }
533 
534 static void DOT_SetupDotParameters(GrouP g, DOTStartDataPtr sdata, Boolean is_dot)
535 {
536   GrouP g1, g2, g3, gtotal;
537 
538   if (is_dot == TRUE){
539     gtotal = HiddenGroup(g, 1, 3, NULL);
540     
541     sdata->plusorminus = NormalGroup(gtotal, 2,1, "",  systemFont,NULL);
542     RadioButton(sdata->plusorminus, "plus-plus");
543     RadioButton(sdata->plusorminus, "plus-minus");
544     SetValue(sdata->plusorminus, 1);
545   }
546   else
547     gtotal = HiddenGroup(g, 1, 2, NULL);
548 
549   g2 = NormalGroup(gtotal, 4, 2, "",  systemFont,NULL);
550   StaticPrompt(g2, "query start -- ", 0, 0, systemFont, 'l');
551   sdata->querystart = DialogText(g2, "All", 5, NULL);
552   StaticPrompt(g2, "query stop -- ", 0, 0, systemFont, 'l');
553   sdata->querystop = DialogText(g2, "All", 5, NULL);
554   StaticPrompt(g2, "subject start -- ", 0, 0, systemFont, 'l');
555   sdata->subjectstart = DialogText(g2, "All", 5, NULL);
556   StaticPrompt(g2, "subject stop -- ", 0, 0, systemFont, 'l');
557   sdata->subjectstop = DialogText(g2, "All", 5, NULL);
558 
559   g3 = NormalGroup(gtotal, 2, 2, "",  systemFont,NULL);
560   StaticPrompt(g3, "hitsize -- ", 0, 0, systemFont, 'l');
561   sdata->hitsize = DialogText(g3, "100000", 5, NULL);
562   StaticPrompt(g3, "wordsize -- ", 0, 0, systemFont, 'l');
563   sdata->wordsize = DialogText(g3, "11", 5, NULL);
564 }
565 
566 static void DOT_MegaBlast2Defaults(ButtoN b)
567 {
568   DOTStartDataPtr sdata;
569 
570   sdata=(DOTStartDataPtr )GetObjectExtra(b);
571 
572   if (GetStatus(b)){
573     SetValue(sdata->gapped, 1);
574     SetTitle(sdata->wordsize, "28");
575   }
576   else {
577     SetTitle(sdata->wordsize, "11");
578   }
579 }
580 
581 static void DOT_SetupBlastParameters(GrouP g, DOTStartDataPtr sdata)
582 {
583   GrouP g0, g1, g2, g3, g4, g5, gtotal;
584   GrouP g_sub1, g_sub2;
585 
586   gtotal = HiddenGroup(g, 1, 6, NULL);
587 
588   sdata->plusorminus = NormalGroup(gtotal, 2,1, "",  systemFont,NULL);
589   RadioButton(sdata->plusorminus, "both");
590   RadioButton(sdata->plusorminus, "plus-plus");
591   RadioButton(sdata->plusorminus, "plus-minus");
592   SetValue(sdata->plusorminus, 1);
593   
594   g0 = HiddenGroup(gtotal, 2, 1, NULL);
595   StaticPrompt(g0, "Program name: ", 0, 0, systemFont, 'l');
596   sdata->progname = DialogText(g0, "blastn", 7, NULL);
597 
598 
599   g1 = NormalGroup(gtotal, 4, 2, "",  systemFont,NULL);
600   StaticPrompt(g1, "query start -- ", 0, 0, systemFont, 'l');
601   sdata->querystart = DialogText(g1, "All", 5, NULL);
602   StaticPrompt(g1, "query stop -- ", 0, 0, systemFont, 'l');
603   sdata->querystop = DialogText(g1, "All", 5, NULL);
604   StaticPrompt(g1, "subject start -- ", 0, 0, systemFont, 'l');
605   sdata->subjectstart = DialogText(g1, "All", 5, NULL);
606   StaticPrompt(g1, "subject stop -- ", 0, 0, systemFont, 'l');
607   sdata->subjectstop = DialogText(g1, "All", 5, NULL);
608 
609   g3 = NormalGroup(gtotal, 1, 3, "Local Alignment Options", programFont, NULL);
610   g_sub1 = NormalGroup(g3, 1,1, "",  programFont,NULL);
611   g_sub2 = HiddenGroup(g_sub1, 3, 2, NULL);
612   sdata->gapped = HiddenGroup(g_sub2, 0, 2, NULL);
613   RadioButton(sdata->gapped, "gapped");
614   RadioButton(sdata->gapped, "ungapped");
615   SetValue(sdata->gapped, 1);
616   
617   g4 = NormalGroup(gtotal, 1,1, "Mask Regions",  programFont,NULL);
618   g_sub1=HiddenGroup(g4, 0, 2, NULL);
619   sdata->mask_repeats= CheckBox(g_sub1, "Mask Repeats", NULL);
620   SetStatus(sdata->mask_repeats, FALSE);
621   sdata->mask_simple = CheckBox(g_sub1, "Mask Simple Sequence", NULL);
622   SetStatus(sdata->mask_simple, TRUE);
623   
624   sdata->megablast= CheckBox(gtotal, "Mega Blast", DOT_MegaBlast2Defaults);
625   SetObjectExtra(sdata->megablast, (Pointer)sdata, NULL);
626   SetStatus(sdata->megablast, FALSE);
627 
628   g5 = NormalGroup(gtotal, 1,1, "",  programFont,NULL);
629   g_sub1 = HiddenGroup(g5, 2, 2, NULL);
630   StaticPrompt(g_sub1, "E-value:  e-", 0, 0, programFont, 'l');
631   sdata->eval = DialogText(g_sub1, "1", 5, NULL);
632   StaticPrompt(g_sub1, "wordsize:", 0, 0, programFont, 'l');
633   sdata->wordsize = DialogText(g_sub1, "11", 5, NULL);
634 
635 }
636 
637 
638 static void DOT_GetFromNetwork(ButtoN b)
639 {
640   WindoW  w;
641   GrouP   g, c;
642   Char    szAppName  [10]={"D-Viewer"};
643   DOTStartDataPtr sdata;
644 
645   sdata=(DOTStartDataPtr)GetObjectExtra(ParentWindow(b));
646   if (!sdata) return;
647   Hide(sdata->hStart);
648   w = MovableModalWindow (-50, -33, -10, -10, "Download From NCBI", NULL);
649   SetObjectExtra(w, (Pointer)sdata, NULL);
650   if (w==NULL) return;
651   SetGroupSpacing (w, 10, 10);
652   /*accesion*/
653   g = NormalGroup (w, 1, 4, "Entrez GI or Accession", systemFont,NULL);
654   sdata->id1=DialogText (g, "", 10, NULL);
655   sdata->id2=DialogText (g, "", 10, NULL);
656   SetObjectExtra(w, (Pointer)sdata, NULL);
657   if (GetStatus(sdata->dot))
658     DOT_SetupDotParameters(g, sdata, TRUE);
659   else if (GetStatus(sdata->auto_blast))
660     DOT_SetupDotParameters(g, sdata, FALSE);
661   else if (GetStatus(sdata->reg_blast))
662     DOT_SetupBlastParameters(g, sdata);
663   c = HiddenGroup (g, 4, 0, NULL);
664   SetGroupMargins(c, 10, 10);
665   SetGroupSpacing (c, 10, 20);
666   DefaultButton (c, "Retrieve", DOT_AcceptNetworkProc);
667   PushButton (c, "Cancel", DOT_CancelProc);
668   AlignObjects (ALIGN_CENTER, (HANDLE) g, (HANDLE) c, NULL);
669   RealizeWindow (w);
670   Show (w);
671   Select (w);
672   Update ();
673 }
674 
675 static void DOT_OpenBrowse1Proc(ButtoN b)
676 {
677   DOTStartDataPtr sdata=NULL;
678   Char   path[PATH_MAX]={""};
679 
680   sdata = (DOTStartDataPtr) GetObjectExtra (b);
681   
682   if (sdata==NULL) return;
683   
684   if (GetInputFileName (path, sizeof(path), NULL, NULL)){ 
685     SetTitle(sdata->id1, path);
686   }
687 }
688 
689 static void DOT_OpenBrowse2Proc(ButtoN b)
690 {
691   DOTStartDataPtr sdata=NULL;
692   Char   path[PATH_MAX]={""};
693 
694   sdata = (DOTStartDataPtr) GetObjectExtra (b);
695   
696   if (sdata==NULL) return;
697   
698   if (GetInputFileName (path, sizeof(path), NULL, NULL)){ 
699     SetTitle(sdata->id2, path);
700   }
701 }
702 
703 extern void DOT_readExisting(ButtoN b)
704 {
705   WindoW  w;
706   GrouP   g, g2, c;
707   Char    szAppName  [10]={"D-Viewer"};
708   DOTStartDataPtr sdata;
709 
710   sdata=(DOTStartDataPtr)GetObjectExtra(ParentWindow(b));
711   if (!sdata) return;
712   Hide(sdata->hStart);
713   w = MovableModalWindow (-50, -33, -10, -10, "Local File", NULL);
714   SetObjectExtra(w, (Pointer)sdata, NULL);
715  if (w==NULL) return;
716   g = NormalGroup(w, 1, 3, "File name:",  systemFont, NULL);
717   SetGroupMargins(g, 10, 10);
718   SetGroupSpacing(g, 10, 20);  
719   g2=HiddenGroup(g, 2, 2, NULL);
720   sdata->id1 = DialogText(g2,"",25, NULL);
721   b = PushButton(g2, " browse...", DOT_OpenBrowse1Proc);
722   SetObjectExtra (b, (Pointer) sdata, NULL);
723   if (!GetStatus(sdata->seqa)){
724     sdata->id2 = DialogText(g2,"",25, NULL);
725     b = PushButton(g2, " browse...", DOT_OpenBrowse2Proc);
726     SetObjectExtra (b, (Pointer) sdata, NULL);
727     if (GetStatus(sdata->dot))
728       DOT_SetupDotParameters(g, sdata, TRUE);
729     else if (GetStatus(sdata->auto_blast))
730       DOT_SetupDotParameters(g, sdata, FALSE);
731     else 
732       DOT_SetupBlastParameters(g, sdata);
733   }
734   c = HiddenGroup (g, 4, 0, NULL);
735   DefaultButton(c, "OK",  DOT_OpenAcceptProc);
736   PushButton(c, "Cancel",  DOT_CancelProc);
737   Select(w);
738   Show(w);
739 }
740 
741 static void DOT_ButtontoNetwork(ButtoN b){
742   
743   Remove(ParentWindow(b));
744  /*  if (!(igvp=IG_NewMainDataPtr())) */
745 /*     return; */
746 /*   IG_GetFromNetwork(igvp); */
747 }
748 
749 static void DOT_DrawAbout (PaneL p)
750 
751 {
752   RecT  r;
753   Char  str [60];
754   FonT  titleFont=NULL;
755 
756 
757   if (titleFont == NULL) {
758 #ifdef WIN_MAC
759     titleFont = GetFont ("Geneva", 18, TRUE, TRUE, FALSE, "");
760 #endif
761 #ifdef WIN_MSWIN
762     titleFont = GetFont ("Arial", 24, TRUE, TRUE, FALSE, "");
763 #endif
764 #ifdef WIN_MOTIF
765     titleFont = GetFont ("Courier", 24, TRUE, TRUE, FALSE, "");
766 #endif
767   }
768 
769   sprintf (str, "Beta 1.05 [%s - %s]", date_of_compilation, time_of_compilation);
770 
771   ObjectRect (p, &r);
772   InsetRect (&r, 4, 4);
773   r.top += 10;
774   Magenta ();
775   DOT_CenterString (&r, " ~ D-Viewer ~", titleFont, 5);
776 /*   DOT_CenterString (&r, str, programFont, 10); */
777 
778   /*
779   CenterString (&r, "National Center for Biotechnology Information", systemFont, 5);
780   CenterString (&r, "National Library of Medicine", systemFont, 5);
781   CenterString (&r, "National Institutes of Health", systemFont, 10);
782   */
783 }
784 
785 
786 static void DOT_CheckDot(ButtoN b)
787 {
788   DOTStartDataPtr sdata;
789   
790   sdata=(DOTStartDataPtr)GetObjectExtra(ParentWindow(b));
791   if (!sdata) return;
792   if(GetStatus(sdata->dot)){
793     Enable(sdata->entrez);
794     Enable(sdata->file);
795     SetStatus(sdata->reg_blast, FALSE);
796     SetStatus(sdata->auto_blast, FALSE);
797     SetStatus(sdata->seqa, FALSE);
798   }
799   else{
800     Disable(sdata->entrez);
801     Disable(sdata->file);
802   }
803 }
804 static void DOT_CheckRegBlast(ButtoN b)
805 {
806   DOTStartDataPtr sdata;
807   
808   sdata=(DOTStartDataPtr)GetObjectExtra(ParentWindow(b));
809   if (!sdata) return;
810   if(GetStatus(sdata->reg_blast)){
811     Enable(sdata->entrez);
812     Enable(sdata->file);
813     SetStatus(sdata->dot, FALSE);
814     SetStatus(sdata->seqa, FALSE);
815     SetStatus(sdata->auto_blast, FALSE);
816   }
817   else{
818     Disable(sdata->entrez);
819     Disable(sdata->file);
820   }
821 }
822 
823 static void DOT_CheckAutoBlast(ButtoN b)
824 {
825   DOTStartDataPtr sdata;
826   
827   sdata=(DOTStartDataPtr)GetObjectExtra(ParentWindow(b));
828   if (!sdata) return;
829   if(GetStatus(sdata->auto_blast)){
830     Enable(sdata->entrez);
831     Enable(sdata->file);
832     SetStatus(sdata->dot, FALSE);
833     SetStatus(sdata->seqa, FALSE);
834     SetStatus(sdata->reg_blast, FALSE);
835   }
836   else{
837     Disable(sdata->entrez);
838     Disable(sdata->file);
839   }
840 }
841 
842 static void DOT_CheckSA(ButtoN b)
843 {
844   DOTStartDataPtr sdata;
845   
846   sdata=(DOTStartDataPtr)GetObjectExtra(ParentWindow(b));
847   if (!sdata) return;
848   if(GetStatus(sdata->seqa)){
849     Disable(sdata->entrez);
850     Enable(sdata->file);
851     SetStatus(sdata->dot, FALSE);
852     SetStatus(sdata->reg_blast, FALSE);
853     SetStatus(sdata->auto_blast, FALSE);
854   }
855   else{
856     Disable(sdata->file);
857   }
858 }
859 static void DOT_StartupWindow(void)
860 {
861 
862   WindoW  w;
863   GrouP   c, cg;
864   DOTStartDataPtr sdata;
865   PaneL   p;
866 
867   w = FixedWindow (-50, -33, -10, -10, "Welcome to D-Viewer", StdCloseWindowProc);
868 
869   p = SimplePanel (w, 28 * stdCharWidth, 4 * stdLineHeight, DOT_DrawAbout);
870   sdata=(DOTStartDataPtr)MemNew(sizeof(DOTStartData));
871   sdata->hStart=w;
872   cg=HiddenGroup(w, 4, 0, NULL);
873   sdata->dot=CheckBox(cg, "Dot plot", DOT_CheckDot);
874   SetStatus(sdata->dot, TRUE);
875   
876   sdata->reg_blast=CheckBox(cg, "Bl2Seqs", DOT_CheckRegBlast);
877   SetStatus(sdata->reg_blast, FALSE);
878   sdata->auto_blast = CheckBox(cg, "Scoop", DOT_CheckAutoBlast);
879   SetStatus(sdata->auto_blast, FALSE);
880 
881   sdata->seqa=CheckBox(cg, "SeqAnnote File", DOT_CheckSA);
882   SetStatus(sdata->seqa, FALSE);
883   c = HiddenGroup (w, 1, 3, NULL);
884   SetGroupMargins(c, 10, 10);
885   SetGroupSpacing (c, 10, 10);
886   sdata->entrez=PushButton (c, "Fetch from Entrez", DOT_GetFromNetwork);
887   Enable(sdata->entrez);
888   sdata->file=PushButton (c, "Open Local Files", DOT_readExisting);
889   Enable(sdata->file);
890   PushButton (c, "Quit Program", DOT_quitProgram);
891     
892   SetObjectExtra(w, (Pointer)sdata, StdCleanupExtraProc);
893   AlignObjects (ALIGN_CENTER, (HANDLE) p, (HANDLE) c, NULL,  NULL);
894   Select(w);
895   Show(w);
896   ProcessEvents();
897 }
898 
899 
900 Int2 Main ()
901 {
902 
903   Int2        orient;
904   CharPtr     txt=NULL;
905   Boolean     Bool=TRUE;
906 
907   ErrSetFatalLevel (SEV_MAX);
908   ErrClearOptFlags (EO_SHOW_USERSTR);
909   UseLocalAsnloadDataAndErrMsg ();
910   ErrPathReset ();
911 
912   if (! AllObjLoad ()) { 
913     Message (MSG_FATAL, "AllObjLoad failed"); 
914     return -1; 
915   } 
916   if (! SubmitAsnLoad ()) {
917     Message (MSG_FATAL, "SubmitAsnLoad failed");
918     return 1;
919   }
920   if (! FeatDefSetLoad ()) {
921     Message (MSG_FATAL, "FeatDefSetLoad failed");
922     return 1;
923   }
924   if (! SeqCodeSetLoad ()) {
925     Message (MSG_FATAL, "SeqCodeSetLoad failed");
926     return 1;
927   }
928   if (! GeneticCodeTableLoad ()) {
929     Message (MSG_FATAL, "GeneticCodeTableLoad failed");
930     return 1;
931   }
932 
933   if (!ID1BioseqFetchEnable("DotMatrix", FALSE))
934     {
935       ErrPostEx(SEV_FATAL, 1, 0, "Bad sequence offset values");
936       return -1;
937     }
938   LocalSeqFetchInit (FALSE);
939 
940    
941   DOT_StartupWindow();
942   
943   LocalSeqFetchDisable ();
944   ID1BioseqFetchDisable();
945 
946 }
947 

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.