Save Experiment SnapShot with Date+Time Stamp Suffix

I often need to save snap shots of experiments with brief notes in case I need to return. This saves a snap shot of the current experiment with a date+time stamp suffix. It puts a global string SnapShotNote with comments before saving. Saves to home directory (same as current experiment) or to user's choice if first time. Recognizes if the current experiment is itself a snap shot. Relies on a function to create the date + time stamp.

21-04-16: corrected a mistake in ParseFilePath

// Save Experiment SnapShot
Function SaveExpSnapShot()

    string pstr = "", nstr, lssn, ossn
    variable vs = 0, vh = 0, vk = 1

    // get current experiment info 
    string CurrExperiment = IgorInfo(1)
    string dstamp = DateTimeStamp()
    string SExpName
   
    // note string
    Prompt nstr, "What note for this snapshot?"
    DoPrompt "Note for snapshot?" nstr
    if (v_flag == 1)
        return 0
    endif
    sprintf lssn, "%s\r%s", DateTimeStamp(dsep="-",tsep=":",sep="/"), nstr
   
    // save it?
    PathInfo home
    if (v_flag == 0)
        NewPath/Q/C/M="Where should this experiment be saved?" tsave
        if (v_flag == 0)
            vs = 1
        endif
    else
        vh = 1
        vs = 1
    endif
   
    if (vs == 1)
        SVAR/Z SSN = root:SnapShotNote
        if (SVAR_exists(SSN))
            SExpName = ParseFilePath(1,CurrExperiment,"_",1,0) + dstamp
            ossn = SSN
            SSN = lssn + "\r" + ossn
            vk = 0
        else
            SExpName = CurrExperiment + "_" + dstamp
            string/G root:SnapShotNote
            SVAR SSN = root:SnapShotNote
            SSN = lssn
        endif
           
        switch(vh)
            case 0: // not to home
                SaveExperiment/P=tsave/C as SExpName
                PathInfo tsave
                pstr = S_path
                KillPath tsave
                break
            case 1: // to home
                SaveExperiment/C as SExpName
                PathInfo home
                pstr = S_path
                break
        endswitch
       
        switch(vk)
            case 0: // replace existing with old
                SSN = ossn
                break
            case 1: // kill temporary
                killstrings/Z root:SnapShotNote
                break
        endswitch
       
        sprintf nstr, "%s --> Experiment snapshot saved: %s %s\r%s", DateTimeStamp(dsep="-",tsep=":",sep="/"), pstr, SExpName, nstr
        print nstr
    endif

   
    return 0
end


// date/time stamp in various ways
// dsep - date separator string (default "")
// tsep - time separator string (default "")
// sep - date + time separator string (default "")
// dtonly - 0: all, 1: date only, 2: time only (default 0)
Function/S DateTimeStamp([dsep,tsep,sep,dtonly])
    string dsep, tsep, sep
    variable dtonly
 
    string a, b, c, dstr, tstr, rtstr, gExp
 
    if (ParamIsDefault(sep))
        sep = ""
    endif
 
    if (ParamIsDefault(dsep))
        dsep = ""
    endif
 
    if (ParamIsDefault(tsep))
        tsep = ""
    endif
   
    if (ParamIsDefault(dtonly))
        dtonly = 0
    endif
   
    gExp = "([0-9]+)/([0-9]+)/([0-9]+)"
    SplitString/E=(gExp) secs2date(datetime,-1), a, b, c
    dstr = c[2,3] + dsep + b + dsep + a
 
    gExp = "([0-9]+):([0-9]+)" 
    SplitString/E=(gExp) secs2time(datetime,2), a, b
    tstr = a + tsep + b

    switch(dtonly)
        case 0: // all
            rtstr = dstr + sep + tstr
            break
        case 1: // date only
            rtstr = dstr
            break
        case 2: // time only
            rtstr = tstr
            break
    endswitch
   
    return rtstr
end

 

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More