Ignore:
Timestamp:
Feb 26, 2011 9:47:37 PM (10 years ago)
Author:
toby
Message:

scan .EXP files for GENLES blowups; update web pages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/sandbox/gsascmds.tcl

    r1036 r1115  
    10261026            }
    10271027        }
    1028         # so sorry, have to use Internet Explorer
     1028        # so sorry, have to use Safari, even if not default
    10291029        set url [file nativename $url]; # replace ~/ if present
    10301030        if {[file pathtype $url] == "relative"} {
    10311031            set url [file join [pwd] $url]
    10321032        }
    1033         exec osascript -e "tell application \"Internet Explorer\"\rGetURL \"file://$url\"\rend tell"
     1033        exec osascript -e "tell application \"Safari\" to open location \"file://$url\""
    10341034    } elseif {$tcl_platform(platform) == "unix"} {
    10351035        set browserlist {}
     
    26962696    return
    26972697}
     2698
     2699proc ScanEXPforError {"ns {}"} {
     2700    # record types to ignore
     2701    set ignorelist {DESCR HSTRY PNAM HNAM "REFN STATS"}
     2702    set warn {}
     2703    set badkeylist {}
     2704    # scan file for warnings
     2705    foreach key [array names ${ns}::exparray] {
     2706        if {[string first "***" [set ${ns}::exparray($key)]] != -1 ||
     2707            [string first "nan" [set ${ns}::exparray($key)]] != -1 ||
     2708            [string first "NAN" [set ${ns}::exparray($key)]] != -1
     2709        } {
     2710            #puts [set ${ns}::exparray($key)]
     2711            set OK 0
     2712            foreach i $ignorelist {
     2713                if {[string first $i $key] != -1} {
     2714                    set OK 1
     2715                    break
     2716                }
     2717            }
     2718            # ignore atom name section of Atom records
     2719            if {(! $OK) && [string match  "CRS*AT*A" $key]} {
     2720                foreach str [list [string range [set ${ns}::exparray($key)] 0 49]
     2721                             [string range [set ${ns}::exparray($key)] 58 end]] {
     2722                    if {[string first "***" $str] || [string first "nan" $str] || [string first "NAN" $str]} {
     2723                        append warn "  Record \"$key\": [set ${ns}::exparray($key)]\n"
     2724                        lappend badkeylist $key
     2725                        break
     2726                    }
     2727                }
     2728                continue
     2729            }
     2730            if {! $OK} {
     2731                append warn "  Record \"$key\": [set ${ns}::exparray($key)]\n"
     2732                lappend badkeylist $key
     2733            }
     2734        }
     2735    }
     2736    if {$warn == ""} return
     2737    set hint ""
     2738    set unknown ""
     2739    foreach key $badkeylist {
     2740        if {[string match  "CRS*AT*" $key]} {
     2741            if {[string first "atomic parameter" $hint] == -1} {
     2742                append hint "\t* An atomic parameter (coordinate, occupancy or U) appears out of range\n"
     2743            }
     2744        } elseif {[string match  "CRS*ABC*" $key] ||
     2745                  [string match  "CRS*ANGLES*" $key] ||
     2746                  [string match  "CRS*CELVOL*" $key]} {
     2747            if {[string first "cell parameter" $hint] == -1} {
     2748                append hint "\t* A unit cell parameter appears out of range\n"
     2749            }
     2750        } elseif {[string match  "CRS*ODF*" $key]} {
     2751            if {[string first "spherical harmonic" $hint] == -1} {
     2752                append hint "\t* A spherical harmonic (ODF) parameter appears out of range\n"
     2753            }
     2754        } elseif {[string match  "HST*ICONS" $key]} {
     2755            if {[string first "diffractometer constant" $hint] == -1} {
     2756                append hint "\t* A diffractometer constant (wave, DIFC,...) appears out of range\n"
     2757            }
     2758        } elseif {[string match  "HST*TRNGE" $key]} {
     2759            if {[string first "histogram data range" $hint] == -1} {
     2760                append hint "\t* A histogram data range value appears out of range\n"
     2761            }
     2762        } elseif {[string match "*GNLS  RUN*" $key] ||
     2763                  [string match "*GNLS SHFTS" $key] ||
     2764                  [string match "HST*RPOWD" $key] ||
     2765                  [string match " REFN RPOWD " $key] ||
     2766                  [string match " REFN GDNFT " $key]
     2767              } {
     2768            if {[string first "refinement statistics" $hint] == -1} {
     2769                append hint "\t* The refinement statistics imply the last refinement diverged\n"
     2770            }
     2771        } else {
     2772            lappend unknown $key
     2773        }
     2774    }
     2775    if {$unknown != ""} {
     2776        append hint "\t* The following less common problem record(s) appear out of range:\n\t\t"
     2777        foreach key $unknown {
     2778            append hint "\"" [string trim $key] "\" "
     2779        }
     2780    }
     2781    return "Likely error(s) noted:\n$hint\nDetails of problem(s):\n$warn"
     2782}
     2783
     2784proc ExplainEXPerror {parent message file} {
     2785    if {$parent == "."} {
     2786        set w .experr
     2787    } else {
     2788        set w $parent.experr
     2789    }
     2790    catch {destroy $w}
     2791    toplevel $w -class Dialog
     2792    wm title $w "Corrupt .EXP file"
     2793    wm iconname $w Dialog
     2794    wm protocol $w WM_DELETE_WINDOW { }
     2795    # Make the message box transient if the parent is viewable.
     2796    if {[winfo viewable [winfo toplevel $parent]] } {
     2797        wm transient $w $parent
     2798    }
     2799    frame $w.bot
     2800    pack $w.bot -side bottom -fill both
     2801    frame $w.top
     2802    pack $w.top -side top -fill both -expand 1
     2803    frame $w.msg
     2804    pack $w.msg -in $w.top -side right -expand 1 -fill both -padx 3m -pady 3m
     2805    set txt {Likely errors were noted when reading this file}
     2806    append txt " ([file tail $file]). "
     2807    append txt "These problems probably\narose from the last refinement, "
     2808    append txt "based on settings applied in the previous saved file.\n"
     2809    append txt "It is probably not possible to continue with this file.\n"
     2810    append txt "You likely need to revert at least two archived versions back."
     2811    grid [label $w.msg.s -text $txt -justify left] -row 0 -column 0 -sticky nws
     2812    grid [button $w.msg.1 -text Help -bg yellow \
     2813              -command "MakeWWWHelp expgui.html badexp"] -row 0 -column 1 -columnspan 2 -sticky ne
     2814    bind $w <Key-F1> "MakeWWWHelp expgui.html badexp"
     2815    set filelist [lsort -dictionary -decreasing \
     2816                      [glob -nocomplain \
     2817                           [file root $file.O* ]]]
     2818    grid [text  $w.msg.t -font {Times 12} \
     2819              -height 10 -width 90 -relief flat -wrap word \
     2820              -yscrollcommand "$w.msg.rscr set" \
     2821             ] -row 1 -column 0  -columnspan 2 -sticky news
     2822    grid [scrollbar $w.msg.rscr  -command "$w.msg.t yview" \
     2823             ] -row 1 -column 2 -sticky ns
     2824    # give extra space to the text box
     2825    grid columnconfigure $w.msg 0 -weight 1
     2826    grid rowconfigure $w.msg 1 -weight 1
     2827    $w.msg.t insert end $message
     2828    button $w.ok -command [list destroy $w] -text OK -default active
     2829    pack $w.ok -in $w.bot -side left -expand 1 -padx 3m -pady 2m
     2830    putontop $w
     2831    tkwait window $w
     2832    afterputontop
     2833}
     2834
    26982835proc UpdateInfoBox {} {
    26992836    global expgui
     
    27022839    set file [file join [set expgui(FileMenuDir)] $expgui(FileMenuEXPNAM)]
    27032840    if [file isdirectory $file] return
    2704     if [file exists $file] {
     2841    if [file exists $file] {   
    27052842        pack [label $expgui(FileInfoBox).1 -text $expgui(FileMenuEXPNAM)] \
    27062843                -side top
    27072844        catch {
     2845            # load the EXP file into a namespace & scan for errors
     2846            expload $file scan
     2847            set warnings [ScanEXPforError scan]
     2848            if {$warnings != ""} {
     2849                pack [frame $expgui(FileInfoBox).1a -bg yellow -padx 4 -pady 4] -side top
     2850                pack [label $expgui(FileInfoBox).1a.err -justify left \
     2851                          -text "WARNING: Likely corrupt" -bg yellow] \
     2852                    -side left -anchor w -fill both
     2853                pack [button $expgui(FileInfoBox).1a.show \
     2854                          -text "More..." -padx 0 \
     2855                          -command "ExplainEXPerror $expgui(FileInfoBox) [list $warnings] $file"\
     2856                         ] -side right -anchor w
     2857            }
    27082858            set fp [open $file r]
    27092859            global testline
     
    27162866                    -text "last GENLES run:\n  $last\n  total cycles: $cycles"] \
    27172867                -side top -anchor w
     2868            set chi2 ?
     2869            set vars ?
    27182870            regexp {REFN GDNFT.*= *([0-9]*\.[0-9]*) +for *([0-9]+) variables} \
    27192871                    $testline a chi2 vars
     
    27542906                    -text $lbl] \
    27552907                    -side top -anchor w     
    2756         }
     2908        } err
    27572909    }
    27582910}
     
    28643016        if {$expgui(expfile) == [file join $expgui(FileMenuDir) $file]} {
    28653017            $files selection set $i
     3018            set expgui(FileMenuEXPNAM) $file
     3019            UpdateInfoBox
    28663020        }
    28673021    }
Note: See TracChangeset for help on using the changeset viewer.