Changeset 76
- Timestamp:
- Dec 4, 2009 5:00:00 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/liveplot
- Property rcs:date changed from 1999/04/05 18:14:24 to 1999/04/06 21:13:49
- Property rcs:lines changed from +22 -7 to +203 -33
- Property rcs:rev changed from 1.6 to 1.7
r75 r76 1 1 #!/usr/local/bin/wish 2 # $RCSfile: liveplot,v $ 2 3 set Revision {$Revision$ $Date$} 3 4 … … 41 42 catch {if $env(DEBUG) {set expgui(debug) 1}} 42 43 #set expgui(debug) 1 44 set expgui(lblfontsize) 15 45 set expgui(fadetime) 10 46 set expgui(hklbox) 1 47 set peakinfo(obssym) scross 48 set peakinfo(obssize) 1.0 43 49 44 50 if [catch {package require BLT} errmsg] { … … 140 146 set expgui(gsasdir) [file dirname $expgui(scriptdir)] 141 147 set expgui(gsasexe) [file join $expgui(gsasdir) exe] 148 149 # called by a trace on expgui(lblfontsize) 150 proc setfontsize {a b c} { 151 global expgui graph 152 catch { 153 font config lblfont -size [expr -$expgui(lblfontsize)] 154 # this forces a redraw of the plot by changing the title to itself 155 .g configure -title [.g cget -title] 156 } 157 } 158 # define a font used for labels 159 if {$tcl_version >= 8.0} { 160 font create lblfont -family Helvetica -size [expr -$expgui(lblfontsize)] 161 trace variable expgui(lblfontsize) w setfontsize 162 } 142 163 143 164 proc readdata {box} { … … 275 296 set CALC {} 276 297 set BKG {} 298 global refhkllist refphaselist refpos 277 299 set refpos {} 278 global refhkllist refphaselist279 300 set refhkllist {} 280 301 set refphaselist {} … … 313 334 314 335 proc lblhkl {plot x} { 315 global cellparm command blt_version refhkllist refphaselist peakinfo 336 global blt_version expgui tcl_platform tcl_version 337 global refhkllist refphaselist peakinfo refpos 316 338 # look for peaks within pixelregion pixels 317 339 set pixelregion 5 … … 323 345 # select by displayed phases 324 346 set lbls 0 325 # puts "" 347 if {$expgui(hklbox)} { 348 catch { 349 toplevel .hkl 350 text .hkl.txt -width 30 -height 10 -wrap none \ 351 -yscrollcommand ".hkl.yscroll set" 352 scrollbar .hkl.yscroll -command ".hkl.txt yview" 353 grid .hkl.txt -column 0 -row 1 -sticky nsew 354 grid .hkl.yscroll -column 1 -row 1 -sticky ns 355 grid columnconfigure .hkl 0 -weight 1 356 grid rowconfigure .hkl 1 -weight 1 357 wm title .hkl "Liveplot HKL Labels" 358 wm iconname .hkl HKL 359 .hkl.txt insert end "Phase\thkl\tPosition" 360 } 361 } 326 362 foreach peak $peaknums { 327 # puts "hkl [lindex $refhkllist $peak] phase [lindex $refphaselist $peak]" 363 if {$expgui(hklbox)} { 364 catch { 365 .hkl.txt insert end "\n[lindex $refphaselist $peak]" 366 .hkl.txt insert end "\t[lindex $refhkllist $peak]" 367 .hkl.txt insert end "\t[lindex $refpos $peak]" 368 .hkl.txt see end 369 } 370 } 328 371 if [set peakinfo(flag[lindex $refphaselist $peak])] { 329 372 set xcen [expr $xcen + [refposvec range $peak $peak]] … … 340 383 set ycen Inf 341 384 } 342 set mark [$plot marker create text -coords "$xcen $ycen" \ 343 -rotate 90 -text $peaklist -anchor n -bg ""] 344 after 10000 "$plot marker delete $mark" 385 if {$tcl_platform(platform) == "windows"} { 386 # at least right now, text can't be rotated in windows 387 regsub -all { } $peaklist "\n" peaklist 388 set mark [$plot marker create text -coords "$xcen $ycen" \ 389 -text $peaklist -anchor n -bg "" -name hkl$xcen] 390 } else { 391 set mark [$plot marker create text -coords "$xcen $ycen" \ 392 -rotate 90 -text $peaklist -anchor n -bg "" -name hkl$xcen] 393 } 394 if {$tcl_version >= 8.0} { 395 $plot marker config hkl$xcen -font lblfont 396 } 397 if {$expgui(fadetime) > 0} { 398 catch { 399 after [expr $expgui(fadetime) * 1000 ] \ 400 "catch \{ $plot marker delete $mark \}" 401 } 402 } 403 } 404 405 proc delallhkllbl {plot} { 406 catch { 407 eval $plot marker delete [$plot marker names hkl*] 408 } 345 409 } 346 410 … … 368 432 $box yaxis config -title $yunits 369 433 setlegend $box $graph(legend) 434 # reconfigure the obs data 435 $box element configure obs \ 436 -symbol $peakinfo(obssym) \ 437 -pixels [expr 0.125 * $peakinfo(obssize)]i 370 438 # now deal with peaks 371 set j 0372 439 for {set i 1} {$i < 10} {incr i} { 440 set j 0 373 441 if [set peakinfo(flag$i)] { 374 442 foreach X $reflns($i) { … … 420 488 421 489 proc minioptionsbox {num} { 490 global blt_version tcl_platform peakinfo 422 491 set bx .opt$num 423 492 catch {destroy $bx} … … 427 496 428 497 set i $num 429 pack [label $bx.0 -text "Phase $i reflns" ] -side top 430 pack [checkbutton $bx.1 -text "Show reflections" \ 431 -variable peakinfo(flag$i)] -side top 498 pack [label $bx.0 -text "Phase $i reflns" ] -side top 499 pack [checkbutton $bx.1 -text "Show reflections" \ 500 -variable peakinfo(flag$i)] -side top 501 # remove option that does not work 502 if {$blt_version != 8.0 || $tcl_platform(platform) != "windows"} { 432 503 pack [checkbutton $bx.2 -text "Use dashed line" \ 433 504 -variable peakinfo(dashes$i)] -side top 434 pack [frame $bx.p$i -bd 2 -relief groove] -side top 435 # pack [checkbutton $bx.p$i.0 -text "Show phase $i reflns" \ 436 # -variable peakinfo(flag$i)] -side left -anchor w 437 pack [label $bx.p$i.1 -text " Y min:"] -side left 438 pack [entry $bx.p$i.2 -textvariable peakinfo(min$i) -width 5] \ 439 -side left 440 pack [label $bx.p$i.3 -text " Y max:"] -side left 441 pack [entry $bx.p$i.4 -textvariable peakinfo(max$i) -width 5] \ 442 -side left 443 pack [frame $bx.c$i -bd 2 -relief groove] -side top 444 445 pack [label $bx.c$i.5 -text " color:"] -side left 446 pack [entry $bx.c$i.6 -textvariable peakinfo(color$i) -width 12] \ 447 -side left 448 pack [button $bx.c$i.1 -text "Color menu" \ 449 -command "setcolor $i"] -side left 450 505 } 506 pack [frame $bx.p$i -bd 2 -relief groove] -side top 507 # pack [checkbutton $bx.p$i.0 -text "Show phase $i reflns" \ 508 # -variable peakinfo(flag$i)] -side left -anchor w 509 pack [label $bx.p$i.1 -text " Y min:"] -side left 510 pack [entry $bx.p$i.2 -textvariable peakinfo(min$i) -width 5] \ 511 -side left 512 pack [label $bx.p$i.3 -text " Y max:"] -side left 513 pack [entry $bx.p$i.4 -textvariable peakinfo(max$i) -width 5] \ 514 -side left 515 pack [frame $bx.c$i -bd 2 -relief groove] -side top 516 517 pack [label $bx.c$i.5 -text " color:"] -side left 518 pack [entry $bx.c$i.6 -textvariable peakinfo(color$i) -width 12] \ 519 -side left 520 pack [button $bx.c$i.2 -bg $peakinfo(color$i) -state disabled] -side left 521 pack [button $bx.c$i.1 -text "Color\nmenu" \ 522 -command "setcolor $i"] -side left 451 523 pack [frame $bx.b] -side top 452 pack [button $bx.b.1 -command {plotdata $box} -text "Update Plot"] \453 -side left524 #pack [button $bx.b.1 -command {plotdata $box} -text "Update Plot"] \ 525 # -side left 454 526 pack [button $bx.b.4 -command "destroy $bx" -text Close ] -side right 455 527 } … … 461 533 set peakinfo(color$num) $color 462 534 } 535 463 536 proc makepostscriptout {} { 464 537 global graph box … … 537 610 } 538 611 612 proc setlblopts {} { 613 global expgui tcl_platform tcl_version 614 set box .out 615 catch {destroy $box} 616 toplevel $box 617 focus $box 618 pack [frame $box.c] -side top -anchor w 619 pack [label $box.c.l -text "HKL label\nerase time:"] -side left 620 pack [entry $box.c.e -textvariable expgui(fadetime) -width 8] \ 621 -side left 622 pack [label $box.c.l1 -text seconds] -side left 623 pack [frame $box.d] -side top -anchor w 624 pack [label $box.d.l -text "HKL label size:"] -side left 625 pack [entry $box.d.e -textvariable expgui(lblfontsize) -width 8] \ 626 -side left 627 pack [label $box.d.l1 -text pixels] -side left 628 # old versions if tcl/tk don't support the font command 629 if {$tcl_version < 8.0} { 630 $box.d.l config -fg #888 631 $box.d.e config -fg #888 -state disabled 632 $box.d.l1 config -fg #888 633 } 634 pack [frame $box.e] -side top -anchor w 635 pack [checkbutton $box.e.b -text "Separate window for HKL labels"\ 636 -variable expgui(hklbox)] -side left 637 pack [button $box.a -text "Close" -command "destroy $box"] -side top 638 } 639 640 proc setsymopts {} { 641 global expgui peakinfo 642 set box .out 643 catch {destroy $box} 644 toplevel $box 645 focus $box 646 pack [frame $box.d] -side left -anchor n 647 pack [label $box.d.t -text "Symbol type"] -side top 648 set expgui(obssym) $peakinfo(obssym) 649 set expgui(obssize) $peakinfo(obssize) 650 foreach symbol {square circle diamond plus cross \ 651 splus scross} \ 652 symbol_name {square circle diamond plus cross \ 653 thin-plus thin-cross} { 654 pack [radiobutton $box.d.$symbol \ 655 -text $symbol_name -variable expgui(obssym) \ 656 -value $symbol] -side top -anchor w 657 } 658 pack [frame $box.e] -side left -anchor n -fill y 659 pack [label $box.e.l -text "Symbol Size"] -side top 660 pack [scale $box.e.s -variable expgui(obssize) \ 661 -from .1 -to 3 -resolution 0.05] -side top 662 pack [frame $box.a] -side bottom 663 pack [button $box.a.1 -text "Apply" \ 664 -command {set peakinfo(obssym) $expgui(obssym); \ 665 set peakinfo(obssize) $expgui(obssize)} ] -side left 666 pack [button $box.a.2 -text "Close" -command "destroy $box"] -side left 667 } 668 539 669 # save some of the global options in ~/.gsas_config 540 670 proc SaveOptions {} { 541 global graph 671 global graph expgui 542 672 set fp [open [file join ~ .gsas_config] a] 543 673 puts $fp "set graph(legend) $graph(legend)" … … 545 675 puts $fp "set graph(outname) $graph(outname)" 546 676 puts $fp "set graph(outcmd) $graph(outcmd)" 677 puts $fp "set expgui(lblfontsize) $expgui(lblfontsize)" 678 puts $fp "set expgui(fadetime) $expgui(fadetime)" 679 puts $fp "set expgui(hklbox) $expgui(hklbox)" 680 puts $fp "set peakinfo(obssym) $peakinfo(obssym)" 681 puts $fp "set peakinfo(obssize) $peakinfo(obssize)" 682 547 683 close $fp 548 684 } … … 583 719 } 584 720 # check every second 585 # after 10000 updateifnew586 721 after 1000 updateifnew 587 722 } … … 627 762 set box [graph .g] 628 763 Blt_ZoomStack $box 629 $box element create obs -color black -symbol scross -linewidth 0 764 $box element create obs -color black -linewidth 0 \ 765 -symbol $peakinfo(obssym) \ 766 -pixels [expr 0.125 * $peakinfo(obssize)]i 630 767 $box element create calc -color red -symbol none 631 768 $box element create diff -color blue -symbol none … … 637 774 $box element config bckg -xdata xvec -ydata bckvec 638 775 bind $box <Shift-Button-1> "lblhkl %W %x" 776 # bind $box <Shift-Double-Button-1> "lblallhkl %W" 777 bind $box <Shift-Button-3> "delallhkllbl %W" 639 778 } 640 779 $box yaxis config -title {} … … 685 824 -command "minioptionsbox $num" 686 825 } 826 .a.options.menu add command -label "Obs symbol" -command setsymopts 687 827 if {$expgui(tcldump) != ""} { 688 828 .a.options.menu add cascade -label "X units" -menu .a.options.menu.xunits … … 705 845 -variable graph(yunits) -value 1 \ 706 846 -command {set cycle [getcycle];readdata .g} 847 .a.options.menu add command -label "HKL labeling" -command setlblopts 707 848 } 708 849 … … 721 862 pack $box -fill both -expand yes 722 863 donewait 864 proc plotdataupdate {array element action} { 865 global box peakinfo reflns graph 866 # parse the element 867 regexp {([a-z]*)([0-9]*)} $element junk var num 868 if {$var == "color"} { 869 catch { 870 .opt$num.c$num.2 config -bg $peakinfo($element) 871 } 872 set i $num 873 set j 0 874 if [set peakinfo(flag$i)] { 875 catch { 876 $box element config phase$i -color $peakinfo(color$i) 877 } errmsg 878 foreach X $reflns($i) { 879 incr j 880 catch { 881 $box marker config peaks${i}_$j \ 882 $graph(MarkerColorOpt) $peakinfo(color$i) 883 } 884 } 885 } 886 return 887 } 888 waitmsg {Updating} 889 plotdata $box 890 donewait 891 } 892 trace variable peakinfo w plotdataupdate
Note: See TracChangeset
for help on using the changeset viewer.