diff options
author | Eugeniy Mikhailov <evgmik@gmail.com> | 2016-04-27 11:13:59 -0400 |
---|---|---|
committer | Eugeniy Mikhailov <evgmik@gmail.com> | 2016-04-27 11:13:59 -0400 |
commit | 28b07b24d5a86d7adc957129943bc4e453dae008 (patch) | |
tree | d431e3e7b226bdfc8f504404465502cd68b129fb /MOR_5_levels_with_doppler_and_propagation | |
parent | 416c6808da04ef933bd238ce4a985a6e80e2b8e9 (diff) | |
download | noisy_eit_xmds-28b07b24d5a86d7adc957129943bc4e453dae008.tar.gz noisy_eit_xmds-28b07b24d5a86d7adc957129943bc4e453dae008.zip |
full simulation of 5 level MOR to separate folder
Diffstat (limited to 'MOR_5_levels_with_doppler_and_propagation')
3 files changed, 723 insertions, 0 deletions
diff --git a/MOR_5_levels_with_doppler_and_propagation/Makefile b/MOR_5_levels_with_doppler_and_propagation/Makefile new file mode 100644 index 0000000..ade8cb0 --- /dev/null +++ b/MOR_5_levels_with_doppler_and_propagation/Makefile @@ -0,0 +1,55 @@ +### -*- make -*- +### This file is part of the Debian xmds package +### Copyright (C) 2006 Rafael Laboissiere +### This file is relased under the GNU General Public License +### NO WARRANTIES! + +### This makefile can be used to build and run the XMDS examples + +XMDS_FILES = $(shell ls *.xmds) +RUN_FILES = $(patsubst %.xmds,%.run,$(XMDS_FILES)) +CC_FILES = $(patsubst %.xmds,%.cc,$(XMDS_FILES)) +XSIL_FILES = $(patsubst %.xmds,%.xsil,$(XMDS_FILES)) +M_FILES = $(patsubst %.xmds,%.m,$(XMDS_FILES)) + +XMDS = xmds2 +XSIL2GRAPHICS = xsil2graphics2 + +all: $(RUN_FILES) + +%.run: %.xmds + $(XMDS) $< + mv $(patsubst %.xmds,%,$<) $@ + +%.xsil: %.run + ./$< --E1o=0 --E3o=0 + +%.m: %.xsil + $(XSIL2GRAPHICS) $< + +plot: $(M_FILES) + octave pp.m + +clean: + rm -f $(CC_FILES) $(RUN_FILES) $(M_FILES) $(XSIL_FILES) *.wisdom.fftw3 *.dat octave-core *.wisdom *.pdf + rm -f $(png_targets) + rm -f $(eps_targets) + +eps_targets = $(wildcard *.eps) +pdf_targets = $(eps_targets:%.eps=%.pdf) +png_targets = $(pdf_targets:%.pdf=%.png) + +png: pdf $(png_targets) + +$(png_targets): %.png : %.pdf + convert -density 300 $< $@ + +pdf: $(pdf_targets) + +$(pdf_targets): %.pdf : %.eps + cat $< | ps2eps -B > __tt.eps + epspdf __tt.eps $@ + rm -f __tt.eps + #ps2eps -B $< | epspdf $< $@ +.PRECIOUS: %.run %.xsil %.m +.PHONY: all clean diff --git a/MOR_5_levels_with_doppler_and_propagation/Nlevels_with_MOR.xmds b/MOR_5_levels_with_doppler_and_propagation/Nlevels_with_MOR.xmds new file mode 100644 index 0000000..99d88a0 --- /dev/null +++ b/MOR_5_levels_with_doppler_and_propagation/Nlevels_with_MOR.xmds @@ -0,0 +1,481 @@ +<?xml version="1.0"?> +<simulation xmds-version="2"> + + <name>Nlevels_with_MOR</name> + + <author>Eugeniy Mikhailov, M. Guidry</author> + <description> + License GPL. + + Solving split 3-level atom + with field propagation along spatial axis Z + with Doppler broadening. + + + * + * -------- |a> + * / / \ \ + * EdL / / \ \ + * / / \ \ + * |c> ----------/--- \ \ EpR + * / EpL \ \ + * |C> -------------- \ \ + * EdR \ \ + * \ \ + * ------\------ |b> + * \ + * ------------- |B> + * + * + + + We are solving + dE/dz+(1/c)*dE/dt=i*eta*rho_ij, where j level is higher then i. + Note that E is actually a Rabi frequency of electromagnetic field not the EM field + in xmds terms it looks like + dE_dz = i*eta*rhoij - 1/c*L[E], here we moved t dependence to Fourier space + + VERY IMPORTANT: all Rabi frequency should be given in [1/s], if you want to + normalize it to something else look drho/dt equation. + No need to renormalizes eta as long as its express through + the upper level decay rate in the same units as Rabi frequency. + </description> + + <features> + <globals> + <![CDATA[ + const double pi = M_PI; + const double c=3.e8; + const double k_boltzmann= 1.3806505e-23; // Boltzmann knostant in [J/K] + const double lambda=794.7e-9; //wavelength in m + const double Kvec = 2*M_PI/lambda; // k-vector + const double Gamma_super=6*(2*M_PI*1e6); // characteristic decay rate of upper level used for eta calculations expressed in [1/s] + // eta will be calculated in the <arguments> section + double eta = 0; // eta constant in the wave equation for Rabi frequency. Units are [1/(m s)] + + // --------- Atom and cell properties ------------------------- + // range of Maxwell distribution atomic velocities + const double mass = (86.909180527 * 1.660538921e-27); // atom mass in [kg] + // above mass expression is written as (expression is isotopic_mass * atomic_mass_unit) + + // Average sqrt(v^2) in Maxwell distribution for one dimension + // Maxwell related parameters will be calculated in <arguments> section + double v_thermal_averaged=0; + // Maxwell distribution velocities range to take in account in [m/s] + double V_maxwell_min = 0, V_maxwell_max = 0; + + // repopulation rate (atoms flying in/out the laser beam) in [1/s] + //const double gt=0.01 *(2*M_PI*1e6); + // Natural linewidth of j's level in [1/s] + //const double Ga=3.0 *(2*M_PI*1e6); + //const double G4=3.0 *(2*M_PI*1e6); + + complex g = Gamma_super; + complex gbc = (2*M_PI)*1e3; // 1/s untits + const complex Split = 0; + const complex noise = 0; + + complex Gab, GAB, Gca, GCA, Gcb, GCB; + + // total decay of i-th level branching ratios. Rij branching of i-th level to j-th + //const double Rab=0.5, Rac=0.5; + + + complex EdLac, EdRac, EpLac, EpRac; + + // inner use variables + double probability_v; // will be used as p(v) in Maxwell distribution + + ]]> + </globals> + <validation kind="run-time"/> <!--allows to put ranges as variables--> + <benchmark /> + <arguments> + <!-- Rabi frequency divided by 2 in [1/s] --> + <argument name="EdLo" type="real" default_value="2*1.5*(2*M_PI*1e6)" /> + <argument name="EdRo" type="real" default_value="2*1.5*(2*M_PI*1e6)" /> + + <argument name="EpLo" type="real" default_value="0.05*(2*M_PI*1e6)" /> + <argument name="EpRo" type="real" default_value="0.05*(2*M_PI*1e6)" /> + + + <!-- Fields detuning in [1/s] --> + <argument name="delta_dL" type="real" default_value="0.0" /> + <argument name="delta_pL" type="real" default_value="0.0" /> + <argument name="delta_dR" type="real" default_value="0.0" /> + <argument name="delta_pR" type="real" default_value="0.0" /> + <!--Pulse duration/width [s] --> + <argument name="Pwidth" type="real" default_value="0.1e-6" /> + <!-- Atom and cell properties --> + <!--Cell length [m] --> + <argument name="Lcell" type="real" default_value="1.5e-2" /> + <!--Density of atoms [1/m^3] --> + <argument name="Ndens" type="real" default_value="1e15" /> + <!--Atoms temperature [K] --> + <!--TODO: looks like Temperature > 10 K knocks solver, + I am guessing detunings are too large and thus it became a stiff equation--> + <!--! make sure it is not equal to zero!--> + <argument name="Temperature" type="real" default_value="5" /> + <!-- This will be executed after arguments/parameters are parsed --> + <!-- Read the code Luke: took me a while of reading the xmds2 sources to find it --> + <![CDATA[ + // Average sqrt(v^2) in Maxwell distribution for one dimension + if (Temperature == 0) + _LOG(_ERROR_LOG_LEVEL, "ERROR: Temperature should be >0 to provide range for Maxwell velocity distribution\n"); + v_thermal_averaged=sqrt(k_boltzmann*Temperature/mass); + // Maxwell distribution velocities range to take in account in [m/s] + // there is almost zero probability for higher velocity p(4*v_av) = 3.3e-04 * p(0) + V_maxwell_min = -4*v_thermal_averaged; V_maxwell_max = -V_maxwell_min; + + // eta constant in the wave equation for Rabi frequency. Units are [1/(m s)] + eta = 3*lambda*lambda*Ndens*Gamma_super/8.0/M_PI; + ]]> + </arguments> + <bing /> + <diagnostics /> + <fftw plan="estimate" threads="1" /> + <!-- I don't see any speed up on 6 core CPU even if use threads="6" --> + <openmp /> + <auto_vectorise /> + <halt_non_finite /> + </features> + + <!-- 'z', 't', and 'v' to have dimensions [m], [s], and [m/s] --> + <geometry> + <propagation_dimension> z </propagation_dimension> + <transverse_dimensions> + <!-- IMPORTANT: looks like having a lot of points in time helps with convergence. + I suspect that time spacing should be small enough to catch + all pulse harmonics and more importantly 1/dt should be larger than + the largest detuning (including Doppler shifts). + Unfortunately calculation time is proportional to lattice size + so we cannot just blindly increase it. + Some rules of thumb: + * lattice="1000" domain="(-1e-6, 1e-6)" + was good enough detunings up to 155 MHz (980 rad/s) notice that 1/dt=500 MHz + * lattice="10000" domain="(-1e-6, 1e-6)" + works for Doppler averaging in up to 400K for Rb when lasers are zero detuned + --> + <dimension name="t" lattice="10000" domain="(-1e-6, 1e-6)" /> + <dimension name="v" lattice="2" domain="(V_maxwell_min, V_maxwell_max)" /> + </transverse_dimensions> + </geometry> + + <!-- Rabi frequency --> + <vector name="E_field" type="complex" initial_space="t"> + <components>EdL EdR EpL EpR</components> + <initialisation> + <![CDATA[ + // Initial (at starting 'z' position) electromagnetic field does not depend on detuning + // as well as time + EdL=EdLo*exp(-pow( ((t-0.0)/Pwidth),2) ); + EdR=EdRo*exp(-pow( ((t-0.0)/Pwidth),2) ); + EpL=EpLo*exp(-pow( ((t-0.0)/Pwidth),2) ); + EpR=EpRo*exp(-pow( ((t-0.0)/Pwidth),2) ); + + //EpL = EpLo*(1+0.01*2*(((double)rand() / (double)RAND_MAX)-0.5)); + //EpR = EpRo*(1+0.01*2*(((double)rand() / (double)RAND_MAX)-0.5)); + + //E2=E2o*exp(-pow( ((t-0.0)/Pwidth),2) ); + ]]> + </initialisation> + </vector> + + <!--Maxwell distribution probability p(v)--> + <computed_vector name="Maxwell_distribution_probabilities" dimensions="v" type="real"> + <components>probability_v</components> + <evaluation> + <![CDATA[ + // TODO: move to the global space/function. This reevaluated many times since it called from dependency requests but it never changes during the script lifetime since 'v' is fixed. + probability_v=1.0/(v_thermal_averaged*sqrt(2*M_PI)) * exp( - mod2(v/v_thermal_averaged)/2.0 ); + ]]> + </evaluation> + </computed_vector> + + <!--Maxwell distribution norm sum(p(v)) + Needed since we sum over the grid instead of true integral, + we also have finite cut off velocities--> + <computed_vector name="Maxwell_distribution_probabilities_norm" dimensions="" type="real"> + <components>probability_v_norm</components> + <evaluation> + <dependencies basis="v">Maxwell_distribution_probabilities</dependencies> + <![CDATA[ + // TODO: move to the global space/function. This reevaluated many times since it called from dependency requests but it never changes during the script lifetime since 'v' is fixed. + probability_v_norm=probability_v; + ]]> + </evaluation> + </computed_vector> + + + <!-- Averaged across Maxwell distribution fields amplitudes --> + <computed_vector name="E_field_avgd" dimensions="t" type="complex"> + <components>EdLa EdRa EpLa EpRa</components> + <evaluation> + <dependencies basis="v">E_field Maxwell_distribution_probabilities Maxwell_distribution_probabilities_norm</dependencies> + <![CDATA[ + double prob_v_normalized=probability_v/probability_v_norm; + + EdLa=EdL*prob_v_normalized; + EdRa=EdR*prob_v_normalized; + EpLa=EpL*prob_v_normalized; + EpRa=EpR*prob_v_normalized; + ]]> + </evaluation> + </computed_vector> + + <!-- Averaged across Maxwell distribution density matrix components --> + <computed_vector name="density_matrix_averaged" dimensions="t" type="complex"> + <components>rbb_av rBB_av rcc_av rCC_av raa_av rcb_av rab_av rca_av rCB_av rAB_av rCA_av</components> + <evaluation> + <dependencies basis="v">density_matrix Maxwell_distribution_probabilities Maxwell_distribution_probabilities_norm</dependencies> + <![CDATA[ + double prob_v_normalized=probability_v/probability_v_norm; + + rbb_av=rbb*prob_v_normalized; + rBB_av=rBB*prob_v_normalized; + rcc_av=rcc*prob_v_normalized; + rCC_av=rCC*prob_v_normalized; + raa_av=raa*prob_v_normalized; + + rcb_av=rcb*prob_v_normalized; + rab_av=rab*prob_v_normalized; + rca_av=rca*prob_v_normalized; + + rCB_av = rCB*prob_v_normalized; + rAB_av = rAB*prob_v_normalized; + rCA_av = rCA*prob_v_normalized; + + ]]> + </evaluation> + </computed_vector> + + + <vector name="density_matrix" type="complex" initial_space="t"> + <components>rbb rBB rcc rCC raa rcb rab rca rCB rAB rCA</components> + <initialisation> + <!--This sets boundary condition at all times and left border of z (i.e. z=0)--> + <dependencies>E_field_avgd</dependencies> + <![CDATA[ + EdLac = conj(EdLa); + EdRac = conj(EdRa); + EpLac = conj(EpLa); + EpRac = conj(EpRa); + + rbb = 0.25; rcc = 0.25; rBB = 0.25; rCC = 0.25; + raa = 0; + rcb = 0; rab = 0; rca = 0; + rCB = 0; rAB = 0; rCA = 0; + + ]]> + </initialisation> + </vector> + + <sequence> + <!--For this set of conditions ARK45 is faster than ARK89--> + <!--ARK45 is good for small detuning when all frequency like term are close to zero--> + <integrate algorithm="ARK45" tolerance="1e-5" interval="Lcell"> + <!--<integrate algorithm="SI" steps="200" interval="Lcell"> --> + <!--RK4 is good for large detunings when frequency like term are big, it does not try to be too smart about adaptive step which ARK seems to make too small--> + <!--When ARK45 works it about 3 times faster then RK4 with 1000 steps--> + <!--<integrate algorithm="RK4" steps="100" interval="1.5e-2">--> + <!--SIC algorithm seems to be much slower and needs fine 'z' step tuning and much finer time grid--> + <!--For example I had to quadruple the time grid from 1000 to 4000 when increased z distance from 0.02 to 0.04--> + + <!--<integrate algorithm="SIC" interval="4e-2" steps="200">--> + + <samples>100 100</samples> + <!--Use the next line for debuging to see velocity dependence. Uncomment/switch on output groups 3,4--> + <!--<samples>100 100 100 100</samples>--> + <operators> + <operator kind="cross_propagation" algorithm="SI" propagation_dimension="t"> + <integration_vectors>density_matrix</integration_vectors> + <dependencies>E_field_avgd</dependencies> + <boundary_condition kind="left"> + <!--This set boundary condition at all 'z' and left border of 't' (i.e. min(t))--> + </boundary_condition> + <![CDATA[ + + Gab=g+i*(delta_dL+delta_pR+0*noise); + GAB=g+i*(delta_pL+delta_dR+0*noise); + + Gca=g-i*(delta_dL); + GCA=g-i*(delta_pL); + + Gcb=gbc+i*(Split + delta_pR+0*noise); + GCB=gbc+i*(-Split + delta_pL+0*noise); + + complex rba=conj(rab); + complex rac=conj(rca); + complex rbc=conj(rcb); + complex rBA=conj(rAB); + complex rAC=conj(rCA); + complex rBC=conj(rCB); + + draa_dt = -i*EpRac*rab+i*EpRa*rba-i*EdLac*rac+i*EdLa*rca-2*g*raa + -i*EdRac*rAB+i*EdRa*rBA-i*EpLac*rAC+i*EpLa*rCA; + + drbb_dt = i*EpRac*rab-i*EpRa*rba+g*raa-gbc*rbb+gbc*rcc; + drBB_dt = i*EdRac*rAB-i*EdRa*rBA+g*raa-gbc*rBB+gbc*rCC; + + drcc_dt = i*EdLac*rac-i*EdLa*rca+g*raa-gbc*rcc+gbc*rbb; + drCC_dt = i*EpLac*rAC-i*EpLa*rCA+g*raa-gbc*rCC+gbc*rBB; + + drab_dt = -Gab*rab+i*EpRa*(rbb-raa)+i*EdLa*rcb; + drca_dt = -Gca*rca+i*EdLac*(raa-rcc)-i*EpRac*rcb; + drcb_dt = -Gcb*rcb-i*EpRa*rca+i*EdLac*rab; + + drAB_dt = -Gab*rAB+i*EdRa*(rBB-raa)+i*EpLa*rCB; + drCA_dt = -Gca*rCA+i*EpLac*(raa-rCC)-i*EdRac*rCB; + drCB_dt = -GCB*rCB-i*EdRa*rCA+i*EpLac*rAB; + + + ]]> + </operator> + <!-- + According to xmds2 docs operator kind="ip" should be faster + but our codes runs about 5% to 10% slower with it. + Maybe because we very close to the stiff condition so I use "ex" kind + <operator kind="ip" constant="yes"> + --> + <operator kind="ex" constant="yes" type="imaginary"> + <operator_names>Lt</operator_names> + <![CDATA[ + Lt = -i/c*kt; + ]]> + </operator> + <integration_vectors>E_field</integration_vectors> + <dependencies>density_matrix</dependencies> + <![CDATA[ + dEdL_dz = i*eta*(rca) +0*Lt[EdL] ; + dEdR_dz = i*eta*(rAB) +0*Lt[EdR] ; + dEpL_dz = i*eta*(rCA) +0*Lt[EpL] ; + dEpR_dz = i*eta*(rab) +0*Lt[EpR] ; + + ]]> + </operators> + </integrate> + </sequence> + + + + <!-- The output to generate --> + <output format="binary" filename="Nlevels_with_MOR.xsil"> + <group> + <sampling basis="t(1000) " initial_sample="yes"> + <dependencies>E_field_avgd</dependencies> + <moments>IdL_out IpL_out IdR_out IpR_out</moments> + <![CDATA[ + IdL_out = mod2(EdLa); + IpL_out = mod2(EpLa); + IdR_out = mod2(EdRa); + IpR_out = mod2(EpRa); + ]]> + </sampling> + </group> + + <group> + <sampling basis="t(100) v(2)" initial_sample="yes"> + <dependencies>density_matrix_averaged</dependencies> + <moments> + rbb_out rBB_out + rcc_out rCC_out + raa_out + rcb_re_out rcb_im_out + rCB_re_out rCB_im_out + rab_re_out rab_im_out + rAB_re_out rAB_im_out + rca_re_out rca_im_out + rCA_re_out rCA_im_out + </moments> + <![CDATA[ + // populations output + rbb_out = rbb_av.Re(); + rBB_out = rBB_av.Re(); + + rcc_out = rcc_av.Re(); + rCC_out = rCC_av.Re(); + + raa_out = raa_av.Re(); + + // coherences output + rcb_re_out = rcb_av.Re(); + rcb_im_out = rcb_av.Im(); + + rCB_re_out = rCB_av.Re(); + rCB_im_out = rCB_av.Im(); + + rab_re_out = rab_av.Re(); + rab_im_out = rab_av.Im(); + + rAB_re_out = rAB_av.Re(); + rAB_im_out = rAB_av.Im(); + + rca_re_out = rca_av.Re(); + rca_im_out = rca_av.Im(); + + rCA_re_out = rCA_av.Re(); + rCA_im_out = rCA_av.Im(); + + ]]> + </sampling> + </group> + + <!-- use the following two groups only for debuging + otherwise they are quite useless and have to much information + in 3D space (z,t,v) --> + <!-- + <group> + <sampling basis="t(100) v(10)" initial_sample="yes"> + <dependencies>E_field</dependencies> + <moments>I1_out_v I2_out_v I3_out_v I4_out_v</moments> + <![CDATA[ + // light field intensity distribution in velocity subgroups + I1_out_v = mod2(E1); + I2_out_v = mod2(E2); + I3_out_v = mod2(E3); + I4_out_v = mod2(E4); + ]]> + </sampling> + </group> + + <group> + <sampling basis="t(100) v(10)" initial_sample="yes"> + <dependencies>density_matrix</dependencies> + <moments> + rbb_out_v rcc_out_v raa_out_v r44_out_v + rbc_re_out_v rbc_im_out_v rba_re_out_v rba_im_out_v r14_re_out_v r14_im_out_v + rca_re_out_v rca_im_out_v r24_re_out_v r24_im_out_v + r34_re_out_v r34_im_out_v + </moments> + <![CDATA[ + // density matrix distribution in velocity subgroups + // populations output + rbb_out_v = rbb.Re(); + rcc_out_v = rcc.Re(); + raa_out_v = raa.Re(); + r44_out_v = r44.Re(); + // coherences output + rbc_re_out_v = rbc.Re(); + rbc_im_out_v = rbc.Im(); + rba_re_out_v = rba.Re(); + rba_im_out_v = rba.Im(); + r14_re_out_v = r14.Re(); + r14_im_out_v = r14.Im(); + rca_re_out_v = rca.Re(); + rca_im_out_v = rca.Im(); + r24_re_out_v = r24.Re(); + r24_im_out_v = r24.Im(); + r34_re_out_v = r34.Re(); + r34_im_out_v = r34.Im(); + ]]> + </sampling> + </group> + --> + + </output> + +</simulation> + +<!-- +vim: ts=2 sw=2 foldmethod=indent: +--> diff --git a/MOR_5_levels_with_doppler_and_propagation/pp_Nlevels.m b/MOR_5_levels_with_doppler_and_propagation/pp_Nlevels.m new file mode 100644 index 0000000..0991c97 --- /dev/null +++ b/MOR_5_levels_with_doppler_and_propagation/pp_Nlevels.m @@ -0,0 +1,187 @@ +Nlevels_with_MOR + +%% field propagation +z_1=z_1*100; % z in cm +t_1=t_1*1e6; % time now measured in uS +figure(1) +subplot(2,2,1); imagesc(z_1, t_1, IdL_out_1); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('I_{dL}') +title('I_{dL}') +subplot(2,2,2); imagesc(z_1, t_1, IpL_out_1); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('I_{pL}') +title('I_{pL}') +subplot(2,2,3); imagesc(z_1, t_1, IdR_out_1); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('I_{dR}') +title('I_{dR}') +subplot(2,2,4); imagesc(z_1, t_1, IpR_out_1); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('I_{pR}') +title('I_{pR}') + + +%print('-color','fields_propagation.eps') + + + +%% fields before and after the cell +figure(5) +subplot(2,2,1); +plot( ... + t_1,IdL_out_1(1,:)', ... + t_1,IdL_out_1(end,:)','LineWidth', 4 ... + ) +xlabel('t (uS)') +ylabel('I_{dL} (1/s)^2') +title('I_{dL} before and after cell') +legend('before', 'after') + +%% +subplot(2,2,2); +plot( ... + t_1,IpL_out_1(1,:)', ... + t_1,IpL_out_1(end,:)', 'linewidth', 4 ... + ) +xlabel('t (uS)') +ylabel('I_{pL} (1/s)^2') +title('I_{pL} before and after cell') +legend('before', 'after') + +%% +subplot(2,2,3); +plot( ... + t_1,IdR_out_1(1,:)', ... + t_1,IdR_out_1(end,:)', 'linewidth', 4 ... + ) +xlabel('t (uS)') +ylabel('I_{dR} (1/s)^2') +title('I_{dR} before and after cell') +legend('before', 'after') + +%% + +[b, a]=butter(3, 0.05); + +IpR_out_after=IpR_out_1(end,:); + +IpR_out_after_filtered=filtfilt(b,a,IpR_out_after); +settling_time=0.8; %uS +t_good_indx=t_1> min(t_1 + settling_time); + +[m, max_pos_before]=max(IpR_out_1(1,t_good_indx) ); + + +[m, max_pos_after]=max(IpR_out_after_filtered(1, t_good_indx)); + + +delay_time=t_1(max_pos_after)-t_1(max_pos_before); + + +display( strcat('Second field delay time = ', num2str(delay_time), ' uS/n')); + +%% + +%print('-color','fields_before_after_cell.eps') + +subplot(2,2,4); +plot( ... + t_1,IpR_out_1(1,:)', ... + t_1,IpR_out_1(end,:)', 'linewidth', 4 ... + ) +xlabel('t (uS)') +ylabel('I_{pR} (1/s)^2') +title('I_{pR} before and after cell') + + +%% +figure(4) +IpR_max_in=max(IpR_out_1(1,t_good_indx)); +IpR_max_out=max(IpR_out_1(end, t_good_indx)); +IpR_in_norm=(IpR_out_1(1,:))/IpR_max_in; +IpR_out_norm=(IpR_out_1(end,:))/IpR_max_out; + + +tmin=-0.05; +tmax=0.05; +indx=(t_1>=tmin & t_1<=tmax); % soom in in time to this region +plot( ... + t_1(indx),IpR_in_norm(indx), ... + t_1(indx),IpR_out_norm(indx), 'linewidth', 4 ... + ) +xlim([tmin,tmax]); +xlabel('t (uS)') +ylabel('I_{pR}') +title('I_{pR} before and after cell normalized') +%print('-color','probe_before_after_cell.eps') +legend('before', 'after') + +return; + +%% all density matrix elements in one plot +% diagonal populations, +% upper triangle real part of coherences, +% lower diagonal imaginary part of coherences +z_2=z_2*100; % z in cm +t_2=t_2*1e6; % time now measured in uS + +%% +figure(3) +subplot(4,4,1); imagesc(z_1, t_2, rbb_out_2(:,:,1)); caxis([0,1]); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('rho_{bb}') +title('rho_{bb}') + +%% +subplot(4,4,6); imagesc (z_2, t_2, rcc_out_2(:,:,1)); caxis([0,1]); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('rho_{cc}') +title('rho_{cc}') +subplot(4,4,11); imagesc (z_2, t_2, raa_out_2); caxis([0,1]); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('rho_{aa}') +title('rho_{aa}') + +% real parts of coherences +subplot(4,4,2); imagesc(z_2, t_2, rcb_re_out_2); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('Real(rho_{cb})') +title('Real(rho_{cb})') +subplot(4,4,3); imagesc(z_2, t_2, rab_re_out_2); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('Real(rho_{ab})') +title('Real(rho_{ab})') + +subplot(4,4,7); imagesc(z_2, t_2, rca_re_out_2); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('Real(rho_{ca})') +title('Real(rho_{ca})') + +% imaginary parts of coherences +subplot(4,4,5); imagesc(z_2, t_2, rcb_im_out_2); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('Imag(rho_{cb})') +title('Imag(rho_{cb})') +subplot(4,4,9); imagesc(z_2, t_2, rab_im_out_2); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('Imag(rho_{ab})') +title('Imag(rho_{ab})') +subplot(4,4,10); imagesc(z_2, t_2, rca_im_out_2); colorbar +xlabel('z (cm)') +ylabel('t (uS)') +zlabel('Imag(rho_{ca})') +title('Imag(rho_{ca})') + |