transient grating spectroscopy - a few notes on delay space



In [1]:
#imports

import os
import sys

import numpy as np

import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline 
matplotlib.rcParams['font.size'] = 8
matplotlib.rcParams['savefig.dpi'] = 2 * matplotlib.rcParams['savefig.dpi']

import NISE
from NISE.lib.misc.__init__ import NISE_path
import NISE.hamiltonians.H0 as H0
import NISE.lib.measure as m
import NISE.experiments.trive as trive
import NISE.hamiltonians.params.inhom as inhom

import WrightTools as wt

defining our delay space

Here is our delay space represented as a 2D delay scan.

With this pathway notation we can draw the possible pathways. Consider first the off-diagonal case (here w2 is more energetic than w1):

Now consider the on-diagonal pathways:

risetime around zero delay - signatures of coherence

Here is a method that calculates the signals against D2 traces for all 6 pathways given a particular dephasing time.


In [2]:
def get_transients(tau, pulse_width = 50, plot = True):

    TOs_to_calculate = [[1],
                        [3],
                        [5],
                        [1, 2, 3, 4, 5, 6]]

    datas = []
    for TOs in TOs_to_calculate:

        #set dimensions
        trive.exp.set_coord(trive.ss, pulse_width)
        d2 = trive.d2
        d2.points = np.linspace(-200, 200, num=50)
        trive.exp.timestep = 2.0
        
        #hamiltonian
        H0.Omega.TOs = TOs
        H0.Omega.tau_ag  = tau
        H0.Omega.tau_2aa = tau
        H0.Omega.tau_2ag = tau
        H = H0.Omega()
        print H.TOs

        #run
        scan = trive.exp.scan(d2, H=H)      
        scan.run(autosave = False, mp = False, chunk = True)

        #measure
        slitwidth = 120.
        measure = m.Measure(scan, m.Mono, m.SLD)
        m.Mono.slitwidth=slitwidth
        measure.run(save = False)
        print measure.scan_obj.H.TOs
        data = wt.data.from_NISE(measure)
        
        datas.append(data)
        
    if plot:
        plt.figure()
        for data in datas:
            xi = data.axes[0].points
            zi = data.channels[0].values
            plt.plot(xi, zi)
        plt.legend(['12', '34', '56', 'all'])
        plt.grid()
        
    return datas

Consider first the driven case (pulse width 50 fs, dephasing time 25 fs).


In [3]:
get_transients(25)


s1 moved to 50
s2 moved to 50
s0 moved to 50
[1]
using no inhomogeneity profile as default
elapsed time: 2.89208857657 sec
[1]
s1 moved to 50
s2 moved to 50
s0 moved to 50
[3]
using no inhomogeneity profile as default
elapsed time: 2.77273365909 sec
[3]
s1 moved to 50
s2 moved to 50
s0 moved to 50
[5]
using no inhomogeneity profile as default
elapsed time: 2.69049445025 sec
[5]
s1 moved to 50
s2 moved to 50
s0 moved to 50
[1, 2, 3, 4, 5, 6]
using no inhomogeneity profile as default
elapsed time: 2.62976448026 sec
[1, 2, 3, 4, 5, 6]
Out[3]:
[<WrightTools.data.Data instance at 0x086F6EE0>,
 <WrightTools.data.Data instance at 0x086FD120>,
 <WrightTools.data.Data instance at 0x086FD328>,
 <WrightTools.data.Data instance at 0x086FD4B8>]

Now consider the impulsive case (pulse width 50 fs, dephasing time 100 fs).


In [4]:
get_transients(100)


s1 moved to 50
s2 moved to 50
s0 moved to 50
[1]
using no inhomogeneity profile as default
elapsed time: 2.63988578802 sec
[1]
s1 moved to 50
s2 moved to 50
s0 moved to 50
[3]
using no inhomogeneity profile as default
elapsed time: 2.56499858615 sec
[3]
s1 moved to 50
s2 moved to 50
s0 moved to 50
[5]
using no inhomogeneity profile as default
elapsed time: 2.59782320571 sec
[5]
s1 moved to 50
s2 moved to 50
s0 moved to 50
[1, 2, 3, 4, 5, 6]
using no inhomogeneity profile as default
elapsed time: 2.88626225084 sec
[1, 2, 3, 4, 5, 6]
Out[4]:
[<WrightTools.data.Data instance at 0x087966C0>,
 <WrightTools.data.Data instance at 0x08796120>,
 <WrightTools.data.Data instance at 0x0872FD00>,
 <WrightTools.data.Data instance at 0x08718940>]