Dear all,

as I got no reply, I did embark on this little automation quest by myself, as announced.

I used AutoHotkey to write a script that operates on Artemis by sending keystrokes and mousecommands. I will attach the the code to the end of this mail so anyone interested can take a peek. I basically wrote it for myself so some parts might not be clear or smartly designed but it does it's job of automatically starting fit after fit while varying the start/guess/set parameters. It is somewhat commented so anyone with a real interest in this should be able to get it to work, otherwise just ask me for help.

Subsequently I used MS PowerShell to grab the relevant parameters from the log-files of the fits.
I won't attach that script, but if anyone is interested in it: just ask.

Attention, wall-of-text/code below!

Felix


Contents of "artemis_fitting.ahk":

; This is what comments look like

; 3D Parameter Scan

; Artemis Main Window:

; Using IDs for buttons and text-fields and windows would be much better than using mouse-positioning.
; The IDs would make the whole thing independent from the resolution.

; GDS Window:
; Change Parameters
; Window unique ID: 0x30a38
; fields in GDS table don't have unique classes so mouse-positioning will have to be used after all.... ; this means there will be a calibration step before running the fitting loop


; Log Window:
; Save Log File

^j::
{
    CoordMode, Mouse , Screen

; MouseGetPos, OutputVarX, OutputVarY, OutputVarWin, OutputVarControl
; MouseGetPos, MouseXPosition, MouseYPosition, ArtemisMainWindowUID, ArtemisMainWindowClassNN

;    MsgBox Mouse Cursor x-position: %MouseXPosition%`n
;           , Mouse Cursor y-position: %MouseYPosition%`n
;           , Window unique ID:        %ArtemisMainWindowUID%`n
;           , Window Class:            %ArtemisMainWindowClassNN%

; 0. calibration

;MsgBox Calibration. Position the cursor over Artemis main window's entry field for Fit-Name and press return.
    MsgBox Calibration: Name
    MouseGetPos, Edit1XP, Edit1YP, ArtemisMainWindowUID

    ;MsgBox ArtemisMainWindowUID is %ArtemisMainWindowUID%

;MsgBox Calibration. Position the cursor over Artemis main window's fit description entry field.
    MsgBox Calibration: Fit description
    MouseGetPos, FDXP, FDYP

;MsgBox Calibration. Position the cursor over the Fit Button of Artemis' main window.
    MsgBox Calibration: Fit
    MouseGetPos, FitXP, FitYP

;MsgBox Calibration. Position the cursor over the "Show log" button of the main window.
    MsgBox Calibration: Show log
    MouseGetPos, slogX, slogY

; A - pick the two fields that containt the guess-value for FixedParameter1 and FixedParameter2

;MsgBox Calibration. Position the mouse cursor over the input field for FixedParameter1 and press Return.
    MsgBox Calibration: Parameter1
    MouseGetPos, FixPar1MXP, FixPar1MYP

;MsgBox Position the mouse cursor over the input field for FixedParameter2 and press Return.
    MsgBox Calibration: Parameter2
    MouseGetPos, FixPar2MXP, FixPar2MYP, GDSWindowUID

; B - enter the desired minimum, maximum and step-size for each of the FixedParamteres

    ; for now just fixed
    ; minimum = 0.002,
    ; maxmimum = 0.012 and
    ; step width = 0.001
    MinPar1=0.002000
    MinPar2=0.002000
    MaxPar1=0.012000
    MaxPar2=0.012000
    StepSize=0.00100
    CurPar1=%MinPar1%
    CurPar2=%MinPar2%

;MsgBox Calibration(finally last step though). Place mouse cursor over Log-window's Save button.
    MsgBox Calibration: Save (Log-Window)
    MouseGetPos, SaveX, SaveY, LogID

    ;MsgBox Calibration: Plot Window
    ;MouseGetPos, PX, PY, PID

    LV1=1
    LV2=1
    TFC=0
    Loop , 11
    {
        CurPar2:=MinPar2

        LV1:=LV1+1
        Loop, 11
        {
            LV2:=LV2+1
            TFC:=TFC+1

; block below is what should be executed in each run of the loop, let's build the loop
            {
                ; 1. Go to GDS Window

; WinActivate [, WinTitle, WinText, ExcludeTitle, ExcludeText]

                WinActivate , ahk_id %GDSWindowUID%
                WinWaitActive , ahk_id %GDSWindowUID%

; 2. Set the two fixed parameters as desired !! THIS NEEDS TO BE VARIED FROM ITERATION TO ITERATION
                ; should work (i.e. be varied/changed)

                MouseMove, FixPar1MXP, FixPar1MYP, 0
                    ;Sleep 500
                MouseClick
                    ;Sleep 500
                MouseClick
                    ;MsgBox Just to make sure: CurPar1=%CurPar1%
                Sleep 100
                SendInput %CurPar1%
                Sleep 100
                MouseMove, FixPar2MXP, FixPar2MYP, 0
                    ;Sleep 500
                MouseClick
                    ;Sleep 500
                MouseClick
                    ;MsgBox Just to make sure: CurPar2=%CurPar2%
                Sleep 100
                SendInput %CurPar2%
                Sleep 100


                ; 3. Go to Artemis Main Window

                WinActivate , ahk_id %ArtemisMainWindowUID%
                WinWaitActive , ahk_id %ArtemisMainWindowUID%

; 3. Enter the fit name !! THIS NEEDS TO BE VARIED FROM ITERATION TO ITERATION
                ; should be fine now

                MouseMove, Edit1XP, Edit1YP, 0
                MouseClick
                MouseClick
                SendInput ^{a} {BS}{BS}{BS}Fit %TFC%

; 4. Enter the fit description !! THIS NEEDS TO BE VARIED FROM ITERATION TO ITERATION
                ;should be fine

                MouseMove, FDXP, FDYP, 0
                MouseClick
                MouseClick
SendInput ^{Home} {Ctrl down} +{End} {Ctrl up} {BS}{BS}{BS}{BS}{BS}{BS}{BS}Parameter1: %CurPar1% {Enter}Parameter2: %CurPar2%

                ; 5. Press "Fit" Button

                MouseMove, FitXP, FitYP, 0
                MouseClick

; 6. wait (how long?), oh, possibly until the log window becomes active

                ; This one is a serious issue
; The fitting does not seem to be completely finished when the plot window pops up...

                ; actually, until the plot window pops up
                ;WinWaitActive , ahk_id %PID%
                ;MsgBox 6
; This is really annoying, these windows keep changing names. ; I will just add a timer here as well and maybe improve/fix it later
                ; no, this timer is what causes the issues I think.
; simply have to include picking the plot window at the beginning

                Sleep 5000

                ; 7. Go to log window (if necessary)

                WinActivate , ahk_id %ArtemisMainWindowUID%
                WinWaitActive , ahk_id %ArtemisMainWindowUID%
                ;MsgBox 7
                MouseMove, slogX, slogY, 0
                MouseClick
                MouseClick
                ;Sleep 300

                ; 8. Save the log file

                ; THERE SEEMS TO BE A PROBLEM WITH SAVING THE LOGFILES.
                ; I COULD PLAY AROUND WITH LONGER SLEEP TIME

                WinActivate , ahk_id %LogID%
                WinWaitActive , ahk_id %LogID%
                ;MsgBox 8

                MouseMove, SaveX, SaveY, 0
                MouseClick
; WinWaitActive , ahk_id 0x3028a ID doesn't work as this one changes, so just wait some time
                Sleep 1000

                SendInput ^{a} {BS}{BS}{BS}Fit %TFC%
                Sleep 1000
                SendInput {Enter}

                Sleep 500

                CurPar2:=CurPar2+StepSize

            }

; target #1: PtCoN NP bC

        }

        CurPar1:=CurPar1+StepSize

    }

    Sleep 1000

    MsgBox A total of %TFC% fits have been performed.

    Return
}



On 16/06/2017 18:59, Felix E. Feiten wrote:
I am very sorry, in the second paragraph the sequence describing what I want to do could have been clearer:

I want to 1. start a fit with certain parameters, 2. save the log file, 3. change one parameter. This should be repeated many (120 for now) times.

Felix


On 16/06/2017 18:39, Felix E. Feiten wrote:
Dear Ifeffit mailing-list,

first of all sorry for writing another mail to the list in such a short time span, I hope people will not get sick of me too quickly.

I want to do many fits for the same data with varying start-parameters. More specifically, I am doing fits to EXAFS data of the Pt L3 edge of PtCo(X) nanoparticles and want to vary sigma^2 for each of the two paths (Pt-Pt and Pt-Co) that I fit. I want to 1. start a fit with certain parameters, 2. save the log file, 3. change one parameter many (120 for now) times.

If there is no functionality to do this in Artemis I'll have to resort to using some external script that abuses Artemis. In that case I will report on how it went. But obviously, it would be much more comfortable if Artemis had something like this implemented.

Any way to start a fit from the windows command line (I'm using Windows 10) would also be very helpful as that would probably allow me to do the scripting in PowerShell relatively easily.

With kind regards,

Felix


_______________________________________________
Ifeffit mailing list
Ifeffit@millenia.cars.aps.anl.gov
http://millenia.cars.aps.anl.gov/mailman/listinfo/ifeffit
Unsubscribe: http://millenia.cars.aps.anl.gov/mailman/options/ifeffit




_______________________________________________
Ifeffit mailing list
Ifeffit@millenia.cars.aps.anl.gov
http://millenia.cars.aps.anl.gov/mailman/listinfo/ifeffit
Unsubscribe: http://millenia.cars.aps.anl.gov/mailman/options/ifeffit

Reply via email to