|
NCBI Home IEB Home C Toolkit docs C++ Toolkit source browser C Toolkit source browser (2) |
NCBI C Toolkit Cross ReferenceC/demo/dotmain.c |
source navigation diff markup identifier search freetext search file search |
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 |
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more information. |