Changeset 905


Ignore:
Timestamp:
Dec 4, 2009 5:14:03 PM (11 years ago)
Author:
toby
Message:

# on 2008/04/15 16:55:46, toby did:
major revision for macro recording
introduce cell symmetry constraints
check for trailing R on s.g. in Rhomb. settings
add .fxye to list of raw types
stop conversion of raw files to fixed record length
fix bug stopping review of inst prm files with a blank line

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/addcmds.tcl

    • Property rcs:date changed from 2006/03/29 03:47:44 to 2008/04/15 16:55:46
    • Property rcs:lines changed from +60 -21 to +442 -259
    • Property rcs:rev changed from 1.40 to 1.41
    r874 r905  
    3434    grid [label $np.l3 -text "Space Group:"] -column 0 -row 2
    3535    grid [entry $np.t2 -width 12] -column 1 -row 2
    36     grid [frame $np.f -bd 4 -relief groove] -column 3 -row 2 -columnspan 8
     36    grid [frame $np.ct -bd 2 -relief groove] -column 3 -row 2
     37    grid [frame $np.f -bd 4 -relief groove] -column 4 -row 2 -columnspan 8
     38    grid [label $np.ct.l -text "Cell\nType"] -column 0 -row 2
     39    set menu [tk_optionMenu $np.ct.s expgui(addPhaseCellType) ""]
     40    $menu delete 0
     41    foreach val {Any Cubic Tetragonal Hexagonal Rhombohedral Orthorhombic Monoclinic} \
     42        lbl {Any Cubic Tetrag Hexag Rhomb. Ortho Mono} {
     43            $menu add radiobutton -value $lbl -label $val \
     44                -command "set expgui(addPhaseCellType) $lbl"
     45        }
     46    grid $np.ct.s
     47    foreach v [ trace vinfo expgui(addPhaseCellType)] {
     48        eval trace vdelete expgui(addPhaseCellType) $v
     49    }
     50    #set expgui(addPhaseCellType) Any
     51    $menu invoke 0
     52    trace variable expgui(addPhaseCellType) w "SetAddCellSymConstr $np.f"
     53
    3754    set col -1
    3855    foreach i {a b c} {
     
    87104    afterputontop
    88105}
     106proc SetAddCellSymConstr {box args} {
     107    switch $::expgui(addPhaseCellType) {
     108        Any {
     109            foreach i {a b c} {
     110                $box.e1$i configure -textvariable "" -state normal
     111            }
     112            foreach i {a b g} {
     113                $box.e2$i configure -textvariable "" -state normal
     114            }
     115        }
     116        Cubic {
     117            set ::expgui(AddCella) [$box.e1a get]
     118            foreach i {a b c} {
     119                $box.e1$i configure -textvariable expgui(AddCella) -state normal
     120            }
     121            foreach i {a b g} {
     122                $box.e2$i configure -textvariable "" -state normal
     123                $box.e2$i delete 0 end
     124                $box.e2$i insert 0 90.
     125                $box.e2$i configure -textvariable "" -state disabled
     126            }
     127        }
     128        Tetrag {
     129            set ::expgui(AddCella) [$box.e1a get]
     130            foreach i {a b} {
     131                $box.e1$i configure -textvariable expgui(AddCella) -state normal
     132            }
     133            $box.e1c configure -textvariable "" -state normal
     134            foreach i {a b g} {
     135                $box.e2$i configure -textvariable "" -state normal
     136                $box.e2$i delete 0 end
     137                $box.e2$i insert 0 90.
     138                $box.e2$i configure -textvariable "" -state disabled
     139            }
     140        }
     141        Hexag {
     142            set ::expgui(AddCella) [$box.e1a get]
     143            foreach i {a b} {
     144                $box.e1$i configure -textvariable expgui(AddCella) -state normal
     145            }
     146            $box.e1c configure -textvariable "" -state normal
     147            foreach i {a b g} {
     148                $box.e2$i configure -textvariable "" -state normal
     149                $box.e2$i delete 0 end
     150                if {$i == "g"} {
     151                    $box.e2$i insert 0 120.
     152                } else {
     153                    $box.e2$i insert 0 90.
     154                }
     155                $box.e2$i configure -textvariable "" -state disabled
     156            }
     157        }
     158        Rhomb. {
     159            set ::expgui(AddCella) [$box.e1a get]
     160            foreach i {a b c} {
     161                $box.e1$i configure -textvariable expgui(AddCella) -state normal
     162            }
     163            set ::expgui(AddCellalpha) [$box.e2a get]
     164            foreach i {a b g} {
     165                $box.e2$i configure -textvariable expgui(AddCellalpha) -state normal
     166            }
     167        }
     168        Ortho {
     169            foreach i {a b c} {
     170                $box.e1$i configure -textvariable "" -state normal
     171            }
     172            foreach i {a b g} {
     173                $box.e2$i configure -textvariable "" -state normal
     174                $box.e2$i delete 0 end
     175                $box.e2$i insert 0 90.
     176                $box.e2$i configure -textvariable "" -state disabled
     177            }
     178        }
     179        Mono {
     180            foreach i {a b c} {
     181                $box.e1$i configure -textvariable "" -state normal
     182            }
     183            foreach i {a g} {
     184                $box.e2$i configure -textvariable "" -state normal
     185                $box.e2$i delete 0 end
     186                $box.e2$i insert 0 90.
     187                $box.e2$i configure -textvariable "" -state disabled
     188            }
     189            $box.e2b configure -textvariable "" -state normal
     190        }
     191    }
     192}
     193
    89194
    90195proc addphase {np} {
     
    118223    }
    119224
     225    if {$expgui(addPhaseCellType) == "Rhomb."} {
     226        # check for proper use of space group in Rhomb. setting
     227        if {[string toupper [string range [string trim $spg] 0 0]] != "R"} {
     228            append err "Rhombohedral cell specified, but space group does not start with R\n"
     229        }
     230        if {[string toupper [string range [string trim $spg] end end]] != "R"} {
     231            append spg " R"
     232            if {$err == ""} {
     233                # no need to warn on error
     234                MyMessageBox -parent $np -title "Space Group Fix" \
     235                -message "Adding a final 'R' to the space group for rhombohedral space group set in rhombohedral cell, as required in GSAS" \
     236                -icon warning
     237            }
     238        }
     239    }
    120240    if {$err != ""} {
    121241        MyMessageBox -parent . -title "Add Phase Error" \
     
    168288    }
    169289    file delete spg.in spg.out
    170    
    171290    # ok do it!
     291    set errmsg [runAddPhase $title $spg \
     292                    $cell(a) $cell(b) $cell(c) \
     293                    $cell(alpha) $cell(beta) $cell(gamma)]
     294    RecordMacroEntry "runAddPhase [list $title] [list $spg] \
     295                    $cell(a) $cell(b) $cell(c) \
     296                    $cell(alpha) $cell(beta) $cell(gamma)" 0
     297    destroy $np
     298    if {$expgui(showexptool) || $errmsg != ""} {
     299        if {$errmsg != ""} {
     300            set err 1
     301            append errmsg "\n" $expgui(exptoolout)
     302        } else {
     303            set err 0
     304            set errmsg $expgui(exptoolout)
     305        }
     306        set msg "Please review the result from adding the phase"
     307        if { $errmsg != ""} {append msg "\nIt appears an error occurred!"}
     308        ShowBigMessage $np $msg $errmsg OK "" $err
     309    }
     310    # set the powpref warning (2 = required)
     311    set expgui(needpowpref) 2
     312    set msg "A phase was added"
     313    if {[string first $msg $expgui(needpowpref_why)] == -1} {
     314        append expgui(needpowpref_why) "\t$msg\n"
     315    }
     316    # now select the new phase
     317    SelectOnePhase [lindex $expmap(phaselist) end]   
     318}
     319
     320proc runAddPhase {title spg a b c alpha beta gamma} {
     321    global expgui expmap tcl_platform
    172322    set fp [open exptool.in w]
    173323    puts $fp "P"
    174324    puts $fp $title
    175325    puts $fp $spg
    176     puts $fp "$cell(a) $cell(b) $cell(c) $cell(alpha) $cell(beta) $cell(gamma)"
     326    puts $fp "$a $b $c $alpha $beta $gamma"
    177327    puts $fp "/"
    178328    close $fp
    179     global tcl_platform
    180329    # Save the current exp file
    181330    savearchiveexp
     
    185334    # save the previous phase list
    186335    set expgui(oldphaselist) $expmap(phaselist)
    187     catch {
     336    set err [catch {
    188337        if {$tcl_platform(platform) == "windows"} {
    189338            exec [file join $expgui(gsasexe) exptool.exe] $expnam \
     
    193342                    < exptool.in >& exptool.out
    194343        }
    195     } errmsg
     344    } errmsg]
    196345    # load the revised exp file
    197346    set oldphaselist $expmap(phaselist)
    198347    loadexp $expgui(expfile)
    199348    set fp [open exptool.out r]
    200     set out [read $fp]
     349    set expgui(exptoolout) [read $fp]
    201350    close $fp
    202     destroy $np
    203     set err 0
    204     if {[llength $oldphaselist] == [llength $expmap(phaselist)]} {set err 1}
    205     if {$errmsg != ""} {
     351    catch {file delete exptool.in exptool.out}
     352
     353    if {[llength $oldphaselist] == [llength $expmap(phaselist)]} {
    206354        set err 1
    207         append errmsg "\n" $out
    208     } else {
    209         set errmsg $out
    210     }
    211     if {$expgui(showexptool) || $err} {
    212         set msg "Please review the result from adding the phase"
    213         if {$err} {append msg "\nIt appears an error occurred!"}
    214         ShowBigMessage $np $msg $errmsg OK "" $err
    215     }
    216     file delete exptool.in exptool.out
    217     # set the powpref warning (2 = required)
    218     set expgui(needpowpref) 2
    219     set msg "A phase was added"
    220     if {[string first $msg $expgui(needpowpref_why)] == -1} {
    221         append expgui(needpowpref_why) "\t$msg\n"
    222     }
    223     # now select the new phase
    224     SelectOnePhase [lindex $expmap(phaselist) end]   
    225 }
     355        if {$errmsg == ""} {set errmsg "No phase added"}
     356    }
     357    if {$err} {
     358        return $errmsg
     359    } else {
     360        return ""
     361    }
     362}
     363
    226364
    227365#----------- Add Histogram routines --------------------------------------
     
    427565        tk_getOpenFile -parent $np -initialfile $newhist(rawfile) -filetypes {
    428566            {"Data files" .GSAS} {"Data files" .GSA}
    429             {"Data files" .RAW}  {"All files" *}
     567            {"Data files" .RAW}  {"Data files" .FXYE} {"All files" *}
    430568        }
    431569        ]
     
    434572        tk_getOpenFile -parent $np -initialfile $newhist(rawfile) -filetypes {
    435573            {"Data files" .GSA*} {"Data files" .RAW} 
    436             {"Data files" .gsa*} {"Data files" .raw}
     574            {"Data files" .gsa*} {"Data files" .raw} {"Data files" .fxye} 
    437575            {"All files" *}
    438576        }
     
    458596    while {[set len [gets $in line]] > 0} {
    459597        incr i
    460         if {$len != 81 || [string range $line end end] != "\r"} {
    461             set ans [MyMessageBox -parent $np -title "Convert?" \
    462                     -message "File $inp is not in the correct format for GSAS.\nOK to convert?" \
    463                     -icon warning -type {OK Quit} -default OK]
    464             if {$ans == "ok"} {
    465                 # convert and reopen the file
    466                 close $in
    467                 WinCvt $inp $np
    468                 set i 0
    469                 set in [open $inp r]
    470                 fconfigure $in -translation lf
    471                 set line {}
    472             } else {
    473                 return
    474             }
    475         }
     598        #if {$len != 81 || [string range $line end end] != "\r"} {
     599        #    set ans [MyMessageBox -parent $np -title "Convert?" \
     600        #           -message "File $inp is not in the correct format for GSAS.\nOK to convert?" \
     601        #           -icon warning -type {OK Quit} -default OK]
     602        #    if {$ans == "ok"} {
     603        #       # convert and reopen the file
     604        #       close $in
     605        #       WinCvt $inp $np
     606        #       set i 0
     607        #       set in [open $inp r]
     608        #       fconfigure $in -translation lf
     609        #       set line {}
     610        #    } else {
     611        #       return
     612        #    }
     613        #}
    476614        # scan for BANK lines
    477615        if {[string first BANK $line] == 0} {
     
    585723    # -- are lines the correct length & terminated with a CR-LF?   
    586724    fconfigure $in -translation lf
    587     while {[set len [gets $in line]] > 0} {
     725    while {[set len [gets $in line]] >= 0} {
    588726        if {$len != 81 || [string range $line end end] != "\r"} {
    589727            set ans [MyMessageBox -parent $np -title "Convert?" \
     
    706844    }
    707845
     846    if {$newhist(LimitMode) == 1} {
     847        set mode "T"
     848        set value $newhist(2tLimit)
     849    } elseif {$newhist(LimitMode) == 2} {
     850        set mode "D"
     851        set Q 100
     852        catch {set Q [expr {4*acos(0)/$newhist(2tLimit)}]}
     853        set value $Q
     854    } else {
     855        set mode "D"
     856        set value $newhist(2tLimit)
     857    }
     858
    708859    # ok do it!
     860    set errmsg [runAddHist $newhist(rawfile) $newhist(instfile) $newhist(banknum) $newhist(setnum) $mode $value]
     861    # save call to Macro file
     862    RecordMacroEntry "runAddHist [list $newhist(rawfile)] [list $newhist(instfile)] $newhist(banknum) $newhist(setnum) $mode $value" 0
     863   
     864    destroy $np
     865    if {$expgui(showexptool) || $errmsg != ""} {
     866        if {$errmsg != ""} {
     867            set err 1
     868            append errmsg "\n" $expgui(exptoolout)
     869        } else {
     870            set err 0
     871            set errmsg $expgui(exptoolout)
     872        }
     873        set msg "Please review the result from adding the histogram"
     874        if {$errmsg != ""} {append msg "\nIt appears an error occurred!"}
     875        ShowBigMessage $np $msg $errmsg OK "" $err
     876    }
     877    # set the powpref warning (2 = required)
     878    set expgui(needpowpref) 2
     879    set msg "A histogram was added"
     880    if {[string first $msg $expgui(needpowpref_why)] == -1} {
     881        append expgui(needpowpref_why) "\t$msg\n"
     882    }
     883    # select the most recently added histogram
     884    if {!$err != ""} {
     885        set i [llength $expmap(histlistboxcontents)]
     886        if {$i > 0} {
     887            incr i -1
     888            set expgui(curhist) $i
     889            sethistlist
     890        }
     891    }
     892}
     893proc runAddHist {rawfile instfile banknum setnum mode value} {
     894    global expgui expmap tcl_platform
    709895    set fp [open exptool.in w]
    710896    puts $fp "H"
    711897    if {$tcl_platform(platform) == "windows"} {
    712         puts $fp [file attributes $newhist(rawfile) -shortname]
    713         puts $fp [file attributes $newhist(instfile) -shortname]
    714     } else {
    715         puts $fp $newhist(rawfile)
    716         puts $fp $newhist(instfile)
    717     }
    718     puts $fp $newhist(banknum)
    719     puts $fp $newhist(setnum)
    720     if {$newhist(LimitMode) == 1} {
    721         puts $fp "T"
    722         puts $fp "$newhist(2tLimit)"
    723     } elseif {$newhist(LimitMode) == 2} {
    724         puts $fp "D"
    725         set Q 100
    726         catch {set Q [expr {4*acos(0)/$newhist(2tLimit)}]}
    727         puts $fp "$Q"
    728     } else {
    729         puts $fp "D"
    730         puts $fp "$newhist(2tLimit)"
    731     }
     898        puts $fp [file attributes $rawfile -shortname]
     899        puts $fp [file attributes $instfile -shortname]
     900    } else {
     901        puts $fp $rawfile
     902        puts $fp $instfile
     903    }
     904    puts $fp $banknum
     905    puts $fp $setnum
     906    puts $fp $mode
     907    puts $fp "$value"
    732908    puts $fp "/"
    733909    puts $fp "X"
    734910    puts $fp "X"
    735911    close $fp
    736     global tcl_platform
    737912    # Save the current exp file
    738913    savearchiveexp
     
    740915    set expgui(expModifiedLast) 0
    741916    set expnam [file root [file tail $expgui(expfile)]]
    742     catch {
     917    set err [catch {
    743918        if {$tcl_platform(platform) == "windows"} {
    744919            exec [file join $expgui(gsasexe) exptool.exe] $expnam \
     
    748923                    < exptool.in >& exptool.out
    749924        }
    750     } errmsg
     925    } errmsg]
    751926    # load the revised exp file
    752927    set oldpowderlist $expmap(powderlist)
    753928    loadexp $expgui(expfile)
     929    if {[llength $oldpowderlist] == [llength $expmap(powderlist)]} {
     930        append errmsg "\nNo histogram added"
     931        set err 1
     932    }
    754933    set fp [open exptool.out r]
    755     set out [read $fp]
     934    set expgui(exptoolout) [read $fp]
    756935    close $fp
    757     destroy $np
    758     set err 0
    759     if {[llength $oldpowderlist] == [llength $expmap(powderlist)]} {set err 1}
    760     if {$errmsg != ""} {
    761         append errmsg "\n" $out
    762         set err 1
    763     } else {
    764         set errmsg $out
    765     }
    766     if {$expgui(showexptool) || $err} {
    767         set msg "Please review the result from adding the histogram"
    768         if {$err} {append msg "\nIt appears an error occurred!"}
    769         ShowBigMessage $np $msg $errmsg OK "" $err
    770     }
    771     file delete exptool.in exptool.out
    772     # set the powpref warning (2 = required)
    773     set expgui(needpowpref) 2
    774     set msg "A histogram was added"
    775     if {[string first $msg $expgui(needpowpref_why)] == -1} {
    776         append expgui(needpowpref_why) "\t$msg\n"
    777     }
    778     # select the most recently added histogram
    779     if {!$err} {
    780         set i [llength $expmap(histlistboxcontents)]
    781         if {$i > 0} {
    782             incr i -1
    783             set expgui(curhist) $i
    784             sethistlist
    785         }
     936    catch {file delete exptool.in exptool.out}
     937    if {$err} {
     938        return $errmsg
     939    } else {
     940        return ""
    786941    }
    787942}
     
    10261181        return
    10271182    }
     1183
     1184    set errmsg [runAddDummyHist $newhist(instfile) $newhist(setnum) \
     1185                    $newhist(insttype) \
     1186                    $newhist(tmin) $newhist(tmax) $newhist(tstep)]
     1187    RecordMacroEntry "runAddDummyHist [list $newhist(instfile)] $newhist(setnum) $newhist(insttype) $newhist(tmin) $newhist(tmax) $newhist(tstep)" 0
     1188
     1189    if {$errmsg != ""} {
     1190        append errmsg "\n" $out
     1191    } else {
     1192        set errmsg $out
     1193    }
     1194    if {[regexp {\(P,H,A\)} $expgui(exptoolout)]} {
     1195        set msg {You must upgrade the EXPTOOL program.}
     1196        append msg { This version cannot add dummy histograms.}
     1197        MyMessageBox -icon error -title "Old EXPTOOL program" \
     1198                -message $msg -parent $np \
     1199                -helplink "expguierr.html OldEXPTOOL"
     1200        # update the documentation & link
     1201        destroy $np
     1202    } elseif {$expgui(showexptool) || $errmsg != ""} {
     1203        if {$errmsg != ""} {
     1204            set err 1
     1205            append errmsg "\n" $expgui(exptoolout)
     1206        } else {
     1207            set err 0
     1208            set errmsg $expgui(exptoolout)
     1209        }
     1210        set msg "Please review the result from adding the dummy histogram"
     1211        if {$err} {append msg "\nIt appears an error occurred!"}
     1212        ShowBigMessage $np $msg $errmsg OK "" $err
     1213    } else {
     1214        destroy $np
     1215    }
     1216    file delete exptool.in exptool.out
     1217    # set the powpref warning (2 = required)
     1218    set expgui(needpowpref) 2
     1219    set msg "A histogram was added"
     1220    if {[string first $msg $expgui(needpowpref_why)] == -1} {
     1221        append expgui(needpowpref_why) "\t$msg\n"
     1222    }
     1223}
     1224proc runAddDummyHist {instfile setnum insttype tmin tmax tstep} {
     1225    global expgui expmap tcl_platform
    10281226    set fp [open exptool.in w]
    10291227    puts $fp "D"
    1030     puts $fp $newhist(instfile)
    1031     puts $fp $newhist(setnum)
    1032     if {$newhist(insttype) == "TOF"} {
     1228    puts $fp $instfile
     1229    puts $fp $setnum
     1230    if {$insttype == "TOF"} {
    10331231        puts $fp "C"
    10341232    }
    1035     puts $fp $newhist(tmin)
    1036     puts $fp $newhist(tmax)
    1037     puts $fp $newhist(tstep)
     1233    puts $fp $tmin
     1234    puts $fp $tmax
     1235    puts $fp $tstep
    10381236    puts $fp "X"
    10391237    puts $fp "0"
     
    10571255    loadexp $expgui(expfile)
    10581256    set fp [open exptool.out r]
    1059     set out [read $fp]
     1257    set expgui(exptoolout) [read $fp]
    10601258    close $fp
    1061     if {[llength $oldpowderlist] == [llength $expmap(powderlist)]} {set err 1}
    1062     if {$errmsg != ""} {
    1063         append errmsg "\n" $out
    1064     } else {
    1065         set errmsg $out
    1066     }
    1067     if {[regexp {\(P,H,A\)} $out]} {
    1068         set msg {You must upgrade the EXPTOOL program.}
    1069         append msg { This version cannot add dummy histograms.}
    1070         MyMessageBox -icon error -title "Old EXPTOOL program" \
    1071                 -message $msg -parent $np \
    1072                 -helplink "expguierr.html OldEXPTOOL"
    1073         # update the documentation & link
    1074         destroy $np
    1075     } elseif {$expgui(showexptool) || $err} {
    1076         set msg "Please review the result from adding the dummy histogram"
    1077         if {$err} {append msg "\nIt appears an error occurred!"}
    1078         ShowBigMessage $np $msg $errmsg OK "" $err
    1079     } else {
    1080         destroy $np
    1081     }
    1082     file delete exptool.in exptool.out
    1083     # set the powpref warning (2 = required)
    1084     set expgui(needpowpref) 2
    1085     set msg "A histogram was added"
    1086     if {[string first $msg $expgui(needpowpref_why)] == -1} {
    1087         append expgui(needpowpref_why) "\t$msg\n"
     1259    catch {file delete exptool.in exptool.out}
     1260    if {[llength $oldpowderlist] == [llength $expmap(powderlist)]} {
     1261        set err 1
     1262        if {$errmsg == ""} {set errmsg "No histogram added"}
     1263    }
     1264    if {$err} {
     1265        return $errmsg
     1266    } else {
     1267        return ""
    10881268    }
    10891269}
     
    12081388    # disable the file changed monitor
    12091389    set expgui(expModifiedLast) 0
    1210     set expnam [file root [file tail $expgui(expfile)]]
    1211     if {$tcl_platform(platform) == "windows"} {
    1212         set rfile [file attributes $newhist(rawfile) -shortname]
    1213         set ifile [file attributes $newhist(instfile) -shortname]
    1214         set exe [file join $expgui(gsasexe) exptool.exe]
    1215     } else {
    1216         set rfile $newhist(rawfile)
    1217         set ifile $newhist(instfile)
    1218         set exe [file join $expgui(gsasexe) exptool]
    1219     }
    12201390    set k 0
    12211391    set added 0
     
    12291399            set expgui(temp) "adding bank $i"
    12301400            update
    1231             set fp [open exptool.in w]
    1232             puts $fp "H"
    1233             puts $fp $rfile
    1234             puts $fp $ifile
    1235             puts $fp $i
    1236             puts $fp $k
     1401
    12371402            if {$newhist(LimitMode) == 1} {
    1238                 puts $fp "T"
    1239                 puts $fp "$newhist(tlimit$i)"
     1403                set mode "T"
     1404                set value $newhist(tlimit$i)
    12401405            } elseif {$newhist(LimitMode) == 2} {
    1241                 puts $fp "D"
     1406                set mode "D"
    12421407                set Q 100
    12431408                catch {set Q [expr {4*acos(0)/$newhist(tlimit$i)}]}
    1244                 puts $fp "$Q"
     1409                set value $Q
    12451410            } else {
    1246                 puts $fp "D"
    1247                 puts $fp "$newhist(tlimit$i)"
    1248             }
    1249             puts $fp "/"
    1250             puts $fp "X"
    1251             puts $fp "X"
    1252             close $fp
    1253             catch {
    1254                 exec $exe $expnam < exptool.in >& exptool.out
    1255             } errmsg
    1256             set fp [open exptool.out r]
    1257             set out [read $fp]
    1258             close $fp
     1411                set mode "D"
     1412                set value $newhist(tlimit$i)
     1413            }
     1414            set errmsg [runAddHist $newhist(rawfile) $newhist(instfile) $i $k $mode $value]
     1415            # save call to Macro file
     1416            RecordMacroEntry "runAddHist [list $newhist(rawfile)] [list $newhist(instfile)] $i $k $mode $value" 0
    12591417            if {$errmsg != ""} {
    1260                 append outlog "\n\n\nNOTE ERROR:\n" $errmsg $out
     1418                append outlog "\n\n\nNOTE ERROR:\n" $errmsg $expgui(exptoolout)
    12611419                set err 1
    12621420            } else {
    1263                 append outlog $out
     1421                append outlog $expgui(exptoolout)
    12641422            }
    12651423        }
     
    12761434        append expgui(needpowpref_why) "\t$msg\n"
    12771435    }
    1278     file delete exptool.in exptool.out
    12791436    donewait
    12801437    if {$expgui(showexptool) || $err} {
     
    14931650        }
    14941651        if {[lsearch $validatmtypes [string toupper $type]] == -1} {
    1495             append err "  line $row: Atom type $type is invalid for GSAS\n"
     1652            append err "  line $row: Atom type $type is not defined for x-rays in GSAS. If you are fitting magnetic scattering, this could be defined. If so, use a different type and use EXPEDT to change the type back.\n\n"
    14961653        }
    14971654        set name [string trim [$np.e${row}n get]]
     
    15181675}
    15191676
    1520 proc addatom {phase top} {
    1521     global expgui env expmap
    1522     set np $top.canvas.fr
    1523     # validate the atoms info
    1524     set atomlist [ValidateAtomsBox $top $np]
    1525     if {$atomlist == ""} return
    1526 
    1527     # ok add the atoms!
     1677proc runAddAtoms {phase atomlist} {
     1678    global expgui env expmap tcl_platform
     1679    # needed in UNIX
     1680    set env(ATOMDATA) [file join $expgui(gsasdir) data atmdata.dat]
     1681    set env(gsas) [file nativename $expgui(gsasdir)]
     1682    # needed in Windows
     1683    set env(GSAS) [file nativename $expgui(gsasdir)]
     1684
    15281685    set fp [open exptool.in w]
    15291686    puts $fp "A"
     
    15351692    }
    15361693    close $fp
    1537     # needed in UNIX
    1538     set env(ATOMDATA) [file join $expgui(gsasdir) data atmdata.dat]
    1539     set env(gsas) [file nativename $expgui(gsasdir)]
    1540     # needed in Windows
    1541     set env(GSAS) [file nativename $expgui(gsasdir)]
    1542 
    1543     global tcl_platform
     1694 
    15441695    # Save the current exp file
    15451696    savearchiveexp
     
    15471698    set expgui(expModifiedLast) 0
    15481699    set expnam [file root [file tail $expgui(expfile)]]
    1549     catch {
     1700
     1701    set err [catch {
    15501702        if {$tcl_platform(platform) == "windows"} {
    15511703            exec [file join $expgui(gsasexe) exptool.exe] $expnam \
     
    15551707                    < exptool.in >& exptool.out
    15561708        }
    1557     } errmsg
     1709    } errmsg]
    15581710    # load the revised exp file
    15591711    set oldatomlist $expmap(atomlist_$phase)
    15601712    loadexp $expgui(expfile)
    15611713    set fp [open exptool.out r]
    1562     set out [read $fp]
     1714    set expgui(exptoolout) [read $fp]
    15631715    close $fp
     1716    catch {file delete exptool.in exptool.out}
     1717    if {[llength $oldatomlist] == [llength $expmap(atomlist_$phase))]} {
     1718        set err 1
     1719        if {$errmsg == ""} {set errmsg "No atom(s) added"}
     1720    }
     1721}
     1722
     1723proc addatom {phase top} {
     1724    global expgui env expmap
     1725    set np $top.canvas.fr
     1726    # validate the atoms info
     1727    set atomlist [ValidateAtomsBox $top $np]
     1728    if {$atomlist == ""} return
     1729
     1730    # ok add the atoms!
     1731    set errmsg [runAddAtoms $phase $atomlist]
     1732    RecordMacroEntry "runAddAtoms $phase [list $atomlist]" 0
     1733
    15641734    destroy $top
    15651735    set err 0
    1566     if {[llength $oldatomlist] == [llength $expmap(atomlist_$phase))]} {
     1736    if {$errmsg != ""} {
     1737        append errmsg "\n" $expgui(exptoolout)
    15671738        set err 1
    1568     }
    1569     if {$errmsg != ""} {
    1570         append errmsg "\n" $out
    1571         set err 1
    1572     } else {
    1573         set errmsg $out
     1739    } else {
     1740        set errmsg $expgui(exptoolout)
    15741741    }
    15751742    if {$expgui(showexptool) || $err} {
     
    15781745        ShowBigMessage $top $msg $errmsg OK "" $err
    15791746    }
    1580     file delete exptool.in exptool.out
    15811747}
    15821748
     
    17471913            }
    17481914            $cmd $phase $atom $v set [set new$v]
     1915            RecordMacroEntry "$cmd $phase $atom $v set [set new$v]" 0
    17491916        }
    17501917        incr expgui(changed)
    17511918    }
     1919    RecordMacroEntry "incr expgui(changed)" 0
    17521920    # update multiplicities for the phase
    17531921    set parent [winfo toplevel $w1]
     
    17721940    foreach atom $numberList {
    17731941        $cmd $phase $atom frac set $val
     1942        RecordMacroEntry "$cmd $phase $atom frac set $val" 0
    17741943        incr expgui(changed)
    17751944    }
     1945    RecordMacroEntry "incr expgui(changed)" 0
    17761946    UpdateAtomLine $numberList $phase
    17771947}
     
    17801950proc XformAtomsU {phase numberList w2} {
    17811951    global expgui
     1952    set istart $expgui(changed)
    17821953    if {$w2 == "iso"} {
    17831954        foreach atom $numberList {
    17841955            if {[atominfo $phase $atom temptype] != "I"} {
    17851956                atominfo $phase $atom temptype set I
     1957                RecordMacroEntry "atominfo $phase $atom temptype set I" 0
    17861958                incr expgui(changed)
    17871959            }
     
    17911963            if {[atominfo $phase $atom temptype] == "I"} {
    17921964                atominfo $phase $atom temptype set A
     1965                RecordMacroEntry "atominfo $phase $atom temptype set A" 0
    17931966                incr expgui(changed)
    17941967            }
     
    18011974            if {[lindex $expmap(phasetype) [expr {$phase - 1}]] == 4} {
    18021975                mmatominfo $phase $atom Uiso set $val
     1976                RecordMacroEntry "mmatominfo $phase $atom Uiso set $val" 0
    18031977            } elseif {[atominfo $phase $atom temptype] == "I"} {
    18041978                atominfo $phase $atom Uiso set $val
     1979                RecordMacroEntry "atominfo $phase $atom Uiso set $val" 0
    18051980            } else {
    1806                 atominfo $phase $atom U11 set $val
    1807                 atominfo $phase $atom U22 set $val
    1808                 atominfo $phase $atom U33 set $val
    1809                 atominfo $phase $atom U12 set 0.0
    1810                 atominfo $phase $atom U13 set 0.0
    1811                 atominfo $phase $atom U23 set 0.0
     1981                foreach var {U11 U22 U33} {
     1982                    atominfo $phase $atom $var set $val
     1983                    RecordMacroEntry "atominfo $phase $atom $var set $val" 0
     1984                }
     1985                foreach var {U12 U13 U23} {
     1986                    atominfo $phase $atom $var set 0.0
     1987                    RecordMacroEntry "atominfo $phase $atom $var set 0.0" 0
     1988                }
    18121989            }
    18131990            incr expgui(changed)
    18141991        }
    18151992    }
     1993    if {$istart != $expgui(changed)} {RecordMacroEntry "incr expgui(changed)" 0}
    18161994    UpdateAtomLine $numberList $phase
    18171995}
     
    18312009        foreach atom $numberList {
    18322010            EraseAtom $atom $phase
     2011            RecordMacroEntry "EraseAtom $atom $phase" 0
    18332012            incr expgui(changed)
    18342013        }
     2014        RecordMacroEntry "incr expgui(changed)" 0
    18352015        mapexp
     2016        RecordMacroEntry "mapexp" 0
    18362017        DisplayAllAtoms $phase
    18372018        destroy $w2
     
    18422023proc ImportPhase {format np} {
    18432024    global expgui
    1844     foreach item $expgui(extensions_$format) {
    1845         lappend typelist [list $format $item]
     2025    if {[llength $expgui(extensions_$format)] == 1} {
     2026        set typelist [list $format $item]
     2027    } else {
     2028        foreach item $expgui(extensions_$format) {
     2029            lappend typelist [list "All $format" $item]
     2030            lappend typelist [list "$format $item" $item]
     2031        }
    18462032    }
    18472033    lappend typelist [list "All files" *]
     
    18752061proc ImportAtoms {format top phase} {
    18762062    global expgui
    1877     foreach item $expgui(extensions_$format) {
    1878         lappend typelist [list $format $item]
     2063    if {[llength $expgui(extensions_$format)] == 1} {
     2064        set typelist [list $format $item]
     2065    } else {
     2066        foreach item $expgui(extensions_$format) {
     2067            lappend typelist [list "All $format" $item]
     2068            lappend typelist [list "$format $item" $item]
     2069        }
    18792070    }
    18802071    lappend typelist [list "All files" *]
     
    22102401
    22112402proc replacephase2 {phase top spg cell} {
    2212     global expgui expmap env
     2403    global expgui expmap
    22132404    # validate coordinates
    22142405    set np $top.canvas.fr
     
    22182409
    22192410    pleasewait "updating phase"
    2220     # replace spacegroup and cell
    2221     phaseinfo $phase spacegroup set $spg
    2222     foreach val $cell var {a b c alpha beta gamma} {
    2223         phaseinfo $phase $var set $val
    2224     }
    2225     incr expgui(changed)
    2226     # delete all atoms
    2227     foreach i $expmap(atomlist_$phase) {
    2228         EraseAtom $i $phase
    2229         incr expgui(changed)
    2230     }
    2231     # write new atoms from table as input to exptool
    2232     set fp [open exptool.in w]
    2233     puts $fp "A"
    2234     puts $fp $phase
    2235     # number of atoms
    2236     puts $fp [llength $atomlist]
    2237     foreach atomline $atomlist {
    2238         puts $fp $atomline
    2239         incr expgui(changed)
    2240     }
    2241     close $fp
    2242     # needed in UNIX
    2243     set env(ATOMDATA) [file join $expgui(gsasdir) data atmdata.dat]
    2244     set env(gsas) [file nativename $expgui(gsasdir)]
    2245     # needed in Windows
    2246     set env(GSAS) [file nativename $expgui(gsasdir)]
    2247 
    2248     global tcl_platform
    2249     # Save the current exp file
    2250     savearchiveexp
    2251     # disable the file changed monitor
    2252     set expgui(expModifiedLast) 0
    2253     set expnam [file root [file tail $expgui(expfile)]]
    2254     catch {
    2255         if {$tcl_platform(platform) == "windows"} {
    2256             exec [file join $expgui(gsasexe) exptool.exe] $expnam \
    2257                     < exptool.in >& exptool.out
    2258         } else {
    2259             exec [file join $expgui(gsasexe) exptool] $expnam \
    2260                     < exptool.in >& exptool.out
    2261         }
    2262     } errmsg
    2263     # load the revised exp file
    2264     loadexp $expgui(expfile)
    2265     set fp [open exptool.out r]
    2266     set out [read $fp]
    2267     close $fp
     2411    replacephase3 $phase [list $spg] [list $cell] [list $atomlist]
     2412
    22682413    set err 0
    22692414    if {[llength $atomlist] != [llength $expmap(atomlist_$phase))]} {
     
    22822427        ShowBigMessage $top $msg $errmsg OK "" $err
    22832428    }
    2284     file delete exptool.in exptool.out
    22852429    # set the powpref warning (2 = required)
    22862430    set expgui(needpowpref) 2
     
    22902434    }
    22912435    destroy $top
     2436}
     2437
     2438
     2439proc replacephase3 {} {
     2440    global expgui expmap
     2441    # replace spacegroup and cell
     2442    phaseinfo $phase spacegroup set $spg
     2443    RecordMacroEntry "phaseinfo $phase spacegroup set [list $spg]" 0
     2444    foreach val $cell var {a b c alpha beta gamma} {
     2445        phaseinfo $phase $var set $val
     2446        RecordMacroEntry "phaseinfo $phase $var set $val" 0
     2447    }
     2448    incr expgui(changed)
     2449    # delete all atoms
     2450    foreach i $expmap(atomlist_$phase) {
     2451        EraseAtom $i $phase
     2452        RecordMacroEntry "EraseAtom $i $phase" 0
     2453        incr expgui(changed)
     2454    }
     2455    RecordMacroEntry "incr expgui(changed)" 0
     2456    # write new atoms from table as input to exptool
     2457    set errmsg [runAddAtoms $phase $atomlist]
     2458    RecordMacroEntry "runAddAtoms $phase [list $atomlist]" 0
    22922459}
    22932460
     
    24112578            set c [$cmd $phase $atom $v]
    24122579            $cmd $phase $atom $v set [expr {$c + $vs}]
     2580            RecordMacroEntry "$cmd $phase $atom $v set [expr {$c + $vs}]" 0
    24132581        }
    24142582        incr expgui(changed)
    24152583    }
    24162584
     2585    RecordMacroEntry "incr expgui(changed)" 0
    24172586    ResetMultiplicities $phase $parent
    24182587    SelectOnePhase $phase
     
    24252594# reset the site multiplicities using the EXPEDT program
    24262595proc ResetMultiplicities {phase parent} {
     2596    global expgui
     2597    set errmsg [RunResetMultiplicities $phase]
     2598    RecordMacroEntry "RunResetMultiplicities $phase" 0
     2599
     2600    if {$expgui(showexptool) || $errmsg != ""} {
     2601        if {$errmsg != ""} {
     2602            set err 1
     2603            append errmsg "\n" $expgui(exptoolout)
     2604        } else {
     2605            set err 0
     2606            set errmsg $expgui(exptoolout)
     2607        }
     2608        set msg "Please review the result from listing the phase."
     2609        if {$errmsg != ""} {append msg "\nIt appears an error occurred!"}
     2610        ShowBigMessage $parent.msg $msg $errmsg OK "" $err
     2611    }
     2612}
     2613proc RunResetMultiplicities {phase} {
    24272614    global expgui tcl_platform
    24282615    set input [open resetmult.inp w]
     
    24462633    } errmsg]
    24472634    loadexp $expgui(expfile)
    2448     catch {file delete resetmult.inp}
    2449     if {$expgui(showexptool) || $err} {
    2450         set fp [open resetmult.out r]
    2451         set out [read $fp]
    2452         close $fp
    2453         if {$errmsg != ""} {
    2454             append errmsg "\n" $out
    2455         } else {
    2456             set errmsg $out
    2457         }
    2458         set msg "Please review the result from listing the phase."
    2459         if {$err} {append msg "\nIt appears an error occurred!"}
    2460         ShowBigMessage $parent.msg $msg $errmsg OK "" $err
     2635    set fp [open resetmult.out r]
     2636    set out [read $fp]
     2637    close $fp
     2638    set expgui(exptoolout) $out
     2639    catch {file delete resetmult.inp resetmult.out}
     2640    if {$err} {
     2641        return $errmsg
     2642    } else {
     2643        return ""
    24612644    }
    24622645}
Note: See TracChangeset for help on using the changeset viewer.