Changeset 1179 for branches/sandbox


Ignore:
Timestamp:
Nov 9, 2011 10:33:23 PM (9 years ago)
Author:
toby
Message:

add TOPAS import to liveplot

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/sandbox/liveplot

    r1178 r1179  
    1515set exitstat 0
    1616set expnam [file root [lindex $argv 0]]
    17 if {$expnam == ""} {catch {puts "error -- no experiment name"}; set exitstat 1}
     17#if {$expnam == ""} {catch {puts "error -- no experiment name"}; set exitstat 1}
    1818if $exitstat {
    1919    catch {puts "usage: $argv0 expnam \[hist #\] \[legend\]"}
     
    252252    global expgui modtime expnam
    253253    if [catch {
    254         set modtime [file mtime $expnam.EXP]
    255254        set loadtime [time {
    256             if {$expgui(tcldump) == ""} {
     255        set modtime 0
     256            if {$::topasfile != ""} {
     257                set p "TOPAS import"
     258                readdata_topas $box
     259            } elseif {$expgui(tcldump) == ""} {
     260                set modtime [file mtime $expnam.EXP]
    257261                set p HSTDMP
    258262                readdata_hst $box
    259263            } else {
     264                set modtime [file mtime $expnam.EXP]
    260265                set p TCLDUMP
    261266                readdata_tcl $box
     
    357362    calcvec set $calclist
    358363    bckvec set $bcklist
    359     diffvec set [obsvec - calcvec]
    360     foreach vec {obsvec calcvec diffvec} {
     364    #diffvec set [obsvec - calcvec]
     365    foreach vec {obsvec calcvec} {
    361366        # probably not needed with recent versions of BLT:
    362367        global $vec
     
    450455}
    451456
     457set ::topasfile ""
     458proc get_topas_file {} {
     459    set ::topasfile [tk_getOpenFile -title "Select Topas File" -parent . \
     460                         -defaultextension .ascii \
     461                         -filetypes {{"Topas ascii export" ".ascii"}}]
     462    if {$::topasfile == ""} return
     463    if {[catch {set input [open $::topasfile r]} errmsg]} {
     464        MyMessageBox -parent . -title "Open Error" \
     465            -message "An error occured trying to open file $::topasfile: $errmsg" \
     466            -icon error -type Ignore -default ignore
     467        set ::topasfile ""
     468        return
     469    }
     470    close $input
     471}
     472
     473proc readdata_topas {box} {
     474    global expgui expnam reflns graph
     475    global lasthst
     476    global hst peakinfo xunits weightlist
     477    #set file "liveplot_output.ascii"
     478    if {$::topasfile == ""} return
     479    if {[catch {set input [open $::topasfile r]} errmsg]} {
     480        MyMessageBox -parent . -title "Open Error" \
     481            -message "An error occured trying to open file $::topasfile: $errmsg" \
     482            -icon error -type Ignore -default ignore
     483        return
     484    }
     485
     486    $box config -title "(TOPAS import in progress)"
     487    update
     488    # parse the output of a file
     489    set lasthst $hst
     490    # initalize arrays
     491    set num -1
     492    set xlist {}
     493    set obslist {}
     494    set calclist {}
     495    set bcklist {}
     496    set xunits {}
     497    set weightlist {}
     498    global refhkllist refphaselist refpos
     499    set refhkllist {}
     500    set refphaselist {}
     501    set refpos {}
     502    # define a list of reflection positions for each phase
     503    for {set i 1} {$i < 10} {incr i} {
     504        set reflns($i) {}
     505    }
     506    set i 0
     507    while {[gets $input line] >= 0} {
     508        incr i
     509        if {[string first ":" $line] != -1} continue
     510        # run update every 50th line
     511        if {$i > 50} {set i 0; update}
     512        if {[llength $line] == 5} {
     513            scan $line %e%e%e%e%e X d Iobs Icalc Isig
     514            if {$Isig > 0} {
     515                if {$graph(xunits) == 0} {
     516                    lappend xlist $X
     517                } elseif {$graph(xunits) == 1} {
     518                    lappend xlist $d
     519                } else {
     520                    lappend xlist [expr {6.283185307179586 / $d}]
     521                }
     522                lappend obslist $Iobs
     523                lappend calclist $Icalc
     524                #lappend bcklist 0
     525                lappend weightlist [expr {1./($Isig * $Isig)}]
     526            }
     527        } elseif {[llength $line] == 7} {
     528            scan $line %e%e%e%e%e%e%d h k l m d tt ph
     529            if {$graph(xunits) == 0} {
     530                set x $tt
     531            } elseif {$graph(xunits) == 1} {
     532                set x $d
     533            } else {
     534                set x [expr {6.283185307179586 / $d}]
     535            }
     536            set ph [expr {int($ph)}]
     537            lappend reflns($ph) $x
     538            lappend refhkllist "$h,$k,$l"
     539            lappend refphaselist $ph
     540            lappend refpos $x
     541        } elseif {[llength $line] == 3} {
     542            scan $line %e%e%e x d b
     543            lappend bcklist $b
     544        } else {
     545            puts "unexpected input: $line"
     546        }
     547    }
     548    close $input
     549
     550    if {$graph(xunits) == 0} {
     551        set xunits "2-Theta"
     552    } elseif {$graph(xunits) == 1} {
     553        set xunits "d"
     554    } else {
     555        set xunits "Q"
     556    }
     557    foreach elem [$box element names] {
     558        eval $box element config $elem $graph(ElementShowOption)
     559    }
     560    xvec set $xlist
     561    obsvec set $obslist
     562    calcvec set $calclist
     563    bckvec set $bcklist
     564    #diffvec set [obsvec - calcvec]
     565    refposvec set $refpos
     566    set ::expmap(phaselist) [lsort -unique $refphaselist]
     567    RegisterPhases $::expmap(phaselist)
     568    if {$expgui(autotick)} {
     569        foreach i $::expmap(phaselist) {
     570            set peakinfo(flag$i) 1
     571        }
     572    }
     573    #wifdvec length 0
     574    # if {$graph(chi2)} {
     575    #     wifdvec set $WGT
     576    #     wifdvec set [wifdvec * diffvec]
     577    #     wifdvec set [wifdvec * diffvec]
     578    #     # now do a running sum
     579    #     set sum 0
     580    #     set sumlist {}
     581    #     foreach n [wifdvec range 0 end] {
     582    #         set sum [expr {$sum + $n}]
     583    #         lappend sumlist $sum
     584    #     }
     585    #     wifdvec set $sumlist
     586    #     wifdvec set [wifdvec / [wifdvec length]]
     587    # } elseif {$graph(OmCoS)} {
     588    #     wifdvec set $WGT
     589    #     wifdvec expr sqrt(wifdvec)
     590    #     wifdvec set [wifdvec * diffvec]
     591    # }
     592    if $graph(backsub) {
     593        obsvec set [obsvec - bckvec]
     594        calcvec set [calcvec - bckvec]
     595    }
     596    foreach vec {obsvec calcvec} {
     597        # probably not needed with recent versions of BLT:
     598        global $vec
     599        # sometimes needed for latest version of BLT (2.4z)
     600        catch {$vec variable $vec}
     601    }
     602    ApplyMag
     603    plotdata
     604}
     605
    452606proc SetTitle {} {
    453607    set bx .title
     
    574728    global obsvec calcvec diffvec bckvec
    575729
    576     if {$graph(yunits) == 2} {
     730    if {$graph(yunits) == 0} {
     731        diffvec set [obsvec - calcvec]
     732        $box element config 1 -label bckgr -line 1 -hide 0
     733        $box element config 4 -label diff  -line 1 -hide 0
     734    } elseif {$graph(yunits) == 1} {
     735        diffvec set [obsvec - calcvec]
     736        $box element config 1 -label bckgr -line 1 -hide 0
     737        $box element config 4 -label diff  -line 1 -hide 0
     738    } elseif {$graph(yunits) == 2} {
    577739        set yunits {Intensity/sigma(I)}
    578740        wifdvec set $::weightlist
     
    21892351}
    21902352
     2353.a.file.menu add command -label "Import from Topas" \
     2354    -command {get_topas_file; readdata .g}
     2355
    21912356.a.file.menu add command -label Quit -command "destroy ."
    21922357.a.file.menu.export add command -label "as .csv file" \
     
    23982563    .g marker create line -coords "$xl -Inf $xl Inf" -name mag[incr i]
    23992564    .g marker create text -coords "$xl Inf" -name mag[incr i] -text "x$ym" -anchor w
    2400     foreach vec {obsvec calcvec bckvec diffvec} {
     2565    foreach vec {obsvec calcvec bckvec} {
    24012566        global $vec
    24022567        $vec expr {$vec * ymult}
     
    27472912}
    27482913
    2749 expload $expnam.EXP
    2750 mapexp
    2751 if {$expgui(autotick)} {
    2752     foreach i $::expmap(phaselist) {
    2753         set peakinfo(flag$i) 1
    2754     }
    2755 }
    2756        
     2914if {$expnam != ""} {
     2915    expload $expnam.EXP
     2916    mapexp
     2917    if {$expgui(autotick)} {
     2918        foreach i $::expmap(phaselist) {
     2919            set peakinfo(flag$i) 1
     2920        }
     2921    }
     2922} else {
     2923    mapexp
     2924}
     2925
    27572926# fill the histogram menu
    27582927if {[llength $expmap(powderlist)] > 15} {
     
    28052974}
    28062975
    2807 foreach num $expmap(phaselist) {
    2808     .a.file.menu.tick add checkbutton -label "Phase $num" \
     2976proc RegisterPhases {phaselist } {
     2977    foreach num $phaselist {
     2978        .a.file.menu.tick add checkbutton -label "Phase $num" \
    28092979            -variable  peakinfo(flag$num) \
    28102980            -command plotdata
    2811     if {$program != "bkgedit"}  {
    2812         bind . <Key-$num> ".a.file.menu.tick invoke [.a.file.menu.tick index end]"
    2813     }
    2814     .a.options.menu.tick add command -label "Phase $num opts" \
     2981        if {$::program != "bkgedit"}  {
     2982            bind . <Key-$num> ".a.file.menu.tick invoke [.a.file.menu.tick index end]"
     2983        }
     2984        .a.options.menu.tick add command -label "Phase $num opts" \
    28152985            -command "minioptionsbox $num"
    2816 }
     2986    }
     2987}
     2988RegisterPhases $expmap(phaselist)
    28172989
    28182990# N = load next histogram
Note: See TracChangeset for help on using the changeset viewer.